diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4b9db6e..3854d04 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -10,10 +10,15 @@ on: branches: - "main" +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + jobs: package: name: Package - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 + timeout-minutes: 15 steps: - name: Checkout uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 @@ -32,7 +37,7 @@ jobs: - name: Upload test reports if: always() - uses: actions/upload-artifact@c6a366c94c3e0affe28c06c8df20a878f24da3cf # v3 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 with: name: junit-reports path: | @@ -40,7 +45,7 @@ jobs: if-no-files-found: ignore - name: Upload Maven artifacts - uses: actions/upload-artifact@c6a366c94c3e0affe28c06c8df20a878f24da3cf # v3 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 with: name: maven-artifacts path: | @@ -48,11 +53,40 @@ jobs: startup.sh if-no-files-found: error - docker-main: - name: Docker Build and Push (main) - runs-on: ubuntu-latest + maven-publish: + name: Publish Maven Package + runs-on: ubuntu-24.04 + timeout-minutes: 15 needs: package - if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} + if: ${{ github.event_name == 'push' && (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/')) }} + steps: + - name: Checkout + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + + - name: Set up JDK + uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 + 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-24.04 + timeout-minutes: 15 + needs: package + if: ${{ github.event_name == 'push' }} permissions: contents: read packages: write @@ -61,51 +95,25 @@ jobs: uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 - name: Download build artifacts - uses: actions/download-artifact@a9bc5e6ef2cb54c177f32aa5726adaa15e7e2d59 # v3 + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4 with: name: maven-artifacts path: . - - 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 (main) - uses: docker/build-push-action@d08e5c354a6adb9ed34480a06d141179aa583294 # v7 - with: - context: . - file: ./Dockerfile - push: true - tags: "${{ secrets.REGISTRY_URL }}/${{ secrets.REGISTRY_USER }}/netneutrality:main" - - docker-release: - name: Docker Build and Push (release) - runs-on: ubuntu-latest - needs: package - if: ${{ startsWith(github.ref, 'refs/tags/') }} - permissions: - contents: read - packages: write - steps: - - name: Checkout - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 - - - name: Download build artifacts - uses: actions/download-artifact@a9bc5e6ef2cb54c177f32aa5726adaa15e7e2d59 # v3 - with: - name: maven-artifacts - path: . - - - name: Compute release version - id: rel + - name: Compute Docker tags + id: meta shell: bash run: | - # Strip leading 'v' if present (e.g., v1.2.3 -> 1.2.3) - ver="${GITHUB_REF_NAME#v}" - echo "version=$ver" >> "$GITHUB_OUTPUT" + 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 @@ -114,12 +122,12 @@ jobs: username: ${{ secrets.REGISTRY_USER }} password: ${{ secrets.REGISTRY_PASSWORD }} - - name: Build and push (release + latest) + - name: Build and push uses: docker/build-push-action@d08e5c354a6adb9ed34480a06d141179aa583294 # v7 with: context: . file: ./Dockerfile push: true - tags: | - ${{ secrets.REGISTRY_URL }}/${{ secrets.REGISTRY_USER }}/netneutrality:${{ steps.rel.outputs.version }} - ${{ secrets.REGISTRY_URL }}/${{ secrets.REGISTRY_USER }}/netneutrality:latest + tags: ${{ steps.meta.outputs.tags }} + cache-from: type=gha + cache-to: type=gha,mode=max