Ignore tags from purging by regexp

This commit is contained in:
dmaes33 2022-04-07 11:47:59 +02:00
parent 31b16bb17a
commit 2533046ad0
2 changed files with 7 additions and 4 deletions

View File

@ -39,6 +39,7 @@ type configData struct {
Debug bool `yaml:"debug"` Debug bool `yaml:"debug"`
PurgeTagsKeepDays int `yaml:"purge_tags_keep_days"` PurgeTagsKeepDays int `yaml:"purge_tags_keep_days"`
PurgeTagsKeepCount int `yaml:"purge_tags_keep_count"` PurgeTagsKeepCount int `yaml:"purge_tags_keep_count"`
PurgeTagsKeepRegexp string `yaml:"purge_tags_keep_regexp"`
PurgeTagsSchedule string `yaml:"purge_tags_schedule"` PurgeTagsSchedule string `yaml:"purge_tags_schedule"`
} }
@ -351,5 +352,5 @@ func (a *apiClient) receiveEvents(c echo.Context) error {
// purgeOldTags purges old tags. // purgeOldTags purges old tags.
func (a *apiClient) purgeOldTags(dryRun bool) { func (a *apiClient) purgeOldTags(dryRun bool) {
registry.PurgeOldTags(a.client, dryRun, a.config.PurgeTagsKeepDays, a.config.PurgeTagsKeepCount) registry.PurgeOldTags(a.client, dryRun, a.config.PurgeTagsKeepDays, a.config.PurgeTagsKeepCount, a.config.PurgeTagsKeepRegexp)
} }

View File

@ -2,6 +2,7 @@ package registry
import ( import (
"fmt" "fmt"
"regexp"
"sort" "sort"
"time" "time"
@ -32,7 +33,7 @@ func (p timeSlice) Swap(i, j int) {
} }
// PurgeOldTags purge old tags. // PurgeOldTags purge old tags.
func PurgeOldTags(client *Client, purgeDryRun bool, purgeTagsKeepDays, purgeTagsKeepCount int) { func PurgeOldTags(client *Client, purgeDryRun bool, purgeTagsKeepDays, purgeTagsKeepCount int, purgeTagsKeepRegexp string) {
logger := SetupLogging("registry.tasks.PurgeOldTags") logger := SetupLogging("registry.tasks.PurgeOldTags")
dryRunText := "" dryRunText := ""
if purgeDryRun { if purgeDryRun {
@ -83,10 +84,11 @@ func PurgeOldTags(client *Client, purgeDryRun bool, purgeTagsKeepDays, purgeTags
sort.Sort(sortedTags) sort.Sort(sortedTags)
repos[repo] = sortedTags repos[repo] = sortedTags
// Filter out tags by retention days. // Filter out tags by retention days and regexp
for _, tag := range repos[repo] { for _, tag := range repos[repo] {
regexpMatch, _ := regexp.MatchString(purgeTagsKeepRegexp, tag.name)
delta := int(now.Sub(tag.created).Hours() / 24) delta := int(now.Sub(tag.created).Hours() / 24)
if delta > purgeTagsKeepDays { if !regexpMatch && delta > purgeTagsKeepDays {
purgeTags[repo] = append(purgeTags[repo], tag.name) purgeTags[repo] = append(purgeTags[repo], tag.name)
} else { } else {
keepTags[repo] = append(keepTags[repo], tag.name) keepTags[repo] = append(keepTags[repo], tag.name)