Skip to content

gythialy/golang-cross

Repository files navigation

golang-cross Actions Status

Docker container to do cross compilation (Linux, windows, macOS, ARM, ARM64) of go packages including support for cgo.

Docker images

Pre-built Images

  • golang-cross
    docker pull ghcr.io/gythialy/golang-cross:latest
    
  • golang-cross-builder
    docker pull ghcr.io/gythialy/golang-cross-builder:v1.22.0-0-bullseye
    docker pull ghcr.io/gythialy/golang-cross-builder:v1.17.1
    

Build your own

  • Build base image (optional)

    docker build -f Dockerfile_builder -t ghcr.io/gythialy/golang-cross-builder:v1.17.1 .
    # if running docker on M1 (arm64) macOS:
    docker build --platform linux/amd64 -f Dockerfile.builder -t ghcr.io/gythialy/golang-cross-builder:v1.18 .
    

    Note: Pack the SDK first or use GitHub Action

  • Build golang-cross image

    docker build --build-arg GO_VERSION=1.22.0 \
      --build-arg OS_CODENAME=bullseye \
      --build-arg GOLANG_DIST_SHA=542e936b19542e62679766194364f45141fde55169db2d8d01046555ca9eb4b8 \
      --build-arg GORELEASER_VERSION=1.24.0 \
      --build-arg GORELEASER_SHA=4b7d2f1e59ead8047fcef795d66236ff6f8cfe7302c1ff8fb31bd360a3c6f32e \
      -f Dockerfile \
      -t ghcr.io/gythialy/golang-cross:latest .
    

    Override default arguments with --build-arg

Usage

  • Prepare GoReleaser configuration

  • Set up GPG signing (optional), if enable the signing feature

    export PRIVATE_KEY=$(cat ~/private_key.gpg | base64)
  • Build the binaries:

    export GO_BUILDER_VERSION=v1.17.1;
    docker run --rm --privileged \
      -e PRIVATE_KEY=$(PRIVATE_KEY) \
      -v $(CURDIR):/golang-cross-example \
      -v /var/run/docker.sock:/var/run/docker.sock \
      -v $(GOPATH)/src:/go/src \
      -w /golang-cross-example \
      ghcr.io/gythialy/golang-cross:$(GO_BUILDER_VERSION) --snapshot --rm-dist

Examples

Alternative projects