From b04609e93246c2328fbba3953d8675628d059699 Mon Sep 17 00:00:00 2001 From: Goren G Date: Tue, 29 Aug 2023 09:10:39 +0800 Subject: [PATCH] feat: bump debian version to bookwarm - format files - update pack macOS SDK in README Signed-off-by: Goren G --- .github/workflows/builder.yml | 90 +++++++++++++------------- .github/workflows/osx-sdk.yaml | 12 +++- Dockerfile.builder | 113 +++++++++++++++++---------------- README.md | 3 +- example/.goreleaser.yml | 4 +- 5 files changed, 118 insertions(+), 104 deletions(-) diff --git a/.github/workflows/builder.yml b/.github/workflows/builder.yml index c3b06f8..90ca7b3 100644 --- a/.github/workflows/builder.yml +++ b/.github/workflows/builder.yml @@ -5,16 +5,16 @@ on: inputs: builder-tag: description: golang cross builder tag name - default: v1.21.0-1 + default: v1.21.0-2 golang-version: description: golang version - default: '1.21.0' + default: "1.21.0" osxcross-git-hash: description: git commit hash of osx-cross project - default: '3dcc13644cfaa3d7ea6a959acbe0f1a23cf2df72' + default: "3dcc13644cfaa3d7ea6a959acbe0f1a23cf2df72" osx-min-version: description: minimal macOS SDK deployment target - default: '10.12' + default: "10.12" jobs: build: runs-on: ubuntu-latest @@ -27,44 +27,44 @@ jobs: DOCKER_REGISTRY: "ghcr.io" steps: - - uses: actions/checkout@v3 - - uses: sigstore/cosign-installer@v3 - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 - - name: Get Repo Owner - id: get_repo_owner - run: echo "repo_owner=$(echo ${{ github.repository_owner }} | tr '[:upper:]' '[:lower:]')" >> $GITHUB_OUTPUT - - name: Docker meta - id: meta - uses: docker/metadata-action@v4 - with: - images: ghcr.io/${{ steps.get_repo_owner.outputs.repo_owner }}/golang-cross-builder - tags: | - type=raw,value=latest,enable={{is_default_branch}} - type=raw,value=${{ env.GOLANG_CROSS_TAG }} - - name: Login to GitHub Container Registry - uses: docker/login-action@v2 - with: - registry: ghcr.io - username: ${{ steps.get_repo_owner.outputs.repo_owner }} - password: ${{ secrets.GITHUB_TOKEN }} - - name: Build and push - uses: docker/build-push-action@v4 - id: buildpush - with: - context: . - file: Dockerfile.builder - push: ${{ github.event_name != 'pull_request' }} - build-args: | - GO_VERSION=${{ github.event.inputs.golang-version }} - OSX_VERSION_MIN=${{ github.event.inputs.osx-min-version }} - OSX_CROSS_COMMIT=${{ github.event.inputs.osxcross-git-hash }} - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} - cache-from: type=gha - cache-to: type=gha,mode=max - - name: Sign the images - run: | - echo "sign ${{ steps.buildpush.outputs.digest }}" - cosign sign --yes "ghcr.io/${{ steps.get_repo_owner.outputs.repo_owner }}/golang-cross-builder@${{ steps.buildpush.outputs.digest }}" - shell: bash + - uses: actions/checkout@v3 + - uses: sigstore/cosign-installer@v3 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + - name: Get Repo Owner + id: get_repo_owner + run: echo "repo_owner=$(echo ${{ github.repository_owner }} | tr '[:upper:]' '[:lower:]')" >> $GITHUB_OUTPUT + - name: Docker meta + id: meta + uses: docker/metadata-action@v4 + with: + images: ghcr.io/${{ steps.get_repo_owner.outputs.repo_owner }}/golang-cross-builder + tags: | + type=raw,value=latest,enable={{is_default_branch}} + type=raw,value=${{ env.GOLANG_CROSS_TAG }} + - name: Login to GitHub Container Registry + uses: docker/login-action@v2 + with: + registry: ghcr.io + username: ${{ steps.get_repo_owner.outputs.repo_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Build and push + uses: docker/build-push-action@v4 + id: buildpush + with: + context: . + file: Dockerfile.builder + push: ${{ github.event_name != 'pull_request' }} + build-args: | + GO_VERSION=${{ github.event.inputs.golang-version }} + OSX_VERSION_MIN=${{ github.event.inputs.osx-min-version }} + OSX_CROSS_COMMIT=${{ github.event.inputs.osxcross-git-hash }} + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + cache-from: type=gha + cache-to: type=gha,mode=max + - name: Sign the images + run: | + echo "sign ${{ steps.buildpush.outputs.digest }}" + cosign sign --yes "ghcr.io/${{ steps.get_repo_owner.outputs.repo_owner }}/golang-cross-builder@${{ steps.buildpush.outputs.digest }}" + shell: bash diff --git a/.github/workflows/osx-sdk.yaml b/.github/workflows/osx-sdk.yaml index 513a281..b64e38e 100644 --- a/.github/workflows/osx-sdk.yaml +++ b/.github/workflows/osx-sdk.yaml @@ -19,7 +19,17 @@ jobs: # with: # xcode-version: latest - name: Set up Docker - uses: douglascamata/setup-docker-macos-action@v1-alpha + uses: crazy-max/ghaction-setup-docker@v1.4.0 + env: + SIGN_QEMU_BINARY: 1 + COLIMA_START_ARGS: --cpu 4 --memory 8 --disk 32 + daemon-config: | + { + "debug": true, + "features": { + "containerd-snapshotter": true + } + } - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 - uses: actions/checkout@v3 diff --git a/Dockerfile.builder b/Dockerfile.builder index 4a6c19b..c40084f 100644 --- a/Dockerfile.builder +++ b/Dockerfile.builder @@ -5,66 +5,69 @@ ARG GO_VERSION=1.21.0 ARG OSX_VERSION_MIN=10.12 ARG OSX_CROSS_COMMIT=3dcc13644cfaa3d7ea6a959acbe0f1a23cf2df72 -FROM golang:${GO_VERSION:-1.21.0}-bullseye AS base +FROM ghcr.io/gythialy/osx-sdk:v13 AS osx-sdk -ARG APT_MIRROR -RUN sed -ri "s/(httpredir|deb).debian.org/${APT_MIRROR:-deb.debian.org}/g" /etc/apt/sources.list \ - && sed -ri "s/(security).debian.org/${APT_MIRROR:-security.debian.org}/g" /etc/apt/sources.list +FROM golang:${GO_VERSION:-1.21.0}-bookworm AS base + +# ARG APT_MIRROR +# RUN sed -ri "s/(httpredir|deb).debian.org/${APT_MIRROR:-deb.debian.org}/g" /etc/apt/sources.list \ +# && sed -ri "s/(security).debian.org/${APT_MIRROR:-security.debian.org}/g" /etc/apt/sources.list ENV OSX_CROSS_PATH=/osxcross ARG DEBIAN_FRONTEND=noninteractive # Install deps RUN set -x; echo "Starting image build for Debian " \ - && dpkg --add-architecture arm64 \ - && dpkg --add-architecture armel \ - && dpkg --add-architecture armhf \ - && dpkg --add-architecture i386 \ - && dpkg --add-architecture mips \ - && dpkg --add-architecture mipsel \ - && dpkg --add-architecture powerpc \ - && dpkg --add-architecture ppc64el \ - && dpkg --add-architecture s390x \ - && apt-get update \ - && apt-get install -y -q \ - autoconf \ - automake \ - autotools-dev \ - bc \ - binfmt-support \ - binutils-multiarch \ - binutils-multiarch-dev \ - build-essential \ - clang \ - crossbuild-essential-arm64 \ - crossbuild-essential-armel \ - crossbuild-essential-armhf \ - crossbuild-essential-mipsel \ - crossbuild-essential-ppc64el \ - crossbuild-essential-s390x \ - curl \ - devscripts \ - gdb \ - git-core \ - libtool \ - llvm \ - mercurial \ - multistrap \ - patch \ - software-properties-common \ - subversion \ - wget \ - xz-utils \ - cmake \ - qemu-user-static \ - libxml2-dev \ - lzma-dev \ - openssl \ - mingw-w64 \ - musl-tools \ - libssl-dev && \ - apt -y autoremove && \ - apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* + && dpkg --add-architecture arm64 \ + && dpkg --add-architecture armel \ + && dpkg --add-architecture armhf \ + && dpkg --add-architecture i386 \ + && dpkg --add-architecture mips \ + && dpkg --add-architecture mipsel \ + && dpkg --add-architecture powerpc \ + && dpkg --add-architecture ppc64el \ + && dpkg --add-architecture s390x \ + && apt-get update \ + && apt-get install -y -q \ + autoconf \ + automake \ + autotools-dev \ + bc \ + binfmt-support \ + binutils-multiarch \ + binutils-multiarch-dev \ + build-essential \ + clang \ + crossbuild-essential-arm64 \ + crossbuild-essential-armel \ + crossbuild-essential-armhf \ + crossbuild-essential-mipsel \ + crossbuild-essential-ppc64el \ + crossbuild-essential-s390x \ + curl \ + devscripts \ + gdb \ + git-core \ + libtool \ + llvm \ + mercurial \ + multistrap \ + patch \ + software-properties-common \ + subversion \ + wget \ + xz-utils \ + cmake \ + qemu-user-static \ + libxml2-dev \ + lzma-dev \ + openssl \ + mingw-w64 \ + musl-tools \ + libssl-dev \ + && apt -y autoremove \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* # FIXME: install gcc-multilib # FIXME: add mips and powerpc architectures @@ -72,10 +75,10 @@ RUN set -x; echo "Starting image build for Debian " \ WORKDIR "${OSX_CROSS_PATH}" # install osxcross: RUN git clone https://github.com/tpoechtrager/osxcross.git . \ - && git checkout -q "${OSX_CROSS_COMMIT:-3dcc13644cfaa3d7ea6a959acbe0f1a23cf2df72}" + && git checkout -q "${OSX_CROSS_COMMIT:-3dcc13644cfaa3d7ea6a959acbe0f1a23cf2df72}" # install osx sdk -COPY --from=ghcr.io/gythialy/osx-sdk:v13@sha256:c0654de9a559cf9852a40a925761882a9147dd0dd35f87eaba6a6edc6c5bde43 "${OSX_CROSS_PATH}/." "${OSX_CROSS_PATH}" +COPY --from=osx-sdk "${OSX_CROSS_PATH}/." "${OSX_CROSS_PATH}" # https://github.com/tpoechtrager/osxcross/issues/313 COPY patch/osxcross-08-52-08.patch "${OSX_CROSS_PATH}/" diff --git a/README.md b/README.md index 05feb0c..c6b3d8d 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ Docker container to do cross compilation (Linux, windows, macOS, ARM, ARM64) of ``` docker build --platform linux/amd64 -f Dockerfile.builder -t ghcr.io/gythialy/golang-cross-builder:v1.18 . ``` - > Please follow the guide to [pack the SDK](https://github.com/tpoechtrager/osxcross#packaging-the-sdk) first + > Please follow the guide to [pack the SDK](https://github.com/tpoechtrager/osxcross#packaging-the-sdk) first or build by [GitHub Action](https://github.com/gythialy/golang-cross/actions/workflows/osx-sdk.yaml) - Build golang-cross image ``` docker build --build-arg GO_VERSION=1.16.2 \ @@ -35,6 +35,7 @@ Docker container to do cross compilation (Linux, windows, macOS, ARM, ARM64) of -t ghcr.io/gythialy/golang-cross:latest . ``` > The default arguments can be overridden with `--build-arg` + ## How to use - Prepare [GoReleaser](https://goreleaser.com/intro/) configuration diff --git a/example/.goreleaser.yml b/example/.goreleaser.yml index 48cee4a..be8b355 100644 --- a/example/.goreleaser.yml +++ b/example/.goreleaser.yml @@ -28,8 +28,8 @@ builds: binary: example env: - CGO_ENABLED=1 - - CC=aarch64-apple-darwin21.4-clang - - CXX=aarch64-apple-darwin21.4-clang++ + - CC=oa64-clang + - CXX=oa64-clang++ main: ./main.go goos: - darwin