mirror of
https://github.com/caddyserver/xcaddy.git
synced 2024-11-20 08:10:04 +00:00
Add XCADDY_GO_BUILD_FLAGS env var (#104)
Add environment variable XCADDY_GO_BUILD_FLAGS to override default build arguments from environment (#102). To support flags with variable arguments Unix-style quoting is supported.
This commit is contained in:
parent
a83fac18bf
commit
47f9ded5d8
6 changed files with 26 additions and 5 deletions
|
@ -157,6 +157,7 @@ Because the subcommands and flags are constrained to benefit rapid plugin protot
|
||||||
- `XCADDY_SKIP_BUILD=1` causes xcaddy to not compile the program, it is used in conjunction with build tools such as [GoReleaser](https://goreleaser.com). Implies `XCADDY_SKIP_CLEANUP=1`.
|
- `XCADDY_SKIP_BUILD=1` causes xcaddy to not compile the program, it is used in conjunction with build tools such as [GoReleaser](https://goreleaser.com). Implies `XCADDY_SKIP_CLEANUP=1`.
|
||||||
- `XCADDY_SKIP_CLEANUP=1` causes xcaddy to leave build artifacts on disk after exiting.
|
- `XCADDY_SKIP_CLEANUP=1` causes xcaddy to leave build artifacts on disk after exiting.
|
||||||
- `XCADDY_WHICH_GO` sets the go command to use when for example more then 1 version of go is installed.
|
- `XCADDY_WHICH_GO` sets the go command to use when for example more then 1 version of go is installed.
|
||||||
|
- `XCADDY_GO_BUILD_FLAGS` overrides default build arguments. Supports Unix-style shell quoting, for example: XCADDY_GO_BUILD_FLAGS="-ldflags '-w s'".
|
||||||
---
|
---
|
||||||
|
|
||||||
© 2020 Matthew Holt
|
© 2020 Matthew Holt
|
||||||
|
|
11
builder.go
11
builder.go
|
@ -30,6 +30,7 @@ import (
|
||||||
|
|
||||||
"github.com/Masterminds/semver/v3"
|
"github.com/Masterminds/semver/v3"
|
||||||
"github.com/caddyserver/xcaddy/internal/utils"
|
"github.com/caddyserver/xcaddy/internal/utils"
|
||||||
|
"github.com/google/shlex"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Builder can produce a custom Caddy build with the
|
// Builder can produce a custom Caddy build with the
|
||||||
|
@ -45,6 +46,7 @@ type Builder struct {
|
||||||
SkipCleanup bool `json:"skip_cleanup,omitempty"`
|
SkipCleanup bool `json:"skip_cleanup,omitempty"`
|
||||||
SkipBuild bool `json:"skip_build,omitempty"`
|
SkipBuild bool `json:"skip_build,omitempty"`
|
||||||
Debug bool `json:"debug,omitempty"`
|
Debug bool `json:"debug,omitempty"`
|
||||||
|
BuildFlags string `json:"build_flags,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// Build builds Caddy at the configured version with the
|
// Build builds Caddy at the configured version with the
|
||||||
|
@ -114,12 +116,21 @@ func (b Builder) Build(ctx context.Context, outputFile string) error {
|
||||||
if b.Debug {
|
if b.Debug {
|
||||||
// support dlv
|
// support dlv
|
||||||
cmd.Args = append(cmd.Args, "-gcflags", "all=-N -l")
|
cmd.Args = append(cmd.Args, "-gcflags", "all=-N -l")
|
||||||
|
} else {
|
||||||
|
if b.BuildFlags != "" {
|
||||||
|
// override build flags from environment if given
|
||||||
|
flags, err := shlex.Split(b.BuildFlags)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("[FATAL] Splitting arguments failed: %s", b.BuildFlags)
|
||||||
|
}
|
||||||
|
cmd.Args = append(cmd.Args, flags...)
|
||||||
} else {
|
} else {
|
||||||
cmd.Args = append(cmd.Args,
|
cmd.Args = append(cmd.Args,
|
||||||
"-ldflags", "-w -s", // trim debug symbols
|
"-ldflags", "-w -s", // trim debug symbols
|
||||||
"-trimpath",
|
"-trimpath",
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if b.RaceDetector {
|
if b.RaceDetector {
|
||||||
cmd.Args = append(cmd.Args, "-race")
|
cmd.Args = append(cmd.Args, "-race")
|
||||||
|
|
|
@ -40,6 +40,7 @@ var (
|
||||||
skipBuild = os.Getenv("XCADDY_SKIP_BUILD") == "1"
|
skipBuild = os.Getenv("XCADDY_SKIP_BUILD") == "1"
|
||||||
skipCleanup = os.Getenv("XCADDY_SKIP_CLEANUP") == "1" || skipBuild
|
skipCleanup = os.Getenv("XCADDY_SKIP_CLEANUP") == "1" || skipBuild
|
||||||
buildDebugOutput = os.Getenv("XCADDY_DEBUG") == "1"
|
buildDebugOutput = os.Getenv("XCADDY_DEBUG") == "1"
|
||||||
|
buildFlags = os.Getenv("XCADDY_GO_BUILD_FLAGS")
|
||||||
)
|
)
|
||||||
|
|
||||||
func Main() {
|
func Main() {
|
||||||
|
@ -134,6 +135,7 @@ func runBuild(ctx context.Context, args []string) error {
|
||||||
SkipBuild: skipBuild,
|
SkipBuild: skipBuild,
|
||||||
SkipCleanup: skipCleanup,
|
SkipCleanup: skipCleanup,
|
||||||
Debug: buildDebugOutput,
|
Debug: buildDebugOutput,
|
||||||
|
BuildFlags: buildFlags,
|
||||||
}
|
}
|
||||||
err := builder.Build(ctx, output)
|
err := builder.Build(ctx, output)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -98,6 +98,7 @@ func (b Builder) newEnvironment(ctx context.Context) (*environment, error) {
|
||||||
tempFolder: tempFolder,
|
tempFolder: tempFolder,
|
||||||
timeoutGoGet: b.TimeoutGet,
|
timeoutGoGet: b.TimeoutGet,
|
||||||
skipCleanup: b.SkipCleanup,
|
skipCleanup: b.SkipCleanup,
|
||||||
|
buildFlags: b.BuildFlags,
|
||||||
}
|
}
|
||||||
|
|
||||||
// initialize the go module
|
// initialize the go module
|
||||||
|
@ -177,6 +178,7 @@ type environment struct {
|
||||||
tempFolder string
|
tempFolder string
|
||||||
timeoutGoGet time.Duration
|
timeoutGoGet time.Duration
|
||||||
skipCleanup bool
|
skipCleanup bool
|
||||||
|
buildFlags string
|
||||||
}
|
}
|
||||||
|
|
||||||
// Close cleans up the build environment, including deleting
|
// Close cleans up the build environment, including deleting
|
||||||
|
|
5
go.mod
5
go.mod
|
@ -2,4 +2,7 @@ module github.com/caddyserver/xcaddy
|
||||||
|
|
||||||
go 1.14
|
go 1.14
|
||||||
|
|
||||||
require github.com/Masterminds/semver/v3 v3.1.1
|
require (
|
||||||
|
github.com/Masterminds/semver/v3 v3.1.1
|
||||||
|
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510
|
||||||
|
)
|
||||||
|
|
2
go.sum
2
go.sum
|
@ -1,2 +1,4 @@
|
||||||
github.com/Masterminds/semver/v3 v3.1.1 h1:hLg3sBzpNErnxhQtUy/mmLR2I9foDujNK030IGemrRc=
|
github.com/Masterminds/semver/v3 v3.1.1 h1:hLg3sBzpNErnxhQtUy/mmLR2I9foDujNK030IGemrRc=
|
||||||
github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs=
|
github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs=
|
||||||
|
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4=
|
||||||
|
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ=
|
||||||
|
|
Loading…
Reference in a new issue