name: Build docker images on: push: branches: - master permissions: contents: read packages: write jobs: build: name: build (${{ matrix.package }}, ${{ matrix.platform.tag_suffix }}) runs-on: ${{ matrix.platform.runner }} strategy: matrix: package: - default - cdn - api - gateway - webrtc - admin-api - cdn-cs - offload platform: - runner: ubuntu-latest tag_suffix: amd64 - runner: ubuntu-26.04-arm tag_suffix: arm64 steps: - name: Set up environment run: | if [ "${{ matrix.package }}" = "default" ]; then SUFFIX=""; else SUFFIX="-${{ matrix.package }}"; fi echo "SUFFIX=${SUFFIX}" >> "$GITHUB_ENV" echo "REPO=ghcr.io/${GITHUB_REPOSITORY,,}${SUFFIX}" >> "$GITHUB_ENV" echo "SHA=${GITHUB_SHA:0:7}" >> "$GITHUB_ENV" - uses: actions/checkout@v7 - uses: cachix/install-nix-action@v31 with: extra_nix_config: | system-features = nixos-test benchmark big-parallel kvm trusted-public-keys = cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= nix-bincache.rory.gay:663PIW8xxgIImxLcsokODWI2PHFWXvzJEfjX6TaIjxQ= trusted-substituters = https://cache.nixos.org https://nix-bincache.rory.gay - name: Build the docker image run: nix build --accept-flake-config .#containers.$(nix eval --impure --raw --expr 'builtins.currentSystem').docker.${{ matrix.package }} - run: docker image load < result - name: Log in to the Container registry uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Tag and push the image run: | IMAGE_ID=$(docker image ls spacebar-server-ts${SUFFIX} --format '{{.ID}}') docker image tag $IMAGE_ID ${REPO}:sha-${SHA}-${{ matrix.platform.tag_suffix }} docker image push ${REPO}:sha-${SHA}-${{ matrix.platform.tag_suffix }} build-multiplatform: needs: build runs-on: ubuntu-latest strategy: matrix: package: - default - cdn - api - gateway - webrtc - admin-api - cdn-cs - offload steps: - name: Set up environment run: | if [ "${{ matrix.package }}" = "default" ]; then SUFFIX=""; else SUFFIX="-${{ matrix.package }}"; fi echo "SUFFIX=${SUFFIX}" >> "$GITHUB_ENV" echo "REPO=ghcr.io/${GITHUB_REPOSITORY,,}${SUFFIX}" >> "$GITHUB_ENV" echo "SHA=${GITHUB_SHA:0:7}" >> "$GITHUB_ENV" - name: Log in to the Container registry uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Set up Docker Buildx uses: docker/setup-buildx-action@v4 - name: Publish multi-platform image run: | docker buildx imagetools create \ --tag "${REPO}:sha-${SHA}" \ --tag "${REPO}:latest" \ "${REPO}:sha-${SHA}-amd64" \ "${REPO}:sha-${SHA}-arm64"