🤖使用 Github Action 檢查文章格式和對代碼進行單元測試
00 min
2024-6-17
2024-6-18
type
status
date
slug
password
summary
tags
category
icon

需求分析:

倉庫管理會內的Leetcode和其他刷題網站的代碼分析文章,但裡面總有出現代碼錯誤和格式沒寫全的問題,這裡使用Github Action進行全方面檢查

格式缺失問題

存在Difficulty和tags兩種屬性
缺少了Diffculty
 

代碼無法運行問題

有些代碼無法運行,缺少關鍵變量

Github Action 結構分析:

notion image

Action setupforbuild20.py 詳細說明

notion image
  1. 匯入必要的模組:
      • re: 用於正則表達式匹配。
      • pytest: 用於編寫和運行測試。
      • os: 用於操作文件路徑和檔案系統。
      • CppBuildHeader: 一個自定義的模組,包含一些C++代碼的標頭文件。
  1. 定義常量:
      • CPP20: 一個用於編譯C++20代碼的g++命令。
      • CPP20PY: 生成的測試腳本檔案名。
  1. 定義extract_code_blocks()函數:
      • 這個函數接受一個Markdown文本,並從中提取包含"class Solution"的代碼塊。
      • 它會檢查是否有特定的數據結構(如二叉樹節點、節點、單鏈表),並相應地添加這些數據結構的定義。
      • 返回一個包含所有代碼塊的列表。
  1. 生成測試腳本:
      • 遍歷leetcode/目錄下的所有Markdown文件。
      • 對於每個Markdown文件,提取代碼塊,並將其寫入到ActionPy/TempCppGen/目錄下的相應C++文件中。
      • 然後,在ActionPy/${CPP20PY}文件中添加一個pytest測試函數,用於編譯每個C++文件。
      • 測試函數使用subprocess.check_call()執行g++命令來編譯C++代碼,並捕捉任何錯誤。
  1. 触发事件:这个工作流程在以下两种事件下会被触发:
      • 推送代码到 main 分支
      • 针对 main 分支的拉取请求
  1. 任务定义:这个工作流程定义了一个名为 cpp20-build 的任务,在最新的 Ubuntu 操作系统上运行。
  1. 检出代码:任务的第一步是使用 actions/checkout@v3 动作检出代码仓库。
  1. 设置 Python:下一步是使用 actions/setup-python@v2 动作设置 Python 3.9 环境。
  1. 设置 GCC:工作流程然后使用 egor-tensin/setup-gcc@v1 动作设置最新版本的 GCC 编译器,针对的是 x64 平台。
  1. 初始化单元测试:这一步执行了以下操作:
      • 使用 sudo apt-get update 更新软件包列表
      • 使用 sudo apt-get install build-essential gdb 安装必要的构建工具和调试器
      • 验证 GCC、G++ 和 GDB 的版本
      • 使用 pip install pytest 安装 Python 测试框架 pytest
      • 运行位于 ActionPy/SetUpForTest/ 目录下的 Python 脚本 setupforbuild20.py,设置了 C++20 构建的测试环境。
  1. 运行 C++20 构建测试:最后一步是运行 pytest 命令,针对位于 ActionPy/test_cpp_20_build.py 的文件,该文件包含了 C++20 构建的实际测试用例。

Leetcode Data Structure 問題

可以發現,這裡缺少了一些特別的Data Structure,我們需要把定義給抽離出來
notion image
notion image

C++20 Ranges問題

因為答案用到了Ranges特性,需要升級到c++20才能用

完成效果圖

一共有205篇文章收錄,所有c++代碼皆可運行
notion image
GITHUB ACTION 上線測試
notion image
上一篇
托福流水帳2
下一篇
使用FFmpeg轉換多媒體文件

Comments
Loading...