Skip to content

Instantly share code, notes, and snippets.

@dudo
Created January 18, 2025 21:30
Show Gist options
  • Select an option

  • Save dudo/0afbc32c7ee04e2f6fb0479d4b8b76b0 to your computer and use it in GitHub Desktop.

Select an option

Save dudo/0afbc32c7ee04e2f6fb0479d4b8b76b0 to your computer and use it in GitHub Desktop.

Revisions

  1. dudo created this gist Jan 18, 2025.
    49 changes: 49 additions & 0 deletions github_deployment_reset.sh
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,49 @@
    # Variables
    OWNER="owner"
    REPO="repo"

    # List all deployments
    DEPLOYMENTS=$(curl -s -H "Authorization: token $GITHUB_TOKEN" \
    -H "Accept: application/vnd.github+json" \
    https://api.github.com/repos/$OWNER/$REPO/deployments | jq -r '.[].id')

    # Check if any deployments were found
    if [ -z "$DEPLOYMENTS" ]; then
    echo "No deployments found."
    fi

    # Iterate through each deployment
    echo "$DEPLOYMENTS" | while IFS= read -r ID; do
    echo "Attempting to delete deployment ID: $ID"
    RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" -X DELETE \
    -H "Authorization: token $GITHUB_TOKEN" \
    -H "Accept: application/vnd.github+json" \
    https://api.github.com/repos/$OWNER/$REPO/deployments/$ID)

    if [ "$RESPONSE" -eq 204 ]; then
    echo "Successfully deleted deployment ID: $ID"
    elif [ "$RESPONSE" -eq 422 ]; then
    echo "Deployment ID: $ID cannot be deleted - marking as inactive."
    INACTIVE_RESPONSE=$(curl -s -X POST -H "Authorization: token $GITHUB_TOKEN" \
    -H "Accept: application/vnd.github+json" \
    -d '{"state": "inactive"}' \
    https://api.github.com/repos/$OWNER/$REPO/deployments/$ID/statuses)

    if [[ "$INACTIVE_RESPONSE" == *"state"* ]]; then
    echo "Deployment ID: $ID marked as inactive. Retrying deletion..."
    RETRY_RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" -X DELETE \
    -H "Authorization: token $GITHUB_TOKEN" \
    -H "Accept: application/vnd.github+json" \
    https://api.github.com/repos/$OWNER/$REPO/deployments/$ID)
    if [ "$RETRY_RESPONSE" -eq 204 ]; then
    echo "Successfully deleted deployment ID: $ID after marking as inactive."
    else
    echo "Failed to delete deployment ID: $ID after marking as inactive."
    fi
    else
    echo "Failed to mark deployment ID: $ID as inactive."
    fi
    else
    echo "Failed to delete deployment ID: $ID (HTTP status: $RESPONSE)"
    fi
    done