Browse Source
This commit adds a workflow to release the Spring Framework from GitHub Actions. Closes gh-33179pull/33350/head
5 changed files with 211 additions and 0 deletions
@ -0,0 +1,23 @@
@@ -0,0 +1,23 @@
|
||||
name: Create GitHub Release |
||||
description: Create the release on GitHub with a changelog |
||||
inputs: |
||||
milestone: |
||||
description: 'Name of the GitHub milestone for which a release will be created' |
||||
required: true |
||||
token: |
||||
description: 'Token to use for authentication with GitHub' |
||||
required: true |
||||
runs: |
||||
using: composite |
||||
steps: |
||||
- name: Generate Changelog |
||||
uses: spring-io/github-changelog-generator@185319ad7eaa75b0e8e72e4b6db19c8b2cb8c4c1 #v0.0.11 |
||||
with: |
||||
milestone: ${{ inputs.milestone }} |
||||
token: ${{ inputs.token }} |
||||
config-file: .github/actions/create-github-release/changelog-generator.yml |
||||
- name: Create GitHub Release |
||||
env: |
||||
GITHUB_TOKEN: ${{ inputs.token }} |
||||
shell: bash |
||||
run: gh release create ${{ format('v{0}', inputs.milestone) }} --notes-file changelog.md |
||||
@ -0,0 +1,28 @@
@@ -0,0 +1,28 @@
|
||||
changelog: |
||||
repository: spring-projects/spring-framework |
||||
sections: |
||||
- title: ":star: New Features" |
||||
labels: |
||||
- "type: enhancement" |
||||
- title: ":lady_beetle: Bug Fixes" |
||||
labels: |
||||
- "type: bug" |
||||
- "type: regression" |
||||
- title: ":notebook_with_decorative_cover: Documentation" |
||||
labels: |
||||
- "type: documentation" |
||||
- title: ":hammer: Dependency Upgrades" |
||||
sort: "title" |
||||
labels: |
||||
- "type: dependency-upgrade" |
||||
contributors: |
||||
exclude: |
||||
names: |
||||
- "bclozel" |
||||
- "jhoeller" |
||||
- "poutsma" |
||||
- "rstoyanchev" |
||||
- "sbrannen" |
||||
- "sdeleuze" |
||||
- "simonbasle" |
||||
- "snicoll" |
||||
@ -0,0 +1,50 @@
@@ -0,0 +1,50 @@
|
||||
name: Sync to Maven Central |
||||
description: Syncs a release to Maven Central and waits for it to be available for use |
||||
inputs: |
||||
jfrog-cli-config-token: |
||||
description: 'Config token for the JFrog CLI' |
||||
required: true |
||||
spring-framework-version: |
||||
description: 'The version of Spring Framework that is being synced to Central' |
||||
required: true |
||||
ossrh-s01-token-username: |
||||
description: 'Username for authentication with s01.oss.sonatype.org' |
||||
required: true |
||||
ossrh-s01-token-password: |
||||
description: 'Password for authentication with s01.oss.sonatype.org' |
||||
required: true |
||||
ossrh-s01-staging-profile: |
||||
description: 'Staging profile to use when syncing to Central' |
||||
required: true |
||||
runs: |
||||
using: composite |
||||
steps: |
||||
- name: Set Up JFrog CLI |
||||
uses: jfrog/setup-jfrog-cli@7c95feb32008765e1b4e626b078dfd897c4340ad # v4.1.2 |
||||
env: |
||||
JF_ENV_SPRING: ${{ inputs.jfrog-cli-config-token }} |
||||
- name: Download Release Artifacts |
||||
shell: bash |
||||
run: jf rt download --spec ${{ format('{0}/artifacts.spec', github.action_path) }} --spec-vars 'buildName=${{ format('spring-framework-{0}', inputs.spring-framework-version) }};buildNumber=${{ github.run_number }}' |
||||
- name: Sync |
||||
uses: spring-io/nexus-sync-action@42477a2230a2f694f9eaa4643fa9e76b99b7ab84 # v0.0.1 |
||||
with: |
||||
username: ${{ inputs.ossrh-s01-token-username }} |
||||
password: ${{ inputs.ossrh-s01-token-password }} |
||||
staging-profile-name: ${{ inputs.ossrh-s01-staging-profile }} |
||||
create: true |
||||
upload: true |
||||
close: true |
||||
release: true |
||||
generate-checksums: true |
||||
- name: Await |
||||
shell: bash |
||||
run: | |
||||
url=${{ format('https://repo.maven.apache.org/maven2/org/springframework/spring-context/{0}/spring-context-{0}.jar', inputs.spring-framework-version) }} |
||||
echo "Waiting for $url" |
||||
until curl --fail --head --silent $url > /dev/null |
||||
do |
||||
echo "." |
||||
sleep 60 |
||||
done |
||||
echo "$url is available" |
||||
@ -0,0 +1,20 @@
@@ -0,0 +1,20 @@
|
||||
{ |
||||
"files": [ |
||||
{ |
||||
"aql": { |
||||
"items.find": { |
||||
"$and": [ |
||||
{ |
||||
"@build.name": "${buildName}", |
||||
"@build.number": "${buildNumber}", |
||||
"path": { |
||||
"$nmatch": "org/springframework/framework-api/*" |
||||
} |
||||
} |
||||
] |
||||
} |
||||
}, |
||||
"target": "nexus/" |
||||
} |
||||
] |
||||
} |
||||
@ -0,0 +1,90 @@
@@ -0,0 +1,90 @@
|
||||
name: Release |
||||
on: |
||||
push: |
||||
tags: |
||||
- v6.1.[0-9]+ |
||||
concurrency: |
||||
group: ${{ github.workflow }}-${{ github.ref }} |
||||
jobs: |
||||
build-and-stage-release: |
||||
if: ${{ github.repository == 'spring-projects/spring-framework' }} |
||||
name: Build and Stage Release |
||||
runs-on: ubuntu-latest |
||||
steps: |
||||
- name: Check Out Code |
||||
uses: actions/checkout@v4 |
||||
- name: Build and Publish |
||||
id: build-and-publish |
||||
uses: ./.github/actions/build |
||||
with: |
||||
develocity-access-key: ${{ secrets.GRADLE_ENTERPRISE_SECRET_ACCESS_KEY }} |
||||
publish: true |
||||
- name: Stage Release |
||||
uses: spring-io/artifactory-deploy-action@26bbe925a75f4f863e1e529e85be2d0093cac116 # v0.0.1 |
||||
with: |
||||
build-name: ${{ format('spring-framework-{0}', steps.build-and-publish.outputs.version)}} |
||||
folder: 'deployment-repository' |
||||
password: ${{ secrets.ARTIFACTORY_PASSWORD }} |
||||
repository: 'libs-staging-local' |
||||
signing-key: ${{ secrets.GPG_PRIVATE_KEY }} |
||||
signing-passphrase: ${{ secrets.GPG_PASSPHRASE }} |
||||
uri: 'https://repo.spring.io' |
||||
username: ${{ secrets.ARTIFACTORY_USERNAME }} |
||||
outputs: |
||||
version: ${{ steps.build-and-publish.outputs.version }} |
||||
verify: |
||||
name: Verify |
||||
needs: build-and-stage-release |
||||
uses: ./.github/workflows/verify.yml |
||||
with: |
||||
staging: true |
||||
version: ${{ needs.build-and-stage-release.outputs.version }} |
||||
secrets: |
||||
google-chat-webhook-url: ${{ secrets.GOOGLE_CHAT_WEBHOOK_URL }} |
||||
repository-password: ${{ secrets.ARTIFACTORY_PASSWORD }} |
||||
repository-username: ${{ secrets.ARTIFACTORY_USERNAME }} |
||||
token: ${{ secrets.GH_ACTIONS_REPO_TOKEN }} |
||||
sync-to-maven-central: |
||||
name: Sync to Maven Central |
||||
needs: |
||||
- build-and-stage-release |
||||
- verify |
||||
runs-on: ubuntu-latest |
||||
steps: |
||||
- name: Check Out Code |
||||
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 |
||||
- name: Sync to Maven Central |
||||
uses: ./.github/actions/sync-to-maven-central |
||||
with: |
||||
jfrog-cli-config-token: ${{ secrets.JF_ARTIFACTORY_SPRING }} |
||||
ossrh-s01-staging-profile: ${{ secrets.OSSRH_S01_STAGING_PROFILE }} |
||||
ossrh-s01-token-password: ${{ secrets.OSSRH_S01_TOKEN_PASSWORD }} |
||||
ossrh-s01-token-username: ${{ secrets.OSSRH_S01_TOKEN_USERNAME }} |
||||
spring-framework-version: ${{ needs.build-and-stage-release.outputs.version }} |
||||
promote-release: |
||||
name: Promote Release |
||||
needs: |
||||
- build-and-stage-release |
||||
- sync-to-maven-central |
||||
runs-on: ubuntu-latest |
||||
steps: |
||||
- name: Set up JFrog CLI |
||||
uses: jfrog/setup-jfrog-cli@7c95feb32008765e1b4e626b078dfd897c4340ad # v4.1.2 |
||||
env: |
||||
JF_ENV_SPRING: ${{ secrets.JF_ARTIFACTORY_SPRING }} |
||||
- name: Promote build |
||||
run: jfrog rt build-promote ${{ format('spring-framework-{0}', needs.build-and-stage-release.outputs.version)}} ${{ github.run_number }} libs-release-local |
||||
create-github-release: |
||||
name: Create GitHub Release |
||||
needs: |
||||
- build-and-stage-release |
||||
- promote-release |
||||
runs-on: ubuntu-latest |
||||
steps: |
||||
- name: Check Out Code |
||||
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 |
||||
- name: Create GitHub Release |
||||
uses: ./.github/actions/create-github-release |
||||
with: |
||||
milestone: ${{ needs.build-and-stage-release.outputs.version }} |
||||
token: ${{ secrets.GH_ACTIONS_REPO_TOKEN }} |
||||
Loading…
Reference in new issue