provisioning-catalog/components/buildkit_runner/scripts/gc-snapshots.nu

34 lines
1.1 KiB
Text

#!/usr/bin/env nu
# Garbage-collect golden runner snapshots, retaining the N newest.
# Requires HCLOUD_TOKEN in environment.
def main [
--keep: int = 4 # How many snapshots to keep (newest first)
] {
let result = (do {
^hcloud image list --type snapshot --selector app=buildkit-runner-golden --output json
} | complete)
if $result.exit_code != 0 {
error make { msg: $"hcloud image list failed: ($result.stderr)" }
}
let snapshots = $result.stdout | from json | sort-by created | reverse
let count = $snapshots | length
if $count <= $keep {
print $"($count) snapshots present, threshold ($keep) — nothing to delete"
return
}
let to_delete = $snapshots | skip $keep
print $"Deleting ($to_delete | length) snapshots \(keeping newest ($keep)\)"
for snap in $to_delete {
print $" delete id=($snap.id) created=($snap.created) description=($snap.description)"
let del = (do { ^hcloud image delete ($snap.id | into string) } | complete)
if $del.exit_code != 0 {
error make { msg: $"Failed to delete snapshot ($snap.id): ($del.stderr)" }
}
}
}