name: CI on: push: branches: - "main" tags: - '*' pull_request: branches: - "main" concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: package: name: Package runs-on: ubuntu-26.04 timeout-minutes: 15 steps: - name: Checkout uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - name: Set up JDK uses: actions/setup-java@b843ebf9b913146b38da2eaa7aeddf76074ae1ad # v6 with: distribution: 'temurin' java-version: '25' cache: 'maven' - name: Build package run: | chmod +x ./mvnw ./mvnw --batch-mode --update-snapshots verify - name: Upload test reports if: always() uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7 with: name: junit-reports path: | **/target/*-reports/TEST-*.xml if-no-files-found: ignore - name: Upload Maven artifacts uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7 with: name: maven-artifacts path: | target/netneutrality.jar startup.sh if-no-files-found: error maven-publish: name: Publish Maven Package runs-on: ubuntu-26.04 timeout-minutes: 15 needs: package if: ${{ github.event_name == 'push' && (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/')) }} steps: - name: Checkout uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - name: Set up JDK uses: actions/setup-java@b843ebf9b913146b38da2eaa7aeddf76074ae1ad # v6 with: distribution: 'temurin' java-version: '25' cache: 'maven' server-id: gitea server-username: REGISTRY_USER server-password: REGISTRY_PASSWORD - name: Publish Maven package run: | chmod +x ./mvnw ./mvnw --batch-mode deploy -DskipTests env: REGISTRY_USER: ${{ secrets.REGISTRY_USER }} REGISTRY_PASSWORD: ${{ secrets.REGISTRY_PASSWORD }} docker: name: Docker Build and Push runs-on: ubuntu-26.04 timeout-minutes: 15 needs: package if: ${{ github.event_name == 'push' }} permissions: contents: read packages: write steps: - name: Checkout uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - name: Download build artifacts uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8 with: name: maven-artifacts path: . - name: Compute Docker tags id: meta shell: bash run: | REGISTRY="${{ secrets.REGISTRY_URL }}/${{ secrets.REGISTRY_USER }}/netneutrality" if [[ "$GITHUB_REF" == refs/tags/* ]]; then ver="${GITHUB_REF_NAME#v}" echo "tags=${REGISTRY}:${ver},${REGISTRY}:latest" >> "$GITHUB_OUTPUT" else echo "tags=${REGISTRY}:main" >> "$GITHUB_OUTPUT" fi - name: Set up Docker Buildx uses: docker/setup-buildx-action@v4 - name: Log in to registry uses: docker/login-action@b45d80f862d83dbcd57f89517bcf500b2ab88fb2 # v4 with: registry: ${{ secrets.REGISTRY_URL }} username: ${{ secrets.REGISTRY_USER }} password: ${{ secrets.REGISTRY_PASSWORD }} - name: Build and push uses: docker/build-push-action@d08e5c354a6adb9ed34480a06d141179aa583294 # v7 with: context: . file: ./Dockerfile push: true tags: ${{ steps.meta.outputs.tags }} cache-from: type=registry,ref=${{ secrets.REGISTRY_URL }}/${{ secrets.REGISTRY_USER }}/netneutrality:buildcache cache-to: type=registry,ref=${{ secrets.REGISTRY_URL }}/${{ secrets.REGISTRY_USER }}/netneutrality:buildcache,mode=max