name: Docker on: pull_request: paths-ignore: - 'doc/**' push: branches: - 'develop' paths-ignore: - 'doc/**' tags: - 'v?[0-9]+.[0-9]+.[0-9]+' env: TEST_TAG: etherpad/etherpad:test permissions: contents: read jobs: docker: runs-on: ubuntu-latest steps: - name: Check out uses: actions/checkout@v4 - name: Set up QEMU if: github.event_name == 'push' uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Build and export to Docker uses: docker/build-push-action@v6 with: context: . target: production load: true tags: ${{ env.TEST_TAG }} cache-from: type=gha cache-to: type=gha,mode=max - name: Set up Node.js uses: actions/setup-node@v4 with: node-version: 'lts/*' - uses: pnpm/action-setup@v4 name: Install pnpm with: version: 9.0.4 run_install: false - name: Get pnpm store directory shell: bash run: | echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV - uses: actions/cache@v4 name: Setup pnpm cache with: path: ${{ env.STORE_PATH }} key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} restore-keys: | ${{ runner.os }}-pnpm-store- - name: Test run: | docker run --rm -d -p 9001:9001 --name test ${{ env.TEST_TAG }} ./bin/installDeps.sh docker logs -f test & while true; do echo "Waiting for Docker container to start..." status=$(docker container inspect -f '{{.State.Health.Status}}' test) || exit 1 case ${status} in healthy) break;; starting) sleep 2;; *) printf %s\\n "unexpected status: ${status}" >&2; exit 1;; esac done (cd src && pnpm run test-container) git clean -dxf . - name: Docker meta if: github.event_name == 'push' id: meta uses: docker/metadata-action@v5 with: images: etherpad/etherpad tags: | type=ref,event=branch type=semver,pattern={{version}} type=semver,pattern={{major}}.{{minor}} type=semver,pattern={{major}} - name: Log in to Docker Hub if: github.event_name == 'push' uses: docker/login-action@v3 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Build and push if: github.event_name == 'push' uses: docker/build-push-action@v6 with: context: . target: production platforms: linux/amd64,linux/arm64 push: true tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} - name: Update repo description uses: peter-evans/dockerhub-description@v4 if: github.ref == 'refs/heads/master' with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} repository: etherpad/etherpad enable-url-completion: true