diff --git a/.github/workflows/tft.yml b/.github/workflows/tft.yml index 439fc83..0ccabb1 100644 --- a/.github/workflows/tft.yml +++ b/.github/workflows/tft.yml @@ -8,20 +8,20 @@ permissions: contents: read # This is required for the ability to create/update the Pull request status statuses: write -# The concurrency key is used to prevent multiple workflows from running at the same time -concurrency: - # group name contains reponame-pr_num to allow simualteneous runs in different PRs - group: testing-farm-${{ github.event.repository.name }}-${{ github.event.issue.number }} - cancel-in-progress: true jobs: prepare_vars: name: Get info from role and PR to determine if and how to test + # The concurrency key is used to prevent multiple workflows from running at the same time + concurrency: + # group name contains reponame-pr_num to allow simualteneous runs in different PRs + group: testing-farm-${{ github.event.repository.name }}-${{ github.event.issue.number }} + cancel-in-progress: true # Let's schedule tests only on user request. NOT automatically. # Only repository owner or member can schedule tests if: | github.event.issue.pull_request - && (contains(github.event.comment.body, '[citest]') || contains(github.event.comment.body, '[citest-all]')) - && (contains(fromJson('["OWNER", "MEMBER", "COLLABORATOR", "CONTRIBUTOR"]'), github.event.comment.author_association) + && contains(github.event.comment.body, '[citest]') + && (contains(github.event.comment.author_association, fromJson('["OWNER", "MEMBER", "COLLABORATOR", "CONTRIBUTOR"]')) || contains('systemroller', github.event.comment.user.login)) runs-on: ubuntu-latest outputs: @@ -29,6 +29,12 @@ jobs: head_sha: ${{ steps.head_sha.outputs.head_sha }} memory: ${{ steps.memory.outputs.memory }} steps: + - name: Dump github context + run: echo "$GITHUB_CONTEXT" + shell: bash + env: + GITHUB_CONTEXT: ${{ toJson(github) }} + - name: Checkout repo uses: actions/checkout@v4 @@ -143,7 +149,7 @@ jobs: targetUrl: "" - name: Run test in testing farm - uses: sclorg/testing-farm-as-github-action@v2 + uses: sclorg/testing-farm-as-github-action@v3 if: contains(needs.prepare_vars.outputs.supported_platforms, matrix.platform) with: git_url: linux-system-roles/tft-tests @@ -151,6 +157,7 @@ jobs: pipeline_settings: '{ "type": "tmt-multihost" }' variables: "ANSIBLE_VER=${{ matrix.ansible_version }};\ REPO_NAME=${{ github.event.repository.name }};\ + GITHUB_ORG=${{ github.repository_owner }};\ GITHUB_ORG=linux-system-roles;\ PR_NUM=${{ github.event.issue.number }};\ ARTIFACTS_DIR=${{ steps.set_vars.outputs.ARTIFACTS_DIR }};\ diff --git a/.github/workflows/tft_citest_bad.yml b/.github/workflows/tft_citest_bad.yml index 0cce5be..1fd81a5 100644 --- a/.github/workflows/tft_citest_bad.yml +++ b/.github/workflows/tft_citest_bad.yml @@ -1,5 +1,5 @@ --- -name: Rerun failed testing farm tests +name: Re-run failed testing farm tests on: issue_comment: types: @@ -7,20 +7,33 @@ on: permissions: contents: read jobs: - retest: + citest_bad_rerun: if: | github.event.issue.pull_request && github.event.comment.body == '[citest_bad]' + && (contains(github.event.comment.author_association, fromJson('["OWNER", "MEMBER", "COLLABORATOR", "CONTRIBUTOR"]')) permissions: actions: write # for re-running failed jobs: https://docs.github.com/en/rest/actions/workflow-runs?apiVersion=2022-11-28#re-run-a-job-from-a-workflow-run runs-on: ubuntu-latest steps: + - name: Wait 10s until tft.yml workflow is created and skipped because new comment don't match [citest] + run: sleep 10s + - name: Re-run failed jobs for this PR env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} REPO: ${{ github.repository }} PR_TITLE: ${{ github.event.issue.title }} run: | - RUN_ID=$(gh api "repos/$REPO/actions/workflows/tft.yml/runs?event=issue_comment" \ - | jq -r '[.workflow_runs[] | select( .conclusion == "failure" ) | select ( .display_title="$PR_TITLE" ) | .id][0]') - gh api --method POST repos/$REPO/actions/runs/$RUN_ID/rerun-failed-jobs + PENDING_RUN=$(gh api "repos/$REPO/actions/workflows/tft.yml/runs?event=issue_comment" \ + | jq -r "[.workflow_runs[] | select( .display_title == \"$PR_TITLE\") | \ + select(.status == \"pending\" or .status == \"queued\" or .status == \"in_progress\") | .id][0]") + # if pending run don't exist, take the last run with failure state + if [ "$PENDING_RUN" = "null" ]; then + RUN_ID=$(gh api "repos/$REPO/actions/workflows/tft.yml/runs?event=issue_comment" \ + | jq -r "[.workflow_runs[] | select( .display_title == \"$PR_TITLE\" ) | select( .conclusion == \"failure\" ) | .id][0]") + echo "Re-running workflow $RUN_ID" + gh api --method POST repos/$REPO/actions/runs/$RUN_ID/rerun-failed-jobs + else + echo "The workflow $PENDING_RUN is still running, wait for it to finish to re-run" + fi