Skip to content

Commit b1f120a

Browse files
committed
feat: UploadPurger and GarbageCollector
1 parent 6cc0088 commit b1f120a

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+1567
-229
lines changed

.just/mod/go.just

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@ dep:
88
go mod tidy
99

1010
test:
11-
go test -failfast ./...
11+
go test -count=1 -failfast ./...
1212

1313
test-race:
14-
CGO_ENABLED=1 go test -race ./...
14+
CGO_ENABLED=1 go test -count=1 -failfast -race ./...
1515

1616
fmt:
1717
go tool gofumpt -w -l .

go.mod

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ require (
1717
github.com/octohelm/enumeration v0.0.0-20250115091102-ddf41951d733
1818
github.com/octohelm/gengo v0.0.0-20250418031154-d14a228621d4
1919
github.com/octohelm/kubepkgspec v0.0.0-20250417113059-3a0b7b2c59f4
20-
github.com/octohelm/unifs v0.0.0-20250422094950-9f303c84c11a
20+
github.com/octohelm/unifs v0.0.0-20250507062355-585aea9fa90a
2121
github.com/octohelm/x v0.0.0-20250409031213-9c254440c2b8
2222
)
2323

@@ -29,9 +29,10 @@ require (
2929
github.com/gobwas/glob v0.2.3
3030
github.com/google/go-containerregistry v0.20.3
3131
github.com/google/uuid v1.6.0
32+
github.com/octohelm/exp v0.0.0-20250423100159-9c03fb1725b0
3233
github.com/opencontainers/go-digest v1.0.0
3334
github.com/opencontainers/image-spec v1.1.1
34-
golang.org/x/sync v0.14.0
35+
k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff
3536
)
3637

3738
require (
@@ -78,7 +79,7 @@ require (
7879
github.com/mailru/easyjson v0.9.0 // indirect
7980
github.com/mattn/go-colorable v0.1.14 // indirect
8081
github.com/mattn/go-isatty v0.0.20 // indirect
81-
github.com/minio/crc64nvme v1.0.1 // indirect
82+
github.com/minio/crc64nvme v1.0.2 // indirect
8283
github.com/minio/md5-simd v1.1.2 // indirect
8384
github.com/minio/minio-go/v7 v7.0.91 // indirect
8485
github.com/mitchellh/go-homedir v1.1.0 // indirect
@@ -92,6 +93,7 @@ require (
9293
github.com/prometheus/client_model v0.6.2 // indirect
9394
github.com/prometheus/common v0.63.0 // indirect
9495
github.com/prometheus/procfs v0.16.1 // indirect
96+
github.com/robfig/cron/v3 v3.0.1 // indirect
9597
github.com/rs/xid v1.6.0 // indirect
9698
github.com/sirupsen/logrus v1.9.3 // indirect
9799
github.com/spf13/cobra v1.9.1 // indirect
@@ -116,6 +118,7 @@ require (
116118
golang.org/x/mod v0.24.0 // indirect
117119
golang.org/x/net v0.40.0 // indirect
118120
golang.org/x/oauth2 v0.30.0 // indirect
121+
golang.org/x/sync v0.14.0 // indirect
119122
golang.org/x/sys v0.33.0 // indirect
120123
golang.org/x/term v0.32.0 // indirect
121124
golang.org/x/text v0.25.0 // indirect
@@ -132,7 +135,6 @@ require (
132135
k8s.io/apimachinery v0.33.0 // indirect
133136
k8s.io/client-go v0.33.0 // indirect
134137
k8s.io/klog/v2 v2.130.1 // indirect
135-
k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff // indirect
136138
k8s.io/utils v0.0.0-20250502105355-0f33e8f1c979 // indirect
137139
mvdan.cc/gofumpt v0.8.0 // indirect
138140
sigs.k8s.io/controller-runtime v0.20.4 // indirect

go.sum

Lines changed: 8 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,6 @@ github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad h1:a6HEuzUHeKH6hwfN/Z
9898
github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144=
9999
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
100100
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
101-
github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo=
102101
github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3 h1:5ZPtiqj0JL5oKWmcsq4VMaAW5ukBEgSGXEN89zeH1Jo=
103102
github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3/go.mod h1:ndYquD05frm2vACXE1nsccT4oJzjhw2arTS2cpUD1PI=
104103
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
@@ -151,8 +150,8 @@ github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Ky
151150
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
152151
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
153152
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
154-
github.com/minio/crc64nvme v1.0.1 h1:DHQPrYPdqK7jQG/Ls5CTBZWeex/2FMS3G5XGkycuFrY=
155-
github.com/minio/crc64nvme v1.0.1/go.mod h1:eVfm2fAzLlxMdUGc0EEBGSMmPwmXD5XiNRpnu9J3bvg=
153+
github.com/minio/crc64nvme v1.0.2 h1:6uO1UxGAD+kwqWWp7mBFsi5gAse66C4NXO8cmcVculg=
154+
github.com/minio/crc64nvme v1.0.2/go.mod h1:eVfm2fAzLlxMdUGc0EEBGSMmPwmXD5XiNRpnu9J3bvg=
156155
github.com/minio/md5-simd v1.1.2 h1:Gdi1DZK69+ZVMoNHRXJyNcxrMA4dSxoYHZSQbirFg34=
157156
github.com/minio/md5-simd v1.1.2/go.mod h1:MzdKDxYpY2BT9XQFocsiZf/NKVtR7nkE4RoEpN+20RM=
158157
github.com/minio/minio-go/v7 v7.0.91 h1:tWLZnEfo3OZl5PoXQwcwTAPNNrjyWwOh6cbZitW5JQc=
@@ -172,12 +171,14 @@ github.com/octohelm/courier v0.0.0-20250416054450-c6bcc185d5c3 h1:Btz+MsChTBJjHT
172171
github.com/octohelm/courier v0.0.0-20250416054450-c6bcc185d5c3/go.mod h1:iKnWyzI7JWhivnutd6b27hJO/IZyD69Y7XogbBJ1VrA=
173172
github.com/octohelm/enumeration v0.0.0-20250115091102-ddf41951d733 h1:QFroPAzF1hZYuy90nuxz6XXrX12ZLQUTmsAOLUbBVAk=
174173
github.com/octohelm/enumeration v0.0.0-20250115091102-ddf41951d733/go.mod h1:s4JBUBvmokS4N0uxRnjds0tBRlBn355OFz2EDHLnEZk=
174+
github.com/octohelm/exp v0.0.0-20250423100159-9c03fb1725b0 h1:9nD2eRGj34ZQaE4v66qp5pb3WAWakkPYelbMuxzZ1bs=
175+
github.com/octohelm/exp v0.0.0-20250423100159-9c03fb1725b0/go.mod h1:1QfTq1BoUqnIyMacl5MK4yfU8R4XxidoP2w9Pr/Obis=
175176
github.com/octohelm/gengo v0.0.0-20250418031154-d14a228621d4 h1:bdFueXeKYpbR5VXp14t+eP/fwP28RhD5Fd343CLTRlg=
176177
github.com/octohelm/gengo v0.0.0-20250418031154-d14a228621d4/go.mod h1:0Dh96/14t+A7nmqBf7TyPXBv+tdflmbMi5x97ytMTdY=
177178
github.com/octohelm/kubepkgspec v0.0.0-20250417113059-3a0b7b2c59f4 h1:qxr8cwq2OWMWcnz4x4kNroV5WKJYHz3+QZua1d0QXpg=
178179
github.com/octohelm/kubepkgspec v0.0.0-20250417113059-3a0b7b2c59f4/go.mod h1:rGPXh+iM9a+9UtW9YwPLItyGGhEAlnG/NjVgOwrVndg=
179-
github.com/octohelm/unifs v0.0.0-20250422094950-9f303c84c11a h1:cK6h3+0PiVPYYeUJ52qX5TQfqYwZmzxrRRoGvL6BWlQ=
180-
github.com/octohelm/unifs v0.0.0-20250422094950-9f303c84c11a/go.mod h1:fqeL8dFZ3nBlcm1R429t6Ayt7jvMLt9t0CuU4C08FIY=
180+
github.com/octohelm/unifs v0.0.0-20250507062355-585aea9fa90a h1:gy0ciIayo2UbhRhFMcSbLvEU0Goxbm6sumdlygQK77I=
181+
github.com/octohelm/unifs v0.0.0-20250507062355-585aea9fa90a/go.mod h1:zbU4MnQkY14CnaN0hPJzO5zbpIGDINgOu+B+ZmJadRU=
181182
github.com/octohelm/x v0.0.0-20250409031213-9c254440c2b8 h1:agt4Jze3SYDcnZ64uq2XIFj8nCRRh43FENk2qzGe7nA=
182183
github.com/octohelm/x v0.0.0-20250409031213-9c254440c2b8/go.mod h1:xZNisutod9dwQzvy6LYdfRWTraKkS2DRH3pt/iWHjUk=
183184
github.com/onsi/ginkgo/v2 v2.23.3 h1:edHxnszytJ4lD9D5Jjc4tiDkPBZ3siDeJJkUZJJVkp0=
@@ -188,7 +189,6 @@ github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8
188189
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
189190
github.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040=
190191
github.com/opencontainers/image-spec v1.1.1/go.mod h1:qpqAh3Dmcf36wStyyWU+kCeDgrGnAve2nCC8+7h8Q0M=
191-
github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8=
192192
github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4=
193193
github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY=
194194
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
@@ -206,6 +206,8 @@ github.com/prometheus/procfs v0.16.1 h1:hZ15bTNuirocR6u0JZ6BAHHmwS1p8B4P6MRqxtzM
206206
github.com/prometheus/procfs v0.16.1/go.mod h1:teAbpZRB1iIAJYREa1LsoWUXykVXA1KlTmWl8x/U+Is=
207207
github.com/protocolbuffers/txtpbfmt v0.0.0-20241112170944-20d2c9ebc01d h1:HWfigq7lB31IeJL8iy7jkUmU/PG1Sr8jVGhS749dbUA=
208208
github.com/protocolbuffers/txtpbfmt v0.0.0-20241112170944-20d2c9ebc01d/go.mod h1:jgxiZysxFPM+iWKwQwPR+y+Jvo54ARd4EisXxKYpB5c=
209+
github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs=
210+
github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro=
209211
github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
210212
github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
211213
github.com/rs/xid v1.6.0 h1:fV591PaemRlL6JfRxGDEPl69wICngIQ3shQtzfy2gxU=
@@ -262,8 +264,6 @@ go.opentelemetry.io/otel/sdk/metric v1.35.0 h1:1RriWBmCKgkeHEhM7a2uMjMUfP7MsOF5J
262264
go.opentelemetry.io/otel/sdk/metric v1.35.0/go.mod h1:is6XYCUMpcKi+ZsOvfluY5YstFnhW0BidkR+gL+qN+w=
263265
go.opentelemetry.io/otel/trace v1.35.0 h1:dPpEfJu1sDIqruz7BHFG3c7528f6ddfSWfFDVt/xgMs=
264266
go.opentelemetry.io/otel/trace v1.35.0/go.mod h1:WUk7DtFp1Aw2MkvqGdwiXYDZZNvA/1J8o6xRXLrIkyc=
265-
go.opentelemetry.io/proto/otlp v1.5.0 h1:xJvq7gMzB31/d406fB8U5CBdyQGw4P399D1aQWU/3i4=
266-
go.opentelemetry.io/proto/otlp v1.5.0/go.mod h1:keN8WnHxOy8PG0rQZjJJ5A2ebUoafqWp0eVQ4yIXvJ4=
267267
go.opentelemetry.io/proto/otlp v1.6.0 h1:jQjP+AQyTf+Fe7OKj/MfkDrmK4MNVtw2NpXsf9fefDI=
268268
go.opentelemetry.io/proto/otlp v1.6.0/go.mod h1:cicgGehlFuNdgZkcALOCh3VE6K/u2tAjzlRhDwmVpZc=
269269
go.shabbyrobe.org/gocovmerge v0.0.0-20230507111327-fa4f82cfbf4d h1:Ns9kd1Rwzw7t0BR8XMphenji4SmIoNZPn8zhYmaVKP8=
@@ -277,8 +277,6 @@ go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
277277
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
278278
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
279279
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
280-
golang.org/x/crypto v0.37.0 h1:kJNSjF/Xp7kU0iB2Z+9viTPMW4EqqsrywMXLJOOsXSE=
281-
golang.org/x/crypto v0.37.0/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc=
282280
golang.org/x/crypto v0.38.0 h1:jt+WWG8IZlBnVbomuhg2Mdq0+BBQaHbtqHEFEigjUV8=
283281
golang.org/x/crypto v0.38.0/go.mod h1:MvrbAqul58NNYPKnOra203SB9vpuZW0e+RRZV+Ggqjw=
284282
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
@@ -289,19 +287,13 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn
289287
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
290288
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
291289
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
292-
golang.org/x/net v0.39.0 h1:ZCu7HMWDxpXpaiKdhzIfaltL9Lp31x/3fCP11bc6/fY=
293-
golang.org/x/net v0.39.0/go.mod h1:X7NRbYVEA+ewNkCNyJ513WmMdQ3BineSwVtN2zD/d+E=
294290
golang.org/x/net v0.40.0 h1:79Xs7wF06Gbdcg4kdCCIQArK11Z1hr5POQ6+fIYHNuY=
295291
golang.org/x/net v0.40.0/go.mod h1:y0hY0exeL2Pku80/zKK7tpntoX23cqL3Oa6njdgRtds=
296-
golang.org/x/oauth2 v0.29.0 h1:WdYw2tdTK1S8olAzWHdgeqfy+Mtm9XNhv/xJsY65d98=
297-
golang.org/x/oauth2 v0.29.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8=
298292
golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI=
299293
golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU=
300294
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
301295
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
302296
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
303-
golang.org/x/sync v0.13.0 h1:AauUjRAJ9OSnvULf/ARrrVywoJDy0YS2AwQ98I37610=
304-
golang.org/x/sync v0.13.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
305297
golang.org/x/sync v0.14.0 h1:woo0S4Yywslg6hp4eUFjTVOyKt0RookbpAHG4c1HmhQ=
306298
golang.org/x/sync v0.14.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
307299
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -312,18 +304,12 @@ golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7w
312304
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
313305
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
314306
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
315-
golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20=
316-
golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
317307
golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw=
318308
golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
319-
golang.org/x/term v0.31.0 h1:erwDkOK1Msy6offm1mOgvspSkslFnIGsFnxOKoufg3o=
320-
golang.org/x/term v0.31.0/go.mod h1:R4BeIy7D95HzImkxGkTW1UQTtP54tio2RyHz7PwK0aw=
321309
golang.org/x/term v0.32.0 h1:DR4lr0TjUs3epypdhTOkMmuF5CDFJ/8pOnbzMZPQ7bg=
322310
golang.org/x/term v0.32.0/go.mod h1:uZG1FhGx848Sqfsq4/DlJr3xGGsYMu/L5GW4abiaEPQ=
323311
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
324312
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
325-
golang.org/x/text v0.24.0 h1:dd5Bzh4yt5KYA8f9CJHCP4FB4D51c2c6JvN37xJJkJ0=
326-
golang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU=
327313
golang.org/x/text v0.25.0 h1:qVyWApTSYLk/drJRO5mDlNYskwQznZmkpV2c8q9zls4=
328314
golang.org/x/text v0.25.0/go.mod h1:WEdwpYrmk1qmdHvhkSTNPm3app7v4rsT8F2UD6+VHIA=
329315
golang.org/x/time v0.11.0 h1:/bpjEDfN9tkoN/ryeYHnv5hcMlc8ncjMcM4XBk5NWV0=
@@ -332,20 +318,14 @@ golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGm
332318
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
333319
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
334320
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
335-
golang.org/x/tools v0.32.0 h1:Q7N1vhpkQv7ybVzLFtTjvQya2ewbwNDZzUgfXGqtMWU=
336-
golang.org/x/tools v0.32.0/go.mod h1:ZxrU41P/wAbZD8EDa6dDCa6XfpkhJ7HFMjHJXfBDu8s=
337321
golang.org/x/tools v0.33.0 h1:4qz2S3zmRxbGIhDIAgjxvFutSvH5EfnsYrRBj0UI0bc=
338322
golang.org/x/tools v0.33.0/go.mod h1:CIJMaWEY88juyUfo7UbgPqbC8rU2OqfAV1h2Qp0oMYI=
339323
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
340324
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
341325
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
342326
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
343-
google.golang.org/genproto/googleapis/api v0.0.0-20250425173222-7b384671a197 h1:9DuBh3k1jUho2DHdxH+kbJwthIAq02vGvZNrD2ggF+Y=
344-
google.golang.org/genproto/googleapis/api v0.0.0-20250425173222-7b384671a197/go.mod h1:Cd8IzgPo5Akum2c9R6FsXNaZbH3Jpa2gpHlW89FqlyQ=
345327
google.golang.org/genproto/googleapis/api v0.0.0-20250505200425-f936aa4a68b2 h1:vPV0tzlsK6EzEDHNNH5sa7Hs9bd7iXR7B1tSiPepkV0=
346328
google.golang.org/genproto/googleapis/api v0.0.0-20250505200425-f936aa4a68b2/go.mod h1:pKLAc5OolXC3ViWGI62vvC0n10CpwAtRcTNCFwTKBEw=
347-
google.golang.org/genproto/googleapis/rpc v0.0.0-20250425173222-7b384671a197 h1:29cjnHVylHwTzH66WfFZqgSQgnxzvWE+jvBwpZCLRxY=
348-
google.golang.org/genproto/googleapis/rpc v0.0.0-20250425173222-7b384671a197/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
349329
google.golang.org/genproto/googleapis/rpc v0.0.0-20250505200425-f936aa4a68b2 h1:IqsN8hx+lWLqlN+Sc3DoMy/watjofWiU8sRFgQ8fhKM=
350330
google.golang.org/genproto/googleapis/rpc v0.0.0-20250505200425-f936aa4a68b2/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
351331
google.golang.org/grpc v1.72.0 h1:S7UkcVa60b5AAQTaO6ZKamFp1zMZSU0fGDK2WZLbBnM=
@@ -376,8 +356,6 @@ k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
376356
k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
377357
k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff h1:/usPimJzUKKu+m+TE36gUyGcf03XZEP0ZIKgKj35LS4=
378358
k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff/go.mod h1:5jIi+8yX4RIb8wk3XwBo5Pq2ccx4FP10ohkbSKCZoK8=
379-
k8s.io/utils v0.0.0-20250321185631-1f6e0b77f77e h1:KqK5c/ghOm8xkHYhlodbp6i6+r+ChV2vuAuVRdFbLro=
380-
k8s.io/utils v0.0.0-20250321185631-1f6e0b77f77e/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
381359
k8s.io/utils v0.0.0-20250502105355-0f33e8f1c979 h1:jgJW5IePPXLGB8e/1wvd0Ich9QE97RvvF3a8J3fP/Lg=
382360
k8s.io/utils v0.0.0-20250502105355-0f33e8f1c979/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
383361
mvdan.cc/gofumpt v0.8.0 h1:nZUCeC2ViFaerTcYKstMmfysj6uhQrA2vJe+2vwGU6k=

internal/cmd/crkit/serve_registry.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import (
44
"github.com/innoai-tech/infra/pkg/cli"
55
"github.com/innoai-tech/infra/pkg/otel"
66
contentapi "github.com/octohelm/crkit/pkg/content/api"
7+
"github.com/octohelm/crkit/pkg/content/fs/garbagecollector"
8+
"github.com/octohelm/crkit/pkg/content/fs/uploadpurger"
79
"github.com/octohelm/crkit/pkg/registryhttp"
810
)
911

@@ -17,5 +19,8 @@ type Registry struct {
1719

1820
contentapi.NamespaceProvider
1921

22+
UploadPurger uploadpurger.UploadPurger
23+
GarbageCollector garbagecollector.GarbageCollector
24+
2025
registryhttp.Server
2126
}

internal/cmd/crkit/zz_generated.runtimedoc.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@ package main
77
func (v *Registry) RuntimeDoc(names ...string) ([]string, bool) {
88
if len(names) > 0 {
99
switch names[0] {
10+
case "UploadPurger":
11+
return []string{}, true
12+
case "GarbageCollector":
13+
return []string{}, true
14+
1015
}
1116
if doc, ok := runtimeDoc(&v.Otel, "", names...); ok {
1217
return doc, ok

pkg/apis/manifest/v1/oci_index.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,14 @@ import (
66
specv1 "github.com/opencontainers/image-spec/specs-go/v1"
77
)
88

9+
const MediaTypeImageIndex = specv1.MediaTypeImageIndex
10+
911
type OciIndex specv1.Index
1012

1113
var _ Manifest = OciIndex{}
1214

1315
func (OciIndex) Type() string {
14-
return specv1.MediaTypeImageIndex
16+
return MediaTypeImageIndex
1517
}
1618

1719
func (i OciIndex) References() iter.Seq[Descriptor] {

pkg/apis/manifest/v1/oci_manifest.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,14 @@ import (
66
specv1 "github.com/opencontainers/image-spec/specs-go/v1"
77
)
88

9+
const MediaTypeImageManifest = specv1.MediaTypeImageManifest
10+
911
type OciManifest specv1.Manifest
1012

1113
var _ Manifest = OciManifest{}
1214

1315
func (OciManifest) Type() string {
14-
return specv1.MediaTypeImageManifest
16+
return MediaTypeImageManifest
1517
}
1618

1719
func (m OciManifest) References() iter.Seq[Descriptor] {

pkg/content/api/doc.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
//go:generate go tool devtool gen .
2+
package api

pkg/content/api/namespace_provider.go

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
//go:generate go tool devtool gen .
21
package api
32

43
import (
@@ -7,13 +6,14 @@ import (
76
"os"
87
"path/filepath"
98

10-
"github.com/octohelm/unifs/pkg/filesystem"
11-
129
"github.com/go-courier/logr"
13-
"github.com/octohelm/crkit/pkg/content"
1410
contentfs "github.com/octohelm/crkit/pkg/content/fs"
1511
contentproxy "github.com/octohelm/crkit/pkg/content/proxy"
12+
13+
"github.com/octohelm/crkit/pkg/content"
14+
"github.com/octohelm/crkit/pkg/content/fs/driver"
1615
contentremote "github.com/octohelm/crkit/pkg/content/remote"
16+
"github.com/octohelm/unifs/pkg/filesystem"
1717
"github.com/octohelm/unifs/pkg/filesystem/api"
1818
"github.com/octohelm/unifs/pkg/strfmt"
1919
)
@@ -22,8 +22,10 @@ import (
2222
type NamespaceProvider struct {
2323
Remote contentremote.Registry
2424
Content api.FileSystemBackend
25+
2526
NoCache bool `flag:",omitzero"`
2627

28+
driver driver.Driver `provide:""`
2729
namespace content.Namespace `provide:""`
2830
}
2931

@@ -33,20 +35,31 @@ func (s *NamespaceProvider) beforeInit(ctx context.Context) error {
3335
if err != nil {
3436
return err
3537
}
36-
endpoint, _ := strfmt.ParseEndpoint("file://" + filepath.Join(cwd, ".tmp/container-registry"))
38+
39+
endpoint, err := strfmt.ParseEndpoint("file://" + filepath.Join(cwd, ".tmp/container-registry"))
40+
if err != nil {
41+
return err
42+
}
43+
3744
s.Content.Backend = *endpoint
3845
}
3946

4047
return nil
4148
}
4249

4350
func (s *NamespaceProvider) afterInit(ctx context.Context) error {
44-
if err := filesystem.MkdirAll(ctx, s.Content.FileSystem(), "."); err != nil {
45-
return err
51+
if !s.NoCache {
52+
if err := filesystem.MkdirAll(ctx, s.Content.FileSystem(), "."); err != nil {
53+
return err
54+
}
4655
}
4756

4857
local := contentfs.NewNamespace(s.Content.FileSystem())
4958

59+
if !s.NoCache {
60+
s.driver = driver.FromFileSystem(s.Content.FileSystem())
61+
}
62+
5063
if s.Remote.Endpoint != "" {
5164
if s.NoCache {
5265
remote, err := contentremote.New(ctx, s.Remote)
@@ -72,7 +85,7 @@ func (s *NamespaceProvider) afterInit(ctx context.Context) error {
7285

7386
logr.FromContext(ctx).
7487
WithValues(slog.String("remote", s.Remote.Endpoint)).
75-
Info("proxy")
88+
Info("proxy with local cache")
7689

7790
return nil
7891
}

pkg/content/api/zz_generated.injectable.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,12 @@ import (
88
context "context"
99

1010
content "github.com/octohelm/crkit/pkg/content"
11+
fsdriver "github.com/octohelm/crkit/pkg/content/fs/driver"
1112
)
1213

1314
func (p *NamespaceProvider) InjectContext(ctx context.Context) context.Context {
1415
ctx = p.Content.InjectContext(ctx)
16+
ctx = fsdriver.DriverInjectContext(ctx, p.driver)
1517
ctx = content.NamespaceInjectContext(ctx, p.namespace)
1618

1719
return ctx

0 commit comments

Comments
 (0)