name: CI on: push: branches: - "main" tags: - '*' pull_request: branches: - "main" jobs: package: name: Package runs-on: ubuntu-latest 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' - name: Build package run: | chmod +x ./mvnw ./mvnw --batch-mode --update-snapshots verify - name: Upload test reports if: always() uses: actions/upload-artifact@c6a366c94c3e0affe28c06c8df20a878f24da3cf # v3 with: name: junit-reports path: | **/target/*-reports/TEST-*.xml if-no-files-found: ignore - name: Upload Maven artifacts uses: actions/upload-artifact@c6a366c94c3e0affe28c06c8df20a878f24da3cf # v3 with: name: maven-artifacts path: | target/netneutrality.jar startup.sh if-no-files-found: error docker-main: name: Docker Build and Push (main) runs-on: ubuntu-latest needs: package if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} permissions: contents: read packages: write steps: - name: Checkout uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 - name: Download build artifacts uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a # v3 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@9bc31d5ccc31df68ecc42ccf4149144866c47d8a # v3 with: name: maven-artifacts path: . - name: Compute release version id: rel 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" - 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 (release + latest) 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