Created
April 20, 2023 22:51
-
-
Save DPatrickBoyd/afb54165df0f51903be3f0edea77f9cb to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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 |
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')
Thanks
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
Works great!
Powershell version. I couldn't get cutoff date to work so it will delete all artifacts one by one
$REPO_OWNER = "OWNER"
$REPO_NAME = "REPO_NAME"
$CUTOFF_DATE = (Get-Date).AddDays(-30).ToString("yyyy-MM-ddTHH:mm:ssZ")
$PAGE = 1
while ($true) {
# Retrieve a page of artifacts
$ART_EXIST = gh api "repos/$REPO_OWNER/$REPO_NAME/actions/artifacts?per_page=100&page=$PAGE" | ConvertFrom-Json
$ARTIFACTS = $ART_EXIST.artifacts
#Write-Output $ART_EXIST.artifacts
Write-Output $PAGE
#Write-Output $ARTIFACTS
# If there are no more artifacts, exit the loop
if ($ART_EXIST.total_count -eq 0) {
break
}
# Loop through the artifacts on this page and delete the old ones
foreach ($ARTIFACT in $ARTIFACTS) {
$ARTIFACT_NAME = $ARTIFACT.name
$ARTIFACT_ID = $ARTIFACT.id
Write-Output "Deleting artifact $ARTIFACT_NAME (ID: $ARTIFACT_ID)..."
gh api "repos/$REPO_OWNER/$REPO_NAME/actions/artifacts/$ARTIFACT_ID" -X Delete
}
# Increment the page counter
$PAGE++
}
@illusion0001 Thanks for this!
Thanks for sharing this! You might want to add --silent
at the end of the delete call so that the script doesn't get interrupted by the response body.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Thanks for this.