Skip to content

Commit d1635be

Browse files
committed
feat: use pv-migrate version as the helm chart version
So the manifests on the cluster would clearly reflect the pv-migrate version. Signed-off-by: Utku Ozdemir <utkuozdemir@gmail.com>
1 parent b83a9a1 commit d1635be

11 files changed

Lines changed: 90 additions & 12 deletions

File tree

Taskfile.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@ tasks:
88
sh: head -n 1 go.mod | cut -d' ' -f2
99
cmds:
1010
- go mod tidy
11+
- go fix ./...
1112
- golangci-lint run --fix ./...
13+
- golangci-lint fmt ./...
1214
- shfmt -l -i 2 -ci -sr -w .
1315

1416
lint:

integration/integration_test.go

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ var (
8080
"cat /volume/restricted_dir/hidden.txt"
8181

8282
clearRestrictedDataShellCommand = "rm -f /volume/root_only.txt && rm -rf /volume/restricted_dir"
83-
generateExtraDataShellCommand = fmt.Sprintf("echo -n %s > %s",
83+
generateExtraDataShellCommand = fmt.Sprintf("echo -n %s > %s",
8484
generateDataContent, extraDataFilePath)
8585
printDataUIDGIDContentShellCommand = fmt.Sprintf(
8686
"stat -c '%%u' %s && stat -c '%%g' %s && cat %s",
@@ -336,7 +336,15 @@ func testCustomRsyncArgs(t *testing.T) {
336336
require.NoError(t, err)
337337

338338
cmdArgs := strings.Fields(fmt.Sprintf("%s -i -n %s -N %s", defaultHelmArgs(t), ns1, ns1))
339-
cmdArgs = append(cmdArgs, "--helm-set", "rsync.extraArgs=--partial --inplace --sparse", "--source", "source", "--dest", "dest")
339+
cmdArgs = append(
340+
cmdArgs,
341+
"--helm-set",
342+
"rsync.extraArgs=--partial --inplace --sparse",
343+
"--source",
344+
"source",
345+
"--dest",
346+
"dest",
347+
)
340348

341349
require.NoError(t, runCliAppWithArgs(ctx, t, cmdArgs...))
342350

@@ -365,7 +373,12 @@ func testSameNSLoadBalancer(t *testing.T) {
365373
_, err := execInPod(ctx, mainClusterCli, ns1, "dest", generateExtraDataShellCommand)
366374
require.NoError(t, err)
367375

368-
cmd := fmt.Sprintf("%s -s loadbalancer -i -n %s -N %s --loadbalancer-timeout 5m --source source --dest dest", defaultHelmArgs(t), ns1, ns1)
376+
cmd := fmt.Sprintf(
377+
"%s -s loadbalancer -i -n %s -N %s --loadbalancer-timeout 5m --source source --dest dest",
378+
defaultHelmArgs(t),
379+
ns1,
380+
ns1,
381+
)
369382
require.NoError(t, runCliApp(ctx, t, cmd))
370383

371384
stdout, err := execInPod(ctx, mainClusterCli, ns1, "dest", printDataUIDGIDContentShellCommand)

internal/app/migrate.go

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,35 @@ import (
1717
"github.com/utkuozdemir/pv-migrate/pvmigrate"
1818
)
1919

20+
// isReleaseVersion reports whether version looks like a real GoReleaser release
21+
// (e.g. "2.3.0", "2.3.0-rc.1") as opposed to a dev or snapshot build.
22+
func isReleaseVersion(version string) bool {
23+
return version != "" && !strings.Contains(version, "SNAPSHOT") && !strings.Contains(version, "dev")
24+
}
25+
2026
// releaseImageTag returns the version as an image tag suitable for Docker images.
2127
// GoReleaser sets version without the "v" prefix (e.g. "2.3.0", "2.3.0-rc.1",
2228
// "2.2.1-SNAPSHOT-43a0f03"), while local builds default to "dev".
2329
// Returns empty string for dev and snapshot builds.
2430
func releaseImageTag(version string) string {
25-
if version == "" || strings.Contains(version, "SNAPSHOT") || strings.Contains(version, "dev") {
31+
if !isReleaseVersion(version) {
2632
return ""
2733
}
2834

2935
return "v" + version
3036
}
3137

38+
// releaseChartVersion returns the version for the embedded Helm chart metadata.
39+
// Returns empty string for dev and snapshot builds, letting the chart's built-in
40+
// version (0.0.0) remain unchanged.
41+
func releaseChartVersion(version string) string {
42+
if !isReleaseVersion(version) {
43+
return ""
44+
}
45+
46+
return version
47+
}
48+
3249
const (
3350
FlagLogLevel = "log-level"
3451
FlagLogFormat = "log-format"
@@ -99,6 +116,7 @@ func BuildMigrateCmd(ctx context.Context, version, commit, date string, logger *
99116
var migration pvmigrate.Migration
100117

101118
migration.ImageTag = releaseImageTag(version)
119+
migration.ChartVersion = releaseChartVersion(version)
102120
migration.ApplyDefaults()
103121
migration.ShowProgressBar = isATTY
104122

internal/app/release_image_tag_test.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,3 +40,25 @@ func TestReleaseImageTag(t *testing.T) {
4040
})
4141
}
4242
}
43+
44+
func TestReleaseChartVersion(t *testing.T) {
45+
t.Parallel()
46+
47+
tests := []struct {
48+
version string
49+
expected string
50+
}{
51+
{"2.3.0", "2.3.0"},
52+
{"2.3.0-rc.1", "2.3.0-rc.1"},
53+
{"2.2.1-SNAPSHOT-43a0f03", ""},
54+
{"dev", ""},
55+
{"", ""},
56+
}
57+
58+
for _, tt := range tests {
59+
t.Run(tt.version, func(t *testing.T) {
60+
t.Parallel()
61+
assert.Equal(t, tt.expected, releaseChartVersion(tt.version))
62+
})
63+
}
64+
}

internal/helm/helm.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,9 @@ var chartFS embed.FS
2222

2323
const rootDir = "pv-migrate"
2424

25-
// LoadChart loads the embedded Helm chart.
26-
func LoadChart() (*chart.Chart, error) {
25+
// LoadChart loads the embedded Helm chart, overriding the chart metadata version
26+
// with the provided version string if non-empty.
27+
func LoadChart(version string) (*chart.Chart, error) {
2728
files, err := chartAsBufferedFiles()
2829
if err != nil {
2930
return nil, fmt.Errorf("failed to get chart files: %w", err)
@@ -34,6 +35,11 @@ func LoadChart() (*chart.Chart, error) {
3435
return nil, fmt.Errorf("failed to load chart: %w", err)
3536
}
3637

38+
if version != "" {
39+
helmChart.Metadata.Version = version
40+
helmChart.Metadata.AppVersion = version
41+
}
42+
3743
return helmChart, nil
3844
}
3945

internal/helm/helm_test.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,21 @@ import (
1212
func TestLoadChart(t *testing.T) {
1313
t.Parallel()
1414

15-
chart, err := helm.LoadChart()
15+
chart, err := helm.LoadChart("")
1616
require.NoError(t, err)
1717

1818
assert.Equal(t, "pv-migrate", chart.Metadata.Name)
1919
assert.NotEmpty(t, chart.Metadata.Version, "chart version should not be empty")
2020
assert.NotEmpty(t, chart.Values, "chart values should not be empty")
2121
assert.NotEmpty(t, chart.Templates, "chart templates should not be empty")
2222
}
23+
24+
func TestLoadChartVersionOverride(t *testing.T) {
25+
t.Parallel()
26+
27+
chart, err := helm.LoadChart("1.2.3")
28+
require.NoError(t, err)
29+
30+
assert.Equal(t, "1.2.3", chart.Metadata.Version)
31+
assert.Equal(t, "1.2.3", chart.Metadata.AppVersion)
32+
}

internal/helm/pv-migrate/Chart.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ apiVersion: v2
22
name: pv-migrate
33
description: The helm chart of pv-migrate
44
type: application
5-
version: 0.5.0
6-
appVersion: 0.5.0
5+
version: 0.0.0
6+
appVersion: 0.0.0
77
home: https://github.com/utkuozdemir/pv-migrate
88
keywords:
99
- pv-migrate

internal/helm/pv-migrate/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# pv-migrate
22

3-
![Version: 0.5.0](https://img.shields.io/badge/Version-0.5.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 0.5.0](https://img.shields.io/badge/AppVersion-0.5.0-informational?style=flat-square)
3+
![Version: 0.0.0](https://img.shields.io/badge/Version-0.0.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 0.0.0](https://img.shields.io/badge/AppVersion-0.0.0-informational?style=flat-square)
44

55
The helm chart of pv-migrate
66

internal/migration/types.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ type PVCInfo struct {
1919

2020
type Request struct {
2121
ImageTag string
22+
ChartVersion string
2223
Source PVCInfo
2324
Dest PVCInfo
2425
DeleteExtraneousFiles bool

internal/migrator/migrator.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ func (m *Migrator) Run(ctx context.Context, request *migration.Request, logger *
9494
func (m *Migrator) buildMigration(ctx context.Context, request *migration.Request,
9595
logger *slog.Logger,
9696
) (*migration.Migration, error) {
97-
chart, err := helm.LoadChart()
97+
chart, err := helm.LoadChart(request.ChartVersion)
9898
if err != nil {
9999
return nil, fmt.Errorf("failed to load helm chart: %w", err)
100100
}

0 commit comments

Comments
 (0)