name: docker-buildx on: pull_request: branches: - master - experimental push: branches: - '**' tags: - '*.*' workflow_dispatch: jobs: test: runs-on: ubuntu-latest strategy: matrix: node-version: [22.x] steps: - uses: getong/mariadb-action@v1.11 with: mysql database: 'pigallery_test' mysql root password: 'password' mysql user: 'user' mysql password: 'password' - uses: actions/checkout@v4 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} - name: Verify MariaDB connection env: PORT: ${{ job.services.mariadb.ports[3306] }} run: | while ! mysqladmin ping -h"127.0.0.1" -P"$PORT" --silent; do sleep 1 done - name: npm install and build run: | npm ci npm run build - name: lint run: | npm run lint - name: test run: | npm test npm run coverage env: MYSQL_HOST: localhost MYSQL_USERNAME: root MYSQL_PASSWORD: password MYSQL_PORT: ${{ job.services.mariadb.ports[3306] }} PORT: 35000 CI: true - name: Coveralls uses: coverallsapp/github-action@v2 - name: E2E test - Cypress run uses: cypress-io/github-action@v6 env: DEBUG: '@cypress/github-action' with: start: npm run start-e2e-server # after the test run completes store screenshots - uses: actions/upload-artifact@v4 if: failure() # Store screenshots only on failures with: name: cypress-screenshots path: test/cypress/screenshots if-no-files-found: ignore # 'warn' or 'error' are also available, defaults to `warn` create-release: runs-on: [ubuntu-latest] steps: - name: Checkout uses: actions/checkout@v4 - name: Setup Node.js for use with actions uses: actions/setup-node@v4 with: node-version: 22 - name: Install Deps run: npm install --unsafe-perm - name: Create Release run: npm run create-release -- --skip-opt-packages=ffmpeg-static,ffprobe-static --force-opt-packages - uses: actions/upload-artifact@v4 with: name: pigallery2-release path: release build-dockerx: runs-on: [ ubuntu-latest ] needs: [ test, create-release ] strategy: matrix: container: [alpine, debian-trixie ] include: - container: alpine platforms: linux/amd64,linux/arm64, linux/arm/v7 - container: debian-trixie platforms: linux/amd64,linux/arm64 steps: - name: Checkout uses: actions/checkout@v4 - uses: actions/download-artifact@v4 with: name: pigallery2-release path: pigallery2-release - name: Set up QEMU uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Login to DockerHub uses: docker/login-action@v3 with: username: ${{ secrets.REGISTRY_USERNAME }} password: ${{ secrets.REGISTRY_PASSWORD }} - name: Build docker uses: docker/build-push-action@v5 with: context: . file: docker/${{ matrix.container }}/Dockerfile.build platforms: ${{ matrix.platforms }} - name: Push experimental if: ${{ github.ref == 'refs/heads/experimental' }} uses: docker/build-push-action@v5 with: context: . file: docker/${{ matrix.container }}/Dockerfile.build platforms: ${{ matrix.platforms }} push: true tags: ${{ secrets.REGISTRY_NAMESPACE }}/pigallery2:experimental-${{ matrix.container }} - name: Push secondary edge builds on new master commit # github.ref: branches the format is refs/heads/ PRs and Tags are different if: ${{github.ref == 'refs/heads/master' && matrix.container != 'debian-trixie'}} uses: docker/build-push-action@v5 with: context: . file: docker/${{ matrix.container }}/Dockerfile.build platforms: ${{ matrix.platforms }} push: true tags: ${{ secrets.REGISTRY_NAMESPACE }}/pigallery2:edge-${{ matrix.container }} - name: Push main edge build on new master commit if: ${{github.ref == 'refs/heads/master' && matrix.container == 'debian-trixie'}} uses: docker/build-push-action@v5 with: context: . file: docker/${{ matrix.container }}/Dockerfile.build platforms: ${{ matrix.platforms }} push: true tags: | ${{ secrets.REGISTRY_NAMESPACE }}/pigallery2:edge ${{ secrets.REGISTRY_NAMESPACE }}/pigallery2:edge-${{ matrix.container }} - name: Push release on new Tag if: ${{ startsWith(github.ref_type , 'tag') && !github.event.issue.pull_request && matrix.container != 'debian-trixie'}} uses: docker/build-push-action@v5 with: context: . file: docker/${{ matrix.container }}/Dockerfile.build platforms: ${{ matrix.platforms }} push: true tags: | ${{ secrets.REGISTRY_NAMESPACE }}/pigallery2:edge-${{ matrix.container }} ${{ secrets.REGISTRY_NAMESPACE }}/pigallery2:${{ github.ref_name }}-${{ matrix.container }} ${{ secrets.REGISTRY_NAMESPACE }}/pigallery2:latest-${{ matrix.container }} - name: Push latest on new Tag if: ${{ startsWith(github.ref_type, 'tag') && !github.event.issue.pull_request && matrix.container == 'debian-trixie'}} uses: docker/build-push-action@v5 with: context: . file: docker/${{ matrix.container }}/Dockerfile.build platforms: ${{ matrix.platforms }} push: true tags: | ${{ secrets.REGISTRY_NAMESPACE }}/pigallery2:edge-${{ matrix.container }} ${{ secrets.REGISTRY_NAMESPACE }}/pigallery2:${{ github.ref_name }}-${{ matrix.container }} ${{ secrets.REGISTRY_NAMESPACE }}/pigallery2:latest-${{ matrix.container }} ${{ secrets.REGISTRY_NAMESPACE }}/pigallery2:${{ github.ref_name }} ${{ secrets.REGISTRY_NAMESPACE }}/pigallery2:latest