From f03e612a1493af5b34fc8d9257bd903eaaa3883a Mon Sep 17 00:00:00 2001 From: Josh Cummings <3627351+jzheaux@users.noreply.github.com> Date: Mon, 10 Aug 2026 15:46:10 -0600 Subject: [PATCH 1/2] Remove Release Workflows This commit removes workflows for scheduling and releasing releases in favor of release train support Closes gh-19518 --- .../continuous-integration-workflow.yml | 14 +--------- .github/workflows/finalize-release.yml | 27 ------------------- .github/workflows/release-scheduler.yml | 24 ----------------- .../update-scheduled-release-version.yml | 23 ---------------- 4 files changed, 1 insertion(+), 87 deletions(-) delete mode 100644 .github/workflows/finalize-release.yml delete mode 100644 .github/workflows/release-scheduler.yml delete mode 100644 .github/workflows/update-scheduled-release-version.yml diff --git a/.github/workflows/continuous-integration-workflow.yml b/.github/workflows/continuous-integration-workflow.yml index 90d6214955..328e82e906 100644 --- a/.github/workflows/continuous-integration-workflow.yml +++ b/.github/workflows/continuous-integration-workflow.yml @@ -42,21 +42,9 @@ jobs: with: should-deploy-schema: ${{ needs.build.outputs.should-deploy-artifacts }} secrets: inherit - perform-release: - name: Perform Release - needs: [ deploy-artifacts, deploy-schema ] - uses: spring-io/spring-security-release-tools/.github/workflows/perform-release.yml@b92832ecbc7cbe969201e6beafbde0ee400cf095 # v1.0.15 - with: - should-perform-release: ${{ needs.deploy-artifacts.outputs.artifacts-deployed }} - project-version: ${{ needs.deploy-artifacts.outputs.project-version }} - milestone-repo-url: https://repo1.maven.org/maven2 - release-repo-url: https://repo1.maven.org/maven2 - artifact-path: org/springframework/security/spring-security-core - slack-announcing-id: spring-security-announcing - secrets: inherit send-notification: name: Send Notification - needs: [ perform-release ] + needs: [ deploy-artifacts, deploy-schema ] if: ${{ !success() }} runs-on: ubuntu-latest steps: diff --git a/.github/workflows/finalize-release.yml b/.github/workflows/finalize-release.yml deleted file mode 100644 index e1db659f9a..0000000000 --- a/.github/workflows/finalize-release.yml +++ /dev/null @@ -1,27 +0,0 @@ -name: Finalize Release - -on: - workflow_dispatch: # Manual trigger - inputs: - version: - description: The Spring Security release to finalize (e.g. 7.0.0-RC2) - required: true - -env: - DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }} - -permissions: - contents: read - -jobs: - perform-release: - name: Perform Release - uses: spring-io/spring-security-release-tools/.github/workflows/perform-release.yml@ed473b4dafba053c63a453d2d88a89df3b3e18b3 # v1 - with: - should-perform-release: true - project-version: ${{ inputs.version }} - milestone-repo-url: https://repo1.maven.org/maven2 - release-repo-url: https://repo1.maven.org/maven2 - artifact-path: org/springframework/security/spring-security-core - slack-announcing-id: spring-security-announcing - secrets: inherit diff --git a/.github/workflows/release-scheduler.yml b/.github/workflows/release-scheduler.yml deleted file mode 100644 index 28e7d0e0d6..0000000000 --- a/.github/workflows/release-scheduler.yml +++ /dev/null @@ -1,24 +0,0 @@ -name: Release Scheduler -on: - schedule: - - cron: '15 15 * * MON' # Every Monday at 3:15pm UTC - workflow_dispatch: -permissions: read-all -jobs: - dispatch_scheduled_releases: - name: Dispatch scheduled releases - if: github.repository_owner == 'spring-projects' - strategy: - matrix: - # List of active maintenance branches. - branch: [ main, 6.5.x, 6.4.x, 6.3.x ] - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - with: - fetch-depth: 1 - - name: Dispatch - env: - GH_TOKEN: ${{ secrets.GH_ACTIONS_REPO_TOKEN }} - run: gh workflow run update-scheduled-release-version.yml -r ${{ matrix.branch }} diff --git a/.github/workflows/update-scheduled-release-version.yml b/.github/workflows/update-scheduled-release-version.yml deleted file mode 100644 index 455226686d..0000000000 --- a/.github/workflows/update-scheduled-release-version.yml +++ /dev/null @@ -1,23 +0,0 @@ -name: Update Scheduled Release Version - -on: - workflow_dispatch: # Manual trigger only. Triggered by release-scheduler.yml on main. - -permissions: - contents: read - -jobs: - update-scheduled-release-version: - name: Update Scheduled Release Version - uses: spring-io/spring-security-release-tools/.github/workflows/update-scheduled-release-version.yml@b92832ecbc7cbe969201e6beafbde0ee400cf095 # v1.0.15 - secrets: inherit - send-notification: - name: Send Notification - needs: [ update-scheduled-release-version ] - if: ${{ failure() || cancelled() }} - runs-on: ubuntu-latest - steps: - - name: Send Notification - uses: spring-io/spring-security-release-tools/.github/actions/send-notification@b92832ecbc7cbe969201e6beafbde0ee400cf095 # v1.0.15 - with: - webhook-url: ${{ secrets.SPRING_SECURITY_CI_GCHAT_WEBHOOK_URL }} \ No newline at end of file From 36e7420bd0d433c064db91cb4a31cb8c8e71b0c5 Mon Sep 17 00:00:00 2001 From: Josh Cummings <3627351+jzheaux@users.noreply.github.com> Date: Wed, 8 Jul 2026 16:40:34 -0600 Subject: [PATCH 2/2] Add Release Train Integration This commit adds the build-level configuration required for release train participation. See gh-19518 --- buildSrc/build.gradle | 10 ++++++++++ .../convention/RepositoryConventionPlugin.groovy | 10 ++++++++++ .../gradle/maven/MavenPublishingConventionsPlugin.java | 6 ++++++ 3 files changed, 26 insertions(+) diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle index da60b4197b..ab6ceab1d0 100644 --- a/buildSrc/build.gradle +++ b/buildSrc/build.gradle @@ -13,6 +13,16 @@ repositories { gradlePluginPortal() mavenCentral() maven { url = 'https://repo.spring.io/snapshot' } + if (System.getenv("RELEASE_TRAIN_MAVEN_REPOSITORY_URL") != null) { + maven { + name = "Release Train" + url = System.getenv("RELEASE_TRAIN_MAVEN_REPOSITORY_URL") + credentials { + username = System.getenv("RELEASE_TRAIN_MAVEN_REPOSITORY_USERNAME") + password = System.getenv("RELEASE_TRAIN_MAVEN_REPOSITORY_PASSWORD") + } + } + } } sourceSets { diff --git a/buildSrc/src/main/groovy/io/spring/gradle/convention/RepositoryConventionPlugin.groovy b/buildSrc/src/main/groovy/io/spring/gradle/convention/RepositoryConventionPlugin.groovy index 5bd68fb172..268b52a0be 100644 --- a/buildSrc/src/main/groovy/io/spring/gradle/convention/RepositoryConventionPlugin.groovy +++ b/buildSrc/src/main/groovy/io/spring/gradle/convention/RepositoryConventionPlugin.groovy @@ -43,6 +43,16 @@ class RepositoryConventionPlugin implements Plugin { } } mavenCentral() + if (System.getenv("RELEASE_TRAIN_MAVEN_REPOSITORY_URL") != null) { + maven { + name = "Release Train" + url = System.getenv("RELEASE_TRAIN_MAVEN_REPOSITORY_URL") + credentials { + username = System.getenv("RELEASE_TRAIN_MAVEN_REPOSITORY_USERNAME") + password = System.getenv("RELEASE_TRAIN_MAVEN_REPOSITORY_PASSWORD") + } + } + } if (isSnapshot) { maven { name = 'artifactory-snapshot' diff --git a/buildSrc/src/main/java/org/springframework/gradle/maven/MavenPublishingConventionsPlugin.java b/buildSrc/src/main/java/org/springframework/gradle/maven/MavenPublishingConventionsPlugin.java index d82b6d9436..dd36daa4e8 100644 --- a/buildSrc/src/main/java/org/springframework/gradle/maven/MavenPublishingConventionsPlugin.java +++ b/buildSrc/src/main/java/org/springframework/gradle/maven/MavenPublishingConventionsPlugin.java @@ -22,6 +22,12 @@ public class MavenPublishingConventionsPlugin implements Plugin { @Override public void execute(MavenPublishPlugin mavenPublish) { PublishingExtension publishing = project.getExtensions().getByType(PublishingExtension.class); + if (project.hasProperty("deploymentRepository")) { + publishing.getRepositories().maven((mavenRepository) -> { + mavenRepository.setUrl(project.property("deploymentRepository")); + mavenRepository.setName("deployment"); + }); + } publishing.getPublications().withType(MavenPublication.class) .all((mavenPublication) -> MavenPublishingConventionsPlugin.this.customizePom(mavenPublication.getPom(), project)); MavenPublishingConventionsPlugin.this.customizeJavaPlugin(project);