# Copyright 2024 RustFS Team # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. name: "Schedule Failure Issue" description: >- Open (or update) a tracking issue when a scheduled workflow run fails or does not complete normally. Dedupes by workflow name: if an open issue titled "[scheduled-failure] " already exists, the result is appended as a comment; otherwise a new issue is created. This is the single alerting mechanism for all scheduled pipelines (backlog#1149 ci-8). inputs: github-token: description: >- Token with issues:write on the repository. Pass secrets.GITHUB_TOKEN from a job that declares `permissions: issues: write` (scope the permission to the alert job only, never workflow-wide). required: true workflow-name: description: "Workflow name used for the issue title (the dedupe key)." required: false default: ${{ github.workflow }} label: description: >- Label applied when a new issue is created. Must already exist in the repository; if applying it fails, the issue is created without a label. Set to an empty string to skip labeling. required: false default: "infrastructure" source-run-id: description: "Run ID to report. Defaults to the current workflow run." required: false default: ${{ github.run_id }} source-run-attempt: description: "Run attempt to report. Defaults to the current attempt." required: false default: ${{ github.run_attempt }} source-event: description: "Trigger event of the run being reported." required: false default: ${{ github.event_name }} source-ref-name: description: "Ref name of the run being reported." required: false default: ${{ github.ref_name }} source-sha: description: "Commit SHA of the run being reported." required: false default: ${{ github.sha }} runs: using: "composite" steps: - name: Open or update failure-tracking issue shell: bash env: GH_TOKEN: ${{ inputs.github-token }} WORKFLOW_NAME: ${{ inputs.workflow-name }} ISSUE_LABEL: ${{ inputs.label }} SOURCE_RUN_ID: ${{ inputs.source-run-id }} SOURCE_RUN_ATTEMPT: ${{ inputs.source-run-attempt }} SOURCE_EVENT: ${{ inputs.source-event }} SOURCE_REF_NAME: ${{ inputs.source-ref-name }} SOURCE_SHA: ${{ inputs.source-sha }} run: | set -euo pipefail title="[scheduled-failure] ${WORKFLOW_NAME}" run_url="${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${SOURCE_RUN_ID}" # Inspect the reported run attempt. It can be the current in-workflow # failure or a completed run observed by the external watchdog. failed_jobs="$(gh api \ "repos/${GITHUB_REPOSITORY}/actions/runs/${SOURCE_RUN_ID}/attempts/${SOURCE_RUN_ATTEMPT}/jobs" \ --paginate \ --jq '.jobs[] | select(.conclusion == "failure" or .conclusion == "timed_out" or .conclusion == "cancelled") | "- `\(.name)` (\(.conclusion))"')" if [ -z "${failed_jobs}" ]; then failed_jobs="- (failed job not recorded yet — see the run page)" fi body="$(cat <