Skip to content

Commit

Permalink
feat: support to specific the version of golang base image
Browse files Browse the repository at this point in the history
- generate osx sdk of macos-11, macos-12 and macos-13
- install cmake v3.28.3
- install clang 16

Signed-off-by: Goren G <[email protected]>
  • Loading branch information
gythialy committed Feb 23, 2024
1 parent 97dd022 commit d9d748c
Show file tree
Hide file tree
Showing 7 changed files with 298 additions and 65 deletions.
13 changes: 9 additions & 4 deletions .github/workflows/builder.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,25 +5,29 @@ on:
inputs:
builder-tag:
description: golang cross builder tag name
default: v1.22.0
default: v1.22.0-0
golang-version:
description: golang version
default: "1.22.0"
osxcross-git-hash:
description: git commit hash of osx-cross project
default: "3dcc13644cfaa3d7ea6a959acbe0f1a23cf2df72"
default: "ff8d100f3f026b4ffbe4ce96d8aac4ce06f1278b"
osx-min-version:
description: minimal macOS SDK deployment target
default: "10.12"
default: "10.13"
jobs:
build:
strategy:
matrix:
codename: [bullseye, bookworm]
runs-on: ubuntu-latest
continue-on-error: true
permissions:
id-token: write
packages: write
contents: read
env:
GOLANG_CROSS_TAG: ${{ github.event.inputs.builder-tag }}
GOLANG_CROSS_TAG: ${{ github.event.inputs.builder-tag }}-${{ matrix.codename }}
DOCKER_REGISTRY: "ghcr.io"

steps:
Expand Down Expand Up @@ -59,6 +63,7 @@ jobs:
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 }}
OS_CODENAME=${{ matrix.codename }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
Expand Down
19 changes: 14 additions & 5 deletions .github/workflows/osx-sdk.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,16 @@ on:

jobs:
build:
runs-on: macos-13
strategy:
matrix:
os: [macos-11, macos-12, macos-13]
runs-on: ${{ matrix.os }}
continue-on-error: true
permissions:
id-token: write
packages: write
contents: read
env:
OSX_TAG: v13
DOCKER_REGISTRY: "ghcr.io"
steps:
# - name: Setup Xcode
Expand All @@ -37,12 +40,16 @@ jobs:
uses: actions/checkout@v4
with:
repository: "tpoechtrager/osxcross"
ref: "3dcc13644cfaa3d7ea6a959acbe0f1a23cf2df72"
ref: "ff8d100f3f026b4ffbe4ce96d8aac4ce06f1278b"
path: "osxcross"
- name: Build OSX SDK
id: build_sdk_file
run: |
./osxcross/tools/gen_sdk_package.sh
find . -type f -name "*.tar.xz" | xargs shasum -a 256 | tee sha256sum.txt
find . -type f -name "*.tar.xz" -print0 | xargs shasum -a 256 | tee sha256sum.txt
sdk_file=$(find . -name "*.tar.xz" | head -n 1)
[ -f "$sdk_file" ] && echo "sdk_file: $sdk_file"
echo "sdk_file=${sdk_file}" >> $GITHUB_OUTPUT
shell: bash
- name: Get Repo Owner
id: get_repo_owner
Expand All @@ -54,7 +61,7 @@ jobs:
images: ghcr.io/${{ steps.get_repo_owner.outputs.repo_owner }}/osx-sdk
tags: |
type=raw,value=latest,enable={{is_default_branch}}
type=raw,value=${{ env.OSX_TAG }}
type=raw,value=${{ matrix.os }}
- name: Login to GitHub Container Registry
if: github.event_name != 'pull_request'
uses: docker/login-action@v3
Expand All @@ -68,6 +75,8 @@ jobs:
with:
context: .
file: Dockerfile.osx_sdk
build-args: |
SDK_FILE=${{ steps.build_sdk_file.outputs.sdk_file }}
push: ${{ github.event_name != 'pull_request' }}
platforms: linux/amd64,linux/arm64
tags: ${{ steps.meta.outputs.tags }}
Expand Down
92 changes: 50 additions & 42 deletions .github/workflows/release-golang-cross.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,51 +7,59 @@ on:

jobs:
build:
strategy:
matrix:
codename: [bullseye, bookworm]
permissions:
id-token: write
packages: write
contents: read
runs-on: ubuntu-latest
continue-on-error: false
steps:
- uses: actions/checkout@v4
- uses: sigstore/cosign-installer@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- 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@v5
with:
images: ghcr.io/${{ steps.get_repo_owner.outputs.repo_owner }}/golang-cross
tags: |
type=raw,value=latest,enable={{is_default_branch}}
type=semver,pattern={{raw}}
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=semver,pattern={{major}}
- name: Login to GitHub Container Registry
if: github.event_name != 'pull_request'
uses: docker/login-action@v3
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@v5
id: buildpush
with:
context: .
push: ${{ github.event_name != 'pull_request' }}
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@${{ steps.buildpush.outputs.digest }}"
shell: bash
env:
DOCKER_PASSWD: ${{ secrets.GITHUB_TOKEN }}
- uses: actions/checkout@v4
- uses: sigstore/cosign-installer@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- 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@v5
with:
images: ghcr.io/${{ steps.get_repo_owner.outputs.repo_owner }}/golang-cross
tags: |
type=raw,value=latest,enable={{#if is_default_branch}}${{matrix.codename == 'bookwarm'}}{{else}}false{{/if}}
type=semver,pattern={{raw}},enable=${{matrix.codename == 'bookwarm'}}
type=semver,pattern={{version}},enable=${{matrix.codename == 'bookwarm'}}
type=semver,pattern={{major}}.{{minor}},enable=${{matrix.codename == 'bookwarm'}}
type=semver,pattern={{major}},enable=${{matrix.codename == 'bookwarm'}}
type=semver,pattern={{raw}},enable=${{matrix.codename != 'bookwarm'}},suffix=-${{matrix.codename}}
type=semver,pattern={{version}},enable=${{matrix.codename != 'bookwarm'}},suffix=-${{matrix.codename}}
- name: Login to GitHub Container Registry
if: github.event_name != 'pull_request'
uses: docker/login-action@v3
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@v5
id: buildpush
with:
context: .
build-args: |
OS_CODENAME=${{ matrix.codename }}
push: ${{ github.event_name != 'pull_request' }}
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@${{ steps.buildpush.outputs.digest }}"
shell: bash
env:
DOCKER_PASSWD: ${{ secrets.GITHUB_TOKEN }}
4 changes: 3 additions & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
FROM ghcr.io/gythialy/golang-cross-builder:v1.22.0-0
ARG OS_CODENAME=bookworm

FROM ghcr.io/gythialy/golang-cross-builder:v1.22.0-0-${OS_CODENAME:-bookworm}

LABEL maintainer="Goren G<[email protected]>"
LABEL org.opencontainers.image.source https://github.com/gythialy/golang-cross
Expand Down
55 changes: 43 additions & 12 deletions Dockerfile.builder
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
# golang parameters
ARG GO_VERSION=1.22.0
ARG OS_CODENAME=bookworm
ARG OSK_SDK=macos-13

FROM ghcr.io/gythialy/osx-sdk:v13 AS osx-sdk
FROM ghcr.io/gythialy/osx-sdk:${OSK_SDK:-macos-13} AS osx-sdk

FROM golang:${GO_VERSION:-1.22.0}-bookworm AS base
FROM golang:${GO_VERSION:-1.22.0}-${OS_CODENAME:-bookworm} AS base

# osxcross parameters
ARG OSX_VERSION_MIN=10.12
ARG OSX_VERSION_MIN=10.13
ARG OSX_CROSS_COMMIT=ff8d100f3f026b4ffbe4ce96d8aac4ce06f1278b
# ARG APT_MIRROR
# RUN sed -ri "s/(httpredir|deb).debian.org/${APT_MIRROR:-deb.debian.org}/g" /etc/apt/sources.list \
Expand Down Expand Up @@ -36,7 +38,7 @@ RUN set -x; echo "Starting image build for Debian " \
binutils-multiarch \
binutils-multiarch-dev \
build-essential \
clang \
# clang \
crossbuild-essential-arm64 \
crossbuild-essential-armel \
crossbuild-essential-armhf \
Expand All @@ -56,38 +58,67 @@ RUN set -x; echo "Starting image build for Debian " \
subversion \
wget \
xz-utils \
cmake \
# cmake \
qemu-user-static \
libxml2-dev \
lzma-dev \
openssl \
mingw-w64 \
musl-tools \
libssl-dev \
unzip \
gnupg \
lsb-release \
&& 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

ENV PATH=/usr/local/bin:${OSX_CROSS_PATH}/target/bin:$PATH

WORKDIR "${OSX_CROSS_PATH}"

# install osxcross:
RUN git clone https://github.com/tpoechtrager/osxcross.git . \
&& git checkout -q "${OSX_CROSS_COMMIT:-3dcc13644cfaa3d7ea6a959acbe0f1a23cf2df72}"
RUN \
git clone https://github.com/tpoechtrager/osxcross.git . \
&& git checkout -q "${OSX_CROSS_COMMIT:-ff8d100f3f026b4ffbe4ce96d8aac4ce06f1278b}"

# install osx sdk
COPY --from=osx-sdk "${OSX_CROSS_PATH}/." "${OSX_CROSS_PATH}"

# install cmake
ARG CMAKE_VERSION=3.28.3
RUN \
# wget https://github.com/Kitware/CMake/releases/download/v${CMAKE_VERSION}/cmake-${CMAKE_VERSION}.tar.gz \
# && tar -xf cmake-${CMAKE_VERSION}.tar.gz \
# && cd cmake-${CMAKE_VERSION} \
# && ./bootstrap \
# && make \
# && make install \
# && cmake --version \
# && cd .. \
# && rm -rf cmake-${CMAKE_VERSION}.tar.gz cmake-${CMAKE_VERSION}
wget -qO- "https://github.com/Kitware/CMake/releases/download/v${CMAKE_VERSION}/cmake-${CMAKE_VERSION}-linux-x86_64.tar.gz" | tar --strip-components=1 -xz -C /usr/local \
&& cmake --version

# https://github.com/tpoechtrager/osxcross/issues/313
COPY patch/osxcross-08-52-08.patch "${OSX_CROSS_PATH}/"
RUN patch -p1 < osxcross-08-52-08.patch

COPY scripts/llvm.sh "${OSX_CROSS_PATH}/"
RUN \
UNATTENDED=yes OSX_VERSION_MIN=${OSX_VERSION_MIN:-10.12} ./build.sh \
&& ./build_compiler_rt.sh \
# install clang-16
./llvm.sh 16 \
&& update-alternatives --install /usr/bin/clang clang /usr/bin/clang-16 100 \
&& update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-16 100 \
&& clang --version \
&& clang++ --version \
&& UNATTENDED=yes OSX_VERSION_MIN=${OSX_VERSION_MIN:-10.13} ./build.sh \
&& DISABLE_PARALLEL_ARCH_BUILD=1 ./build_compiler_rt.sh \
&& rm -rf *~ build *.tar.xz \
&& rm -rf ./.git && \
ls -al "${OSX_CROSS_PATH}/target/bin"
&& rm -rf ./.git \
&& ls -al "${OSX_CROSS_PATH}/target/bin" \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

ENV PATH=${OSX_CROSS_PATH}/target/bin:$PATH
3 changes: 2 additions & 1 deletion Dockerfile.osx_sdk
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
FROM scratch

ARG SDK_FILE
ENV OSX_CROSS_PATH=/osxcross

WORKDIR "${OSX_CROSS_PATH}"

COPY "./MacOSX13.sdk.tar.xz" "${OSX_CROSS_PATH}/tarballs/"
COPY "./${SDK_FILE}" "${OSX_CROSS_PATH}/tarballs/"
Loading

0 comments on commit d9d748c

Please sign in to comment.