[release] Prepare and release 3.7.0 #1359
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: publish | |
on: | |
push: | |
branches: | |
# For branches, better to list them explicitly than regexp include. | |
# Older branches are triggered using workflows present there | |
- main | |
permissions: read-all | |
env: | |
DOCS_ZIP: docs-zip | |
DOCS_ZIP_PATH: docs/build/distributions | |
jobs: | |
# General job notes: we DON'T want to cancel any previous runs, especially in the case of a "back to snapshots" build right after a release push | |
# We specify the ubuntu version to minimize the chances we have to deal with a migration during a release | |
prepare: | |
# Notes on prepare: this job has no access to secrets, only github token. As a result, all non-core actions are centralized here | |
# This includes the tagging and drafting of release notes. Still, when possible we favor plain run of gradle tasks | |
runs-on: ubuntu-20.04 | |
strategy: | |
fail-fast: false | |
matrix: | |
test-type: | |
- type: core | |
arguments: ":reactor-core:test --no-daemon" | |
- type: core-java21 | |
arguments: ":reactor-core:java21Test --no-daemon" | |
- type: other | |
arguments: "check -x :reactor-core:test -x :reactor-core:java11Test -x :reactor-core:java21Test -x spotlessCheck -x :reactor-core:jcstress --no-daemon" | |
name: prepare - ${{ matrix.test-type.type }} tests | |
outputs: | |
versionType: ${{ steps.version.outputs.versionType }} | |
fullVersion: ${{ steps.version.outputs.fullVersion }} | |
steps: | |
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # tag=v4 | |
- name: Setup JDK 11 | |
if: contains('main', github.base_ref) | |
uses: actions/setup-java@8df1039502a15bceb9433410b1a100fbe190c53b # tag=v3 | |
with: | |
distribution: 'temurin' | |
java-version: 11 | |
- name: Setup JDK 21 | |
if: contains('main 3.6.x', github.base_ref) | |
uses: actions/setup-java@8df1039502a15bceb9433410b1a100fbe190c53b # tag=v3 | |
with: | |
distribution: 'temurin' | |
java-version: 21 | |
- name: Setup JDK 8 | |
uses: actions/setup-java@8df1039502a15bceb9433410b1a100fbe190c53b # tag=v3 | |
with: | |
distribution: 'temurin' | |
java-version: 8 | |
- name: Setup Gradle | |
uses: gradle/actions/setup-gradle@d156388eb19639ec20ade50009f3d199ce1e2808 | |
- name: interpret version | |
id: version | |
#we only run the qualifyVersionGha task so that no other console printing can hijack this step's output | |
#output: versionType, fullVersion | |
#fails if versionType is BAD, which interrupts the workflow | |
run: ./gradlew qualifyVersionGha | |
- name: run checks | |
id: checks | |
run: ./gradlew ${{ matrix.test-type.arguments }} | |
# Build the docs-zip antora doc for the current branch, and upload generated docs-zip to workflow run. | |
# JDK21 is used because the antora plugin requires a JDK17 compatible version. | |
# Each deploy job can then download the docs-zip to ./docs/build/distributions/ in order to let it be included in published artifacts. | |
# (see gradle/setup.gradle publications which includes docs zip file, if found from docs/build/distributions directory) | |
build-docs-zip: | |
runs-on: ubuntu-20.04 | |
steps: | |
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 | |
- name: Set up Ruby for asciidoctor-pdf | |
uses: ruby/setup-ruby@cacc9f1c0b3f4eb8a16a6bb0ed10897b43b9de49 # v1 | |
with: | |
ruby-version: 3.3.0 | |
- name: Install asciidoctor-pdf / rouge | |
run: gem install asciidoctor-pdf rouge | |
- name: Setup java 21 for antora | |
uses: actions/setup-java@8df1039502a15bceb9433410b1a100fbe190c53b # v4 | |
with: | |
distribution: 'temurin' | |
java-version: '21' | |
- name: Build antora docs zip distribution for the current branch | |
run: ./gradlew docs | |
- name: Upload docs/build to current workflow run | |
uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4 | |
with: | |
name: ${{ env.DOCS_ZIP }} | |
path: ${{ env.DOCS_ZIP_PATH }} | |
retention-days: 3 | |
if-no-files-found: error | |
#deploy the snapshot artifacts to Artifactory | |
deploySnapshot: | |
name: deploySnapshot | |
runs-on: ubuntu-20.04 | |
needs: [prepare, build-docs-zip] | |
if: needs.prepare.outputs.versionType == 'SNAPSHOT' | |
environment: snapshots | |
steps: | |
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # tag=v4 | |
- name: Setup JDK 11 | |
if: contains('main', github.base_ref) | |
uses: actions/setup-java@8df1039502a15bceb9433410b1a100fbe190c53b # tag=v3 | |
with: | |
distribution: 'temurin' | |
java-version: 11 | |
- name: Setup JDK 21 | |
if: contains('main 3.6.x', github.base_ref) | |
uses: actions/setup-java@8df1039502a15bceb9433410b1a100fbe190c53b # tag=v3 | |
with: | |
distribution: 'temurin' | |
java-version: 21 | |
- name: Setup JDK 8 | |
uses: actions/setup-java@8df1039502a15bceb9433410b1a100fbe190c53b # tag=v3 | |
with: | |
distribution: 'temurin' | |
java-version: 8 | |
- name: Download antora docs-zip | |
uses: actions/download-artifact@65a9edc5881444af0b9093a5e628f2fe47ea3b2e # v4 | |
with: | |
name: ${{ env.DOCS_ZIP }} | |
path: ${{ env.DOCS_ZIP_PATH }} | |
- name: deploy | |
env: | |
ORG_GRADLE_PROJECT_artifactory_publish_username: ${{secrets.ARTIFACTORY_SNAPSHOT_USERNAME}} | |
ORG_GRADLE_PROJECT_artifactory_publish_password: ${{secrets.ARTIFACTORY_PASSWORD}} | |
run: | | |
./gradlew -Dorg.gradle.parallel=false assemble artifactoryPublish -Partifactory_publish_contextUrl=https://repo.spring.io -Partifactory_publish_repoKey=libs-snapshot-local | |
#sign the milestone artifacts and deploy them to Artifactory | |
deployMilestone: | |
name: deployMilestone | |
runs-on: ubuntu-20.04 | |
needs: [prepare, build-docs-zip] | |
if: needs.prepare.outputs.versionType == 'MILESTONE' | |
environment: releases | |
steps: | |
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # tag=v4 | |
- name: Setup JDK 11 | |
if: contains('main', github.base_ref) | |
uses: actions/setup-java@8df1039502a15bceb9433410b1a100fbe190c53b # tag=v3 | |
with: | |
distribution: 'temurin' | |
java-version: 11 | |
- name: Setup JDK 21 | |
if: contains('main 3.6.x', github.base_ref) | |
uses: actions/setup-java@8df1039502a15bceb9433410b1a100fbe190c53b # tag=v3 | |
with: | |
distribution: 'temurin' | |
java-version: 21 | |
- name: Setup JDK 8 | |
uses: actions/setup-java@8df1039502a15bceb9433410b1a100fbe190c53b # tag=v3 | |
with: | |
distribution: 'temurin' | |
java-version: 8 | |
- name: Download antora docs-zip | |
uses: actions/download-artifact@65a9edc5881444af0b9093a5e628f2fe47ea3b2e # v4 | |
with: | |
name: ${{ env.DOCS_ZIP }} | |
path: ${{ env.DOCS_ZIP_PATH }} | |
- name: deploy | |
env: | |
ORG_GRADLE_PROJECT_artifactory_publish_username: ${{secrets.ARTIFACTORY_USERNAME}} | |
ORG_GRADLE_PROJECT_artifactory_publish_password: ${{secrets.ARTIFACTORY_PASSWORD}} | |
ORG_GRADLE_PROJECT_signingKey: ${{secrets.SIGNING_KEY}} | |
ORG_GRADLE_PROJECT_signingPassword: ${{secrets.SIGNING_PASSPHRASE}} | |
run: | | |
./gradlew -Dorg.gradle.parallel=false assemble sign artifactoryPublish -Partifactory_publish_contextUrl=https://repo.spring.io -Partifactory_publish_repoKey=libs-milestone-local | |
#sign the release artifacts and deploy them to Artifactory | |
deployRelease: | |
name: deployRelease | |
runs-on: ubuntu-20.04 | |
needs: [prepare, build-docs-zip] | |
if: needs.prepare.outputs.versionType == 'RELEASE' | |
environment: releases | |
steps: | |
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # tag=v4 | |
- name: Setup JDK 11 | |
if: contains('main', github.base_ref) | |
uses: actions/setup-java@8df1039502a15bceb9433410b1a100fbe190c53b # tag=v3 | |
with: | |
distribution: 'temurin' | |
java-version: 11 | |
- name: Setup JDK 21 | |
if: contains('main 3.6.x', github.base_ref) | |
uses: actions/setup-java@8df1039502a15bceb9433410b1a100fbe190c53b # tag=v3 | |
with: | |
distribution: 'temurin' | |
java-version: 21 | |
- name: Setup JDK 8 | |
uses: actions/setup-java@8df1039502a15bceb9433410b1a100fbe190c53b # tag=v3 | |
with: | |
distribution: 'temurin' | |
java-version: 8 | |
- name: Download antora docs/build | |
uses: actions/download-artifact@65a9edc5881444af0b9093a5e628f2fe47ea3b2e # v4 | |
with: | |
name: ${{ env.DOCS_ZIP }} | |
path: ${{ env.DOCS_ZIP_PATH }} | |
- name: deploy | |
env: | |
ORG_GRADLE_PROJECT_artifactory_publish_username: ${{secrets.ARTIFACTORY_USERNAME}} | |
ORG_GRADLE_PROJECT_artifactory_publish_password: ${{secrets.ARTIFACTORY_PASSWORD}} | |
ORG_GRADLE_PROJECT_signingKey: ${{secrets.SIGNING_KEY}} | |
ORG_GRADLE_PROJECT_signingPassword: ${{secrets.SIGNING_PASSPHRASE}} | |
ORG_GRADLE_PROJECT_sonatypeUsername: ${{secrets.SONATYPE_USERNAME}} | |
ORG_GRADLE_PROJECT_sonatypePassword: ${{secrets.SONATYPE_PASSWORD}} | |
run: | | |
./gradlew -Dorg.gradle.parallel=false assemble sign artifactoryPublish -Partifactory_publish_contextUrl=https://repo.spring.io -Partifactory_publish_repoKey=libs-release-local publishMavenJavaPublicationToSonatypeRepository | |
tagMilestone: | |
name: Tag milestone | |
needs: [ prepare, deployMilestone ] | |
runs-on: ubuntu-20.04 | |
permissions: | |
contents: write | |
steps: | |
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # tag=v4 | |
- name: tag | |
run: | | |
git config --local user.name 'reactorbot' | |
git config --local user.email '[email protected]' | |
git tag -m "Release milestone ${{ needs.prepare.outputs.fullVersion }}" v${{ needs.prepare.outputs.fullVersion }} ${{ github.sha }} | |
git push --tags | |
tagRelease: | |
name: Tag release | |
needs: [ prepare, deployRelease ] | |
runs-on: ubuntu-20.04 | |
permissions: | |
contents: write | |
steps: | |
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # tag=v4 | |
- name: tag | |
run: | | |
git config --local user.name 'reactorbot' | |
git config --local user.email '[email protected]' | |
git tag -m "Release version ${{ needs.prepare.outputs.fullVersion }}" v${{ needs.prepare.outputs.fullVersion }} ${{ github.sha }} | |
git push --tags | |
cleanup: | |
name: Cleanup docs-zip artifact | |
needs: [ deploySnapshot, tagRelease, tagMilestone ] | |
if: always() && (needs.deploySnapshot.result == 'success' || needs.tagRelease.result == 'success' || needs.tagMilestone.result == 'success') | |
runs-on: ubuntu-20.04 | |
permissions: | |
actions: write | |
steps: | |
- name: delete antora docs-zip artifact | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: |- | |
ARTIFACTS_URL="/repos/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}/artifacts" | |
ARTIFACT_ID=$(gh api -H 'Accept: application/vnd.github+json' -H 'X-GitHub-Api-Version: 2022-11-28' $ARTIFACTS_URL | jq -r '.artifacts[] | select(.name == "'$DOCS_ZIP'") | .id // ""') | |
if [ -n "$ARTIFACT_ID" ]; then | |
gh api --method DELETE -H 'Accept: application/vnd.github+json' -H 'X-GitHub-Api-Version: 2022-11-28' /repos/${{github.repository}}/actions/artifacts/$ARTIFACT_ID} | |
fi | |
# For Gradle configuration of signing, see https://docs.gradle.org/current/userguide/signing_plugin.html#sec:in-memory-keys | |
# publishMavenJavaPublicationToSonatypeRepository only sends to a staging repository |