44

我正在使用 GitHub Actions 构建我的项目,但我的 Dart 项目位于存储库的子目录中。Action 脚本找不到我的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

这是我得到的错误:

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

这是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

在此处输入图像描述

4

2 回答 2

67

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

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

于 2019-09-05T13:43:24.697 回答
9

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

步骤级别的示例。

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
于 2021-10-08T11:09:05.127 回答