From b319e9c7ff21ef66df1eefb89362f33eb9868a09 Mon Sep 17 00:00:00 2001 From: Ludo Mikula Date: Tue, 3 Sep 2024 17:52:15 +0200 Subject: [PATCH] fix: enhance docker image build github action --- .github/workflows/docker-images.yml | 107 ++++++++++++++++++++++++++-- 1 file changed, 100 insertions(+), 7 deletions(-) diff --git a/.github/workflows/docker-images.yml b/.github/workflows/docker-images.yml index 64aa67db4..29cc59017 100644 --- a/.github/workflows/docker-images.yml +++ b/.github/workflows/docker-images.yml @@ -1,42 +1,135 @@ -name: Build lowcoder dev image +name: Build lowcoder docker images on: + workflow_dispatch: + inputs: + imageTag: + type: choice + description: 'Choose a tag for built docker image(s)' + required: true + default: 'latest' + options: + - latest + - test + build_allinone: + type: boolean + description: 'Build the All-In-One image' + default: true + build_frontend: + type: boolean + description: 'Build the Frontend image' + default: true + build_nodeservice: + type: boolean + description: 'Build the Node service image' + default: true + build_apiservice: + type: boolean + description: 'Build the API service image' + default: true push: branches: dev +# paths: +# - 'client/**' +# - 'server/**' +# - 'deploy/docker/**' + release: + types: [released] jobs: build: runs-on: ubuntu-latest steps: - - name: Checkout lowcoder from 'dev' branch + - name: Set environment variables + shell: bash + run: | + # Get the short SHA of last commit + echo "SHORT_SHA=$(echo ${{ github.sha }} | cut -c1-7)" >> "${GITHUB_ENV}" + + # Get branch name - we don't use github.ref_head_name since we don't build on PRs + echo "BRANCH_NAME=${{ github.ref_name }}" >> "${GITHUB_ENV}" + + # Set docker image tag + echo "IMAGE_TAG=${{ inputs.imageTag || github.ref_name }}" >> "${GITHUB_ENV}" + + # Control which images to build + echo "BUILD_ALLINONE=${{ inputs.build_allinone || true }}" >> "${GITHUB_ENV}" + echo "BUILD_FRONTEND=${{ inputs.build_frontend || true }}" >> "${GITHUB_ENV}" + echo "BUILD_NODESERVICE=${{ inputs.build_nodeservice || true }}" >> "${GITHUB_ENV}" + echo "BUILD_APISERVICE=${{ inputs.build_apiservice || true }}" >> "${GITHUB_ENV}" + + - name: Checkout lowcoder source uses: actions/checkout@v4 with: - ref: dev - - name: Get commit short SHA - run: echo "SHORT_SHA=$(echo ${{ github.sha }} | cut -c1-7)" >> $GITHUB_ENV + ref: ${{ env.BRANCH_NAME }} + - name: Log into Docker Hub uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_LOGIN }} password: ${{ secrets.DOCKER_PASSWORD }} + - name: Setup Docker Buildx with cloud driver uses: docker/setup-buildx-action@v3 with: version: "lab:latest" driver: cloud endpoint: "lowcoderorg/lowcoder-cloud-builder" + - name: Build and push the all-in-one image + if: ${{ env.BUILD_ALLINONE == 'true' }} + uses: docker/build-push-action@v6 + env: + NODE_ENV: production + with: + file: ./deploy/docker/Dockerfile + build-args: | + REACT_APP_ENV=production + REACT_APP_COMMIT_ID="dev #${{ env.SHORT_SHA }}" + platforms: | + linux/amd64 + linux/arm64 + push: true + tags: lowcoderorg/lowcoder-ce:${{ env.IMAGE_TAG }} + + - name: Build and push the frontend image + if: ${{ env.BUILD_FRONTEND == 'true' }} uses: docker/build-push-action@v6 env: NODE_ENV: production with: file: ./deploy/docker/Dockerfile + target: lowcoder-ce-frontend build-args: | REACT_APP_ENV=production - REACT_APP_COMMIT_ID="dev #${SHORT_SHA}" + REACT_APP_COMMIT_ID="dev #${{ env.SHORT_SHA }}" + platforms: | + linux/amd64 + linux/arm64 + push: true + tags: lowcoderorg/lowcoder-ce-frontend:${{ env.IMAGE_TAG }} + + - name: Build and push the node service image + if: ${{ env.BUILD_NODESERVICE == 'true' }} + uses: docker/build-push-action@v6 + with: + file: ./deploy/docker/Dockerfile + target: lowcoder-ce-node-service + platforms: | + linux/amd64 + linux/arm64 + push: true + tags: lowcoderorg/lowcoder-ce-node-service:${{ env.IMAGE_TAG }} + + - name: Build and push the API service image + if: ${{ env.BUILD_APISERVICE == 'true' }} + uses: docker/build-push-action@v6 + with: + file: ./deploy/docker/Dockerfile + target: lowcoder-ce-api-service platforms: | linux/amd64 linux/arm64 push: true - tags: lowcoderorg/lowcoder-ce:dev + tags: lowcoderorg/lowcoder-ce-api-service:${{ env.IMAGE_TAG }}