# GitHub Actions workflow: Translate then build Docker images for multiple platforms name: Translate and Multi-Platform Docker Build on: push: branches: [testme-docker] pull_request: branches: [testme-docker] jobs: build-amd64: runs-on: ubuntu-latest needs: translate strategy: matrix: variant: [mongodb, postgresql, mariadb, all, slim] name: Build Docker Image (amd64-${{ matrix.variant }}) steps: - name: Download repo artifact uses: actions/download-artifact@v4 with: name: repo-with-translations - name: Set up QEMU uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Log in to GitHub Container Registry uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.MY_TOKEN || secrets.GITHUB_TOKEN }} - name: Build and push Docker image (amd64-${{ matrix.variant }}) run: | REPO_OWNER_LC="$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]')" case "${{ matrix.variant }}" in mongodb) MONGODB=YES; POSTGRESQL=NO; MARIADB=NO; TAG="-amd64-mongodb";; postgresql) MONGODB=NO; POSTGRESQL=YES; MARIADB=NO; TAG="-amd64-postgresql";; mariadb) MONGODB=NO; POSTGRESQL=NO; MARIADB=YES; TAG="-amd64-mariadb";; all) MONGODB=YES; POSTGRESQL=YES; MARIADB=YES; TAG="-amd64";; slim) MONGODB=NO; POSTGRESQL=NO; MARIADB=NO; TAG="-amd64-slim";; esac docker buildx build \ --platform linux/amd64 \ --build-arg INCLUDE_MONGODB_TOOLS=$MONGODB \ --build-arg INCLUDE_POSTGRESQL_TOOLS=$POSTGRESQL \ --build-arg INCLUDE_MARIADB_TOOLS=$MARIADB \ --build-arg DISABLE_MINIFY=yes \ --build-arg DISABLE_TRANSLATE=yes \ --build-arg DISABLE_EXTRACT=yes \ --build-arg PREINSTALL_LIBS=true \ -f docker/Dockerfile \ -t ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}$TAG \ --push \ . build-arm64: runs-on: ubuntu-latest needs: translate strategy: matrix: variant: [mongodb, postgresql, mariadb, all, slim] name: Build Docker Image (arm64-${{ matrix.variant }}) steps: - name: Download repo artifact uses: actions/download-artifact@v4 with: name: repo-with-translations - name: Set up QEMU uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Log in to GitHub Container Registry uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.MY_TOKEN || secrets.GITHUB_TOKEN }} - name: Build and push Docker image (arm64-${{ matrix.variant }}) run: | REPO_OWNER_LC="$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]')" case "${{ matrix.variant }}" in mongodb) MONGODB=YES; POSTGRESQL=NO; MARIADB=NO; TAG="-arm64-mongodb";; postgresql) MONGODB=NO; POSTGRESQL=YES; MARIADB=NO; TAG="-arm64-postgresql";; mariadb) MONGODB=NO; POSTGRESQL=NO; MARIADB=YES; TAG="-arm64-mariadb";; all) MONGODB=YES; POSTGRESQL=YES; MARIADB=YES; TAG="-arm64";; slim) MONGODB=NO; POSTGRESQL=NO; MARIADB=NO; TAG="-arm64-slim";; esac docker buildx build \ --platform linux/arm64 \ --build-arg INCLUDE_MONGODB_TOOLS=$MONGODB \ --build-arg INCLUDE_POSTGRESQL_TOOLS=$POSTGRESQL \ --build-arg INCLUDE_MARIADB_TOOLS=$MARIADB \ --build-arg DISABLE_MINIFY=yes \ --build-arg DISABLE_TRANSLATE=yes \ --build-arg DISABLE_EXTRACT=yes \ --build-arg PREINSTALL_LIBS=true \ -f docker/Dockerfile \ -t ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}$TAG \ --push \ . build-armv7: runs-on: ubuntu-latest needs: translate strategy: matrix: variant: [mongodb, postgresql, mariadb, all, slim] name: Build Docker Image (armv7-${{ matrix.variant }}) steps: - name: Download repo artifact uses: actions/download-artifact@v4 with: name: repo-with-translations - name: Set up QEMU uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Log in to GitHub Container Registry uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.MY_TOKEN || secrets.GITHUB_TOKEN }} - name: Build and push Docker image (armv7-${{ matrix.variant }}) run: | REPO_OWNER_LC="$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]')" case "${{ matrix.variant }}" in mongodb) MONGODB=YES; POSTGRESQL=NO; MARIADB=NO; TAG="-armv7-mongodb";; postgresql) MONGODB=NO; POSTGRESQL=YES; MARIADB=NO; TAG="-armv7-postgresql";; mariadb) MONGODB=NO; POSTGRESQL=NO; MARIADB=YES; TAG="-armv7-mariadb";; all) MONGODB=YES; POSTGRESQL=YES; MARIADB=YES; TAG="-armv7";; slim) MONGODB=NO; POSTGRESQL=NO; MARIADB=NO; TAG="-armv7-slim";; esac docker buildx build \ --platform linux/arm/v7 \ --build-arg INCLUDE_MONGODB_TOOLS=$MONGODB \ --build-arg INCLUDE_POSTGRESQL_TOOLS=$POSTGRESQL \ --build-arg INCLUDE_MARIADB_TOOLS=$MARIADB \ --build-arg DISABLE_MINIFY=yes \ --build-arg DISABLE_TRANSLATE=yes \ --build-arg DISABLE_EXTRACT=yes \ --build-arg PREINSTALL_LIBS=true \ -f docker/Dockerfile \ -t ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}$TAG \ --push \ . build-armv6: runs-on: ubuntu-latest needs: translate strategy: matrix: variant: [mongodb, postgresql, mariadb, all, slim] name: Build Docker Image (armv6-${{ matrix.variant }}) steps: - name: Download repo artifact uses: actions/download-artifact@v4 with: name: repo-with-translations - name: Set up QEMU uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Log in to GitHub Container Registry uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.MY_TOKEN || secrets.GITHUB_TOKEN }} - name: Build and push Docker image (armv6-${{ matrix.variant }}) run: | REPO_OWNER_LC="$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]')" case "${{ matrix.variant }}" in mongodb) MONGODB=YES; POSTGRESQL=NO; MARIADB=NO; TAG="-armv6-mongodb";; postgresql) MONGODB=NO; POSTGRESQL=YES; MARIADB=NO; TAG="-armv6-postgresql";; mariadb) MONGODB=NO; POSTGRESQL=NO; MARIADB=YES; TAG="-armv6-mariadb";; all) MONGODB=YES; POSTGRESQL=YES; MARIADB=YES; TAG="-armv6";; slim) MONGODB=NO; POSTGRESQL=NO; MARIADB=NO; TAG="-armv6-slim";; esac docker buildx build \ --platform linux/arm/v6 \ --build-arg INCLUDE_MONGODB_TOOLS=$MONGODB \ --build-arg INCLUDE_POSTGRESQL_TOOLS=$POSTGRESQL \ --build-arg INCLUDE_MARIADB_TOOLS=$MARIADB \ --build-arg DISABLE_MINIFY=yes \ --build-arg DISABLE_TRANSLATE=yes \ --build-arg DISABLE_EXTRACT=yes \ --build-arg PREINSTALL_LIBS=true \ -f docker/Dockerfile \ -t ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}$TAG \ --push \ . translate: runs-on: ubuntu-latest name: Run Translations steps: - name: Checkout repository uses: actions/checkout@v4 - name: Set up Node.js (LTS) uses: actions/setup-node@v4 with: node-version: lts/* - name: Run translate.js (ignore errors) run: node translate.js || true working-directory: translate - name: Run translate extractall run: node translate extractall working-directory: translate - name: Run translate.js minifyall run: node translate.js minifyall working-directory: translate - name: Run translate.js translateall run: node translate.js translateall working-directory: translate - name: Upload repo with translations uses: actions/upload-artifact@v4 with: name: repo-with-translations path: . merge-manifest: runs-on: ubuntu-latest needs: - translate - build-amd64 - build-arm64 - build-armv7 - build-armv6 name: Create and Push Multi-Arch Manifest steps: - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Log in to GitHub Container Registry uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.MY_TOKEN || secrets.GITHUB_TOKEN }} - name: Create and push multi-arch manifests for all variants run: | REPO_OWNER_LC="$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]')" # mongodb docker buildx imagetools create \ -t ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-mongodb \ ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-amd64-mongodb \ ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-arm64-mongodb \ ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-armv7-mongodb \ ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-armv6-mongodb # postgresql docker buildx imagetools create \ -t ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-postgresql \ ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-amd64-postgresql \ ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-arm64-postgresql \ ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-armv7-postgresql \ ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-armv6-postgresql # mariadb docker buildx imagetools create \ -t ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-mariadb \ ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-amd64-mariadb \ ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-arm64-mariadb \ ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-armv7-mariadb \ ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-armv6-mariadb # all (no suffix) docker buildx imagetools create \ -t ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }} \ ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-amd64 \ ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-arm64 \ ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-armv7 \ ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-armv6 # slim docker buildx imagetools create \ -t ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-slim \ ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-amd64-slim \ ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-arm64-slim \ ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-armv7-slim \ ghcr.io/$REPO_OWNER_LC/meshcentral:${{ github.ref_name }}-armv6-slim