Skip to content

Commit 4020922

Browse files
authored
Merge pull request #675 from jmpsec/version-cli-tls-fix
Fix for `--version` in `osctrl-tls`
2 parents 739e73c + 2ccd889 commit 4020922

File tree

4 files changed

+51
-25
lines changed

4 files changed

+51
-25
lines changed

.goreleaser.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@ builds:
2525
- arm64
2626
ldflags:
2727
- -s -w
28-
- -X main.version={{.Version}}
29-
- -X main.commit={{.Commit}}
30-
- -X main.date={{.Date}}
28+
- -X main.buildVersion={{.Version}}
29+
- -X main.buildCommit={{.Commit}}
30+
- -X main.buildDate={{.Date}}
3131

3232
- id: osctrl-admin
3333
main: ./cmd/admin

Makefile

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ OUTPUT = bin
2424
DIST = dist
2525

2626
STATIC_ARGS = -ldflags "-linkmode external -extldflags -static"
27+
BUILD_ARGS = -ldflags "-X 'main.buildCommit=$(shell git rev-parse HEAD)' -X 'main.buildDate=$(shell date -u +%Y-%m-%dT%H:%M:%SZ)'"
2728

2829
.PHONY: build static clean tls admin cli api release release-build release-check release-init clean-dist
2930

@@ -43,11 +44,11 @@ static:
4344

4445
# Build TLS endpoint
4546
tls:
46-
go build -o $(OUTPUT)/$(TLS_NAME) $(TLS_CODE)
47+
go build $(BUILD_ARGS) -o $(OUTPUT)/$(TLS_NAME) $(TLS_CODE)
4748

4849
# Build TLS endpoint statically
4950
tls-static:
50-
go build $(STATIC_ARGS) -o $(OUTPUT)/$(TLS_NAME) -a $(TLS_CODE)
51+
go build $(BUILD_ARGS) $(STATIC_ARGS) -o $(OUTPUT)/$(TLS_NAME) -a $(TLS_CODE)
5152

5253
# Build Admin UI
5354
admin:
@@ -289,9 +290,9 @@ release:
289290

290291
# Build and test release locally
291292
release-test:
292-
release-build
293+
make release-build
293294
@echo "Testing built binaries..."
294-
@for binary in dist/*/osctrl-*; do \
295+
@for binary in dist/osctrl-*; do \
295296
if [ -f "$$binary" ] && [ -x "$$binary" ]; then \
296297
echo "Testing $$binary"; \
297298
$$binary --version || $$binary version || echo "No version flag available"; \

cmd/tls/main.go

Lines changed: 39 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,13 @@ const (
5353
defaultOnelinerExpiration bool = true
5454
)
5555

56+
// Build-time metadata (overridden via -ldflags "-X main.buildVersion=... -X main.buildCommit=... -X main.buildDate=...")
57+
var (
58+
buildVersion = serviceVersion
59+
buildCommit = "unknown"
60+
buildDate = "unknown"
61+
)
62+
5663
// Global variables
5764
var (
5865
err error
@@ -118,13 +125,13 @@ func loadConfiguration(file, service string) (config.JSONConfigurationService, e
118125
}
119126
// Check if values are valid
120127
if !validAuth[cfg.Auth] {
121-
return cfg, fmt.Errorf("Invalid auth method")
128+
return cfg, fmt.Errorf("invalid auth method")
122129
}
123130
if !validLogging[cfg.Logger] {
124-
return cfg, fmt.Errorf("Invalid logging method")
131+
return cfg, fmt.Errorf("invalid logging method")
125132
}
126133
if !validCarver[cfg.Carver] {
127-
return cfg, fmt.Errorf("Invalid carver method")
134+
return cfg, fmt.Errorf("invalid carver method")
128135
}
129136
// No errors!
130137
return cfg, nil
@@ -345,21 +352,21 @@ func cliAction(c *cli.Context) error {
345352
if flagParams.ConfigFlag {
346353
flagParams.ConfigValues, err = loadConfiguration(flagParams.ServiceConfigFile, config.ServiceTLS)
347354
if err != nil {
348-
return fmt.Errorf("Error loading %s - %w", flagParams.ServiceConfigFile, err)
355+
return fmt.Errorf("error loading %s - %w", flagParams.ServiceConfigFile, err)
349356
}
350357
}
351358
// Load db configuration if external JSON config file is used
352359
if flagParams.DBFlag {
353360
flagParams.DBConfigValues, err = backend.LoadConfiguration(flagParams.DBConfigFile, backend.DBKey)
354361
if err != nil {
355-
return fmt.Errorf("Failed to load DB configuration - %w", err)
362+
return fmt.Errorf("failed to load DB configuration - %w", err)
356363
}
357364
}
358365
// Load redis configuration if external JSON config file is used
359366
if flagParams.RedisFlag {
360367
flagParams.RedisConfigValues, err = cache.LoadConfiguration(flagParams.RedisConfigFile, cache.RedisKey)
361368
if err != nil {
362-
return fmt.Errorf("Failed to load redis configuration - %w", err)
369+
return fmt.Errorf("failed to load redis configuration - %w", err)
363370
}
364371
}
365372
// Load carver configuration if external JSON config file is used
@@ -370,7 +377,7 @@ func cliAction(c *cli.Context) error {
370377
carvers3, err = carves.CreateCarverS3File(flagParams.CarverConfigFile)
371378
}
372379
if err != nil {
373-
return fmt.Errorf("Failed to initiate s3 carver - %w", err)
380+
return fmt.Errorf("failed to initiate s3 carver - %w", err)
374381
}
375382
}
376383
return nil
@@ -409,10 +416,22 @@ func main() {
409416
app = cli.NewApp()
410417
app.Name = serviceName
411418
app.Usage = appDescription
412-
app.Version = serviceVersion
419+
app.Version = buildVersion
413420
app.Description = appDescription
414421
app.Flags = flags
415-
// Define this command for help to exit when help flag is passed
422+
423+
// Customize version output (supports `--version` and `version` command)
424+
cli.VersionPrinter = func(c *cli.Context) {
425+
fmt.Printf("%s version=%s commit=%s date=%s\n", serviceName, buildVersion, buildCommit, buildDate)
426+
}
427+
// Add -v alias to the global --version flag
428+
cli.VersionFlag = &cli.BoolFlag{
429+
Name: "version",
430+
Aliases: []string{"v"},
431+
Usage: "Print version information",
432+
}
433+
434+
// Define commands
416435
app.Commands = []*cli.Command{
417436
{
418437
Name: "help",
@@ -422,13 +441,19 @@ func main() {
422441
},
423442
},
424443
}
425-
app.Action = cliAction
444+
// Start service only for default action; version/help won't trigger this
445+
app.Action = func(c *cli.Context) error {
446+
if err := cliAction(c); err != nil {
447+
return err
448+
}
449+
// Initialize service logger
450+
initializeLoggers(flagParams.ConfigValues)
451+
// Service starts!
452+
osctrlService()
453+
return nil
454+
}
426455
if err := app.Run(os.Args); err != nil {
427456
fmt.Printf("app.Run error: %s", err.Error())
428457
os.Exit(1)
429458
}
430-
// Initialize service logger
431-
initializeLoggers(flagParams.ConfigValues)
432-
// Service starts!
433-
osctrlService()
434459
}

cmd/tls/settings.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,24 +12,24 @@ func loadingSettings(mgr *settings.Settings, cfg config.JSONConfigurationService
1212
// Check if service settings for accelerated seconds is ready
1313
if !mgr.IsValue(config.ServiceTLS, settings.AcceleratedSeconds, settings.NoEnvironmentID) {
1414
if err := mgr.NewIntegerValue(config.ServiceTLS, settings.AcceleratedSeconds, int64(defaultAccelerate), settings.NoEnvironmentID); err != nil {
15-
return fmt.Errorf("Failed to add %s to configuration: %w", settings.AcceleratedSeconds, err)
15+
return fmt.Errorf("failed to add %s to configuration: %w", settings.AcceleratedSeconds, err)
1616
}
1717
}
1818
// Check if service settings for environments refresh is ready
1919
if !mgr.IsValue(config.ServiceTLS, settings.RefreshEnvs, settings.NoEnvironmentID) {
2020
if err := mgr.NewIntegerValue(config.ServiceTLS, settings.RefreshEnvs, int64(defaultRefresh), settings.NoEnvironmentID); err != nil {
21-
return fmt.Errorf("Failed to add %s to configuration: %w", settings.RefreshEnvs, err)
21+
return fmt.Errorf("failed to add %s to configuration: %w", settings.RefreshEnvs, err)
2222
}
2323
}
2424
// Check if service settings for enroll/remove oneliner links is ready
2525
if !mgr.IsValue(config.ServiceTLS, settings.OnelinerExpiration, settings.NoEnvironmentID) {
2626
if err := mgr.NewBooleanValue(config.ServiceTLS, settings.OnelinerExpiration, defaultOnelinerExpiration, settings.NoEnvironmentID); err != nil {
27-
return fmt.Errorf("Failed to add %s to configuration: %w", settings.OnelinerExpiration, err)
27+
return fmt.Errorf("failed to add %s to configuration: %w", settings.OnelinerExpiration, err)
2828
}
2929
}
3030
// Write JSON config to settings
3131
if err := mgr.SetTLSJSON(cfg, settings.NoEnvironmentID); err != nil {
32-
return fmt.Errorf("Failed to add JSON values to configuration: %w", err)
32+
return fmt.Errorf("failed to add JSON values to configuration: %w", err)
3333
}
3434
return nil
3535
}

0 commit comments

Comments
 (0)