diff --git a/.github/workflows/publish-tag.yml b/.github/workflows/publish-tag.yml deleted file mode 100644 index d82ff908..00000000 --- a/.github/workflows/publish-tag.yml +++ /dev/null @@ -1,126 +0,0 @@ -name: Release Publish -on: - release: - types: - - created - -jobs: - build-context: - runs-on: ubuntu-latest - steps: - - name: Dump GitHub context - env: - GITHUB_CONTEXT: ${{ toJson(github) }} - run: echo "$GITHUB_CONTEXT" - build: - needs: build-context - runs-on: ubuntu-latest - env: - PLATFORMS: "linux/amd64,linux/arm64" - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Env seen prerun - run: env - - - name: Get branch metadata - id: branch-name - uses: tj-actions/branch-names@v8 - - - name: Current tag name - run: | - echo "Tag if exist: ${{ steps.branch-name.outputs.tag }}" - - - name: If not a tag, terminate the workflow - if: steps.branch-name.outputs.is_tag != 'true' - run: exit 1 - - - name: Running on a tag. - run: | - echo "TAG_NAME=${{ steps.branch-name.outputs.tag }}" >> ${GITHUB_ENV} - - # setup Docker build action - - name: Set up Docker Buildx - id: buildx - uses: docker/setup-buildx-action@v3 - - name: Set up QEMU - id: qemu - uses: docker/setup-qemu-action@v3 - - - name: Login to DockerHub - uses: docker/login-action@v3 - with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} - - - name: Build crapi-identity all platforms and push to Docker Hub - uses: docker/build-push-action@v3 - with: - context: ./services/identity - tags: crapi/crapi-identity:${{ env.TAG_NAME }} - platforms: ${{ env.PLATFORMS }} - push: true - cache-from: type=gha,scope=identity-service - cache-to: type=gha,mode=max,scope=identity-service - - - name: Build crapi-workshop all platforms and push to Docker Hub - uses: docker/build-push-action@v3 - with: - context: ./services/workshop - tags: crapi/crapi-workshop:${{ env.TAG_NAME }} - platforms: ${{ env.PLATFORMS }} - push: true - cache-from: type=gha,scope=workshop-service - cache-to: type=gha,mode=max,scope=workshop-service - - - name: Build crapi-chatbot all platforms and push to Docker Hub - uses: docker/build-push-action@v3 - with: - context: ./services/chatbot - tags: crapi/crapi-chatbot:${{ env.TAG_NAME }} - platforms: ${{ env.PLATFORMS }} - push: true - cache-from: type=gha,scope=chatbot-service - cache-to: type=gha,mode=max,scope=chatbot-service - - - name: Build crapi-community all platforms and push to Docker Hub - uses: docker/build-push-action@v3 - with: - context: ./services/community - tags: crapi/crapi-community:${{ env.TAG_NAME }} - platforms: ${{ env.PLATFORMS }} - push: true - cache-from: type=gha,scope=community-service - cache-to: type=gha,mode=max,scope=community-service - - - name: Build crapi-web all platforms and push to Docker Hub - uses: docker/build-push-action@v3 - with: - context: ./services/web - tags: crapi/crapi-web:${{ env.TAG_NAME }} - platforms: ${{ env.PLATFORMS }} - push: true - cache-from: type=gha,scope=web-service - cache-to: type=gha,mode=max,scope=web-service - - - name: Build gateway-service all platforms and push to Docker Hub - uses: docker/build-push-action@v3 - with: - context: ./services/gateway-service - tags: crapi/gateway-service:${{ env.TAG_NAME }} - platforms: ${{ env.PLATFORMS }} - push: true - cache-from: type=gha,scope=gateway-service - cache-to: type=gha,mode=max,scope=gateway-service - - - name: Build mailhog all platforms and push to Docker Hub - uses: docker/build-push-action@v3 - with: - context: ./services/mailhog - tags: crapi/mailhog:${{ env.TAG_NAME }} - platforms: ${{ env.PLATFORMS }} - push: true - cache-from: type=gha,scope=mailhog-service - cache-to: type=gha,mode=max,scope=mailhog-service - diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index fb489226..9e211ed9 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -48,7 +48,7 @@ jobs: if: steps.branch-name.outputs.is_tag == 'true' run: | echo "TAG_NAME=${{ steps.branch-name.outputs.tag }}" >> ${GITHUB_ENV} - echo "TAG_LATEST=latest" >> ${GITHUB_ENV} + echo "TAG_LATEST=${{ steps.branch-name.outputs.tag }}" >> ${GITHUB_ENV} - name: Running on a branch and merge. if: steps.branch-name.outputs.is_tag != 'true' && github.event_name == 'push' && steps.branch-name.outputs.current_branch != 'main' diff --git a/.github/workflows/workflow-multiarch.yml b/.github/workflows/workflow-multiarch.yml new file mode 100644 index 00000000..c3ed0173 --- /dev/null +++ b/.github/workflows/workflow-multiarch.yml @@ -0,0 +1,225 @@ +name: Release Publish +on: workflow_dispatch + +jobs: + build-context: + runs-on: ubuntu-latest + steps: + - name: Dump GitHub context + env: + GITHUB_CONTEXT: ${{ toJson(github) }} + run: echo "$GITHUB_CONTEXT" + build: + needs: build-context + strategy: + matrix: + include: + - runner: ubuntu-latest + platform: linux/amd64 + arch_alias: 'amd64' + - runner: ubuntu-latest-arm64 + platform: linux/arm64 + arch_alias: 'arm64' + runs-on: ${{ matrix.runner }} + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Env seen prerun + run: env + + - name: Get branch metadata + id: branch-name + uses: tj-actions/branch-names@v8 + + - name: Current tag name + run: | + echo "Tag if exist: ${{ steps.branch-name.outputs.tag }}" + + - name: If not a tag, terminate the workflow + if: steps.branch-name.outputs.is_tag != 'true' + run: exit 1 + + - name: Running on a tag. + run: | + echo "TAG_NAME=${{ steps.branch-name.outputs.tag }}" >> ${GITHUB_ENV} + echo "TAG_NAME=${{ steps.branch-name.outputs.tag }}" > tag_name.txt + + # Archive the tag name + - name: Archive tag name + uses: actions/upload-artifact@v2 + with: + name: tag_name + path: tag_name.txt + + # setup Docker build action + - name: Set up Docker Buildx + id: buildx + uses: docker/setup-buildx-action@v3 + - name: Set up QEMU + id: qemu + uses: docker/setup-qemu-action@v3 + + - name: Login to DockerHub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Build crapi-identity all platforms and push to Docker Hub + uses: docker/build-push-action@v3 + with: + context: ./services/identity + tags: crapi/crapi-identity:${{ env.TAG_NAME }}-${{ matrix.arch_alias }} + platforms: ${{ matrix.platform }} + push: true + cache-from: type=gha,scope=identity-service + cache-to: type=gha,mode=max,scope=identity-service + + - name: Build crapi-workshop all platforms and push to Docker Hub + uses: docker/build-push-action@v3 + with: + context: ./services/workshop + tags: crapi/crapi-workshop:${{ env.TAG_NAME }}-${{ matrix.arch_alias }} + platforms: ${{ matrix.platform }} + push: true + cache-from: type=gha,scope=workshop-service + cache-to: type=gha,mode=max,scope=workshop-service + + - name: Build crapi-chatbot all platforms and push to Docker Hub + uses: docker/build-push-action@v3 + with: + context: ./services/chatbot + tags: crapi/crapi-chatbot:${{ env.TAG_NAME }}-${{ matrix.arch_alias }} + platforms: ${{ matrix.platform }} + push: true + cache-from: type=gha,scope=chatbot-service + cache-to: type=gha,mode=max,scope=chatbot-service + + - name: Build crapi-community all platforms and push to Docker Hub + uses: docker/build-push-action@v3 + with: + context: ./services/community + tags: crapi/crapi-community:${{ env.TAG_NAME }}-${{ matrix.arch_alias }} + platforms: ${{ matrix.platform }} + push: true + cache-from: type=gha,scope=community-service + cache-to: type=gha,mode=max,scope=community-service + + - name: Build crapi-web all platforms and push to Docker Hub + uses: docker/build-push-action@v3 + with: + context: ./services/web + tags: crapi/crapi-web:${{ env.TAG_NAME }}-${{ matrix.arch_alias }} + platforms: ${{ matrix.platform }} + push: true + cache-from: type=gha,scope=web-service + cache-to: type=gha,mode=max,scope=web-service + + - name: Build gateway-service all platforms and push to Docker Hub + uses: docker/build-push-action@v3 + with: + context: ./services/gateway-service + tags: crapi/gateway-service:${{ env.TAG_NAME }}-${{ matrix.arch_alias }} + platforms: ${{ matrix.platform }} + push: true + cache-from: type=gha,scope=gateway-service + cache-to: type=gha,mode=max,scope=gateway-service + + - name: Build mailhog all platforms and push to Docker Hub + uses: docker/build-push-action@v3 + with: + context: ./services/mailhog + tags: crapi/mailhog:${{ env.TAG_NAME }}-${{ matrix.arch_alias }} + platforms: ${{ matrix.platform }} + push: true + cache-from: type=gha,scope=mailhog-service + cache-to: type=gha,mode=max,scope=mailhog-service + + publish-manifests: + needs: build + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Download tag name + uses: actions/download-artifact@v2 + with: + name: tag_name + path: . + + - name: Read tag name + id: tag_name + run: | + echo "TAG_NAME=$(cat tag_name.txt)" >> $GITHUB_ENV + + - name: Create and push manifest images for crapi-identity + uses: Noelware/docker-manifest-action@v1 + with: + inputs: | + crapi/crapi-identity:${{ env.TAG_NAME }}-amd64 + crapi/crapi-identity:${{ env.TAG_NAME }}-arm64 + outputs: | + crapi/crapi-identity:${{ env.TAG_NAME }} + push: true + + - name: Create and push manifest images for crapi-workshop + uses: Noelware/docker-manifest-action@v1 + with: + inputs: | + crapi/crapi-workshop:${{ env.TAG_NAME }}-amd64 + crapi/crapi-workshop:${{ env.TAG_NAME }}-arm64 + outputs: | + crapi/crapi-workshop:${{ env.TAG_NAME }} + push: true + + - name: Create and push manifest images for crapi-chatbot + uses: Noelware/docker-manifest-action@v1 + with: + inputs: | + crapi/crapi-chatbot:${{ env.TAG_NAME }}-amd64 + crapi/crapi-chatbot:${{ env.TAG_NAME }}-arm64 + outputs: | + crapi/crapi-chatbot:${{ env.TAG_NAME }} + push: true + + - name: Create and push manifest images for crapi-community + uses: Noelware/docker-manifest-action@v1 + with: + inputs: | + crapi/crapi-community:${{ env.TAG_NAME }}-amd64 + crapi/crapi-community:${{ env.TAG_NAME }}-arm64 + outputs: | + crapi/crapi-community:${{ env.TAG_NAME }} + push: true + + - name: Create and push manifest images for crapi-web + uses: Noelware/docker-manifest-action@v1 + with: + inputs: | + crapi/crapi-web:${{ env.TAG_NAME }}-amd64 + crapi/crapi-web:${{ env.TAG_NAME }}-arm64 + outputs: | + crapi/crapi-web:${{ env.TAG_NAME }} + push: true + + - name: Create and push manifest images for gateway-service + uses: Noelware/docker-manifest-action@v1 + with: + inputs: | + crapi/gateway-service:${{ env.TAG_NAME }}-amd64 + crapi/gateway-service:${{ env.TAG_NAME }}-arm64 + outputs: | + crapi/gateway-service:${{ env.TAG_NAME }} + push: true + + - name: Create and push manifest images for mailhog + uses: Noelware/docker-manifest-action@v1 + with: + inputs: | + crapi/mailhog:${{ env.TAG_NAME }}-amd64 + crapi/mailhog:${{ env.TAG_NAME }}-arm64 + outputs: | + crapi/mailhog:${{ env.TAG_NAME }} + push: true