name: ci permissions: contents: read on: push: pull_request: env: JAVA_VERSION: 25 DOCKER_BUILD_SUMMARY: false jobs: build: if: github.event_name != 'pull_request' || github.actor != 'renovate[bot]' # renovate already triggers the build on pushes strategy: matrix: os: [ "ubuntu-latest", "ubuntu-22.04-arm", "windows-latest" ] database: [ "h2", "postgresql", "mysql", "mariadb" ] runs-on: ${{ matrix.os }} steps: # Checkout - name: Checkout uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: fetch-depth: 0 # Setup - name: Set up GraalVM uses: graalvm/setup-graalvm@0def53c0fd8534bc13416c9469f5be45265824fd # v1.6.3 with: java-version: ${{ env.JAVA_VERSION }} distribution: "graalvm" cache: "maven" - name: Set up NodeJS cache uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: cache: "npm" cache-dependency-path: 'commafeed-client/package-lock.json' - 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' }} # Build pages - name: Create pages directory structure run: mkdir -p target/pages/documentation/custom-css - name: Convert readme file to html uses: jaywcjlove/markdown-to-html-cli@cff9330af4ca8048b197a76d9eb1db189c2a7cee # v5.0.4 with: source: README.md output: target/pages/index.html - name: Convert config documentation to html uses: jaywcjlove/markdown-to-html-cli@cff9330af4ca8048b197a76d9eb1db189c2a7cee # v5.0.4 with: source: commafeed-server/target/quarkus-generated-doc/config/commafeed-server.md output: target/pages/documentation/index.html - name: Convert custom css documentation to html uses: jaywcjlove/markdown-to-html-cli@cff9330af4ca8048b197a76d9eb1db189c2a7cee # v5.0.4 with: source: documentation/CUSTOMCSS.md output: target/pages/documentation/custom-css/index.html # Upload artifacts - name: Upload cross-platform app uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 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@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: commafeed-${{ matrix.database }}-${{ runner.os }}-${{ runner.arch }} path: commafeed-server/target/commafeed-*-runner* - name: Upload pages uses: actions/upload-pages-artifact@fc324d3547104276b827a68afc52ff2a11cc49c9 # v5.0.0 if: matrix.os == 'ubuntu-latest' && matrix.database == 'h2' # we only need to upload the pages once with: path: target/pages docker: runs-on: ubuntu-latest needs: build env: DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }} strategy: matrix: database: [ "h2", "postgresql", "mysql", "mariadb" ] steps: # Checkout - name: Checkout uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: fetch-depth: 0 # Setup - name: Set up QEMU uses: docker/setup-qemu-action@96fe6ef7f33517b61c61be40b68a1882f3264fb8 # v4.2.0 - name: Set up Docker Buildx uses: docker/setup-buildx-action@bb05f3f5519dd87d3ba754cc423b652a5edd6d2c # v4.2.0 - name: Install required packages run: sudo apt-get install -y rename unzip # Prepare artifacts - name: Download artifacts uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 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@af1e73f918a031802d376d3c8bbc3fe56130a9b0 # v4.4.0 if: ${{ env.DOCKERHUB_USERNAME != '' }} with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} ## build but don't push for PRs and renovate - name: Docker build - native uses: docker/build-push-action@53b7df96c91f9c12dcc8a07bcb9ccacbed38856a # v7.3.0 with: context: . file: commafeed-server/src/main/docker/Dockerfile.native push: false platforms: linux/amd64,linux/arm64/v8 - name: Docker build - jvm uses: docker/build-push-action@53b7df96c91f9c12dcc8a07bcb9ccacbed38856a # v7.3.0 with: context: . file: commafeed-server/src/main/docker/Dockerfile.jvm push: false platforms: linux/amd64,linux/arm64/v8 ## build and push tag - name: Docker build and push tag - native uses: docker/build-push-action@53b7df96c91f9c12dcc8a07bcb9ccacbed38856a # v7.3.0 if: ${{ github.ref_type == 'tag' }} with: context: . file: commafeed-server/src/main/docker/Dockerfile.native push: ${{ env.DOCKERHUB_USERNAME != '' }} 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@53b7df96c91f9c12dcc8a07bcb9ccacbed38856a # v7.3.0 if: ${{ github.ref_type == 'tag' }} with: context: . file: commafeed-server/src/main/docker/Dockerfile.jvm push: ${{ env.DOCKERHUB_USERNAME != '' }} platforms: linux/amd64,linux/arm64/v8 tags: | athou/commafeed:latest-${{ matrix.database }}-jvm athou/commafeed:${{ github.ref_name }}-${{ matrix.database }}-jvm ## build and push master - name: Docker build and push master - native uses: docker/build-push-action@53b7df96c91f9c12dcc8a07bcb9ccacbed38856a # v7.3.0 if: ${{ github.ref_name == 'master' }} with: context: . file: commafeed-server/src/main/docker/Dockerfile.native push: ${{ env.DOCKERHUB_USERNAME != '' }} platforms: linux/amd64,linux/arm64/v8 tags: athou/commafeed:master-${{ matrix.database }} - name: Docker build and push master - jvm uses: docker/build-push-action@53b7df96c91f9c12dcc8a07bcb9ccacbed38856a # v7.3.0 if: ${{ github.ref_name == 'master' }} with: context: . file: commafeed-server/src/main/docker/Dockerfile.jvm push: ${{ env.DOCKERHUB_USERNAME != '' }} platforms: linux/amd64,linux/arm64/v8 tags: athou/commafeed:master-${{ matrix.database }}-jvm release: runs-on: ubuntu-latest needs: - build - docker permissions: contents: write if: github.ref_type == 'tag' steps: - name: Checkout uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: fetch-depth: 0 - name: Download artifacts uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 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@1faaf50aa09d5793d9a100819973df801febfb31 # v2.4.0 id: changelog_reader with: version: ${{ github.ref_name }} - name: Create GitHub release uses: ncipollo/release-action@339a81892b84b4eeb0f6e744e4574d79d0d9b8dd # v1.21.0 with: name: CommaFeed ${{ github.ref_name }} body: ${{ steps.changelog_reader.outputs.changes }} artifacts: ./artifacts/* update-dockerhub-description: runs-on: ubuntu-latest needs: release steps: - name: Checkout uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: fetch-depth: 0 - name: Update Docker Hub Description uses: peter-evans/dockerhub-description@1b9a80c056b620d92cedb9d9b5a223409c68ddfa # v5.0.0 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 deploy-pages: runs-on: ubuntu-latest needs: release permissions: pages: write id-token: write environment: name: github-pages url: ${{ steps.deployment.outputs.page_url }} steps: - uses: actions/deploy-pages@cd2ce8fcbc39b97be8ca5fce6e763baed58fa128 # v5.0.0 id: deployment