From 37438cfe48cf84a8d549814f338b0ab6f7c82f9b Mon Sep 17 00:00:00 2001 From: KallyDev <36319157+kallydev@users.noreply.github.com> Date: Sat, 29 Aug 2020 04:58:46 +0800 Subject: [PATCH 1/2] ci: support arm and arm64 --- .github/workflows/docker-build.yaml | 31 ++++++++++++ .github/workflows/docker-push.yml | 73 +++++++++++++---------------- Dockerfile | 4 +- 3 files changed, 67 insertions(+), 41 deletions(-) create mode 100644 .github/workflows/docker-build.yaml diff --git a/.github/workflows/docker-build.yaml b/.github/workflows/docker-build.yaml new file mode 100644 index 0000000..4ad9e92 --- /dev/null +++ b/.github/workflows/docker-build.yaml @@ -0,0 +1,31 @@ +name: Build Docker Image +on: [push, pull_request] +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Set up Checkout + 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: Build Docker image + env: + DOCKER_USERNAME: ${{ github.actor }} + DOCKER_IMAGE_PLATFORM: linux/amd64,linux/arm/v7,linux/arm64 + REPOSITORY_NAME: ${{ github.repository }} + run: | + IFS='/' read -ra repository_name_array <<<"$REPOSITORY_NAME" + DOCKER_IMAGE_NAME=$(echo $DOCKER_USERNAME/${repository_name_array[1]} | tr '[:upper:]' '[:lower:]') + DOCKER_IMAGE_VERSION=${GITHUB_REF#refs/*/} + docker buildx build \ + --platform "$DOCKER_IMAGE_PLATFORM" \ + --output "type=image,push=false" \ + --tag "$DOCKER_IMAGE_NAME":"$DOCKER_IMAGE_VERSION" \ + --tag "$DOCKER_IMAGE_NAME":latest \ + --file ./Dockerfile . diff --git a/.github/workflows/docker-push.yml b/.github/workflows/docker-push.yml index 85ea0d1..184dbb2 100644 --- a/.github/workflows/docker-push.yml +++ b/.github/workflows/docker-push.yml @@ -1,23 +1,15 @@ # require the secrets DOCKER_HUB_PASSWORD - -name: Docker Push - + +name: Release Docker Image on: push: - branches: - - master tags: - - '*' -env: - IMAGE_NAME: yacd - + - v* jobs: test: runs-on: ubuntu-latest - steps: - uses: actions/checkout@v2 - - name: Run tests run: | if [ -f docker-compose.test.yml ]; then @@ -26,37 +18,38 @@ jobs: else docker build . --file Dockerfile fi - push: - needs: test - runs-on: ubuntu-latest if: github.event_name == 'push' - steps: - - uses: actions/checkout@v2 - - - name: Build image - run: docker build . --file Dockerfile --tag image - - - name: Log into registry - run: echo "${{ secrets.DOCKER_HUB_PASSWORD }}" | docker login -u ${{ github.actor }} --password-stdin - - - name: Push image + - name: Set up Checkout + uses: actions/checkout@v2 + - name: Install Buildx and QEMU run: | - IMAGE_ID=haishanh/$IMAGE_NAME - - # Strip git ref prefix from version - VERSION=$(echo "${{ github.ref }}" | sed -e 's,.*/\(.*\),\1,') - - # Strip "v" prefix from tag name - [[ "${{ github.ref }}" == "refs/tags/"* ]] && VERSION=$(echo $VERSION | sed -e 's/^v//') - - # Use Docker `latest` tag convention - [ "$VERSION" == "master" ] && VERSION=latest - - echo IMAGE_ID=$IMAGE_ID - echo VERSION=$VERSION - - docker tag image $IMAGE_ID:$VERSION - docker push $IMAGE_ID:$VERSION + 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: Log in to Docker Hub + env: + DOCKER_USERNAME: ${{ github.actor }} + DOCKER_PASSWORD: ${{ secrets.DOCKER_HUB_PASSWORD }} + run: | + echo "${DOCKER_PASSWORD}" | docker login --username ${DOCKER_USERNAME} --password-stdin + - name: Build and push Docker image + env: + DOCKER_USERNAME: ${{ github.actor }} + DOCKER_IMAGE_PLATFORM: linux/amd64,linux/arm/v7,linux/arm64 + REPOSITORY_NAME: ${{ github.repository }} + run: | + IFS='/' read -ra repository_name_array <<<"$REPOSITORY_NAME" + DOCKER_IMAGE_NAME=$(echo $DOCKER_USERNAME/${repository_name_array[1]} | tr '[:upper:]' '[:lower:]') + DOCKER_IMAGE_VERSION=${GITHUB_REF#refs/*/} + 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/Dockerfile b/Dockerfile index ea33239..c1479d7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,9 @@ FROM node:alpine AS builder WORKDIR /app COPY . . -RUN yarn && yarn run build +# Using yarn to install dependencies in CI will cause network timeout +# Refer to https://github.com/date-fns/date-fns/issues/1004 +RUN yarn config set network-timeout 300000 && yarn && yarn run build FROM nginx:alpine RUN rm -rf /usr/share/nginx/html/* From 7a45e78c972d1deaf6a2692882b031abb789a7c8 Mon Sep 17 00:00:00 2001 From: kallydev <36319157+kallydev@users.noreply.github.com> Date: Sat, 29 Aug 2020 14:21:12 +0800 Subject: [PATCH 2/2] ci: support pull request build test --- .github/workflows/docker-build.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/docker-build.yaml b/.github/workflows/docker-build.yaml index 4ad9e92..0aa2a22 100644 --- a/.github/workflows/docker-build.yaml +++ b/.github/workflows/docker-build.yaml @@ -22,10 +22,8 @@ jobs: run: | IFS='/' read -ra repository_name_array <<<"$REPOSITORY_NAME" DOCKER_IMAGE_NAME=$(echo $DOCKER_USERNAME/${repository_name_array[1]} | tr '[:upper:]' '[:lower:]') - DOCKER_IMAGE_VERSION=${GITHUB_REF#refs/*/} docker buildx build \ --platform "$DOCKER_IMAGE_PLATFORM" \ --output "type=image,push=false" \ - --tag "$DOCKER_IMAGE_NAME":"$DOCKER_IMAGE_VERSION" \ --tag "$DOCKER_IMAGE_NAME":latest \ --file ./Dockerfile .