From 8091a1186fdfdd1bd39f9d4decbb4c70a010e4a3 Mon Sep 17 00:00:00 2001 From: Virgil Date: Wed, 1 Apr 2026 16:17:27 +0000 Subject: [PATCH] fix(build): propagate env to wails builds --- pkg/build/builders/wails.go | 4 +-- pkg/build/builders/wails_test.go | 49 ++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 2 deletions(-) diff --git a/pkg/build/builders/wails.go b/pkg/build/builders/wails.go index c313c92..693d771 100644 --- a/pkg/build/builders/wails.go +++ b/pkg/build/builders/wails.go @@ -117,7 +117,7 @@ func (b *WailsBuilder) PreBuild(ctx context.Context, cfg *build.Config) error { return nil } - output, err := ax.CombinedOutput(ctx, frontendDir, nil, command, args...) + output, err := ax.CombinedOutput(ctx, frontendDir, cfg.Env, command, args...) if err != nil { return coreerr.E("WailsBuilder.PreBuild", command+" build failed: "+output, err) } @@ -242,7 +242,7 @@ func (b *WailsBuilder) buildV2Target(ctx context.Context, cfg *build.Config, tar // For now, let's try to let Wails do its thing and find the artifact. // Capture output for error messages - output, err := ax.CombinedOutput(ctx, cfg.ProjectDir, nil, wailsCommand, args...) + output, err := ax.CombinedOutput(ctx, cfg.ProjectDir, cfg.Env, wailsCommand, args...) if err != nil { return build.Artifact{}, coreerr.E("WailsBuilder.buildV2Target", "wails build failed: "+output, err) } diff --git a/pkg/build/builders/wails_test.go b/pkg/build/builders/wails_test.go index 5063eac..828757a 100644 --- a/pkg/build/builders/wails_test.go +++ b/pkg/build/builders/wails_test.go @@ -96,6 +96,9 @@ sequence_file="${BUILD_SEQUENCE_FILE:-}" if [ -n "$sequence_file" ]; then printf '%s\n' "wails" >> "$sequence_file" printf '%s\n' "$@" >> "$sequence_file" + if [ -n "${CUSTOM_ENV:-}" ]; then + printf '%s\n' "CUSTOM_ENV=${CUSTOM_ENV}" >> "$sequence_file" + fi fi output_dir="build/bin" @@ -119,6 +122,9 @@ sequence_file="${BUILD_SEQUENCE_FILE:-}" if [ -n "$sequence_file" ]; then printf '%s\n' "__NAME__" >> "$sequence_file" printf '%s\n' "$@" >> "$sequence_file" + if [ -n "${CUSTOM_ENV:-}" ]; then + printf '%s\n' "CUSTOM_ENV=${CUSTOM_ENV}" >> "$sequence_file" + fi fi `, "__NAME__", name) @@ -484,6 +490,49 @@ func TestWails_WailsBuilderBuildV2PreBuild_Good(t *testing.T) { assert.Equal(t, "wails", lines[3]) } +func TestWails_WailsBuilderPropagatesEnvToExternalCommands_Good(t *testing.T) { + if testing.Short() { + t.Skip("skipping integration test in short mode") + } + + binDir := t.TempDir() + setupFakeFrontendCommand(t, binDir, "deno") + setupFakeWailsToolchain(t, binDir) + t.Setenv("PATH", binDir+string(os.PathListSeparator)+os.Getenv("PATH")) + + projectDir := setupWailsV2TestProject(t) + frontendDir := ax.Join(projectDir, "frontend") + require.NoError(t, ax.MkdirAll(frontendDir, 0o755)) + require.NoError(t, ax.WriteFile(ax.Join(frontendDir, "deno.json"), []byte(`{}`), 0o644)) + require.NoError(t, ax.WriteFile(ax.Join(frontendDir, "package.json"), []byte(`{}`), 0o644)) + + sequencePath := ax.Join(t.TempDir(), "build-sequence.log") + t.Setenv("BUILD_SEQUENCE_FILE", sequencePath) + t.Setenv("CUSTOM_ENV", "expected-value") + + builder := NewWailsBuilder() + cfg := &build.Config{ + FS: io.Local, + ProjectDir: projectDir, + OutputDir: t.TempDir(), + Name: "testapp", + Env: []string{"CUSTOM_ENV=expected-value"}, + } + targets := []build.Target{ + {OS: runtime.GOOS, Arch: runtime.GOARCH}, + } + + artifacts, err := builder.Build(context.Background(), cfg, targets) + require.NoError(t, err) + require.Len(t, artifacts, 1) + + content, err := ax.ReadFile(sequencePath) + require.NoError(t, err) + + lines := strings.Split(strings.TrimSpace(string(content)), "\n") + require.Contains(t, lines, "CUSTOM_ENV=expected-value") +} + func TestWails_WailsBuilderResolveWailsCli_Good(t *testing.T) { builder := NewWailsBuilder() fallbackDir := t.TempDir()