name: ToolJet Edition docker images builds on: release: types: [published] jobs: build-tooljet-image-for-ce-edtion: runs-on: ubuntu-latest if: "${{ github.event.release }}" steps: - name: Free up disk space run: | sudo rm -rf /usr/share/dotnet sudo rm -rf /opt/ghc sudo rm -rf /usr/local/share/boost sudo rm -rf "$AGENT_TOOLSDIRECTORY" sudo docker system prune -af sudo apt-get clean df -h - name: Checkout code to main for pre-release CE edition if: "!contains(github.event.release.tag_name, '-lts')" uses: actions/checkout@v4 with: ref: refs/heads/main - name: Checkout code to LTS for CE LTS edition if: "contains(github.event.release.tag_name, '-lts')" uses: actions/checkout@v4 with: ref: refs/heads/lts-3.16 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Docker Login uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - name: Build and Push Docker image for pre-release tag if: "!contains(github.event.release.tag_name, '-lts')" uses: docker/build-push-action@v5 with: context: . file: docker/ce-production.Dockerfile push: true tags: tooljet/tooljet-ce:${{ github.event.release.tag_name }},tooljet/tooljet-ce:ce-latest platforms: linux/amd64 cache-from: type=gha,scope=ce cache-to: type=gha,scope=ce,mode=min env: DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} - name: Build and Push Docker image for LTS tag if: "contains(github.event.release.tag_name, '-lts')" uses: docker/build-push-action@v5 with: context: . file: docker/ce-production.Dockerfile push: true tags: tooljet/tooljet-ce:${{ github.event.release.tag_name }},tooljet/tooljet-ce:ce-lts-latest platforms: linux/amd64 cache-from: type=gha,scope=ce cache-to: type=gha,scope=ce,mode=min env: DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} - name: Send Slack Notification run: | # Determine release type and tags if [[ "${{ github.event.release.tag_name }}" == *"-lts"* ]]; then release_type="🔒 LTS Release" branch="lts-3.16" tags="tooljet/tooljet-ce:${{ github.event.release.tag_name }}, tooljet/tooljet-ce:ce-lts-latest" else release_type="🔄 Pre-release" branch="main" tags="tooljet/tooljet-ce:${{ github.event.release.tag_name }}, tooljet/tooljet-ce:ce-latest" fi # Build message based on job status if [[ "${{ job.status }}" == "success" ]]; then message="✅ *ToolJet Community Edition Published*\nVersion: \`${{ github.event.release.tag_name }}\`\nType: ${release_type}\nBranch: \`${branch}\`\nTags: \`${tags}\`" else message="❌ *ToolJet Community Edition Build Failed*\nVersion: \`${{ github.event.release.tag_name }}\`\nType: ${release_type}\nBranch: \`${branch}\`\nStatus: Build or push failed" fi curl -X POST -H 'Content-type: application/json' --data "{\"text\":\"$message\"}" ${{ secrets.SLACK_WEBHOOK_URL }} build-tooljet-image-for-ee-edtion: runs-on: ubuntu-latest if: "${{ github.event.release }}" steps: - name: Free up disk space run: | sudo rm -rf /usr/share/dotnet sudo rm -rf /opt/ghc sudo rm -rf /usr/local/share/boost sudo rm -rf "$AGENT_TOOLSDIRECTORY" sudo docker system prune -af sudo apt-get clean df -h - name: Checkout code to main for pre-release EE edition if: "!contains(github.event.release.tag_name, '-lts')" uses: actions/checkout@v4 with: ref: refs/heads/main - name: Checkout code to LTS for EE LTS edition if: "contains(github.event.release.tag_name, '-lts')" uses: actions/checkout@v4 with: ref: refs/heads/lts-3.16 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Docker Login uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - name: Build and Push Docker image for pre-release tag if: "!contains(github.event.release.tag_name, '-lts')" uses: docker/build-push-action@v5 with: context: . build-args: | CUSTOM_GITHUB_TOKEN=${{ secrets.CUSTOM_GITHUB_TOKEN }} BRANCH_NAME=main file: docker/pre-release/ee/ee-production.Dockerfile push: true tags: tooljet/tooljet-ee:${{ github.event.release.tag_name }},tooljet/tooljet-ee:ee-latest,tooljet/tooljet:ee-latest,tooljet/tooljet:${{ github.event.release.tag_name }} platforms: linux/amd64 cache-from: type=gha,scope=ee cache-to: type=gha,scope=ee,mode=min env: DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} - name: Build and Push Docker image for LTS tag if: "contains(github.event.release.tag_name, '-lts')" uses: docker/build-push-action@v5 with: context: . build-args: | CUSTOM_GITHUB_TOKEN=${{ secrets.CUSTOM_GITHUB_TOKEN }} BRANCH_NAME=lts-3.16 file: docker/LTS/ee/ee-production.Dockerfile push: true tags: tooljet/tooljet-ee:${{ github.event.release.tag_name }},tooljet/tooljet-ee:ee-lts-latest,tooljet/tooljet:ee-lts-latest,tooljet/tooljet:${{ github.event.release.tag_name }} platforms: linux/amd64 cache-from: type=gha,scope=ee cache-to: type=gha,scope=ee,mode=min env: DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} - name: Send Slack Notification run: | # Determine release type and tags if [[ "${{ github.event.release.tag_name }}" == *"-lts"* ]]; then release_type="🔒 LTS Release" branch="lts-3.16" tags="tooljet/tooljet-ee:${{ github.event.release.tag_name }}, tooljet/tooljet:${{ github.event.release.tag_name }}" else release_type="🔄 Pre-release" branch="main" tags="tooljet/tooljet-ee:${{ github.event.release.tag_name }}, tooljet/tooljet:${{ github.event.release.tag_name }}" fi # Build message based on job status if [[ "${{ job.status }}" == "success" ]]; then message="✅ *ToolJet Enterprise Edition Published*\nVersion: \`${{ github.event.release.tag_name }}\`\nType: ${release_type}\nBranch: \`${branch}\`\nTags: \`${tags}\`" else message="❌ *ToolJet Enterprise Edition Build Failed*\nVersion: \`${{ github.event.release.tag_name }}\`\nType: ${release_type}\nBranch: \`${branch}\`\nStatus: Build or push failed" fi curl -X POST -H 'Content-type: application/json' --data "{\"text\":\"$message\"}" ${{ secrets.SLACK_WEBHOOK_URL }} build-tooljet-image-for-cloud-edtion: runs-on: ubuntu-latest if: "${{ github.event.release }}" steps: - name: Free up disk space run: | sudo rm -rf /usr/share/dotnet sudo rm -rf /opt/ghc sudo rm -rf /usr/local/share/boost sudo rm -rf "$AGENT_TOOLSDIRECTORY" sudo docker system prune -af sudo apt-get clean df -h - name: Checkout code to LTS for Cloud LTS edition if: "contains(github.event.release.tag_name, '-lts')" uses: actions/checkout@v4 with: ref: refs/heads/lts-3.16 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Docker Login uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - name: Build and Push Docker image for LTS tag if: "contains(github.event.release.tag_name, '-lts')" uses: docker/build-push-action@v5 with: context: . build-args: | CUSTOM_GITHUB_TOKEN=${{ secrets.CUSTOM_GITHUB_TOKEN }} BRANCH_NAME=lts-3.16 file: docker/LTS/cloud/cloud-server.Dockerfile push: true tags: tooljet/saas:${{ github.event.release.tag_name }} platforms: linux/amd64 cache-from: type=gha,scope=cloud cache-to: type=gha,scope=cloud,mode=min env: DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} - name: Send Slack Notification run: | # Cloud edition only runs for LTS releases release_type="🔒 LTS Release" branch="lts-3.16" tags="tooljet/saas:${{ github.event.release.tag_name }}" # Build message based on job status if [[ "${{ job.status }}" == "success" ]]; then message="✅ *ToolJet Cloud Edition Published*\nVersion: \`${{ github.event.release.tag_name }}\`\nType: ${release_type}\nBranch: \`${branch}\`\nTags: \`${tags}\`" else message="❌ *ToolJet Cloud Edition Build Failed*\nVersion: \`${{ github.event.release.tag_name }}\`\nType: ${release_type}\nBranch: \`${branch}\`\nStatus: Build or push failed" fi curl -X POST -H 'Content-type: application/json' --data "{\"text\":\"$message\"}" ${{ secrets.SLACK_WEBHOOK_URL }} try-tooljet-image-build: runs-on: ubuntu-latest needs: build-tooljet-image-for-ee-edtion if: ${{ needs.build-tooljet-image-for-ee-edtion.result == 'success' }} steps: - name: Free up disk space run: | sudo rm -rf /usr/share/dotnet sudo rm -rf /opt/ghc sudo rm -rf /usr/local/share/boost sudo rm -rf "$AGENT_TOOLSDIRECTORY" sudo docker system prune -af sudo apt-get clean df -h - name: Checkout code to develop if: "!contains(github.event.release.tag_name, '-lts')" uses: actions/checkout@v4 with: ref: refs/heads/main - name: Checkout code to lts-3.16 if: contains(github.event.release.tag_name, '-lts') uses: actions/checkout@v4 with: ref: refs/heads/lts-3.16 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Docker Login uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - name: Check if Docker image is present id: check-image-presence run: | response=$(curl -s "https://hub.docker.com/v2/repositories/tooljet/tooljet/tags/${{ github.event.release.tag_name }}") if [[ $? -ne 0 ]]; then echo "Failed to fetch JSON response. Stopping workflow execution." exit 1 fi if [[ $response == *"tag '${{ github.event.release.tag_name }}' not found"* ]]; then echo "Docker image tag '${{ github.event.release.tag_name }}' not present." exit 1 else echo "Docker image tag '${{ github.event.release.tag_name }}' is present." fi - name: Build and Push Docker image for non-EE-LTS if: "!contains(github.event.release.tag_name, '-lts')" uses: docker/build-push-action@v5 with: context: . file: docker/pre-release/ee/ee-try-tooljet.Dockerfile push: true tags: tooljet/try:${{ github.event.release.tag_name }},tooljet/try:ee-latest platforms: linux/amd64 cache-from: type=gha,scope=try cache-to: type=gha,scope=try,mode=min env: DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} - name: Build and Push Docker image for EE-LTS-3.0 if: contains(github.event.release.tag_name, '-lts') uses: docker/build-push-action@v5 with: context: . file: docker/LTS/ee/ee-try-tooljet-lts.Dockerfile push: true tags: tooljet/try:${{ github.event.release.tag_name }},tooljet/try:ee-lts-latest platforms: linux/amd64 cache-from: type=gha,scope=try cache-to: type=gha,scope=try,mode=min env: DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} - name: Send Slack Notification run: | # Determine release type and tags if [[ "${{ github.event.release.tag_name }}" == *"-lts"* ]]; then release_type="🔒 LTS Release" branch="lts-3.16" tags="tooljet/try:${{ github.event.release.tag_name }}, tooljet/try:ee-lts-latest" else release_type="🔄 Pre-release" branch="main" tags="tooljet/try:${{ github.event.release.tag_name }}, tooljet/try:ee-latest" fi # Build message based on job status if [[ "${{ job.status }}" == "success" ]]; then message="✅ *Try-ToolJet Image Published*\nVersion: \`${{ github.event.release.tag_name }}\`\nType: ${release_type}\nBranch: \`${branch}\`\nTags: \`${tags}\`" else message="❌ *Try-ToolJet Image Build Failed*\nVersion: \`${{ github.event.release.tag_name }}\`\nType: ${release_type}\nBranch: \`${branch}\`\nStatus: Build or push failed" fi curl -X POST -H 'Content-type: application/json' --data "{\"text\":\"$message\"}" ${{ secrets.SLACK_WEBHOOK_URL }}