您是否可以在Github Actions中拥有多个工作目录?

3

我有一个存储库,其中包含多个目录,用于多个Go项目。是否有一种方法可以在多个工作目录上运行github actions,以便我不必使用冗余的yaml文件来运行github actions?为了自动化使用Golang进行错误检查,我目前有以下操作:

  errcheck:
    name: Errcheck
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@master
    - name: check
      uses: grandcolline/golang-github-actions@v1.1.0
      working-directory: ./app1
      with:
        run: errcheck
        token: ${{ secrets.GITHUB_TOKEN }}

但我想要:

  errcheck:
    name: Errcheck
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@master
    - name: check
      uses: grandcolline/golang-github-actions@v1.1.0
      working-directory: [./app1, ./app2]
      with:
        run: errcheck
        token: ${{ secrets.GITHUB_TOKEN }}

这两个目录之间有任何相互依赖关系吗? - Raju
不,它们是完全独立的应用程序。 - Nona
1个回答

9
为了在多个工作目录中运行某些内容,我认为你有两个选择:
选项1:矩阵
使用GitHub Action的jobs.<job_id>.strategy.matrix选项。这将创建多个作业,每个作业都有自己的矩阵(目录)值。
以下是一个示例工作流程:
name: Test
on:
  push: { branches: master }

jobs:
  test:
    name: Matrix test
    runs-on: ubuntu-latest
    strategy:
      matrix: { dir: ['some-dir', 'other-dir'] }

    steps:
    - name: Checkout code
      uses: actions/checkout@v2

    - name: Do something with the matrix value
      working-directory: ${{ matrix.dir }}
      run: pwd

运行此代码将创建两个任务:

enter image description here

选项二:自定义 Shell 脚本

如果矩阵选项不符合您的需求,那么一个简单的 Shell 脚本可以循环测试所有嵌套应用程序(目录),这可能是适当的选择。在这种情况下,您将忽略工作流 YAML 中的 working-directory 指令,并让脚本 cd 到每个目录。

例如:

#!/usr/bin/env bash

dirs=( some-dir other-dir )

for dir in "${dirs[@]}"; do
  pushd "$dir"
  pwd    # Do something more significant here
  popd
done

谢谢您的撰写!我正试图按照它的例子进行操作,但似乎出现了一些问题。我想要做的事情与以下类似: - AndrewD
策略: 矩阵: dotnet版本:['3.1.x','3.5.x'] 目录:['example_dir1','example_dir2'] 步骤: - 使用:actions/checkout@v2 - 名称:设置.NET Core SDK ${{ matrix.dotnet-version }} 使用:actions/setup-dotnet@v1.7.2 with: dotnet-version: ${{ matrix.dotnet-version }} working-directory: ${{ matrix.dirs }} - 名称:安装依赖项 运行:dotnet restore - 名称:构建 运行:dotnet build --configuration Release --no-restore - AndrewD

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接