diff --git a/.github/workflows/workflow-restarter-test.yml b/.github/workflows/workflow-restarter-test.yml new file mode 100644 index 00000000..57406ffe --- /dev/null +++ b/.github/workflows/workflow-restarter-test.yml @@ -0,0 +1,63 @@ +name: Workflow Restarter TEST + +on: + workflow_dispatch: + inputs: + fail: + description: > + For (spec, acceptance) jobs: + 'true' = (fail, succeed) and + 'false' = (succeed, fail) + required: true + default: 'true' +env: + SOURCE_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + +jobs: + spec: + runs-on: ubuntu-latest + steps: + - name: Check outcome + run: | + if [ "${{ github.event.inputs.fail }}" = "true" ]; then + echo "'spec' job succeeded" + exit 0 + else + echo "'spec' job failed" + exit 1 + fi + acceptance: + runs-on: ubuntu-latest + steps: + - name: Check outcome + run: | + if [ "${{ github.event.inputs.fail }}" = "true" ]; then + echo "'acceptance' job failed" + exit 1 + else + echo "'acceptance' job succeeded" + exit 0 + fi + + on-failure-workflow-restarter-proxy: + # (1) run this job after the "spec" job and... + needs: [spec, acceptance] + # (2) continue ONLY IF "spec" fails + if: always() && needs.spec.result == 'failure' || needs.acceptance.result == 'failure' + runs-on: ubuntu-latest + steps: + # (3) checkout this repository in order to "see" the following custom action + - name: Checkout repository + uses: actions/checkout@v4 + + # (4) "use" the custom action to retrigger the failed "spec job" above + # NOTE: pass the SOURCE_GITHUB_TOKEN to the custom action because (a) it must have + # this to trigger the reusable workflow that restarts the failed job; and + # (b) custom actions do not have access to the calling workflow's secrets + - name: Trigger reusable workflow + uses: "puppetlabs/cat-github-actions/.github/actions/workflow-restarter-proxy@main" + env: + SOURCE_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + repository: ${{ github.repository }} + run_id: ${{ github.run_id }} \ No newline at end of file diff --git a/.github/workflows/workflow-restarter.yml b/.github/workflows/workflow-restarter.yml new file mode 100644 index 00000000..580bc032 --- /dev/null +++ b/.github/workflows/workflow-restarter.yml @@ -0,0 +1,26 @@ +# target-repo/.github/workflows/call-reusable-workflow.yml +name: Workflow Restarter +on: + workflow_dispatch: + inputs: + repo: + description: "GitHub repository name." + required: true + type: string + run_id: + description: "The ID of the workflow run to rerun." + required: true + type: string + retries: + description: "The number of times to retry the workflow run." + required: false + type: string + default: "3" + +jobs: + call-reusable-workflow: + uses: "puppetlabs/cat-github-actions/.github/workflows/workflow-restarter.yml@main" + with: + repo: ${{ inputs.repo }} + run_id: ${{ inputs.run_id }} + retries: ${{ inputs.retries }} \ No newline at end of file