diff options
| author | Haishan <[email protected]> | 2020-08-30 18:11:19 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2020-08-30 18:11:19 +0800 |
| commit | 5f0a66c23cd6ee808d4d7bb997415ca8f4ee0e24 (patch) | |
| tree | 5a1e4ce468fff75d9d83351e6ff0e40ace777faa | |
| parent | 6c9fdedc135d32f0d983db41b79da9420853ac83 (diff) | |
| parent | 7a45e78c972d1deaf6a2692882b031abb789a7c8 (diff) | |
Merge pull request #520 from kallydev/docker
| -rw-r--r-- | .github/workflows/docker-build.yaml | 29 | ||||
| -rw-r--r-- | .github/workflows/docker-push.yml | 73 | ||||
| -rw-r--r-- | Dockerfile | 4 |
3 files changed, 65 insertions, 41 deletions
diff --git a/.github/workflows/docker-build.yaml b/.github/workflows/docker-build.yaml new file mode 100644 index 0000000..0aa2a22 --- /dev/null +++ b/.github/workflows/docker-build.yaml @@ -0,0 +1,29 @@ +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 buildx build \ + --platform "$DOCKER_IMAGE_PLATFORM" \ + --output "type=image,push=false" \ + --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: | + 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: | - 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 + 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 . @@ -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/* |
