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

GitHub Actions - How to build project in sub-directory

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

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

. (root of my GitHub repository)
└── dart_project
    ├── pubspec.yaml   <-- Git Hub action must point to this sub-dir
└── node_project
    ├── packages.json

这是我收到的错误:

Could not find a file named "pubspec.yaml" in "/__w/<my_project_path>".
##[error]Process completed with exit code 66.

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

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

如果我了解您的需求,您需要 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

如果您想将其应用到每一步,请使用标签 defaults

defaults:
  run:
    working-directory: dart_project

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

为此,您可以在步骤级别上配置 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

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

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

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

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