Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 0 additions & 36 deletions .github/workflows/generate.yml

This file was deleted.

1 change: 0 additions & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
name: goreleaser

on:
pull_request:
push:
tags:
- "v*.*.*"
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
talm
3 changes: 0 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
VERSION=$(shell git describe --tags)
TALOS_VERSION=$(shell go list -m github.com/siderolabs/talos | awk '{sub(/^v/, "", $$NF); print $$NF}')

generate:
go generate

build:
go build -ldflags="-X 'main.Version=$(VERSION)'"

Expand Down
98 changes: 98 additions & 0 deletions charts/charts.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
package charts

import (
"embed"
"io/fs"
"path"
"regexp"
"strings"
)

//go:embed all:cozystack all:generic all:talm
var embeddedCharts embed.FS

// PresetFiles returns a map of file paths to their contents.
// For Chart.yaml files, name and version are replaced with %s placeholders.
func PresetFiles() (map[string]string, error) {
filesMap := make(map[string]string)
regex := regexp.MustCompile(`(name|version): \S+`)

err := fs.WalkDir(embeddedCharts, ".", func(filePath string, d fs.DirEntry, err error) error {
if err != nil {
return err
}

if d.IsDir() {
return nil
}

// Skip talm subdirectories in preset charts (cozystack/charts/talm, generic/charts/talm)
// but include files from the main talm chart (talm/templates/_helpers.tpl, etc.)
if strings.HasPrefix(filePath, "cozystack/charts/talm/") ||
strings.HasPrefix(filePath, "generic/charts/talm/") {
return nil
}

// Read file content
data, err := embeddedCharts.ReadFile(filePath)
if err != nil {
return err
}

content := string(data)

// For Chart.yaml files, replace name and version with %s
if path.Base(filePath) == "Chart.yaml" {
content = regex.ReplaceAllString(content, "$1: %s")
}

// Use the file path as-is (relative to charts directory)
filesMap[filePath] = content

return nil
})

if err != nil {
return nil, err
}

return filesMap, nil
}

// AvailablePresets returns a list of available preset chart names.
// The "generic" preset is always first if it exists.
func AvailablePresets() ([]string, error) {
var presets []string
var hasGeneric bool

entries, err := embeddedCharts.ReadDir(".")
if err != nil {
return nil, err
}

for _, entry := range entries {
if !entry.IsDir() {
continue
}

name := entry.Name()
// Skip talm as it's a library chart, not a preset
if name == "talm" {
continue
}

if name == "generic" {
hasGeneric = true
} else {
presets = append(presets, name)
}
}

// Put generic first if it exists
if hasGeneric {
presets = append([]string{"generic"}, presets...)
}

return presets, nil
}

2 changes: 0 additions & 2 deletions main.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
//go:generate go run tools/generate_presets.go

package main

import (
Expand Down
30 changes: 22 additions & 8 deletions pkg/commands/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,12 @@ var initCmd = &cobra.Command{
return fmt.Errorf("failed to create secrets bundle: %w", err)
}
var genOptions []generate.Option //nolint:prealloc
if !isValidPreset(initCmdFlags.preset) {
return fmt.Errorf("invalid preset: %s. Valid presets are: %s", initCmdFlags.preset, generated.AvailablePresets)
availablePresets, err := generated.AvailablePresets()
if err != nil {
return fmt.Errorf("failed to get available presets: %w", err)
}
if !isValidPreset(initCmdFlags.preset, availablePresets) {
return fmt.Errorf("invalid preset: %s. Valid presets are: %v", initCmdFlags.preset, availablePresets)
}
if initCmdFlags.talosVersion != "" {
var versionContract *config.VersionContract
Expand Down Expand Up @@ -112,7 +116,12 @@ var initCmd = &cobra.Command{
return fmt.Errorf("failed to create nodes directory: %w", err)
}

for path, content := range generated.PresetFiles {
presetFiles, err := generated.PresetFiles()
if err != nil {
return fmt.Errorf("failed to get preset files: %w", err)
}

for path, content := range presetFiles {
parts := strings.SplitN(path, "/", 2)
chartName := parts[0]
// Write preset files
Expand Down Expand Up @@ -167,13 +176,18 @@ func updateTalmLibraryChart() error {
return fmt.Errorf("failed to remove existing talm chart directory: %w", err)
}

content, exists := generated.PresetFiles["talm/Chart.yaml"]
presetFiles, err := generated.PresetFiles()
if err != nil {
return fmt.Errorf("failed to get preset files: %w", err)
}

content, exists := presetFiles["talm/Chart.yaml"]
if !exists {
return fmt.Errorf("talm chart preset not found")
}

file := filepath.Join(talmChartDir, "Chart.yaml")
err := writeToDestination([]byte(fmt.Sprintf(content, "talm", Config.InitOptions.Version)), file, 0o644)
err = writeToDestination([]byte(fmt.Sprintf(content, "talm", Config.InitOptions.Version)), file, 0o644)
if err != nil {
return err
}
Expand All @@ -183,7 +197,7 @@ func updateTalmLibraryChart() error {
return fmt.Errorf("failed to remove existing talm chart directory: %w", err)
}

for path, content := range generated.PresetFiles {
for path, content := range presetFiles {
parts := strings.SplitN(path, "/", 2)
chartName := parts[0]
// Write library chart
Expand Down Expand Up @@ -213,8 +227,8 @@ func init() {
initCmd.MarkFlagRequired("preset")
}

func isValidPreset(preset string) bool {
for _, validPreset := range generated.AvailablePresets {
func isValidPreset(preset string, availablePresets []string) bool {
for _, validPreset := range availablePresets {
if preset == validPreset {
return true
}
Expand Down
Loading