diff --git a/.github/workflows/maven-pulls.yml b/.github/workflows/maven-pulls.yml index 17523a0923..44b8d0f4f0 100644 --- a/.github/workflows/maven-pulls.yml +++ b/.github/workflows/maven-pulls.yml @@ -29,6 +29,16 @@ jobs: key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} restore-keys: | ${{ runner.os }}-maven- + - name: Check swagger-bom version matches root version + run: | + ROOT_VERSION=$(./mvnw -q -Dexec.executable="echo" -Dexec.args='${project.version}' --non-recursive org.codehaus.mojo:exec-maven-plugin:1.3.1:exec) + BOM_VERSION=$(./mvnw -q -Dexec.executable="echo" -Dexec.args='${project.version}' --non-recursive org.codehaus.mojo:exec-maven-plugin:1.3.1:exec --file modules/swagger-bom/pom.xml) + echo "Root version: ${ROOT_VERSION}" + echo "BOM version: ${BOM_VERSION}" + if [ "${ROOT_VERSION}" != "${BOM_VERSION}" ]; then + echo "ERROR: swagger-bom version (${BOM_VERSION}) does not match root version (${ROOT_VERSION}). Update modules/swagger-bom/pom.xml." + exit 1 + fi - name: Build with Maven and Gradle run: | ./mvnw --no-transfer-progress -B install --file pom.xml diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 1ac4203cb9..583f1dd29c 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -29,6 +29,16 @@ jobs: key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} restore-keys: | ${{ runner.os }}-maven- + - name: Check swagger-bom version matches root version + run: | + ROOT_VERSION=$(./mvnw -q -Dexec.executable="echo" -Dexec.args='${project.version}' --non-recursive org.codehaus.mojo:exec-maven-plugin:1.3.1:exec) + BOM_VERSION=$(./mvnw -q -Dexec.executable="echo" -Dexec.args='${project.version}' --non-recursive org.codehaus.mojo:exec-maven-plugin:1.3.1:exec --file modules/swagger-bom/pom.xml) + echo "Root version: ${ROOT_VERSION}" + echo "BOM version: ${BOM_VERSION}" + if [ "${ROOT_VERSION}" != "${BOM_VERSION}" ]; then + echo "ERROR: swagger-bom version (${BOM_VERSION}) does not match root version (${ROOT_VERSION}). Update modules/swagger-bom/pom.xml." + exit 1 + fi - name: Build with Maven and Gradle, Deploy snapshot to maven central run: | export MY_POM_VERSION=`./mvnw -q -Dexec.executable="echo" -Dexec.args='${projects.version}' --non-recursive org.codehaus.mojo:exec-maven-plugin:1.3.1:exec` diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml index 197485c3f3..758de11eee 100644 --- a/.github/workflows/prepare-release.yml +++ b/.github/workflows/prepare-release.yml @@ -35,6 +35,16 @@ jobs: key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} restore-keys: | ${{ runner.os }}-maven- + - name: Check swagger-bom version matches root version + run: | + ROOT_VERSION=$(./mvnw -q -Dexec.executable="echo" -Dexec.args='${project.version}' --non-recursive org.codehaus.mojo:exec-maven-plugin:1.3.1:exec) + BOM_VERSION=$(./mvnw -q -Dexec.executable="echo" -Dexec.args='${project.version}' --non-recursive org.codehaus.mojo:exec-maven-plugin:1.3.1:exec --file modules/swagger-bom/pom.xml) + echo "Root version: ${ROOT_VERSION}" + echo "BOM version: ${BOM_VERSION}" + if [ "${ROOT_VERSION}" != "${BOM_VERSION}" ]; then + echo "ERROR: swagger-bom version (${BOM_VERSION}) does not match root version (${ROOT_VERSION}). Update modules/swagger-bom/pom.xml." + exit 1 + fi - name: Run prepare release script id: prepare-release run: | diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 6599a14554..ad815fd49e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -40,6 +40,16 @@ jobs: run: | mkdir -p ~/.gradle echo "gradle.publish.key=${GRADLE_PUBLISH_KEY}\ngradle.publish.secret=${GRADLE_PUBLISH_SECRET}" > ~/.gradle/gradle.properties + - name: Check swagger-bom version matches root version + run: | + ROOT_VERSION=$(./mvnw -q -Dexec.executable="echo" -Dexec.args='${project.version}' --non-recursive org.codehaus.mojo:exec-maven-plugin:1.3.1:exec) + BOM_VERSION=$(./mvnw -q -Dexec.executable="echo" -Dexec.args='${project.version}' --non-recursive org.codehaus.mojo:exec-maven-plugin:1.3.1:exec --file modules/swagger-bom/pom.xml) + echo "Root version: ${ROOT_VERSION}" + echo "BOM version: ${BOM_VERSION}" + if [ "${ROOT_VERSION}" != "${BOM_VERSION}" ]; then + echo "ERROR: swagger-bom version (${BOM_VERSION}) does not match root version (${ROOT_VERSION}). Update modules/swagger-bom/pom.xml." + exit 1 + fi - name: Run pre release script id: preRelease run: | diff --git a/CI/post-release.sh b/CI/post-release.sh index 7e95b3c2b7..fae521299e 100755 --- a/CI/post-release.sh +++ b/CI/post-release.sh @@ -23,6 +23,11 @@ python $CUR/CI/publishRelease.py "$SC_RELEASE_TAG" ./mvnw versions:set -DnewVersion="${SC_NEXT_VERSION}-SNAPSHOT" ./mvnw versions:commit +cd modules/swagger-bom +../../mvnw versions:set -DnewVersion="${SC_NEXT_VERSION}-SNAPSHOT" +../../mvnw versions:commit +cd ../.. + cd modules/swagger-project-jakarta ../../mvnw versions:set -DnewVersion="${SC_NEXT_VERSION}-SNAPSHOT" ../../mvnw versions:commit diff --git a/CI/prepare-release.sh b/CI/prepare-release.sh index 771451ccf6..878cf34606 100755 --- a/CI/prepare-release.sh +++ b/CI/prepare-release.sh @@ -25,6 +25,11 @@ python $CUR/CI/releaseNotes.py "$SC_LAST_RELEASE" "$SC_RELEASE_TITLE" "$SC_RELEA ./mvnw versions:set -DnewVersion=$SC_VERSION ./mvnw versions:commit +cd modules/swagger-bom +../../mvnw versions:set -DnewVersion=$SC_VERSION +../../mvnw versions:commit +cd ../.. + cd modules/swagger-project-jakarta ../../mvnw versions:set -DnewVersion=$SC_VERSION ../../mvnw versions:commit diff --git a/README.md b/README.md index 931b0363eb..207164474b 100644 --- a/README.md +++ b/README.md @@ -156,6 +156,111 @@ Of course if you don't want to build locally you can grab artifacts from maven c `https://repo1.maven.org/maven2/io/swagger/core/` +### Maven BOM + +The `swagger-bom` artifact is a Bill of Materials that manages **both** the `javax` and Jakarta (`-jakarta` suffix) artifact families. +Import it once and omit versions on all individual Swagger dependencies. + +> **Note:** Maven and Gradle build plugins (`swagger-maven-plugin`, `swagger-gradle-plugin`, +> `swagger-eclipse-transformer-maven-plugin`) are intentionally **excluded** from the BOM. +> Plugins are applied via `` or `plugins {}`, not via ``, +> so including them in the BOM would be misleading and could conflict with the plugin +> management section of a consumer's build. + +#### Maven + +```xml + + + + io.swagger.core.v3 + swagger-bom + ${swagger-openapiv3.version} + pom + import + + + + + + + + + io.swagger.core.v3 + swagger-annotations + + + io.swagger.core.v3 + swagger-models + + + io.swagger.core.v3 + swagger-core + + + io.swagger.core.v3 + swagger-integration + + + io.swagger.core.v3 + swagger-jaxrs2 + + + io.swagger.core.v3 + swagger-jaxrs2-servlet-initializer + + + io.swagger.core.v3 + swagger-jaxrs2-servlet-initializer-v2 + + + + io.swagger.core.v3 + swagger-annotations-jakarta + + + io.swagger.core.v3 + swagger-models-jakarta + + + io.swagger.core.v3 + swagger-core-jakarta + + + io.swagger.core.v3 + swagger-integration-jakarta + + + io.swagger.core.v3 + swagger-jaxrs2-jakarta + + + io.swagger.core.v3 + swagger-jaxrs2-servlet-initializer-jakarta + + + io.swagger.core.v3 + swagger-jaxrs2-servlet-initializer-v2-jakarta + + +``` + +#### Gradle + +```kotlin +dependencies { + implementation(platform("io.swagger.core.v3:swagger-bom:${swaggerOpenapiv3Version}")) + + // javax artifacts — no version needed + implementation("io.swagger.core.v3:swagger-annotations") + implementation("io.swagger.core.v3:swagger-core") + + // Jakarta namespace artifacts — no version needed + implementation("io.swagger.core.v3:swagger-annotations-jakarta") + implementation("io.swagger.core.v3:swagger-core-jakarta") +} +``` + ## Sample Apps The samples have moved to [a new repository](https://github.com/swagger-api/swagger-samples/tree/2.0) and contain various integrations and configurations. diff --git a/modules/swagger-bom-integration-test/pom.xml b/modules/swagger-bom-integration-test/pom.xml new file mode 100644 index 0000000000..49730678af --- /dev/null +++ b/modules/swagger-bom-integration-test/pom.xml @@ -0,0 +1,141 @@ + + 4.0.0 + + + io.swagger.core.v3 + swagger-project + 2.2.47-SNAPSHOT + ../.. + + + swagger-bom-integration-test + pom + + swagger-bom-integration-test + Verifies that swagger-bom manages all expected artifacts at the correct version + + + + true + true + + + + + + io.swagger.core.v3 + swagger-bom + ${project.version} + pom + import + + + + + + + + + io.swagger.core.v3 + swagger-annotations + + + io.swagger.core.v3 + swagger-models + + + io.swagger.core.v3 + swagger-core + + + io.swagger.core.v3 + swagger-integration + + + io.swagger.core.v3 + swagger-jaxrs2 + + + io.swagger.core.v3 + swagger-jaxrs2-servlet-initializer + + + io.swagger.core.v3 + swagger-jaxrs2-servlet-initializer-v2 + + + + io.swagger.core.v3 + swagger-annotations-jakarta + + + io.swagger.core.v3 + swagger-models-jakarta + + + io.swagger.core.v3 + swagger-core-jakarta + + + io.swagger.core.v3 + swagger-integration-jakarta + + + io.swagger.core.v3 + swagger-jaxrs2-jakarta + + + io.swagger.core.v3 + swagger-jaxrs2-servlet-initializer-jakarta + + + io.swagger.core.v3 + swagger-jaxrs2-servlet-initializer-v2-jakarta + + + + + + + + + org.apache.maven.plugins + maven-enforcer-plugin + + + enforce-versions + + true + + + + + + org.apache.maven.plugins + maven-dependency-plugin + + + verify-bom-deps-resolve + validate + + resolve + + + io.swagger.core.v3 + + + + + + + + diff --git a/modules/swagger-bom/pom.xml b/modules/swagger-bom/pom.xml new file mode 100644 index 0000000000..242473a147 --- /dev/null +++ b/modules/swagger-bom/pom.xml @@ -0,0 +1,173 @@ + + 4.0.0 + + io.swagger.core.v3 + swagger-bom + 2.2.47-SNAPSHOT + pom + + swagger-bom + Bill of Materials (BOM) for Swagger Core (OpenAPI 3) + https://github.com/swagger-api/swagger-core + + + scm:git:git@github.com:swagger-api/swagger-core.git + scm:git:git@github.com:swagger-api/swagger-core.git + https://github.com/swagger-api/swagger-core + + + + + Apache License 2.0 + http://www.apache.org/licenses/LICENSE-2.0.html + repo + + + + + + daniel-kmiecik + Daniel Kmiecik + + + djankowsk + Damian Jankowski + + + ewaostrowska + Ewa Ostrowska + + + + + github + https://github.com/swagger-api/swagger-core/issues + + + + + + org.sonatype.central + central-publishing-maven-plugin + 0.7.0 + true + + central + true + published + 3600 + + + + + + + + release + + + + org.apache.maven.plugins + maven-gpg-plugin + 1.6 + + + --pinentry-mode + loopback + + + + + sign-artifacts + verify + + sign + + + + + + + + + + + + + + io.swagger.core.v3 + swagger-annotations + ${project.version} + + + io.swagger.core.v3 + swagger-models + ${project.version} + + + io.swagger.core.v3 + swagger-core + ${project.version} + + + io.swagger.core.v3 + swagger-integration + ${project.version} + + + io.swagger.core.v3 + swagger-jaxrs2 + ${project.version} + + + io.swagger.core.v3 + swagger-jaxrs2-servlet-initializer + ${project.version} + + + io.swagger.core.v3 + swagger-jaxrs2-servlet-initializer-v2 + ${project.version} + + + + io.swagger.core.v3 + swagger-annotations-jakarta + ${project.version} + + + io.swagger.core.v3 + swagger-models-jakarta + ${project.version} + + + io.swagger.core.v3 + swagger-core-jakarta + ${project.version} + + + io.swagger.core.v3 + swagger-integration-jakarta + ${project.version} + + + io.swagger.core.v3 + swagger-jaxrs2-jakarta + ${project.version} + + + io.swagger.core.v3 + swagger-jaxrs2-servlet-initializer-jakarta + ${project.version} + + + io.swagger.core.v3 + swagger-jaxrs2-servlet-initializer-v2-jakarta + ${project.version} + + + + + + diff --git a/pom.xml b/pom.xml index cc2a194647..df82cd7eef 100644 --- a/pom.xml +++ b/pom.xml @@ -401,9 +401,11 @@ modules/swagger-jaxrs2 modules/swagger-jaxrs2-servlet-initializer modules/swagger-jaxrs2-servlet-initializer-v2 + modules/swagger-bom modules/swagger-maven-plugin modules/swagger-eclipse-transformer-maven-plugin modules/swagger-project-jakarta + modules/swagger-bom-integration-test