Skip to content

Commit

Permalink
feat: add osx-cross builder with supporting macOS SDK 10.15 (gythialy#3)
Browse files Browse the repository at this point in the history
  • Loading branch information
gythialy committed Sep 7, 2020
1 parent 32e90af commit 19a4129
Show file tree
Hide file tree
Showing 3 changed files with 112 additions and 24 deletions.
37 changes: 15 additions & 22 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,40 +1,33 @@
FROM dockercore/golang-cross
FROM goreng/golang-cross-builder:v1.15.1

LABEL maintainer="Goren G<[email protected]>"

COPY entrypoint.sh /

# install arm gcc
RUN apt-get update -qq && apt-get install -y -q build-essential \
gcc-arm-linux-gnueabi g++-arm-linux-gnueabi gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf \
libc6-dev-armel-cross libc6-dev-armel-cross binutils-arm-linux-gnueabi libncurses5-dev \
gcc-aarch64-linux-gnu g++-aarch64-linux-gnu \
gcc-mingw-w64 g++-mingw-w64 && \
apt -y autoremove && \
apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
ARG GOLANG_VERSION=1.15.1
ARG GOLANG_DIST_SHA=70ac0dbf60a8ee9236f337ed0daa7a4c3b98f6186d4497826f68e97c0c0413f6

# update golang
RUN \
GOLANG_DIST=https://storage.googleapis.com/golang/go${GOLANG_VERSION}.linux-amd64.tar.gz && \
wget -O go.tgz "$GOLANG_DIST"; \
echo "${GOLANG_DIST_SHA} *go.tgz" | sha256sum -c -; \
rm -rf /usr/local/go; \
tar -C /usr/local -xzf go.tgz; \
rm go.tgz;

# install goreleaser
ARG GORELEASER_VERSION=0.143.0
ARG GORELEASER_SHA=cc435eb337889d41414de80fd8474806187a3e908754cbf4599aa0a7604a3134
RUN \
GORELEASER_VERSION=0.141.0 && \
GORELEASER_SHA=00a00e7e7ea72c2bc44d1f1e50eccfac361e0a1332ee0fcde8107da442c3a4d8 && \
GORELEASER_DOWNLOAD_FILE=goreleaser_Linux_x86_64.tar.gz && \
GORELEASER_DOWNLOAD_URL=https://github.com/goreleaser/goreleaser/releases/download/v${GORELEASER_VERSION}/${GORELEASER_DOWNLOAD_FILE} && \
wget ${GORELEASER_DOWNLOAD_URL}; \
echo "$GORELEASER_SHA $GORELEASER_DOWNLOAD_FILE" | sha256sum -c - || exit 1; \
tar -xzf $GORELEASER_DOWNLOAD_FILE -C /usr/bin/ goreleaser; \
rm $GORELEASER_DOWNLOAD_FILE;

# update golang
RUN \
GOLANG_VERSION=1.15 && \
GOLANG_DIST=https://storage.googleapis.com/golang/go${GOLANG_VERSION}.linux-amd64.tar.gz \
GOLANG_DIST_SHA=2d75848ac606061efe52a8068d0e647b35ce487a15bb52272c427df485193602 && \
wget -O go.tgz "$GOLANG_DIST"; \
echo "${GOLANG_DIST_SHA} *go.tgz" | sha256sum -c -; \
rm -rf /usr/local/go; \
tar -C /usr/local -xzf go.tgz; \
rm go.tgz;

# install git-chglog
RUN go get -u github.com/git-chglog/git-chglog/cmd/git-chglog && \
chmod +x /entrypoint.sh

Expand Down
96 changes: 96 additions & 0 deletions Dockerfile_builder
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
# golang parameters
ARG GO_VERSION=1.15.1

# OS-X SDK parameters
ARG OSX_SDK=MacOSX10.15.sdk
ARG OSX_SDK_SUM=a30d653494cb64ff38640a48ae0e0d749e515c992302f417672605c279f95732

# osxcross parameters
ARG OSX_VERSION_MIN=10.12
ARG OSX_CROSS_COMMIT=2733413b6847c1489d6230f062d3293e6f42a021

FROM golang:${GO_VERSION}-buster 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

FROM base AS osx-sdk
ARG OSX_SDK
ARG OSX_SDK_SUM

COPY ${OSX_SDK}.tar.xz "${OSX_CROSS_PATH}/tarballs/${OSX_SDK}.tar.xz"
RUN echo "${OSX_SDK_SUM}" "${OSX_CROSS_PATH}/tarballs/${OSX_SDK}.tar.xz" | sha256sum -c -

FROM base AS osx-cross-base
ARG DEBIAN_FRONTEND=noninteractive
# Install deps
RUN set -x; echo "Starting image build for Debian Stretch" \
&& 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 \
&& 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 \
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 \
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

FROM osx-cross-base AS osx-cross
ARG OSX_CROSS_COMMIT
WORKDIR "${OSX_CROSS_PATH}"
# install osxcross:
RUN git clone https://github.com/tpoechtrager/osxcross.git . \
&& git checkout -q "${OSX_CROSS_COMMIT}" \
&& rm -rf ./.git
COPY --from=osx-sdk "${OSX_CROSS_PATH}/." "${OSX_CROSS_PATH}/"
ARG OSX_VERSION_MIN
RUN UNATTENDED=yes OSX_VERSION_MIN=${OSX_VERSION_MIN} ./build.sh

FROM osx-cross-base AS final
LABEL maintainer="Goren G<[email protected]>"
ARG DEBIAN_FRONTEND=noninteractive

COPY --from=osx-cross "${OSX_CROSS_PATH}/." "${OSX_CROSS_PATH}/"
ENV PATH=${OSX_CROSS_PATH}/target/bin:$PATH
3 changes: 1 addition & 2 deletions entrypoint.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,8 @@ else
key_file=$HOME/key.asc
echo -e "${PRIVATE_KEY}" | base64 -d >"$key_file"
echo "save key to $key_file"
gpg --allow-secret-key-import --import "${key_file}"

if [ $? eq 0 ]; then
if gpg --allow-secret-key-import --import "${key_file}"; then
gpg --list-secret-keys --keyid-format long
fi
rm -rf "$key_file"
Expand Down

0 comments on commit 19a4129

Please sign in to comment.