Skip to content

Commit 1085750

Browse files
authored
Go 1.24 (#18)
1 parent b544a60 commit 1085750

File tree

9 files changed

+269
-294
lines changed

9 files changed

+269
-294
lines changed

.github/workflows/docker.yaml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ jobs:
2222

2323
steps:
2424
- name: Log in to the container registry
25-
uses: docker/login-action@v1
25+
uses: docker/login-action@v3
2626
with:
2727
registry: ${{ env.REGISTRY }}
2828
username: ${{ secrets.DOCKER_REGISTRY_USER }}
@@ -31,13 +31,13 @@ jobs:
3131
- name: Checkout
3232
uses: actions/checkout@v4
3333

34-
- name: Set up Go 1.22
34+
- name: Set up Go 1.24
3535
uses: actions/setup-go@v5
3636
with:
37-
go-version: '1.22'
37+
go-version: '1.24'
3838

3939
- name: Lint
40-
uses: golangci/golangci-lint-action@v3
40+
uses: golangci/golangci-lint-action@v6
4141
with:
4242
args: --build-tags integration -p bugs -p unused --timeout=3m
4343

@@ -48,7 +48,7 @@ jobs:
4848
[ "${GITHUB_EVENT_NAME}" == 'push' ] && echo "tag=latest" >> $GITHUB_ENV || true
4949
5050
- name: Build and push image
51-
uses: docker/build-push-action@v3
51+
uses: docker/build-push-action@v6
5252
with:
5353
context: .
5454
push: true

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
bin
2-
.vscode
2+
.vscode
3+
coverage.out

Dockerfile

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
1-
FROM ghcr.io/metal-stack/builder:latest as builder
1+
FROM golang:1.24-bookworm AS builder
22

3-
FROM alpine:3.19
4-
RUN apk add --no-cache tini ca-certificates
3+
WORKDIR /work
4+
COPY . .
5+
RUN make all
6+
7+
FROM gcr.io/distroless/static-debian12
58
COPY --from=builder /work/bin/metal-image-cache-sync /metal-image-cache-sync
69
CMD ["/metal-image-cache-sync"]

Makefile

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,38 @@
11
BINARY := metal-image-cache-sync
22
MAINMODULE := github.com/metal-stack/metal-image-cache-sync/cmd
3-
COMMONDIR := $(or ${COMMONDIR},../builder)
3+
4+
SHA := $(shell git rev-parse --short=8 HEAD)
5+
GITVERSION := $(shell git describe --long --all)
6+
BUILDDATE := $(shell date -Iseconds)
7+
VERSION := $(or ${VERSION},$(shell git describe --tags --exact-match 2> /dev/null || git symbolic-ref -q --short HEAD || git rev-parse --short HEAD))
8+
49

510
# default points to mini-lab
611
METAL_API_ENDPOINT := $(or ${METALCTL_API_URL},http://api.0.0.0.0.nip.io:8080/metal)
712
METAL_API_HMAC := $(or ${METALCTL_HMAC},metal-view)
813

9-
include $(COMMONDIR)/Makefile.inc
14+
LINKMODE := -extldflags '-static -s -w'
15+
16+
all: test build
1017

11-
.PHONY: all
12-
all::
13-
go mod tidy
18+
.PHONY: build
19+
build:
20+
go build -tags netgo,osusergo,urfave_cli_no_docs \
21+
-ldflags "$(LINKMODE) -X 'github.com/metal-stack/v.Version=$(VERSION)' \
22+
-X 'github.com/metal-stack/v.Revision=$(GITVERSION)' \
23+
-X 'github.com/metal-stack/v.GitSHA1=$(SHA)' \
24+
-X 'github.com/metal-stack/v.BuildDate=$(BUILDDATE)'" \
25+
-o bin/$(BINARY) $(MAINMODULE)
26+
strip bin/$(BINARY)
1427

15-
release:: all;
28+
.PHONY: test
29+
test:
30+
go test ./... -coverprofile=coverage.out -covermode=atomic && go tool cover -func=coverage.out
1631

1732
.PHONY: start
1833
start: all
1934
mkdir -p /tmp/metal-image-cache
20-
bin/metal-image-cache-sync \
35+
bin/$(BINARY) \
2136
--log-level debug \
2237
--metal-api-endpoint $(METAL_API_ENDPOINT) \
2338
--metal-api-hmac $(METAL_API_HMAC) \

cmd/internal/determine-sync-images/lister.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ func (s *SyncLister) DetermineImageSyncList() ([]api.OS, error) {
5555

5656
s.imageCollector.SetMetalAPIImageCount(len(resp.Payload))
5757

58-
expirationGraceDays := 24 * time.Hour * time.Duration(s.config.ExpirationGraceDays)
58+
expirationGraceDays := 24 * time.Hour * time.Duration(s.config.ExpirationGraceDays) // nolint:gosec
5959

6060
images := api.OSImagesByOS{}
6161
for _, img := range resp.Payload {
@@ -73,7 +73,7 @@ func (s *SyncLister) DetermineImageSyncList() ([]api.OS, error) {
7373

7474
os, ver, err := utils.GetOsAndSemver(*img.ID)
7575
if err != nil {
76-
s.logger.Error("could not extract os and version, skipping", "error", err)
76+
s.logger.Error("could not extract os and version, skipping", "image", img.ID, "error", err)
7777
continue
7878
}
7979

@@ -292,7 +292,7 @@ func retrieveContentLength(ctx context.Context, c *http.Client, url string) (int
292292
return 0, fmt.Errorf("content-length header value could not be converted to integer:%w", err)
293293
}
294294

295-
return int64(size), nil
295+
return int64(size), nil // nolint:gosec
296296
}
297297

298298
func (s *SyncLister) reduce(images []api.OS, sizeCount int64) ([]api.OS, int64, error) {

cmd/internal/sync/syncer_test.go

Lines changed: 35 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -47,22 +47,22 @@ func Test_currentFileIndex(t *testing.T) {
4747
{
4848
name: "lists cached images",
4949
fsModFunc: func(t *testing.T, fs afero.Fs) {
50-
createTestFile(t, fs, cacheRoot+"/ubuntu/19.04/20201025/img.tar.lz4")
51-
createTestFile(t, fs, cacheRoot+"/ubuntu/19.04/20201026/img.tar.lz4")
52-
createTestFile(t, fs, cacheRoot+"/ubuntu/19.04/20201025/img.tar.lz4.md5")
53-
createTestFile(t, fs, cacheRoot+"/ubuntu/19.04/20201026/img.tar.lz4.md5")
50+
createTestFile(t, fs, cacheRoot+"/ubuntu/19.4/20201025/img.tar.lz4")
51+
createTestFile(t, fs, cacheRoot+"/ubuntu/19.4/20201026/img.tar.lz4")
52+
createTestFile(t, fs, cacheRoot+"/ubuntu/19.4/20201025/img.tar.lz4.md5")
53+
createTestFile(t, fs, cacheRoot+"/ubuntu/19.4/20201026/img.tar.lz4.md5")
5454
createTestFile(t, fs, cacheRoot+"/ubuntu/20.10/20201026/img.tar.lz4")
5555
createTestFile(t, fs, cacheRoot+"/ubuntu/20.10/20201026/img.tar.lz4.md5")
5656
},
5757
want: api.CacheEntities{
5858
api.LocalFile{
5959
Name: "img.tar.lz4",
60-
SubPath: "ubuntu/19.04/20201025/img.tar.lz4",
60+
SubPath: "ubuntu/19.4/20201025/img.tar.lz4",
6161
Size: 4,
6262
},
6363
api.LocalFile{
6464
Name: "img.tar.lz4",
65-
SubPath: "ubuntu/19.04/20201026/img.tar.lz4",
65+
SubPath: "ubuntu/19.4/20201026/img.tar.lz4",
6666
Size: 4,
6767
},
6868
api.LocalFile{
@@ -170,12 +170,12 @@ func TestSyncer_defineImageDiff(t *testing.T) {
170170
name: "remove unexisting images",
171171
currentImages: api.CacheEntities{
172172
api.OS{
173-
BucketKey: "metal-os/master/ubuntu/19.04/20201025/img.tar.lz4",
173+
BucketKey: "metal-os/master/ubuntu/19.4/20201025/img.tar.lz4",
174174
BucketName: "metal-os",
175175
Version: &semver.Version{},
176176
},
177177
api.OS{
178-
BucketKey: "metal-os/master/ubuntu/19.04/20201026/img.tar.lz4",
178+
BucketKey: "metal-os/master/ubuntu/19.4/20201026/img.tar.lz4",
179179
BucketName: "metal-os",
180180
Version: &semver.Version{},
181181
},
@@ -184,12 +184,12 @@ func TestSyncer_defineImageDiff(t *testing.T) {
184184
add: nil,
185185
remove: api.CacheEntities{
186186
api.OS{
187-
BucketKey: "metal-os/master/ubuntu/19.04/20201025/img.tar.lz4",
187+
BucketKey: "metal-os/master/ubuntu/19.4/20201025/img.tar.lz4",
188188
BucketName: "metal-os",
189189
Version: &semver.Version{},
190190
},
191191
api.OS{
192-
BucketKey: "metal-os/master/ubuntu/19.04/20201026/img.tar.lz4",
192+
BucketKey: "metal-os/master/ubuntu/19.4/20201026/img.tar.lz4",
193193
BucketName: "metal-os",
194194
Version: &semver.Version{},
195195
},
@@ -202,28 +202,28 @@ func TestSyncer_defineImageDiff(t *testing.T) {
202202
wantImages: api.CacheEntities{
203203
api.OS{
204204
Name: "ubuntu",
205-
Version: semver.MustParse("19.04"),
206-
BucketKey: "metal-os/master/ubuntu/19.04/20201025/img.tar.lz4",
205+
Version: semver.MustParse("19.4"),
206+
BucketKey: "metal-os/master/ubuntu/19.4/20201025/img.tar.lz4",
207207
BucketName: "metal-os",
208208
},
209209
api.OS{
210210
Name: "debian",
211-
Version: semver.MustParse("20.04"),
212-
BucketKey: "metal-os/master/ubuntu/20.04/20201025/img.tar.lz4",
211+
Version: semver.MustParse("20.4"),
212+
BucketKey: "metal-os/master/ubuntu/20.4/20201025/img.tar.lz4",
213213
BucketName: "metal-os",
214214
},
215215
},
216216
add: api.CacheEntities{
217217
api.OS{
218218
Name: "ubuntu",
219-
Version: semver.MustParse("19.04"),
220-
BucketKey: "metal-os/master/ubuntu/19.04/20201025/img.tar.lz4",
219+
Version: semver.MustParse("19.4"),
220+
BucketKey: "metal-os/master/ubuntu/19.4/20201025/img.tar.lz4",
221221
BucketName: "metal-os",
222222
},
223223
api.OS{
224224
Name: "debian",
225-
Version: semver.MustParse("20.04"),
226-
BucketKey: "metal-os/master/ubuntu/20.04/20201025/img.tar.lz4",
225+
Version: semver.MustParse("20.4"),
226+
BucketKey: "metal-os/master/ubuntu/20.4/20201025/img.tar.lz4",
227227
BucketName: "metal-os",
228228
},
229229
},
@@ -234,34 +234,34 @@ func TestSyncer_defineImageDiff(t *testing.T) {
234234
name: "don't download existing images when checksum is proper",
235235
currentImages: api.CacheEntities{
236236
api.OS{
237-
BucketKey: "metal-os/master/ubuntu/19.04/20201025/img.tar.lz4",
237+
BucketKey: "metal-os/master/ubuntu/19.4/20201025/img.tar.lz4",
238238
BucketName: "metal-os",
239239
Version: &semver.Version{},
240240
},
241241
},
242242
wantImages: api.CacheEntities{
243243
api.OS{
244244
Name: "ubuntu",
245-
Version: semver.MustParse("19.04.20201025"),
246-
BucketKey: "metal-os/master/ubuntu/19.04/20201025/img.tar.lz4",
245+
Version: semver.MustParse("19.4.20201025"),
246+
BucketKey: "metal-os/master/ubuntu/19.4/20201025/img.tar.lz4",
247247
BucketName: "metal-os",
248248
MD5Ref: s3.Object{
249-
Key: strPtr("metal-os/master/ubuntu/19.04/20201025/img.tar.lz4.md5"),
249+
Key: strPtr("metal-os/master/ubuntu/19.4/20201025/img.tar.lz4.md5"),
250250
},
251251
},
252252
},
253253
fsModFunc: func(t *testing.T, fs afero.Fs) {
254-
createTestFile(t, fs, cacheRoot+"/metal-os/master/ubuntu/19.04/20201025/img.tar.lz4")
254+
createTestFile(t, fs, cacheRoot+"/metal-os/master/ubuntu/19.4/20201025/img.tar.lz4")
255255
},
256256
add: nil,
257257
keep: api.CacheEntities{
258258
api.OS{
259259
Name: "ubuntu",
260-
Version: semver.MustParse("19.04.20201025"),
261-
BucketKey: "metal-os/master/ubuntu/19.04/20201025/img.tar.lz4",
260+
Version: semver.MustParse("19.4.20201025"),
261+
BucketKey: "metal-os/master/ubuntu/19.4/20201025/img.tar.lz4",
262262
BucketName: "metal-os",
263263
MD5Ref: s3.Object{
264-
Key: strPtr("metal-os/master/ubuntu/19.04/20201025/img.tar.lz4.md5"),
264+
Key: strPtr("metal-os/master/ubuntu/19.4/20201025/img.tar.lz4.md5"),
265265
},
266266
},
267267
},
@@ -272,34 +272,34 @@ func TestSyncer_defineImageDiff(t *testing.T) {
272272
name: "download existing images when checksum is incorrect",
273273
currentImages: api.CacheEntities{
274274
api.OS{
275-
BucketKey: "metal-os/master/ubuntu/19.04/20201025/img.tar.lz4",
275+
BucketKey: "metal-os/master/ubuntu/19.4/20201025/img.tar.lz4",
276276
BucketName: "metal-os",
277277
Version: &semver.Version{},
278278
},
279279
},
280280
wantImages: api.CacheEntities{
281281
api.OS{
282282
Name: "ubuntu",
283-
Version: semver.MustParse("19.04.20201025"),
284-
BucketKey: "metal-os/master/ubuntu/19.04/20201025/img.tar.lz4",
283+
Version: semver.MustParse("19.4.20201025"),
284+
BucketKey: "metal-os/master/ubuntu/19.4/20201025/img.tar.lz4",
285285
BucketName: "metal-os",
286286
MD5Ref: s3.Object{
287-
Key: strPtr("metal-os/master/ubuntu/19.04/20201025/img.tar.lz4.md5"),
287+
Key: strPtr("metal-os/master/ubuntu/19.4/20201025/img.tar.lz4.md5"),
288288
},
289289
},
290290
},
291291
fsModFunc: func(t *testing.T, fs afero.Fs) {
292-
createTestFile(t, fs, cacheRoot+"/metal-os/master/ubuntu/19.04/20201025/img.tar.lz4")
292+
createTestFile(t, fs, cacheRoot+"/metal-os/master/ubuntu/19.4/20201025/img.tar.lz4")
293293
},
294294
remoteChecksumFile: "not-equal",
295295
add: api.CacheEntities{
296296
api.OS{
297297
Name: "ubuntu",
298-
Version: semver.MustParse("19.04.20201025"),
299-
BucketKey: "metal-os/master/ubuntu/19.04/20201025/img.tar.lz4",
298+
Version: semver.MustParse("19.4.20201025"),
299+
BucketKey: "metal-os/master/ubuntu/19.4/20201025/img.tar.lz4",
300300
BucketName: "metal-os",
301301
MD5Ref: s3.Object{
302-
Key: strPtr("metal-os/master/ubuntu/19.04/20201025/img.tar.lz4.md5"),
302+
Key: strPtr("metal-os/master/ubuntu/19.4/20201025/img.tar.lz4.md5"),
303303
},
304304
},
305305
},
@@ -399,7 +399,7 @@ func Test_cleanEmptyDirs(t *testing.T) {
399399
{
400400
name: "recursive deletion 2",
401401
fsModFunc: func(t *testing.T, fs afero.Fs) {
402-
createTestFile(t, fs, cacheRoot+"/ubuntu/20.04/20201028/img.tar.lz4")
402+
createTestFile(t, fs, cacheRoot+"/ubuntu/20.4/20201028/img.tar.lz4")
403403
createTestDir(t, fs, cacheRoot+"/ubuntu/20.10/20201027")
404404
},
405405
fsCheckFunc: func(t *testing.T, fs afero.Fs) {

0 commit comments

Comments
 (0)