diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml new file mode 100644 index 00000000..c2488a14 --- /dev/null +++ b/.github/workflows/docker.yml @@ -0,0 +1,44 @@ +name: Docker + +on: + push: + tags: + - v* + +jobs: + release: + name: Build and push Docker images + runs-on: ubuntu-latest + steps: + - name: Checkout default branch + uses: actions/checkout@v2 + + - name: Install Buildx and QEMU + run: | + export DOCKER_BUILDKIT=1 + docker build --platform=local -o . git://github.com/docker/buildx + mkdir -p ~/.docker/cli-plugins + mv buildx ~/.docker/cli-plugins/docker-buildx + docker run --rm --privileged multiarch/qemu-user-static:latest --reset -p yes --credential yes + docker buildx create --use --name build --node build --driver-opt network=host + + - name: Login to Docker Hub + env: + DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} + DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} + run: | + echo "${DOCKER_PASSWORD}" | docker login --username ${DOCKER_USERNAME} --password-stdin + + - name: Build and push Docker image + env: + DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} + DOCKER_IMAGE_PLATFORM: linux/386,linux/amd64,linux/arm/v7,linux/arm64,linux/ppc64le + run: | + DOCKER_IMAGE_NAME=$(echo $DOCKER_USERNAME | tr '[:upper:]' '[:lower:]')/wayback + DOCKER_IMAGE_VERSION=${GITHUB_REF#refs/*/v} + docker buildx build \ + --platform "$DOCKER_IMAGE_PLATFORM" \ + --output "type=image,push=true" \ + --tag "$DOCKER_IMAGE_NAME":"$DOCKER_IMAGE_VERSION" \ + --tag "$DOCKER_IMAGE_NAME":latest \ + --file ./Dockerfile . diff --git a/.github/workflows/snapcraft.yml b/.github/workflows/snapcraft.yml index c53deea3..2b71dc6c 100644 --- a/.github/workflows/snapcraft.yml +++ b/.github/workflows/snapcraft.yml @@ -1,4 +1,4 @@ -name: Snapcraft Release +name: Snapcraft on: push: diff --git a/Dockerfile b/Dockerfile index e7bca839..7b40c35c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,9 +2,15 @@ # STEP 1 build executable binary ############################ FROM golang:1.14-alpine AS builder -RUN apk update && apk add --no-cache build-base ca-certificates -COPY . /tmp/wayback -RUN cd /tmp/wayback && make linux-amd64 && mv ./bin/wayback-linux-amd64 /wayback + +RUN apk update && apk add --no-cache build-base ca-certificates git + +ARG TARGETPLATFORM +WORKDIR /go/src/github.com/wabarc/wayback + +RUN git clone --progress https://github.com/wabarc/wayback.git . \ + && sh ./build/binary.sh $TARGETPLATFORM \ + && mv ./bin/wayback-* /wayback ############################ # STEP 2 build a small image diff --git a/VERSION b/VERSION index 0c62199f..0d91a54c 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.2.1 +0.3.0 diff --git a/build/binary.sh b/build/binary.sh new file mode 100644 index 00000000..bbdf6ee6 --- /dev/null +++ b/build/binary.sh @@ -0,0 +1,39 @@ +#!/bin/sh +# +# Perform package builder +set -eu +#set -x + +GOOS=linux +GOARCH=amd64 + +for arg in "$@"; do +case $arg in + *arm/v7) + GOARCH=armv7 + ;; + *arm64) + GOARCH=armv8 + ;; + *386) + GOARCH=386 + ;; + *ppc64le) + GOARCH=ppc64le + ;; + *s390x) + GOARCH=s390x + ;; + windows*) + GOOS=windows + ;; + darwin*) + GOOS=darwin + ;; +esac +done + +TARGET="${GOOS}-${GOARCH}" + +make $TARGET +