排除 github 操作工作流结果状态中的退出代码

Ope*_*era 15 github python-3.x github-actions

我有一个工作流程,在其中一个步骤中,如果命令以退出代码 1(失败)结束,我想运行下一个命令/作业(修复导致上一个命令失败的问题),但我不希望这样退出代码 1 影响工作流结果状态。
在这种情况下,如果我的退出代码为 1,即使我解决了问题,结果状态也将为failure,但我希望结果状态为success如果第二个命令解决了问题。
这可能吗?

这是我的workflow.yml
\

name: autoblack
on: [pull_request, push]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Set up Python 3.8
        uses: actions/setup-python@v2.2.2
        with:
          python-version: 3.8
      - name: Install Black
        run: pip3 install git+git://github.com/psf/black
        
      - name: Run black --check .
        run: black --check .
  
  reformat:
    runs-on: ubuntu-latest
    needs: [build]
    if: always() && (needs.build.result == 'failure')
    steps:
      - uses: actions/checkout@v2.3.4
      - name: Set up Python 3.8
        uses: actions/setup-python@v2.2.2
        with:
          python-version: 3.8
      - name: Install Black
        run: pip3 install git+git://github.com/psf/black
      - name: If needed, commit black changes to the pull request
        env:
          NEEDS_CONTEXT: ${{ toJSON(needs) }}
        run: |
          black --fast .
          git config --global user.name 'autoblack'
          git config --global user.email 'signorrayan@users.noreply.github.com'
          git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/$GITHUB_REPOSITORY
          git checkout $GITHUB_HEAD_REF
          echo "$NEEDS_CONTEXT"
          git commit -am "fixup: Format Python code with Black"
          git push
          echo "$NEEDS_CONTEXT"
Run Code Online (Sandbox Code Playgroud)

build如果带有命令的作业run: black --check .的退出代码为 1,我想运行该作业reformat来解决问题并将其推送到存储库。第二个工作工作正常,但最终结果标签是失败!

Sco*_*eke 11

continue-on-error的属性(step也可用于作业)可用于防止步骤失败时作业失败。

然后steps上下文包含steps.<step_id>.outcome可在表达式中使用的 a 来确定先前步骤是否失败。例如,在下面的工作流程中,当 commitlint 命令失败时,我有一个步骤将失败,但它使用 continue-on-error 来允许工作流程继续:

      - name: commitlint
        id: commitlint
        continue-on-error: true
        run: |
          npx commitlint --from ${{ github.event.pull_request.base.sha }} --to ${{ github.event.pull_request.head.sha }} --verbose
Run Code Online (Sandbox Code Playgroud)

然后,接下来的两个步骤将根据 commitlint 步骤的成功/失败结果应用或删除标签:

      - name: label when commitlint fails
        if: ${{ steps.commitlint.outcome == 'failure' }}
        uses: andymckay/labeler@1.0.4
        with:
          add-labels: "commit-message-rule-violation"

      - name: label removal when commitlint succeeds
        if: ${{ steps.commitlint.outcome == 'success' }}
        uses: andymckay/labeler@1.0.4
        with:
          remove-labels: "commit-message-rule-violation"
Run Code Online (Sandbox Code Playgroud)

无论 commitlint 步骤是否由于 原因而失败,工作流程最终都会成功continue-on-error: true

完整的工作流程在这里