如何从 GitHub Actions 中排除与特定分支相关的组合?

5

我希望在特定分支上排除构建矩阵的某些部分。以下是一种概念上的解决方案,但它不起作用,因为 branches 不是矩阵变量。

name: Tests

on:
  pull_request:
  push:
    branches: [hackage, develop]

jobs:
  build:
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:

        os: [ubuntu-latest]
        resolver: [lts-3.22 , lts-17, lts-18, lts, nightly]
        exclude:
          - branches: [hackage]
            resolver: [nightly, lts]

有没有一种惯用的方式可以在 这里 实现,例如在 hackage 分支上排除 nightlylts 解析器?

你尝试过在这些特定分支中更新yaml文件,使用你想要的矩阵配置吗? - jessehouwing
你想要实现什么目标?可能有其他更简洁的解决方案。 - Fcmam5
2个回答

0

您可以使用ifgithub.ref_name来识别分支,使用contains()函数来检查要排除的部分中是否包含matrix.resolver

例如:

if: github.ref_name == 'hackage' && contains(fromJSON('["nightly", "lts"]'), matrix.resolver)

if 可能用于作业,例如 jobs.<job_id>.if 或步骤,例如 jobs.<job_id>.steps[*].if


-1
您可以使用github.ref上下文来检查当前分支,并相应地排除矩阵中的特定元素。
name: Tests
    
    on:
      pull_request:
      push:
        branches: [hackage, develop]
    
    jobs:
      build:
        runs-on: ${{ matrix.os }}
        strategy:
          matrix:
            os: [ubuntu-latest]
            resolver: [lts-3.22 , lts-17, lts-18, lts, nightly]
            exclude:
              - resolver: nightly
                if: startsWith(github.ref, 'refs/heads/hackage')
              - resolver: lts
                if: startsWith(github.ref, 'refs/heads/hackage')

3
你有一个可用的例子吗?在你的工作流中,if不是matrix的一部分,但它在exclude下使用,所以我想知道它是如何工作的。请参见此处,该linter也会因为同样的问题而发出警告。 - Azeem

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