diff --git a/.github/scripts/update-spring-versions.py b/.github/scripts/update-spring-versions.py deleted file mode 100644 index 1578b97..0000000 --- a/.github/scripts/update-spring-versions.py +++ /dev/null @@ -1,67 +0,0 @@ -import json -import re -from collections import defaultdict -from packaging.version import Version -from xml.etree import ElementTree as ET -import urllib.request - -# Configuration -managed_minors = {"3.4"} -boot_java_compatibility = { - "3.4": ["17", "21"] -} -output_path = ".github/spring-versions.json" - -# Step 1: Fetch Spring Boot versions -metadata_url = "https://repo1.maven.org/maven2/org/springframework/boot/spring-boot-starter/maven-metadata.xml" -with urllib.request.urlopen(metadata_url) as response: - xml_data = response.read() - -root = ET.fromstring(xml_data) -versions = [v.text for v in root.findall(".//version")] - -boot_versions = defaultdict(list) -for v in versions: - if not re.match(r"^\d+\.\d+\.\d+$", v): - continue - minor = ".".join(v.split(".")[:2]) - if minor in managed_minors: - boot_versions[minor].append(Version(v)) - -latest_boot_versions = {minor: str(max(vlist)) for minor, vlist in boot_versions.items()} - -# Step 2: Resolve Spring Framework version -def get_spring_framework_version(boot_version: str) -> str: - pom_url = f"https://repo1.maven.org/maven2/org/springframework/boot/spring-boot-starter/{boot_version}/spring-boot-starter-{boot_version}.pom" - try: - with urllib.request.urlopen(pom_url) as response: - pom_data = response.read() - pom_root = ET.fromstring(pom_data) - ns = {'m': 'http://maven.apache.org/POM/4.0.0'} - for dep in pom_root.findall(".//m:dependency", ns): - gid = dep.find("m:groupId", ns) - aid = dep.find("m:artifactId", ns) - ver = dep.find("m:version", ns) - if gid is not None and aid is not None and ver is not None: - if gid.text == "org.springframework" and aid.text == "spring-core": - return ver.text - except Exception as e: - print(f"Warning: Failed to fetch framework version for {boot_version}: {e}") - return "unknown" - -# Step 3: Build matrix -matrix_entries = [] -for minor, boot_version in sorted(latest_boot_versions.items()): - framework_version = get_spring_framework_version(boot_version) - for java_version in boot_java_compatibility.get(minor, []): - matrix_entries.append({ - "boot": boot_version, - "framework": framework_version, - "java": str(java_version) - }) - -# Step 4: Save result -with open(output_path, "w") as f: - json.dump({"matrix": matrix_entries}, f, indent=2) - -print(f"Updated {output_path} with {len(matrix_entries)} matrix entries.") diff --git a/.github/spring-versions.json b/.github/spring-versions.json deleted file mode 100644 index cc14e9b..0000000 --- a/.github/spring-versions.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "matrix": [ - { - "boot": "3.4.13", - "framework": "6.2.15", - "java": "17" - }, - { - "boot": "3.4.13", - "framework": "6.2.15", - "java": "21" - } - ] -} \ No newline at end of file diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 7001910..a61c48e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -8,57 +8,18 @@ on: branches: [ "master" ] workflow_dispatch: -jobs: - generate-matrix: - runs-on: ubuntu-latest - outputs: - matrix: ${{ steps.set-matrix.outputs.matrix }} - name: Generate version matrix - steps: - - uses: actions/checkout@v6 - - name: Read matrix from JSON - id: set-matrix - run: | - MATRIX=$(jq -c '.matrix' .github/spring-versions.json) - echo "matrix={\"include\":$MATRIX}" >> $GITHUB_OUTPUT - - regression-tests: - needs: generate-matrix - runs-on: ubuntu-latest - strategy: - fail-fast: false - matrix: ${{ fromJson(needs.generate-matrix.outputs.matrix) }} - name: Test Spring Boot ${{ matrix.boot }} / Java ${{ matrix.java }} - steps: - - name: Checkout code - uses: actions/checkout@v6 - with: - fetch-depth: 0 - - - name: Setup Java - uses: actions/setup-java@v5 - with: - distribution: temurin - java-version: ${{ matrix.java }} +env: + DEFAULT_JAVA_VERSION: '17' - - name: Run tests and generate reports - run: ./gradlew testAndReport -PspringBootVersion=${{ matrix.boot }} -PspringFrameworkVersion=${{ matrix.framework }} - - - name: Upload Artifact - uses: actions/upload-artifact@v6 - if: always() - with: - name: report-java-${{ matrix.java }}-spring-boot-${{ matrix.boot }} - path: build/reports/** - retention-days: 5 +jobs: test: runs-on: ubuntu-latest strategy: fail-fast: false matrix: - java: [ '17', '21' ] - name: Test Spring Boot latest / Java ${{ matrix.java }} + java: [ '17', '21', '25' ] + name: Test with Java ${{ matrix.java }} steps: - name: Checkout code uses: actions/checkout@v6 @@ -78,13 +39,13 @@ jobs: uses: actions/upload-artifact@v6 if: always() with: - name: report-java-${{ matrix.java }}-spring-boot-latest + name: report-java-${{ matrix.java }} path: build/reports/** retention-days: 5 - name: Run Sonar analysis # Skip Sonar on Dependabot in pull_request runs (no secrets there); handled by a separate job below - if: matrix.java == '17' && github.actor != 'dependabot[bot]' + if: matrix.java == env.DEFAULT_JAVA_VERSION && github.actor != 'dependabot[bot]' env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} @@ -111,7 +72,7 @@ jobs: uses: actions/setup-java@v5 with: distribution: temurin - java-version: '17' + java-version: ${{ env.DEFAULT_JAVA_VERSION }} - name: Build (no tests) run: ./gradlew assemble -x test @@ -133,7 +94,7 @@ jobs: uses: actions/setup-java@v5 with: distribution: temurin - java-version: 17 + java-version: ${{ env.DEFAULT_JAVA_VERSION }} - name: Run build with Gradle Wrapper run: ./gradlew build -x test diff --git a/.github/workflows/update-spring-versions.yml b/.github/workflows/update-spring-versions.yml deleted file mode 100644 index 8d152fe..0000000 --- a/.github/workflows/update-spring-versions.yml +++ /dev/null @@ -1,38 +0,0 @@ -name: Update Spring Versions Matrix - -on: - schedule: - - cron: '0 3 1 * *' # Monthly on the 1st at 03:00 UTC - workflow_dispatch: # Allow manual trigger as well - -jobs: - update-matrix: - runs-on: ubuntu-latest - - steps: - - name: Checkout repository - uses: actions/checkout@v6 - - - name: Set up Python - uses: actions/setup-python@v6 - with: - python-version: '3.x' - - - name: Install Python dependencies - run: pip install packaging - - - name: Run update script - run: python .github/scripts/update-spring-versions.py - - - name: Create Pull Request - uses: peter-evans/create-pull-request@v8 - with: - commit-message: "chore: update Spring Boot/Framework testing matrix" - title: "Update Spring Versions Matrix" - body: | - This PR updates the `spring-versions.json` matrix with the latest patch versions of Spring Boot and their corresponding Spring Framework versions for Java 17 and 21. - branch: update/spring-versions-matrix - labels: | - dependencies - spring - author: github-actions[bot] diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 1b33c55..f8e1ee3 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 002b867..23449a2 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.1-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index 23d15a9..adff685 100755 --- a/gradlew +++ b/gradlew @@ -1,7 +1,7 @@ #!/bin/sh # -# Copyright © 2015-2021 the original authors. +# Copyright © 2015 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -114,7 +114,6 @@ case "$( uname )" in #( NONSTOP* ) nonstop=true ;; esac -CLASSPATH="\\\"\\\"" # Determine the Java command to use to start the JVM. @@ -172,7 +171,6 @@ fi # For Cygwin or MSYS, switch paths to Windows format before running java if "$cygwin" || "$msys" ; then APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) JAVACMD=$( cygpath --unix "$JAVACMD" ) @@ -212,7 +210,6 @@ DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ "$@" diff --git a/gradlew.bat b/gradlew.bat index db3a6ac..c4bdd3a 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -70,11 +70,10 @@ goto fail :execute @rem Setup the command line -set CLASSPATH= @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* :end @rem End local scope for the variables with windows NT shell