Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Test cross platform
pgroll
builds in the CI workflow (#525)
Building `pgroll` now requires a functioning C toolchain on each platform we aim to support, due to taking a dependency on [pg_query_go](https://github.com/pganalyze/pg_query_go) for the `sql2pgroll` package: [pg_query_go](https://github.com/pganalyze/pg_query_go) requires `CGO_ENABLED` to build. This PR adds a new `cross-build` job in the CI workflow to build `pgroll` binaries for each of our supported platforms: * `linux/amd64` * `linux/arm64` * `darwin/amd64` * `darwin/arm64` * `windows/amd64` The job runs in a [goreleaser/goreleaser-cross](https://github.com/goreleaser/goreleaser-cross) container in order to have access to a functioning C toolchain for each of the above platforms. The `builds` section of the`.goreleaser.yaml` config file is extended with an `overrides` section to configure the C compiler for each platform build: ```yaml - goos: windows goarch: amd64 env: - CC=x86_64-w64-mingw32-gcc - CGO_LDFLAGS=-lssp -static - goos: linux goarch: amd64 env: - CC=x86_64-linux-gnu-gcc - goos: linux goarch: arm64 env: - CC=aarch64-linux-gnu-gcc - goos: darwin goarch: amd64 env: - CC=o64-clang - goos: darwin goarch: arm64 env: - CC=oa64-clang ``` The values for the `CC` env var set the C compiler to use for each OS/Arch target and are taken from the [goreleaser-cross docs](https://github.com/goreleaser/goreleaser-cross?tab=readme-ov-file#supported-toolchainsplatforms). The Windows build requires extra linker flags: ``` CGO_LDFLAGS=-lssp -static ``` due to having to link to the libssp stack-protection library and statically link to avoid the runtime dependency on that library. The job runs in a `surjection/goreleaser-cross:v1.23-v2.4.8` container, which is NOT an official [goreleaser/goreleaser-cross](https://hub.docker.com/r/goreleaser/goreleaser-cross/tags) image. This image was built with this `Dockerfile`: ```dockerfile FROM goreleaser/goreleaser-cross:v1.23-v2.4.4 WORKDIR /tmp RUN wget https://github.com/goreleaser/goreleaser/releases/download/v2.4.8/goreleaser_Linux_x86_64.tar.gz \ && tar -xvzf goreleaser_Linux_x86_64.tar.gz \ && mv goreleaser /usr/bin/goreleaser WORKDIR / ``` ie it installs the latest version Goreleaser `2.4.8` into the most recent `goreleaser/goreleaser-cross` image. Once a `goreleaser/goreleaser-cross` image using `goreleaser` `2.4.8` is released we can switch back to the official images. Version `2.4.8` is required due to a bug in earlier `goreleaser` versions that prevents the `overrides` section in the `.goreleaser.yaml` file from working (goreleaser/goreleaser#5298). A `.zip` file containing the binaries for each supported platform is uploaded as an artifact at the end of the job.
- Loading branch information