name: publish-platform-image # Builds and pushes the platform Docker images to GHCR whenever a commit # lands on main. EC2 tenant instances pull the tenant image from GHCR. on: push: branches: [main] paths: - 'workspace-server/**' - 'canvas/**' - 'manifest.json' - '.github/workflows/publish-platform-image.yml' workflow_dispatch: permissions: contents: read packages: write env: IMAGE_NAME: ghcr.io/molecule-ai/platform TENANT_IMAGE_NAME: ghcr.io/molecule-ai/platform-tenant jobs: build-and-push: runs-on: [self-hosted, macos, arm64] steps: - name: Checkout uses: actions/checkout@v4 - name: Configure GHCR auth shell: bash env: GHCR_USER: ${{ github.actor }} GHCR_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | set -eu mkdir -p "${RUNNER_TEMP}/docker-config" GHCR_AUTH=$(printf '%s:%s' "${GHCR_USER}" "${GHCR_TOKEN}" | base64) umask 077 printf '{"auths":{"ghcr.io":{"auth":"%s"}}}' "${GHCR_AUTH}" > "${RUNNER_TEMP}/docker-config/config.json" echo "DOCKER_CONFIG=${RUNNER_TEMP}/docker-config" >> "${GITHUB_ENV}" - name: Set up QEMU uses: docker/setup-qemu-action@v3 with: platforms: linux/amd64 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Compute tags id: tags run: | echo "sha=${GITHUB_SHA::7}" >> "$GITHUB_OUTPUT" - name: Build & push platform image to GHCR uses: docker/build-push-action@v5 with: context: . file: ./workspace-server/Dockerfile platforms: linux/amd64 push: true tags: | ${{ env.IMAGE_NAME }}:latest ${{ env.IMAGE_NAME }}:sha-${{ steps.tags.outputs.sha }} cache-from: type=gha cache-to: type=gha,mode=max labels: | org.opencontainers.image.source=https://github.com/${{ github.repository }} org.opencontainers.image.revision=${{ github.sha }} org.opencontainers.image.description=Molecule AI platform (Go API server) - name: Build & push tenant image to GHCR uses: docker/build-push-action@v5 with: context: . file: ./workspace-server/Dockerfile.tenant platforms: linux/amd64 push: true tags: | ${{ env.TENANT_IMAGE_NAME }}:latest ${{ env.TENANT_IMAGE_NAME }}:sha-${{ steps.tags.outputs.sha }} cache-from: type=gha cache-to: type=gha,mode=max labels: | org.opencontainers.image.source=https://github.com/${{ github.repository }} org.opencontainers.image.revision=${{ github.sha }} org.opencontainers.image.description=Molecule AI tenant platform + canvas (one EC2 instance per org)