Keep tags based on regex (#61)

* Ignore tags from purging by regexp
This commit is contained in:
Dieter Maes 2022-04-08 16:21:36 +02:00 committed by GitHub
parent 31b16bb17a
commit 76f380d3c2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 12 additions and 4 deletions

View File

@ -50,6 +50,8 @@ debug: true
# How many days to keep tags but also keep the minimal count provided no matter how old.
purge_tags_keep_days: 90
purge_tags_keep_count: 2
# Keep tags matching regexp no matter how old
# purge_tags_keep_regexp: '^latest$'
# Enable built-in cron to schedule purging tags in server mode.
# Empty string disables this feature.
# Example: '25 54 17 * * *' will run it at 17:54:25 daily.

View File

@ -39,6 +39,7 @@ type configData struct {
Debug bool `yaml:"debug"`
PurgeTagsKeepDays int `yaml:"purge_tags_keep_days"`
PurgeTagsKeepCount int `yaml:"purge_tags_keep_count"`
PurgeTagsKeepRegexp string `yaml:"purge_tags_keep_regexp"`
PurgeTagsSchedule string `yaml:"purge_tags_schedule"`
}
@ -351,5 +352,5 @@ func (a *apiClient) receiveEvents(c echo.Context) error {
// purgeOldTags purges old tags.
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 (
"fmt"
"regexp"
"sort"
"time"
@ -32,7 +33,7 @@ func (p timeSlice) Swap(i, j int) {
}
// 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")
dryRunText := ""
if purgeDryRun {
@ -83,10 +84,14 @@ func PurgeOldTags(client *Client, purgeDryRun bool, purgeTagsKeepDays, purgeTags
sort.Sort(sortedTags)
repos[repo] = sortedTags
// Filter out tags by retention days.
// Filter out tags by retention days and regexp
for _, tag := range repos[repo] {
regexpKeep := false
if purgeTagsKeepRegexp != "" {
regexpKeep, _ = regexp.MatchString(purgeTagsKeepRegexp, tag.name)
}
delta := int(now.Sub(tag.created).Hours() / 24)
if delta > purgeTagsKeepDays {
if !regexpKeep && delta > purgeTagsKeepDays {
purgeTags[repo] = append(purgeTags[repo], tag.name)
} else {
keepTags[repo] = append(keepTags[repo], tag.name)