Skip to content

Commit d327dce

Browse files
authored
fix: source CI workflow func version from build (#4029)
The func CLI version in generated GitHub workflows was hardcoded to a specific release (knative-v1.22.0), meaning it would silently go stale as new releases shipped. FuncCliVersion is now sourced from version.Kver, which is set via ldflags at build time to the current release tag. The git describe suffix (e.g. "-22-g2871d3bf") is stripped so that dev builds between releases still emit a real, installable tag rather than a ref that does not exist on GitHub releases. When version.Kver is empty (plain go build without ldflags, or the package used as a library), the field falls back to DefaultFuncCliVersion.
1 parent c8d3610 commit d327dce

4 files changed

Lines changed: 21 additions & 8 deletions

File tree

cmd/config_ci.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package cmd
33
import (
44
"fmt"
55
"io"
6+
"regexp"
67
"strings"
78

89
"github.com/ory/viper"
@@ -11,8 +12,13 @@ import (
1112
"knative.dev/func/cmd/common"
1213
"knative.dev/func/pkg/ci/github"
1314
fn "knative.dev/func/pkg/functions"
15+
"knative.dev/func/pkg/version"
1416
)
1517

18+
// gitDescribeSuffix matches the "-N-gHASH" suffix produced by git describe
19+
// on commits that are not exactly on a release tag.
20+
var gitDescribeSuffix = regexp.MustCompile(`-\d+-g[0-9a-f]+$`)
21+
1622
// ciGeneratorFactory creates a CIGenerator from resolved CLI flag values.
1723
// Using a factory allows tests to capture the resolved config and inject
1824
// a mock generator without running the real implementation.
@@ -250,6 +256,7 @@ func newConfigAndLoadedFunc(
250256
RegistryUserVar: viper.GetString(registryUserVariableNameFlag),
251257
RegistryPassSecret: viper.GetString(registryPassSecretNameFlag),
252258
RegistryUrlVar: viper.GetString(registryUrlVariableNameFlag),
259+
FuncCliVersion: gitDescribeSuffix.ReplaceAllString(version.Kver, ""),
253260
RegistryLogin: viper.GetBool(registryLoginFlag),
254261
SelfHostedRunner: viper.GetBool(selfHostedRunnerFlag),
255262
RemoteBuild: viper.GetBool(remoteBuildFlag),

cmd/config_ci_int_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ func assertDefaultWorkflow(t *testing.T, actualGw string) {
231231

232232
assert.Assert(t, yamlContains(actualGw, "Install func cli"))
233233
assert.Assert(t, yamlContains(actualGw, "functions-dev/action@main"))
234-
assert.Assert(t, yamlContains(actualGw, "version: knative-v1.22.0"))
234+
assert.Assert(t, yamlContains(actualGw, "version: "+github.DefaultFuncCliVersion))
235235
assert.Assert(t, yamlContains(actualGw, "name: func"))
236236

237237
assert.Assert(t, yamlContains(actualGw, "Deploy function"))

pkg/ci/github/generator_test.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -566,6 +566,7 @@ func defaultOpts() opts {
566566
RegistryUserVar: github.DefaultRegistryUserVariableName,
567567
RegistryPassSecret: github.DefaultRegistryPassSecretName,
568568
RegistryUrlVar: github.DefaultRegistryUrlVariableName,
569+
FuncCliVersion: github.DefaultFuncCliVersion,
569570
RegistryLogin: github.DefaultRegistryLogin,
570571
SelfHostedRunner: github.DefaultSelfHostedRunner,
571572
RemoteBuild: github.DefaultRemoteBuild,
@@ -643,7 +644,7 @@ func assertDefaultWorkflow(t *testing.T, actualGw string) {
643644

644645
assert.Assert(t, yamlContains(actualGw, "Install func cli"))
645646
assert.Assert(t, yamlContains(actualGw, "functions-dev/action@main"))
646-
assert.Assert(t, yamlContains(actualGw, "version: knative-v1.22.0"))
647+
assert.Assert(t, yamlContains(actualGw, "version: "+github.DefaultFuncCliVersion))
647648
assert.Assert(t, yamlContains(actualGw, "name: func"))
648649

649650
assert.Assert(t, yamlContains(actualGw, "Deploy function"))
@@ -676,7 +677,7 @@ func assertSemiDefaultWorkflow(t *testing.T, actualGw string) {
676677

677678
assert.Assert(t, yamlContains(actualGw, "Install func cli"))
678679
assert.Assert(t, yamlContains(actualGw, "functions-dev/action@main"))
679-
assert.Assert(t, yamlContains(actualGw, "version: knative-v1.22.0"))
680+
assert.Assert(t, yamlContains(actualGw, "version: "+github.DefaultFuncCliVersion))
680681
assert.Assert(t, yamlContains(actualGw, "name: func"))
681682

682683
assert.Assert(t, yamlContains(actualGw, "Deploy function"))

pkg/ci/github/workflow.go

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import (
1414
var ErrWorkflowExists = errors.New("existing GitHub workflow detected, overwrite using the --force option")
1515

1616
const (
17-
defaultFuncCliVersion = "knative-v1.22.0"
17+
DefaultFuncCliVersion = "knative-v1.23.0"
1818
DefaultPlatform = "github"
1919
DefaultGitHubWorkflowDir = ".github/workflows"
2020
DefaultGitHubWorkflowFilename = "func-deploy.yaml"
@@ -45,7 +45,8 @@ type WorkflowConfig struct {
4545
RegistryLoginUrlVar,
4646
RegistryUserVar,
4747
RegistryPassSecret,
48-
RegistryUrlVar string
48+
RegistryUrlVar,
49+
FuncCliVersion string
4950
RegistryLogin,
5051
SelfHostedRunner,
5152
RemoteBuild,
@@ -74,6 +75,7 @@ func defaultWorkflowConfig() WorkflowConfig {
7475
RegistryUserVar: DefaultRegistryUserVariableName,
7576
RegistryPassSecret: DefaultRegistryPassSecretName,
7677
RegistryUrlVar: DefaultRegistryUrlVariableName,
78+
FuncCliVersion: DefaultFuncCliVersion,
7779
RegistryLogin: DefaultRegistryLogin,
7880
SelfHostedRunner: DefaultSelfHostedRunner,
7981
RemoteBuild: DefaultRemoteBuild,
@@ -111,6 +113,9 @@ func setEmptyFieldsToDefaults(defaults WorkflowConfig) WorkflowConfig {
111113
if defaults.RegistryUrlVar == "" {
112114
defaults.RegistryUrlVar = DefaultRegistryUrlVariableName
113115
}
116+
if defaults.FuncCliVersion == "" {
117+
defaults.FuncCliVersion = DefaultFuncCliVersion
118+
}
114119

115120
return defaults
116121
}
@@ -149,7 +154,7 @@ func newGitHubWorkflow(cfg WorkflowConfig, runtime string, messageWriter io.Writ
149154
steps = createRuntimeTestStep(cfg, runtime, messageWriter, steps)
150155
steps = createK8ContextStep(cfg, steps)
151156
steps = createRegistryLoginStep(cfg, steps)
152-
steps = createFuncCLIInstallStep(steps)
157+
steps = createFuncCLIInstallStep(cfg, steps)
153158

154159
steps, err := createFuncDeployStep(cfg, runtime, steps)
155160
if err != nil {
@@ -223,10 +228,10 @@ func createRegistryLoginStep(opts WorkflowConfig, steps []step) []step {
223228
return append(steps, *loginToContainerRegistry)
224229
}
225230

226-
func createFuncCLIInstallStep(steps []step) []step {
231+
func createFuncCLIInstallStep(cfg WorkflowConfig, steps []step) []step {
227232
installFuncCli := newStep("Install func cli").
228233
withUses("functions-dev/action@main").
229-
withActionConfig("version", defaultFuncCliVersion).
234+
withActionConfig("version", cfg.FuncCliVersion).
230235
withActionConfig("name", "func")
231236

232237
return append(steps, *installFuncCli)

0 commit comments

Comments
 (0)