代码之家  ›  专栏  ›  技术社区  ›  Amin Ba

如何合并共享变量的两个github操作步骤?

  •  1
  • Amin Ba  · 技术社区  · 3 年前

    我在github操作中有两个步骤,其中只有一个步骤是基于if条件执行的

          - name: step-stable
            uses: some-action@some-version
            if: ${{ env.BRANCH_NAME != 'stable' }}
            with:
              A=1
              B=1
              C=1
              D=1
              E=1
              F=1
              G=1
              H=1
              I=1
    
          - name: step-other
            uses: some-action@some-version
            if: ${{ env.BRANCH_NAME == 'stable' }}
            with:
              A=2
              B=2
              C=1
              D=1
              E=1
              F=1
              G=1
              H=1
              I=1
    
    

    这是我真正问题的简化版本。

    正如您所看到的,以下内容在两种情况下都是相同的。

              D=1
              E=1
              F=1
              G=1
              H=1
              I=1
    

    我不想重复。

    我正在寻找一种方法来实现类似的东西,使其看起来更好、更容易维护

    这是一个伪代码,我正试图传达我需要的东西

          - name: simplified
            uses: some-action@some-version
            with:
              A=1 if ${{ env.BRANCH_NAME != 'stable' }} else 2
              B=1 if ${{ env.BRANCH_NAME != 'stable' }} else 2
              C=1
              D=1
              E=1
              F=1
              G=1
              H=1
              I=1
    

    我该怎么做?

    2 回复  |  直到 3 年前
        1
  •  2
  •   Azeem Rob Hyndman    3 年前

    您可以简单地使用AND && 和OR || operators 这样地:

    A: ${{ env.BRANCH == 'stable' && 1 || 2 }}
    B: ${{ env.BRANCH == 'stable' && 1 || 2 }}
    

    这是另一个类似的线程,但用于 inputs : GitHub Actions condition based on inputs

        2
  •  2
  •   Benjamin W.    3 年前

    我不认为表达式可以内联实现,但这里有一个选项:在单独的 run 步

    • 将所有值设置为当 BRANCH_NAME 不是 stable
    • 如果 分支名称 是 稳定的 ,覆盖不同的值
    • 将所有值设置为输出,并在调用操作时引用它们

    像这样的东西:

    - name: Set parameters
      id: params
      run: |
        A=1 B=1 C=1 D=1 E=1 F=1 G=1 H=1 I=1
    
        if [[ $BRANCH_NAME == 'stable' ]]; then
            A=2
            B=2
        fi
    
        printf '%s=%s\n' \
            "A=$A" "B=$B" "C=$C" "D=$D" "E=$E "F=$F" "G=$G" "H=$H" "I=$I" \
            >> "GITHUB_OUTPUT"
    
    - name: Call action
      uses: some-action@some-version
      with:
        A: ${{ steps.params.outputs.A }}
        B: ${{ steps.params.outputs.B }}
        C: ${{ steps.params.outputs.C }}
        D: ${{ steps.params.outputs.D }}
        E: ${{ steps.params.outputs.E }}
        F: ${{ steps.params.outputs.F }}
        G: ${{ steps.params.outputs.G }}
        H: ${{ steps.params.outputs.H }}
        I: ${{ steps.params.outputs.I }}