Skip to content

Commit 0d26952

Browse files
buroautkuozdemir
authored andcommitted
feat: use latest image factory version
Grabs the latest Talos version from the Image Factory API Signed-off-by: Steven Kreitzer <[email protected]> Signed-off-by: Utku Ozdemir <[email protected]>
1 parent 9a716b4 commit 0d26952

File tree

5 files changed

+46
-4
lines changed

5 files changed

+46
-4
lines changed

cmd/booter/main.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,8 @@ func init() {
147147
"The arguments will be used to generate schematic ID from the image factory. "+
148148
"These extra args can also be set via the %q environment variable or via command line arguments.", extraKernelArgsEnvVar))
149149

150-
rootCmd.Flags().StringVar(&serverOptions.TalosVersion, "talos-version", serverOptions.TalosVersion, "The Talos version to use.")
150+
rootCmd.Flags().StringVar(&serverOptions.TalosVersion, "talos-version", serverOptions.TalosVersion, "The Talos version to use. If it is not specified, "+
151+
"the latest stable Talos version from the image factory will be detected and used.")
151152

152153
// Omni options
153154
// todo: disabled for now, we can re-enable it after https://github.com/siderolabs/omni/issues/1375 for better UX

internal/server/imagefactory/client.go

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"fmt"
1010
"time"
1111

12+
"github.com/blang/semver/v4"
1213
"github.com/siderolabs/image-factory/pkg/client"
1314
"github.com/siderolabs/image-factory/pkg/schematic"
1415
"go.uber.org/zap"
@@ -92,3 +93,36 @@ func (c *Client) GetIPXEURL(schematicID, talosVersion, arch string) (string, err
9293

9394
return ipxeURL, nil
9495
}
96+
97+
// GetLatestStableVersion returns the latest stable Talos version from the image factory.
98+
func (c *Client) GetLatestStableVersion(ctx context.Context) (string, error) {
99+
versions, err := c.factoryClient.Versions(ctx)
100+
if err != nil {
101+
return "", err
102+
}
103+
104+
var latestStable *semver.Version
105+
for _, v := range versions {
106+
sv, err := semver.ParseTolerant(v)
107+
if err != nil {
108+
c.logger.Warn("failed to parse version", zap.String("version", v), zap.Error(err))
109+
110+
continue
111+
}
112+
113+
// Skip pre-releases
114+
if len(sv.Pre) > 0 {
115+
continue
116+
}
117+
118+
if latestStable == nil || sv.GT(*latestStable) {
119+
latestStable = &sv
120+
}
121+
}
122+
123+
if latestStable == nil {
124+
return "", fmt.Errorf("no stable versions found")
125+
}
126+
127+
return latestStable.String(), nil
128+
}

internal/server/options.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,5 @@ func DefaultOptions() Options {
2929
ImageFactoryBaseURL: "https://factory.talos.dev",
3030
ImageFactoryPXEBaseURL: "https://pxe.factory.talos.dev",
3131
APIPort: 50084,
32-
Extensions: []string{"siderolabs/hello-world-service"},
33-
TalosVersion: "v1.10.6",
3432
}
3533
}

internal/server/server.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,15 @@ func (s *Server) Run(ctx context.Context) error {
9292
return fmt.Errorf("failed to create image factory client: %w", err)
9393
}
9494

95+
if s.options.TalosVersion == "" {
96+
if s.options.TalosVersion, err = imageFactoryClient.GetLatestStableVersion(ctx); err != nil {
97+
return fmt.Errorf("failed to get the latest stable Talos version from the image factory: %w", err)
98+
}
99+
100+
s.logger.Info("Talos version is not explicitly defined, the latest stable Talos version from the image factory will be used",
101+
zap.String("version", s.options.TalosVersion))
102+
}
103+
95104
ipxeHandler, err := ipxe.NewHandler(ctx, configServerEnabled, imageFactoryClient, ipxe.HandlerOptions{
96105
APIAdvertiseAddress: s.options.APIAdvertiseAddress,
97106
APIPort: s.options.APIPort,

internal/version/data/tag

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
v0.1.0
1+
v0.2.0

0 commit comments

Comments
 (0)