Skip to content

Commit 699099c

Browse files
authored
Clean up old Firstrade deploy artifacts (#15)
1 parent 714536f commit 699099c

1 file changed

Lines changed: 54 additions & 0 deletions

File tree

.github/workflows/sync-cloud-run-env.yml

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -449,3 +449,57 @@ jobs:
449449
fi
450450
451451
gcloud "${gcloud_args[@]}"
452+
453+
- name: Clean up old Cloud Run revisions and images
454+
if: steps.deploy_config.outputs.enabled == 'true'
455+
run: |
456+
set -euo pipefail
457+
458+
service_json="$(gcloud run services describe "${CLOUD_RUN_SERVICE}" \
459+
--project="${GCP_PROJECT_ID}" \
460+
--region="${CLOUD_RUN_REGION}" \
461+
--format=json)"
462+
latest_revision="$(python -c 'import json,sys; print(json.load(sys.stdin)["status"]["latestReadyRevisionName"])' <<< "${service_json}")"
463+
traffic_revisions="$(python -c 'import json,sys; svc=json.load(sys.stdin); print("\n".join(t.get("revisionName","") for t in svc.get("status",{}).get("traffic",[]) if t.get("revisionName") and int(t.get("percent",0)) > 0))' <<< "${service_json}")"
464+
465+
keep_revision() {
466+
local revision="$1"
467+
if [ "${revision}" = "${latest_revision}" ]; then
468+
return 0
469+
fi
470+
if printf '%s\n' "${traffic_revisions}" | grep -Fxq "${revision}"; then
471+
return 0
472+
fi
473+
return 1
474+
}
475+
476+
while IFS= read -r revision; do
477+
if [ -z "${revision}" ] || keep_revision "${revision}"; then
478+
continue
479+
fi
480+
gcloud run revisions delete "${revision}" \
481+
--project="${GCP_PROJECT_ID}" \
482+
--region="${CLOUD_RUN_REGION}" \
483+
--quiet
484+
done < <(gcloud run revisions list \
485+
--project="${GCP_PROJECT_ID}" \
486+
--region="${CLOUD_RUN_REGION}" \
487+
--service="${CLOUD_RUN_SERVICE}" \
488+
--format='value(metadata.name)')
489+
490+
image_repo="${GCP_ARTIFACT_REGISTRY_HOSTNAME}/${GCP_PROJECT_ID}/${GCP_ARTIFACT_REGISTRY_REPOSITORY}/firstradeplatform/${CLOUD_RUN_SERVICE}"
491+
old_digests="$(gcloud artifacts docker images list "${image_repo}" \
492+
--project="${GCP_PROJECT_ID}" \
493+
--include-tags \
494+
--format=json \
495+
| python -c 'import json,os,sys; keep=os.environ["GITHUB_SHA"]; rows=json.load(sys.stdin); print("\n".join(row["version"] for row in rows if keep not in set(row.get("tags") or [])))')"
496+
497+
while IFS= read -r digest; do
498+
if [ -z "${digest}" ]; then
499+
continue
500+
fi
501+
gcloud artifacts docker images delete "${image_repo}@${digest}" \
502+
--project="${GCP_PROJECT_ID}" \
503+
--delete-tags \
504+
--quiet
505+
done <<< "${old_digests}"

0 commit comments

Comments
 (0)