From 4e9e2c3229b0446f262723cb6c37089f4e479661 Mon Sep 17 00:00:00 2001 From: Michael Eischer Date: Fri, 9 Jun 2023 13:23:49 +0200 Subject: [PATCH] CI: Use build-release-binaries to run the cross-compilation tests gox silently ignored linux/mips and aix/ppc64. This change also removes the duplicate platform list. --- .github/workflows/tests.yml | 33 +++++++------------------- helpers/build-release-binaries/main.go | 10 ++++++-- 2 files changed, 17 insertions(+), 26 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index aa6ba192a..9bca02f8d 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -201,27 +201,19 @@ jobs: cross_compile: strategy: - # ATTENTION: the list of architectures must be in sync with helpers/build-release-binaries/main.go! matrix: # run cross-compile in three batches parallel so the overall tests run faster - targets: - - "linux/386 linux/amd64 linux/arm linux/arm64 linux/ppc64le linux/mips linux/mipsle linux/mips64 linux/mips64le linux/riscv64 linux/s390x" - - - "openbsd/386 openbsd/amd64 \ - freebsd/386 freebsd/amd64 freebsd/arm \ - aix/ppc64 \ - darwin/amd64 darwin/arm64" - - - "netbsd/386 netbsd/amd64 \ - windows/386 windows/amd64 \ - solaris/amd64" + subset: + - "0/3" + - "1/3" + - "2/3" env: GOPROXY: https://proxy.golang.org runs-on: ubuntu-latest - name: Cross Compile for ${{ matrix.targets }} + name: Cross Compile for subset ${{ matrix.subset }} steps: - name: Set up Go ${{ env.latest_go }} @@ -229,21 +221,14 @@ jobs: with: go-version: ${{ env.latest_go }} - - name: Install gox - run: | - go install github.com/mitchellh/gox@latest - - name: Check out code uses: actions/checkout@v3 - - name: Cross-compile with gox for ${{ matrix.targets }} - env: - GOFLAGS: "-trimpath" - GOX_ARCHS: "${{ matrix.targets }}" + - name: Cross-compile for subset ${{ matrix.subset }} run: | - mkdir build-output - gox -parallel 2 -verbose -osarch "$GOX_ARCHS" -output "build-output/{{.Dir}}_{{.OS}}_{{.Arch}}" ./cmd/restic - gox -parallel 2 -verbose -osarch "$GOX_ARCHS" -tags debug -output "build-output/{{.Dir}}_{{.OS}}_{{.Arch}}_debug" ./cmd/restic + mkdir build-output build-output-debug + go run ./helpers/build-release-binaries/main.go -o build-output -s . --platform-subset ${{ matrix.subset }} + go run ./helpers/build-release-binaries/main.go -o build-output-debug -s . --platform-subset ${{ matrix.subset }} --tags debug lint: name: lint diff --git a/helpers/build-release-binaries/main.go b/helpers/build-release-binaries/main.go index 94269fe2c..914f8e858 100644 --- a/helpers/build-release-binaries/main.go +++ b/helpers/build-release-binaries/main.go @@ -20,6 +20,7 @@ var opts = struct { Verbose bool SourceDir string OutputDir string + Tags string PlatformSubset string Version string }{} @@ -28,6 +29,7 @@ func init() { pflag.BoolVarP(&opts.Verbose, "verbose", "v", false, "be verbose") pflag.StringVarP(&opts.SourceDir, "source", "s", "/restic", "path to the source code `directory`") pflag.StringVarP(&opts.OutputDir, "output", "o", "/output", "path to the output `directory`") + pflag.StringVar(&opts.Tags, "tags", "", "additional build `tags`") pflag.StringVar(&opts.PlatformSubset, "platform-subset", "", "specify `n/t` to only build this subset") pflag.StringVar(&opts.Version, "version", "", "use `x.y.z` as the version for output files") pflag.Parse() @@ -100,10 +102,15 @@ func build(sourceDir, outputDir, goos, goarch string) (filename string) { } outputFile := filepath.Join(outputDir, filename) + tags := "selfupdate" + if opts.Tags != "" { + tags += "," + opts.Tags + } + c := exec.Command("go", "build", "-o", outputFile, "-ldflags", "-s -w", - "-tags", "selfupdate", + "-tags", tags, "./cmd/restic", ) c.Stdout = os.Stdout @@ -225,7 +232,6 @@ func buildTargets(sourceDir, outputDir string, targets map[string][]string) { msg("build finished in %.3fs", time.Since(start).Seconds()) } -// ATTENTION: the list of architectures must be in sync with .github/workflows/tests.yml! var defaultBuildTargets = map[string][]string{ "aix": {"ppc64"}, "darwin": {"amd64", "arm64"},