type
status
date
slug
password
summary
tags
category
icon
需求分析:
倉庫管理會內的Leetcode和其他刷題網站的代碼分析文章,但裡面總有出現代碼錯誤和格式沒寫全的問題,這裡使用Github Action進行全方面檢查
格式缺失問題
存在Difficulty和tags兩種屬性
缺少了Diffculty
代碼無法運行問題
有些代碼無法運行,缺少關鍵變量
Github Action 結構分析:

Action setupforbuild20.py 詳細說明

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


C++20 Ranges問題
因為答案用到了Ranges特性,需要升級到c++20才能用
完成效果圖
一共有205篇文章收錄,所有c++代碼皆可運行

GITHUB ACTION 上線測試

- Author:tom-ci
- URL:https://www.tomciheng.com//article/github-action-2
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!