Skip to content

Instantly share code, notes, and snippets.

@DPatrickBoyd
Created April 20, 2023 22:51
Show Gist options
  • Star 9 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save DPatrickBoyd/afb54165df0f51903be3f0edea77f9cb to your computer and use it in GitHub Desktop.
Save DPatrickBoyd/afb54165df0f51903be3f0edea77f9cb to your computer and use it in GitHub Desktop.
#!/bin/bash
# Change the date under CUTOFF_DATE to change how far back you want to delete
# Install the GitHub CLI tool by following the instructions in the official documentation: https://cli.github.com/manual/installation
# Make sure you auth first to github with 'gh auth login'
REPO_OWNER="OWNER"
REPO_NAME="REPO_NAME"
CUTOFF_DATE=$(date --date='30 days ago' +'%Y-%m-%dT%H:%M:%SZ')
PAGE=1
while true; do
# Retrieve a page of artifacts
ART_EXIST=$(gh api repos/$REPO_OWNER/$REPO_NAME/actions/artifacts?per_page=100\&page=$PAGE | jq -r '.artifacts[]')
ARTIFACTS=$(gh api repos/$REPO_OWNER/$REPO_NAME/actions/artifacts?per_page=100\&page=$PAGE | jq -r '.artifacts[] | select(.created_at < "'"$CUTOFF_DATE"'") | .id')
echo $PAGE
# If there are no more artifacts, exit the loop
if [[ -z "$ART_EXIST" ]]; then
break
fi
# Loop through the artifacts on this page and delete the old ones
for ARTIFACT_ID in $ARTIFACTS; do
ARTIFACT_NAME=$(gh api repos/$REPO_OWNER/$REPO_NAME/actions/artifacts/$ARTIFACT_ID | jq -r '.name')
echo "Deleting artifact $ARTIFACT_NAME (ID: $ARTIFACT_ID)..."
gh api repos/$REPO_OWNER/$REPO_NAME/actions/artifacts/$ARTIFACT_ID -X DELETE
done
# Increment the page counter
PAGE=$((PAGE+1))
done
@deliciouslytyped
Copy link

Thanks for this.

@michalcs
Copy link

michalcs commented Jun 8, 2023

This has worked beautifully! Thanks a lot 🙌

On macOS I had to adjust the date slightly

CUTOFF_DATE=$(date -u -v-30d +'%Y-%m-%dT%H:%M:%SZ')

@k4mrul
Copy link

k4mrul commented Aug 7, 2023

Thanks

@keifgwinn
Copy link

get_date() {
    CUTOFF_DATE=$(date --date='30 days ago' +'%Y-%m-%dT%H:%M:%SZ' 2>/dev/null)
    if [ $? -ne 0 ]; then
        CUTOFF_DATE=$(date -v-30d +'%Y-%m-%dT%H:%M:%SZ' 2>/dev/null)
    fi
    echo $CUTOFF_DATE
}

CUTOFF_DATE=$(get_date)

handling the date on mac

@zirkelc
Copy link

zirkelc commented Mar 20, 2024

Works great!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment