diff --git a/.github/workflows/main-docker.yml b/.github/workflows/main-docker.yml index e3f2393b9..0c1be531a 100644 --- a/.github/workflows/main-docker.yml +++ b/.github/workflows/main-docker.yml @@ -33,7 +33,7 @@ jobs: steps: - name: Checkout the repository uses: actions/checkout@v4 - + - name: Set IMAGE_NAME to lowercase run: echo "IMAGE_NAME=${IMAGE_NAME,,}" >> $GITHUB_ENV - name: Set TEST_TAG to lowercase @@ -47,16 +47,16 @@ jobs: with: node-version: 20 cache: "npm" - + - name: Install npm dependencies run: npm ci - name: Install Playwright Browsers run: npx playwright install --with-deps - + - name: Run the TypeScript build run: npx tsc - + - name: Create server-package.json run: cat package.json | grep -v electron > server-package.json @@ -69,12 +69,12 @@ jobs: tags: ${{ env.TEST_TAG }} cache-from: type=gha cache-to: type=gha,mode=max - + - name: Validate container run output run: | CONTAINER_ID=$(docker run -d --log-driver=journald --rm --network=host -e TRILIUM_PORT=8082 --volume ./integration-tests/db:/home/node/trilium-data --name trilium_local ${{ env.TEST_TAG }}) echo "Container ID: $CONTAINER_ID" - + - name: Wait for the healthchecks to pass uses: stringbean/docker-healthcheck-action@v3 with: @@ -82,7 +82,7 @@ jobs: wait-time: 50 require-status: running require-healthy: true - + - name: Run Playwright tests run: TRILIUM_DOCKER=1 npx playwright test - uses: actions/upload-artifact@v4 @@ -100,7 +100,20 @@ jobs: build: name: Build Docker images - runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + include: + - dockerfile: Dockerfile.alpine + platform: linux/amd64 + image: ubuntu-latest + - dockerfile: Dockerfile + platform: linux/arm64 + image: ubuntu-24.04-arm + - dockerfile: Dockerfile + platform: linux/arm/v7 + image: ubuntu-24.04-arm + runs-on: ${{ matrix.image }} needs: - test_docker permissions: @@ -108,16 +121,6 @@ jobs: packages: write attestations: write id-token: write - strategy: - fail-fast: false - matrix: - include: - - dockerfile: Dockerfile.alpine - platform: linux/amd64 - - dockerfile: Dockerfile - platform: linux/arm64 - - dockerfile: Dockerfile - platform: linux/arm/v7 steps: - name: Prepare run: | @@ -144,13 +147,13 @@ jobs: type=sha flavor: | latest=false - + - name: Set up QEMU uses: docker/setup-qemu-action@v3 - + - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - + - name: Set up node & dependencies uses: actions/setup-node@v4 @@ -169,14 +172,14 @@ jobs: registry: ${{ env.GHCR_REGISTRY }} username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - + - name: Login to DockerHub uses: docker/login-action@v3 with: registry: ${{ env.DOCKERHUB_REGISTRY }} username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - + - name: Build and push by digest id: build uses: docker/build-push-action@v6 @@ -186,13 +189,13 @@ jobs: platforms: ${{ matrix.platform }} labels: ${{ steps.meta.outputs.labels }} outputs: type=image,name=${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }},push-by-digest=true,name-canonical=true,push=true - + - name: Export digest run: | mkdir -p /tmp/digests digest="${{ steps.build.outputs.digest }}" touch "/tmp/digests/${digest#sha256:}" - + - name: Upload digest uses: actions/upload-artifact@v4 with: @@ -220,7 +223,7 @@ jobs: - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - + - name: Docker meta id: meta uses: docker/metadata-action@v5 @@ -237,14 +240,14 @@ jobs: registry: ${{ env.GHCR_REGISTRY }} username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - + - name: Login to DockerHub uses: docker/login-action@v3 with: registry: ${{ env.DOCKERHUB_REGISTRY }} username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - + - name: Create manifest list and push working-directory: /tmp/digests run: | @@ -255,7 +258,7 @@ jobs: docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \ -t ${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}:${REF_NAME} \ $(printf '${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}@sha256:%s ' *) - + docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \ -t ${{ env.DOCKERHUB_REGISTRY }}/${{ env.IMAGE_NAME }}:${REF_NAME} \ $(printf '${{ env.DOCKERHUB_REGISTRY }}/${{ env.IMAGE_NAME }}@sha256:%s ' *) @@ -267,25 +270,25 @@ jobs: docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \ -t ${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}:stable \ $(printf '${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}@sha256:%s ' *) - + docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \ -t ${{ env.DOCKERHUB_REGISTRY }}/${{ env.IMAGE_NAME }}:stable \ $(printf '${{ env.DOCKERHUB_REGISTRY }}/${{ env.IMAGE_NAME }}@sha256:%s ' *) - + # Small delay to ensure stable tag is fully propagated sleep 5 - + # Now update latest tags docker buildx imagetools create \ -t ${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}:latest \ ${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}:stable - + docker buildx imagetools create \ -t ${{ env.DOCKERHUB_REGISTRY }}/${{ env.IMAGE_NAME }}:latest \ ${{ env.DOCKERHUB_REGISTRY }}/${{ env.IMAGE_NAME }}:stable - + fi - + - name: Inspect image run: | docker buildx imagetools inspect ${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.meta.outputs.version }}