GitHub CI Workflow默认working-directory未生效问题解决
GitHub CI工作流未在指定子目录执行的问题解决
你的问题大概率是YAML缩进层级错误导致defaults配置未生效,而非配置本身的语法错误。以下是具体分析和解决方案:
常见错误原因
GitHub Actions的defaults.run.working-directory必须配置在具体Job的层级下,如果缩进错误把它放在了jobs的直接子项(而非某个Job内部),配置会被忽略。比如错误写法:
jobs: # 错误:defaults放在了jobs根层级,未关联到具体job defaults: run: working-directory: ${{ github.workspace }}/cli rust-lint-build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - run: cargo check
正确配置方式
方式1:Job级默认工作目录(推荐)
将defaults放在目标Job的内部,确保所有run步骤默认使用cli目录:
jobs: rust-lint-build: runs-on: ubuntu-latest # 正确:defaults属于当前job的配置 defaults: run: working-directory: ./cli # 等价于${{ github.workspace }}/cli,可简化 steps: - uses: actions/checkout@v4 - name: Cargo check run: cargo check - name: Cargo lint run: cargo clippy - name: Cargo build run: cargo build --release
方式2:单步骤指定工作目录
如果不想给整个Job设置默认,也可以在每个需要的run步骤中显式指定:
jobs: rust-lint-build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Cargo check run: cargo check working-directory: ./cli - name: Cargo lint run: cargo clippy working-directory: ./cli
验证配置是否生效
可以在步骤中添加pwd命令,确认当前工作目录是否正确:
steps: - uses: actions/checkout@v4 - name: 查看当前目录 run: pwd working-directory: ./cli
执行后如果输出包含/cli路径,说明目录配置生效,再执行cargo命令就不会找不到Cargo.toml了。
内容的提问来源于stack exchange,提问作者Zoey
相关产品推荐
相关产品推荐

