mirror of
https://github.com/go-gitea/gitea.git
synced 2026-10-24 01:24:39 +02:00
fix(actions): bound requested artifact retention (#39894)
This commit is contained in:
1 parent
c11302233b
commit
3a70b85220
6 files changed
+46
-5
No files matched your search
@@ -93,7 +93,12 @@ const artifactKeepForever timeutil.TimeStamp = 0
|
||||
|
||||
func artifactExpiry(requested optional.Option[timeutil.TimeStamp]) timeutil.TimeStamp {
|
||||
if requested.Has() {
|
||||
return max(requested.Value(), artifactKeepForever+1)
|
||||
now := timeutil.TimeStampNow()
|
||||
expiry := max(requested.Value(), now.Add(timeutil.Day)) // v4 clients use the runner's clock
|
||||
if setting.Actions.ArtifactRetentionDays > 0 {
|
||||
expiry = min(expiry, now.Add(timeutil.Day*setting.Actions.ArtifactRetentionDays))
|
||||
}
|
||||
return expiry
|
||||
}
|
||||
if setting.Actions.ArtifactRetentionDays <= 0 {
|
||||
return artifactKeepForever
|
||||
|
||||
@@ -5,6 +5,12 @@ package actions
|
||||
|
||||
import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"gitea.dev/modules/optional"
|
||||
"gitea.dev/modules/setting"
|
||||
"gitea.dev/modules/test"
|
||||
"gitea.dev/modules/timeutil"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
@@ -25,3 +31,21 @@ func TestKeepLatestAttemptArtifacts(t *testing.T) {
|
||||
}
|
||||
assert.Equal(t, []int64{1, 4, 5}, ids)
|
||||
}
|
||||
|
||||
func TestArtifactExpiry(t *testing.T) {
|
||||
defer timeutil.MockSet(time.Unix(1_000_000_000, 0))()
|
||||
now := timeutil.TimeStampNow()
|
||||
days := func(n int64) timeutil.TimeStamp { return now.Add(n * timeutil.Day) }
|
||||
requested := optional.Some[timeutil.TimeStamp]
|
||||
|
||||
defer test.MockVariableValue(&setting.Actions.ArtifactRetentionDays, 90)()
|
||||
assert.Equal(t, days(90), artifactExpiry(optional.None[timeutil.TimeStamp]()))
|
||||
assert.Equal(t, days(5), artifactExpiry(requested(days(5))))
|
||||
assert.Equal(t, days(1), artifactExpiry(requested(days(-2))), "runner clock behind must not expire the artifact at once")
|
||||
assert.Equal(t, days(90), artifactExpiry(requested(days(1000))), "runner must not exceed the instance retention")
|
||||
|
||||
setting.Actions.ArtifactRetentionDays = 0
|
||||
assert.Equal(t, artifactKeepForever, artifactExpiry(optional.None[timeutil.TimeStamp]()))
|
||||
assert.Equal(t, days(1000), artifactExpiry(requested(days(1000))))
|
||||
assert.Equal(t, days(1), artifactExpiry(requested(now)))
|
||||
}
|
||||
Reference in new issue
Block a user