Skip to content

Instantly share code, notes, and snippets.

@datadavev
Created February 1, 2024 17:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save datadavev/1dd07675a9d7d96da526b004cb48cb17 to your computer and use it in GitHub Desktop.
Save datadavev/1dd07675a9d7d96da526b004cb48cb17 to your computer and use it in GitHub Desktop.
Example workflow that self terminates if another instance of same workflow is running
name: test_terminate_duplicate
on:
workflow_dispatch
jobs:
check_duplicate:
runs-on: ubuntu-latest
env:
GH_TOKEN: ${{ github.token }}
steps:
- name: show_vars
run: |
echo GITHUB_ACTION = "${GITHUB_ACTION}"
echo GITHUB_ACTION_PATH = "${GITHUB_ACTION_PATH}"
echo GITHUB_REPOSITORY = "${GITHUB_REPOSITORY}"
echo GITHUB_REPOSITORY_ID = "${GITHUB_REPOSITORY_ID}"
echo GITHUB_ACTION_REPOSITORY = "${GITHUB_ACTION_REPOSITORY}"
echo GITHUB_RUN_ID = "${GITHUB_RUN_ID}"
echo GITHUB_RUN_NUMBER = "${GITHUB_RUN_NUMBER}"
echo GITHUB_JOB = "${GITHUB_JOB}"
echo GITHUB_WORKFLOW = "${GITHUB_WORKFLOW}"
- name: check_same_workflow
run: |
NUM_EXISTING=$(gh run -R "${GITHUB_REPOSITORY}" list -w "${GITHUB_WORKFLOW}" --json name,status,number | \
jq --argjson jnum ${GITHUB_RUN_NUMBER} '[ .[] | select((.number!=$jnum) and (.status | IN ("pending","queued","in_progress"))) ] | length')
echo NUM_EXISTING = ${NUM_EXISTING}
if (( $NUM_EXISTING > 0 )); then
echo "Duplicate run. Aborting."
exit 1
fi
- name: sleep a while
run: |
echo "Sleeping for 30 seconds..."
sleep 30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment