You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 06:05:21