Skip to content

Instantly share code, notes, and snippets.

@dijitali
Forked from illusion0001/remove_gh_artifacts.ps1
Last active July 4, 2025 08:01
Show Gist options
  • Save dijitali/2bb7cc070a22943c0f33324ffcfbd3f0 to your computer and use it in GitHub Desktop.
Save dijitali/2bb7cc070a22943c0f33324ffcfbd3f0 to your computer and use it in GitHub Desktop.
Remove Old GitHub Actions Artifacts from Repository
$repoOwner = "OWNER"
$repoName = "REPO_NAME"
$mainRetentionDate = (Get-Date).AddDays(-30)
$branchRetentionDate = (Get-Date).AddDays(-7)
$pageSize = 100
$page = 1
# Retrieve first page of artifacts
$response = gh api "repos/$repoOwner/$repoName/actions/artifacts?per_page=$pageSize&page=$page" | ConvertFrom-Json
$total_pages = [math]::Ceiling(($response.total_count / $pageSize))
$artifacts = $response.artifacts
# Paginate remainder
for ($page = 2; $page -le $total_pages; $page++) {
$response = gh api "repos/$repoOwner/$repoName/actions/artifacts?per_page=$pageSize&page=$page" | ConvertFrom-Json
$artifacts += $response.artifacts
}
Write-Host ('Total artifact count: ' + $artifacts.Length)
Write-Host ('Total artifact size (bytes): ' + ($artifacts | Measure-Object -Property size_in_bytes -Sum).Sum)
$spaceSaved = 0
foreach ($artifact in $artifacts) {
switch ($artifact.workflow_run_head_branch) {
'main' {
if ( (Get-Date $artifact.created_at) -lt $mainRetentionDate) {
Write-Host ('Removing artifact with id: ' + $artifact.id + `
' name: ' + $artifact.name + `
' created at ' + $artifact.created_at + `
' for branch ' + $artifact.workflow_run.head_branch)
#Remove
gh api "repos/$repoOwner/$repoName/actions/artifacts/$($artifact.id)" -X Delete --silent | Out-Null
$spaceSaved += $artifact.size_in_bytes
}
}
Default {
if ( (Get-Date $artifact.created_at) -lt $branchRetentionDate) {
Write-Host ('Removing artifact with id: ' + $artifact.id + `
' name: ' + $artifact.name + `
' created at ' + $artifact.created_at + `
' for branch ' + $artifact.workflow_run.head_branch)
#Remove
gh api "repos/$repoOwner/$repoName/actions/artifacts/$($artifact.id)" -X Delete | Out-Null
$spaceSaved += $artifact.size_in_bytes
}
}
}
}
Write-Host 'Total space saved (bytes): ' $spaceSaved
@dijitali
Copy link
Author

dijitali commented Jul 4, 2025

Example output:

Total artifact count: 279
Total artifact size (bytes): 1331854445
...
Removing artifact with id: 1859067075 name: playwright-report created at 08/27/2024 10:50:44 for branch main
Removing artifact with id: 1859064083 name: hugo-public created at 08/27/2024 10:49:57 for branch main
Removing artifact with id: 1846106084 name: playwright-report created at 08/23/2024 08:18:41 for branch main
Removing artifact with id: 1846079142 name: playwright-report created at 08/23/2024 08:11:01 for branch main
Removing artifact with id: 1833212961 name: playwright-report created at 08/20/2024 15:50:48 for branch main
Total space saved (bytes):  1207672413

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