name: ci on: push: pull_request: branches-ignore: - 'renovate/**' env: JAVA_VERSION: 21 DOCKER_BUILD_SUMMARY: false jobs: build: strategy: matrix: os: [ "ubuntu-latest", "ubuntu-24.04-arm", "windows-latest" ] database: [ "h2", "postgresql", "mysql", "mariadb" ] runs-on: ${{ matrix.os }} steps: # Checkout - name: Configure git to checkout as-is run: git config --global core.autocrlf false - name: Checkout uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 with: fetch-depth: 0 # Setup - name: Set up GraalVM uses: graalvm/setup-graalvm@aafbedb8d382ed0ca6167d3a051415f20c859274 # v1 with: java-version: ${{ env.JAVA_VERSION }} distribution: "graalvm" cache: "maven" - name: Install Playwright dependencies run: sudo apt-get install -y libgbm1 if: matrix.os != 'windows-latest' # Build & Test - name: Build with Maven run: mvn --batch-mode --no-transfer-progress install -Pnative -P${{ matrix.database }} -DskipTests=${{ matrix.os == 'windows-latest' && matrix.database != 'h2' }} # Upload artifacts - name: Upload cross-platform app uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4 if: matrix.os == 'ubuntu-latest' # we only need to upload the cross-platform artifact once per database with: name: commafeed-${{ matrix.database }}-jvm path: commafeed-server/target/commafeed-*.zip - name: Upload native executable uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4 with: name: commafeed-${{ matrix.database }}-${{ runner.os }}-${{ runner.arch }} path: commafeed-server/target/commafeed-*-runner* docker: runs-on: ubuntu-latest needs: build if: ${{ github.ref_type == 'tag' || github.ref_name == 'master' }} strategy: matrix: database: [ "h2", "postgresql", "mysql", "mariadb" ] steps: # Checkout - name: Checkout uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 with: fetch-depth: 0 # Setup - name: Set up QEMU uses: docker/setup-qemu-action@53851d14592bedcffcf25ea515637cff71ef929a # v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@6524bf65af31da8d45b59e8c27de4bd072b392f5 # v3 - name: Install required packages run: sudo apt-get install -y rename unzip # Prepare artifacts - name: Download artifacts uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4 with: pattern: commafeed-${{ matrix.database }}-* path: ./artifacts merge-multiple: true - name: Set the exec flag on the native executables run: chmod +x artifacts/*-runner - name: Rename native executables to match buildx TARGETARCH run: | rename 's/x86_64/amd64/g' artifacts/* rename 's/aarch_64/arm64/g' artifacts/* - name: Unzip jvm package run: | unzip artifacts/*-jvm.zip -d artifacts/extracted-jvm-package rename 's/commafeed-.*/quarkus-app/g' artifacts/extracted-jvm-package/* # Docker - name: Login to Container Registry uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} ## tags - name: Docker build and push tag - native uses: docker/build-push-action@67a2d409c0a876cbe6b11854e3e25193efe4e62d # v6 if: ${{ github.ref_type == 'tag' }} with: context: . file: commafeed-server/src/main/docker/Dockerfile.native push: true platforms: linux/amd64,linux/arm64/v8 tags: | athou/commafeed:latest-${{ matrix.database }} athou/commafeed:${{ github.ref_name }}-${{ matrix.database }} - name: Docker build and push tag - jvm uses: docker/build-push-action@67a2d409c0a876cbe6b11854e3e25193efe4e62d # v6 if: ${{ github.ref_type == 'tag' }} with: context: . file: commafeed-server/src/main/docker/Dockerfile.jvm push: true platforms: linux/amd64,linux/arm64/v8 tags: | athou/commafeed:latest-${{ matrix.database }}-jvm athou/commafeed:${{ github.ref_name }}-${{ matrix.database }}-jvm ## master - name: Docker build and push master - native uses: docker/build-push-action@67a2d409c0a876cbe6b11854e3e25193efe4e62d # v6 if: ${{ github.ref_name == 'master' }} with: context: . file: commafeed-server/src/main/docker/Dockerfile.native push: true platforms: linux/amd64,linux/arm64/v8 tags: athou/commafeed:master-${{ matrix.database }} - name: Docker build and push master - jvm uses: docker/build-push-action@67a2d409c0a876cbe6b11854e3e25193efe4e62d # v6 if: ${{ github.ref_name == 'master' }} with: context: . file: commafeed-server/src/main/docker/Dockerfile.jvm push: true platforms: linux/amd64,linux/arm64/v8 tags: athou/commafeed:master-${{ matrix.database }}-jvm release: runs-on: ubuntu-latest needs: - build if: github.ref_type == 'tag' steps: - name: Checkout uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 with: fetch-depth: 0 - name: Download artifacts uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4 with: pattern: commafeed-* path: ./artifacts merge-multiple: true - name: Set the exec flag on the native executables run: chmod +x artifacts/*-runner - name: Extract Changelog Entry uses: mindsers/changelog-reader-action@32aa5b4c155d76c94e4ec883a223c947b2f02656 # v2 id: changelog_reader with: version: ${{ github.ref_name }} - name: Create GitHub release uses: ncipollo/release-action@cdcc88a9acf3ca41c16c37bb7d21b9ad48560d87 # v1 with: name: CommaFeed ${{ github.ref_name }} body: ${{ steps.changelog_reader.outputs.changes }} artifacts: ./artifacts/* - name: Update Docker Hub Description uses: peter-evans/dockerhub-description@e98e4d1628a5f3be2be7c231e50981aee98723ae # v4 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} repository: athou/commafeed short-description: ${{ github.event.repository.description }} readme-filepath: commafeed-server/src/main/docker/README.md