【问题标题】:GitHub Actions - How to build project in sub-directoryGitHub Actions - 如何在子目录中构建项目
【发布时间】:2020-01-08 10:09:50
【问题描述】:

我正在使用 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.

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

【问题讨论】:

    标签: github-actions


    【解决方案1】:

    如果我了解您的需求,您需要像先执行 cd dart_project 一样运行 pub 步骤,对吗?将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
    

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

    【讨论】:

    • 我将其用作default 运行参数,例如defaults:\n\s\srun:\n\s\s\s\sworking-directory: sub-directory-name。我添加了转义字符来指示文档/语法结构,因为这当然不需要额外的答案。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2021-09-23
      • 2021-11-05
      • 2022-06-12
      • 1970-01-01
      • 2020-12-17
      • 1970-01-01
      • 2021-12-21
      • 1970-01-01
      • 2021-01-08
      相关资源
      最近更新 更多