diff --git a/.github/workflows/gar-cleanup.yml b/.github/workflows/gar-cleanup.yml new file mode 100644 index 0000000..d473786 --- /dev/null +++ b/.github/workflows/gar-cleanup.yml @@ -0,0 +1,46 @@ +name: GAR Cleanup + +on: + schedule: + - cron: '30 6 * * *' + workflow_dispatch: {} + workflow_run: + workflows: ['Deploy'] + types: + - completed + +jobs: + docker_cleanup: + name: Cleanup Deployed Images + runs-on: ubuntu-latest + needs: + - docker_sync + strategy: + matrix: + region: [us, europe, asia] + steps: + - name: Set up Cloud SDK + uses: google-github-actions/setup-gcloud@master + with: + project_id: ${{ secrets.GCS_PROJECT_ID }} + service_account_key: ${{ secrets.GCS_TF_KEY }} + export_default_credentials: true + + - name: Delete stale artifacts + run: | + flags="--format=json --location=${{matrix.region}} --repository=roleypoly" + + packagesToPrune=$(gcloud artifacts packages list $flags 2>/dev/null | jq -r '.[].name') + + for package in $packagesToPrune; do + tagsToKeep=$(gcloud artifacts tags list --package=$package $flags 2>/dev/null | jq -r '.[].version') + versionsToCheck=$(gcloud artifacts versions list --package=$package $flags 2>/dev/null | jq -r '.[].name') + + for version in $versionsToCheck; do + if [[ "$tagsToKeep" =~ .*"$version".* ]]; then + continue + fi + + gcloud artifacts versions delete $version --package=$package $flags 2>/dev/null + done + done