From 19a41295d270a3cd19a7d405776c33782d5bd65d Mon Sep 17 00:00:00 2001 From: Goren G Date: Mon, 7 Sep 2020 20:28:21 +0800 Subject: [PATCH] feat: add osx-cross builder with supporting macOS SDK 10.15 (#3) --- Dockerfile | 37 ++++++++---------- Dockerfile_builder | 96 ++++++++++++++++++++++++++++++++++++++++++++++ entrypoint.sh | 3 +- 3 files changed, 112 insertions(+), 24 deletions(-) create mode 100644 Dockerfile_builder diff --git a/Dockerfile b/Dockerfile index f20e2e9..66d5223 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,22 +1,25 @@ -FROM dockercore/golang-cross +FROM goreng/golang-cross-builder:v1.15.1 LABEL maintainer="Goren G" 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}; \ @@ -24,17 +27,7 @@ RUN \ 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 diff --git a/Dockerfile_builder b/Dockerfile_builder new file mode 100644 index 0000000..1804df5 --- /dev/null +++ b/Dockerfile_builder @@ -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" +ARG DEBIAN_FRONTEND=noninteractive + +COPY --from=osx-cross "${OSX_CROSS_PATH}/." "${OSX_CROSS_PATH}/" +ENV PATH=${OSX_CROSS_PATH}/target/bin:$PATH diff --git a/entrypoint.sh b/entrypoint.sh index f2b00d1..4b83771 100755 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -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"