GitHub Actions - 如何在子目录中构建项目

Eva*_*tti 31 github-actions

我正在使用 GitHub Actions 来构建我的项目,但我的 Dart 项目位于存储库的子目录中。操作脚本无法找到我的pubspec.yaml并获取依赖项。

如何指向我的 GitHub Action 以在我的存储库中的子目录中查找源代码?

. (root of my GitHub repository)
??? dart_project
    ??? pubspec.yaml   <-- Git Hub action must point to this sub-dir
??? node_project
    ??? packages.json
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

Could not find a file named "pubspec.yaml" in "/__w/<my_project_path>".
##[error]Process completed with exit code 66.
Run Code Online (Sandbox Code Playgroud)

这是dart.ymlGitHub 自动生成的文件。

name: Dart CI

on: [push]

jobs:
  build:

    runs-on: ubuntu-latest

    container:
      image:  google/dart:latest

    steps:
    - uses: actions/checkout@v1
    - name: Install dependencies
      run: pub get
    - name: Run tests
      run: pub run test
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

rmu*_*unn 53

如果我了解您的需求,那么您需要pub运行这些步骤,就好像您已经完成了cd dart_project第一次一样,对吗?将working-directory参数添加到您的步骤中:

steps:
- uses: actions/checkout@v1
- name: Install dependencies
  run: pub get
  working-directory: dart_project
- name: Run tests
  run: pub run test
  working-directory: dart_project
Run Code Online (Sandbox Code Playgroud)

我相信这应该是你所需要的。

  • “工作目录”在“v3”中似乎已弃用,有什么解决方法吗? (7认同)
  • 我使用它作为“默认”运行参数,例如“defaults:\n\s\srun:\n\s\s\s\sworking-directory: sub-directory-name”。我添加了转义字符来指示文档/语法结构,因为这当然不需要额外的答案。 (3认同)

小智 36

working-directory为此,您可以在步骤级别上配置一个。您还可以为步骤配置默认目录。默认值可以是工作级别或全局级别。

步骤级别的示例。

jobs:
  build:
    steps:
      - uses: actions/checkout@v1
      - name: Install dependencies
        run: pub get
        working-directory: dart_project
      - name: Run tests
        run: pub run test
        working-directory: dart_project
Run Code Online (Sandbox Code Playgroud)

工作级别的示例。这减少了工作层面的重复。这适用于处理子目录的作业。

jobs:
  build:
    defaults:
      run:
        working-directory: dart_project
    steps:
      - uses: actions/checkout@v1
      - name: Install dependencies
        run: pub get
      - name: Run tests
        run: pub run test
Run Code Online (Sandbox Code Playgroud)

全球层面的例子。这减少了全球层面的重复。当工作流程文件中的所有作业都针对位于子目录中的项目时,这适用于。

defaults:
  run:
    working-directory: dart_project
jobs:
  build:
    steps:
      - uses: actions/checkout@v1
      - name: Install dependencies
        run: pub get
      - name: Run tests
        run: pub run test
Run Code Online (Sandbox Code Playgroud)