如何编写GitHub Action测试Julia项目中的子模块?
为Julia子模块编写GitHub Action测试工作流
项目结构
my_project - .github\workflows - my_github_action.yml - src - main.jl - Manifest.toml - Project.toml - my_sub_module1 - Manifest.toml - Project.toml - src - some_code.jl - test - runtests.jl - my_tests.jl - my_sub_module2 - Manifest.toml - Project.toml - src - some_code.jl - test - runtests.jl - my_tests.jl
修正后的GitHub Action配置
以下是可正常运行的工作流配置,解决了原配置中的缩进错误、重复代码等问题,并优化了灵活性:
name: Run tests on: push: branches: - github_tests pull_request: jobs: test-submodules: runs-on: ${{ matrix.os }} strategy: matrix: julia-version: ['1.9.2'] julia-arch: [x64] os: [windows-latest] submodule: ['src/my_sub_module1', 'src/my_sub_module2'] steps: - uses: actions/checkout@v4 - uses: julia-actions/setup-julia@v2 with: version: ${{ matrix.julia-version }} arch: ${{ matrix.julia-arch }} - name: Test ${{ matrix.submodule }} run: | julia --check-bounds=yes --color=yes -e ' import Pkg Pkg.activate("${{ matrix.submodule }}") Pkg.instantiate() Pkg.test() '
关键修正与优化说明
- 修复缩进问题:YAML对缩进严格要求,原配置中
setup-julia的with块缩进错误,会导致工作流解析失败 - 矩阵化子模块路径:通过
submodule矩阵参数,实现一次配置测试所有子模块,后续新增子模块只需在矩阵中添加路径 - 升级Action版本:使用最新版的
actions/checkout@v4和julia-actions/setup-julia@v2,兼容最新GitHub环境与Julia版本 - 添加依赖实例化:
Pkg.instantiate()确保子模块的所有依赖被正确安装,避免因Manifest.toml未同步导致的依赖缺失 - 优化命令可读性:采用多行
run命令,避免引号转义混乱,提升配置维护性
额外注意事项
- 如果子模块未提交
Manifest.toml,Pkg.instantiate()会自动根据Project.toml安装兼容版本的依赖;若已提交Manifest.toml,则会严格按照文件中的版本安装 - 如需跨平台测试,只需在
os矩阵中添加ubuntu-latest、macos-latest即可 - 若需要代码覆盖率统计,可将
Pkg.test()改为Pkg.test(coverage=true)
内容的提问来源于stack exchange,提问作者CoJump
相关产品推荐
相关产品推荐

