Skip to content

Commit 1559666

Browse files
Alex619829smira
authored andcommitted
feat: replace hardcoded artifact image constants with CLI-configurable values
Adds CLI flags that replace hardcoded image constants Signed-off-by: Aleksandr Gamzin <[email protected]> Signed-off-by: Andrey Smirnov <[email protected]>
1 parent c27ee27 commit 1559666

File tree

15 files changed

+83
-47
lines changed

15 files changed

+83
-47
lines changed

.github/workflows/stale.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# THIS FILE WAS AUTOMATICALLY GENERATED, PLEASE DO NOT EDIT.
22
#
3-
# Generated on 2025-09-29T15:35:06Z by kres 301c24d.
3+
# Generated on 2025-10-17T16:18:55Z by kres 46e133d.
44

55
"on":
66
schedule:
@@ -15,7 +15,7 @@ jobs:
1515
- ubuntu-latest
1616
steps:
1717
- name: Close stale issues and PRs
18-
uses: actions/stale@v10.0.0
18+
uses: actions/stale@v10.1.0
1919
with:
2020
close-issue-message: This issue was closed because it has been stalled for 7 days with no activity.
2121
days-before-issue-close: "5"

Dockerfile

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
1-
# syntax = docker/dockerfile-upstream:1.18.0-labs
1+
# syntax = docker/dockerfile-upstream:1.19.0-labs
22

33
# THIS FILE WAS AUTOMATICALLY GENERATED, PLEASE DO NOT EDIT.
44
#
5-
# Generated on 2025-09-29T15:35:06Z by kres 301c24d.
5+
# Generated on 2025-10-17T16:18:55Z by kres 46e133d.
66

77
ARG TOOLCHAIN
88
ARG PKGS_PREFIX
99
ARG PKGS
1010

1111
# runs markdownlint
12-
FROM docker.io/oven/bun:1.2.22-alpine AS lint-markdown
12+
FROM docker.io/oven/bun:1.3.0-alpine AS lint-markdown
1313
WORKDIR /src
1414
1515
COPY .markdownlint.json .

Makefile

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# THIS FILE WAS AUTOMATICALLY GENERATED, PLEASE DO NOT EDIT.
22
#
3-
# Generated on 2025-09-30T18:06:15Z by kres bc281a9.
3+
# Generated on 2025-10-17T16:18:55Z by kres 46e133d.
44

55
# common variables
66

@@ -17,16 +17,16 @@ WITH_RACE ?= false
1717
REGISTRY ?= ghcr.io
1818
USERNAME ?= siderolabs
1919
REGISTRY_AND_USERNAME ?= $(REGISTRY)/$(USERNAME)
20-
PROTOBUF_GO_VERSION ?= 1.36.9
20+
PROTOBUF_GO_VERSION ?= 1.36.10
2121
GRPC_GO_VERSION ?= 1.5.1
22-
GRPC_GATEWAY_VERSION ?= 2.27.2
22+
GRPC_GATEWAY_VERSION ?= 2.27.3
2323
VTPROTOBUF_VERSION ?= 0.6.0
24-
GOIMPORTS_VERSION ?= 0.37.0
24+
GOIMPORTS_VERSION ?= 0.38.0
2525
GOMOCK_VERSION ?= 0.6.0
2626
DEEPCOPY_VERSION ?= v0.5.8
27-
GOLANGCILINT_VERSION ?= v2.4.0
27+
GOLANGCILINT_VERSION ?= v2.5.0
2828
GOFUMPT_VERSION ?= v0.9.1
29-
GO_VERSION ?= 1.25.1
29+
GO_VERSION ?= 1.25.3
3030
GO_BUILDFLAGS ?=
3131
GO_LDFLAGS ?=
3232
CGO_ENABLED ?= 0

cmd/image-factory/cmd/options.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,8 @@ type Options struct { //nolint:govet
110110

111111
// SecureBoot settings.
112112
SecureBoot SecureBootOptions
113+
114+
Images ImageOptions
113115
}
114116

115117
// SecureBootOptions configures SecureBoot.
@@ -136,6 +138,16 @@ type SecureBootOptions struct { //nolint:govet
136138
AwsRegion string
137139
}
138140

141+
// ImageOptions holds names of images used by the image factory.
142+
type ImageOptions struct {
143+
InstallerBaseImage string
144+
InstallerImage string
145+
ImagerImage string
146+
ExtensionManifestImage string
147+
OverlayManifestImage string
148+
TalosctlImage string
149+
}
150+
139151
// DefaultOptions are the default options.
140152
var DefaultOptions = Options{
141153
HTTPListenAddr: ":8080",
@@ -165,4 +177,13 @@ var DefaultOptions = Options{
165177
CacheS3Bucket: "image-factory",
166178

167179
MetricsListenAddr: ":2122",
180+
181+
Images: ImageOptions{
182+
InstallerBaseImage: "siderolabs/installer-base",
183+
InstallerImage: "siderolabs/installer",
184+
ImagerImage: "siderolabs/imager",
185+
ExtensionManifestImage: "siderolabs/extensions",
186+
OverlayManifestImage: "siderolabs/overlays",
187+
TalosctlImage: "siderolabs/talosctl-all",
188+
},
168189
}

cmd/image-factory/cmd/service.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -309,6 +309,13 @@ func buildArtifactsManager(ctx context.Context, logger *zap.Logger, opts Options
309309
TalosVersionRecheckInterval: opts.TalosVersionRecheckInterval,
310310
RemoteOptions: remoteOptions(),
311311
RegistryRefreshInterval: opts.RegistryRefreshInterval,
312+
313+
InstallerBaseImage: opts.Images.InstallerBaseImage,
314+
InstallerImage: opts.Images.InstallerImage,
315+
ImagerImage: opts.Images.ImagerImage,
316+
ExtensionManifestImage: opts.Images.ExtensionManifestImage,
317+
OverlayManifestImage: opts.Images.OverlayManifestImage,
318+
TalosctlImage: opts.Images.TalosctlImage,
312319
})
313320
if err != nil {
314321
return nil, fmt.Errorf("failed to initialize artifacts manager: %w", err)

cmd/image-factory/flags.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
// License, v. 2.0. If a copy of the MPL was not distributed with this
33
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
44

5-
// Package main is the entrypoint of the image factory.
65
package main
76

87
import (
@@ -97,6 +96,13 @@ func initFlags() cmd.Options {
9796
flag.StringVar(&opts.SecureBoot.AzureCertificateName, "secureboot-azure-certificate-name", cmd.DefaultOptions.SecureBoot.AzureCertificateName, "Secure Boot Azure Key Vault certificate name (use Azure PKI)") //nolint:lll
9897
flag.StringVar(&opts.SecureBoot.AzureKeyName, "secureboot-azure-key-name", cmd.DefaultOptions.SecureBoot.AzureKeyName, "Secure Boot Azure Key Vault PCR key name (use Azure PKI)")
9998

99+
flag.StringVar(&opts.Images.InstallerBaseImage, "installer-base-image", cmd.DefaultOptions.Images.InstallerBaseImage, "Name of image InstallerBaseImage")
100+
flag.StringVar(&opts.Images.InstallerImage, "installer-image", cmd.DefaultOptions.Images.InstallerImage, "Name of image InstallerImage")
101+
flag.StringVar(&opts.Images.ImagerImage, "imager-image", cmd.DefaultOptions.Images.ImagerImage, "Name of image ImagerImage")
102+
flag.StringVar(&opts.Images.ExtensionManifestImage, "extension-manifest-image", cmd.DefaultOptions.Images.ExtensionManifestImage, "Name of image ExtensionManifestImage")
103+
flag.StringVar(&opts.Images.OverlayManifestImage, "overlay-manifest-image", cmd.DefaultOptions.Images.OverlayManifestImage, "Name of image OverlayManifestImage")
104+
flag.StringVar(&opts.Images.TalosctlImage, "talosctl-image", cmd.DefaultOptions.Images.TalosctlImage, "Name of image TalosctlImage")
105+
100106
opts.LogLevel = zap.LevelFlag("log-level", zap.InfoLevel, "set the logging level")
101107

102108
flag.Parse()

internal/artifacts/artifacts.go

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,14 @@ type Options struct { //nolint:govet
3131
RemoteOptions []remote.Option
3232
// RegistryRefreshInterval is the interval for refreshing the image registry connections.
3333
RegistryRefreshInterval time.Duration
34+
35+
// Images used by the artifacts manager.
36+
InstallerBaseImage string
37+
InstallerImage string
38+
ImagerImage string
39+
ExtensionManifestImage string
40+
OverlayManifestImage string
41+
TalosctlImage string
3442
}
3543

3644
// ImageVerifyOptions are the options for verifying the image signature.
@@ -68,16 +76,6 @@ const (
6876
// FetchTimeout controls overall timeout for fetching artifacts for a release.
6977
const FetchTimeout = 20 * time.Minute
7078

71-
// Various images.
72-
const (
73-
InstallerBaseImage = "siderolabs/installer-base"
74-
InstallerImage = "siderolabs/installer"
75-
ImagerImage = "siderolabs/imager"
76-
ExtensionManifestImage = "siderolabs/extensions"
77-
OverlayManifestImage = "siderolabs/overlays"
78-
TalosctlImage = "siderolabs/talosctl-all"
79-
)
80-
8179
const tmpSuffix = "-tmp"
8280

8381
// ErrNotFoundTag tags the errors when the artifact is not found.

internal/artifacts/fetch.go

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ func (m *Manager) fetchImageByDigest(digestRef name.Digest, architecture Arch, i
142142
func (m *Manager) fetchImager(tag string) error {
143143
destinationPath := filepath.Join(m.storagePath, tag)
144144

145-
if err := m.fetchImageByTag(ImagerImage, tag, ArchAmd64, imageExportHandler(func(logger *zap.Logger, r io.Reader) error {
145+
if err := m.fetchImageByTag(m.options.ImagerImage, tag, ArchAmd64, imageExportHandler(func(logger *zap.Logger, r io.Reader) error {
146146
return untarWithPrefix(logger, r, usrInstallPrefix, destinationPath+tmpSuffix)
147147
})); err != nil {
148148
return err
@@ -188,15 +188,18 @@ func (m *Manager) fetchOverlayImage(arch Arch, ref OverlayRef, destPath string)
188188
return os.Rename(destPath+tmpSuffix, destPath)
189189
}
190190

191-
// fetchInstallerImage fetches a Talos installer image and exports it to the storage.
192-
func (m *Manager) fetchInstallerImage(arch Arch, versionTag string, destPath string) error {
193-
installerImage := InstallerImage
194-
191+
// InstallerImageName returns an installer image name based on Talos version.
192+
func (m *Manager) InstallerImageName(versionTag string) string {
195193
if quirks.New(versionTag).SupportsUnifiedInstaller() {
196-
installerImage = InstallerBaseImage
194+
return m.options.InstallerBaseImage
197195
}
198196

199-
if err := m.fetchImageByTag(installerImage, versionTag, arch, imageOCIHandler(destPath+tmpSuffix)); err != nil {
197+
return m.options.InstallerImage
198+
}
199+
200+
// fetchInstallerImage fetches a Talos installer image and exports it to the storage.
201+
func (m *Manager) fetchInstallerImage(arch Arch, versionTag string, destPath string) error {
202+
if err := m.fetchImageByTag(m.InstallerImageName(versionTag), versionTag, arch, imageOCIHandler(destPath+tmpSuffix)); err != nil {
200203
return err
201204
}
202205

@@ -205,9 +208,7 @@ func (m *Manager) fetchInstallerImage(arch Arch, versionTag string, destPath str
205208

206209
// fetchTalosctlImage fetches a Talosctl image and exports it to the storage.
207210
func (m *Manager) fetchTalosctlImage(versionTag string, destPath string) error {
208-
talosctlImage := TalosctlImage
209-
210-
if err := m.fetchImageByTag(talosctlImage, versionTag, ArchAmd64, imageExportHandler(func(logger *zap.Logger, r io.Reader) error {
211+
if err := m.fetchImageByTag(m.options.TalosctlImage, versionTag, ArchAmd64, imageExportHandler(func(logger *zap.Logger, r io.Reader) error {
211212
return untarWithPrefix(logger, r, "", destPath+tmpSuffix)
212213
})); err != nil {
213214
return err

internal/artifacts/versions.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ func (m *Manager) fetchTalosVersions() (any, error) {
2828
ctx, cancel := context.WithTimeout(context.Background(), FetchTimeout)
2929
defer cancel()
3030

31-
repository := m.imageRegistry.Repo(ImagerImage)
31+
repository := m.imageRegistry.Repo(m.options.ImagerImage)
3232

3333
candidates, err := m.pullers[ArchAmd64].List(ctx, repository)
3434
if err != nil {
@@ -130,7 +130,7 @@ type overlaysDescription struct {
130130
func (m *Manager) fetchOfficialExtensions(tag string) error {
131131
var extensions []ExtensionRef
132132

133-
if err := m.fetchImageByTag(ExtensionManifestImage, tag, ArchAmd64, imageExportHandler(func(_ *zap.Logger, r io.Reader) error {
133+
if err := m.fetchImageByTag(m.options.ExtensionManifestImage, tag, ArchAmd64, imageExportHandler(func(_ *zap.Logger, r io.Reader) error {
134134
var extractErr error
135135

136136
extensions, extractErr = extractExtensionList(r)
@@ -160,7 +160,7 @@ func (m *Manager) fetchOfficialExtensions(tag string) error {
160160
func (m *Manager) fetchOfficialOverlays(tag string) error {
161161
var overlays []OverlayRef
162162

163-
if err := m.fetchImageByTag(OverlayManifestImage, tag, ArchAmd64, imageExportHandler(func(_ *zap.Logger, r io.Reader) error {
163+
if err := m.fetchImageByTag(m.options.OverlayManifestImage, tag, ArchAmd64, imageExportHandler(func(_ *zap.Logger, r io.Reader) error {
164164
var extractErr error
165165

166166
overlays, extractErr = extractOverlayList(r)
@@ -190,7 +190,7 @@ func (m *Manager) fetchOfficialOverlays(tag string) error {
190190
func (m *Manager) fetchTalosctlTuples(tag string) error {
191191
var talosctlTuples []TalosctlTuple
192192

193-
if err := m.fetchImageByTag(TalosctlImage, tag, ArchAmd64, imageExportHandler(func(_ *zap.Logger, r io.Reader) error {
193+
if err := m.fetchImageByTag(m.options.TalosctlImage, tag, ArchAmd64, imageExportHandler(func(_ *zap.Logger, r io.Reader) error {
194194
var extractErr error
195195

196196
talosctlTuples, extractErr = extractTalosctlTuples(r)

internal/asset/cache/registry/layer.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ func (w *layerWrapper) Size() (int64, error) {
7878
return w.src.Size(), nil
7979
}
8080

81-
// Returns the mediaType for the compressed Layer.
81+
// MediaType returns the mediaType for the compressed Layer.
8282
func (w *layerWrapper) MediaType() (types.MediaType, error) {
8383
return "application/data", nil
8484
}

0 commit comments

Comments
 (0)