diff --git a/.github/actions/build/action.yml b/.github/actions/build/action.yml new file mode 100644 index 0000000000..2ad97b0bed --- /dev/null +++ b/.github/actions/build/action.yml @@ -0,0 +1,86 @@ +name: 'Build' +inputs: + java-version: + required: false + type: string + default: '17' + description: 'The Java version to compile and test with' + java-toolchain: + required: false + type: boolean + default: false + description: 'Whether a Java toolchain should be used' + publish: + required: false + type: boolean + default: false + description: 'Whether to publish artifacts ready for deployment to Artifactory' + gradle-enterprise-secret-access-key: + required: false + type: string + description: 'The secret access key for authentication with ge.spring.io' + gradle-enterprise-cache-user: + required: false + type: string + description: 'The username for authentication with the remote build cache' + gradle-enterprise-cache-password: + required: false + type: string + description: 'The password for authentication with the remote build cache' +outputs: + build-scan-url: + value: ${{ steps.build.outputs.build-scan-url }} + version: + value: ${{ steps.read-version.outputs.version }} +runs: + using: composite + steps: + - name: Set Up Java + uses: actions/setup-java@v4 + with: + distribution: 'liberica' + java-version: | + ${{ inputs.java-version }} + ${{ inputs.java-toolchain && '17' || '' }} + - name: Set Up Gradle + uses: gradle/actions/setup-gradle@1168cd3d07c1876a65e1724114de42ccbdfa7b78 # v3.2.1 + with: + cache-read-only: false + - name: Configure Gradle Properties + shell: bash + run: | + mkdir -p $HOME/.gradle + echo 'systemProp.user.name=spring-builds+github' >> $HOME/.gradle/gradle.properties + echo 'systemProp.org.gradle.internal.launcher.welcomeMessageEnabled=false' >> $HOME/.gradle/gradle.properties + echo 'org.gradle.daemon=false' >> $HOME/.gradle/gradle.properties + - name: Configure Toolchain Properties + if: ${{ inputs.java-toolchain }} + shell: bash + run: | + echo toolchainVersion=${{ inputs.java-version }} >> $HOME/.gradle/gradle.properties + echo systemProp.org.gradle.java.installations.auto-detect=false >> $HOME/.gradle/gradle.properties + echo systemProp.org.gradle.java.installations.auto-download=false >> $HOME/.gradle/gradle.properties + echo systemProp.org.gradle.java.installations.paths=${{ format('$JAVA_HOME_{0}_X64', inputs.java-version) }} >> $HOME/.gradle/gradle.properties + - name: Build + if: ${{ !inputs.publish }} + env: + GRADLE_ENTERPRISE_URL: 'https://ge.spring.io' + GRADLE_ENTERPRISE_ACCESS_KEY: ${{ inputs.gradle-enterprise-secret-access-key }} + GRADLE_ENTERPRISE_CACHE_USERNAME: ${{ inputs.gradle-enterprise-cache-user }} + GRADLE_ENTERPRISE_CACHE_PASSWORD: ${{ inputs.gradle-enterprise-cache-password }} + run: ./gradlew build + - name: Build and Publish + if: ${{ inputs.publish }} + env: + GRADLE_ENTERPRISE_URL: 'https://ge.spring.io' + GRADLE_ENTERPRISE_ACCESS_KEY: ${{ inputs.gradle-enterprise-secret-access-key }} + GRADLE_ENTERPRISE_CACHE_USERNAME: ${{ inputs.gradle-enterprise-cache-user }} + GRADLE_ENTERPRISE_CACHE_PASSWORD: ${{ inputs.gradle-enterprise-cache-password }} + run: ./gradlew -PdeploymentRepository=$(pwd)/deployment-repository build publishAllPublicationsToDeploymentRepository + - name: Read Version From gradle.properties + id: read-version + shell: bash + run: | + version=$(sed -n 's/version=\(.*\)/\1/p' gradle.properties) + echo "Version is $version" + echo "version=$version" >> $GITHUB_OUTPUT diff --git a/.github/workflows/build-and-deploy-snapshot.yml b/.github/workflows/build-and-deploy-snapshot.yml index c357932cdc..3ceb204a61 100644 --- a/.github/workflows/build-and-deploy-snapshot.yml +++ b/.github/workflows/build-and-deploy-snapshot.yml @@ -11,33 +11,15 @@ jobs: runs-on: ubuntu22-8-32 if: ${{ github.repository == 'spring-projects/spring-boot' }} steps: - - name: Set Up Java - uses: actions/setup-java@v4 - with: - distribution: 'liberica' - java-version: 17 - - name: Check Out + - name: Check Out Code uses: actions/checkout@v4 - - name: Set Up Gradle - uses: gradle/actions/setup-gradle@1168cd3d07c1876a65e1724114de42ccbdfa7b78 # v3.2.1 - with: - cache-read-only: false - - name: Configure Gradle Properties - shell: bash - run: | - mkdir -p $HOME/.gradle - echo 'systemProp.user.name=spring-builds+github' >> $HOME/.gradle/gradle.properties - echo 'systemProp.org.gradle.internal.launcher.welcomeMessageEnabled=false' >> $HOME/.gradle/gradle.properties - echo 'org.gradle.daemon=false' >> $HOME/.gradle/gradle.properties - name: Build and Publish - id: build - env: - CI: 'true' - GRADLE_ENTERPRISE_URL: 'https://ge.spring.io' - GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GRADLE_ENTERPRISE_SECRET_ACCESS_KEY }} - GRADLE_ENTERPRISE_CACHE_USERNAME: ${{ secrets.GRADLE_ENTERPRISE_CACHE_USER }} - GRADLE_ENTERPRISE_CACHE_PASSWORD: ${{ secrets.GRADLE_ENTERPRISE_CACHE_PASSWORD }} - run: ./gradlew -PdeploymentRepository=$(pwd)/deployment-repository build publishAllPublicationsToDeploymentRepository + uses: ./.github/actions/build + with: + gradle-enterprise-access-key: ${{ secrets.GRADLE_ENTERPRISE_SECRET_ACCESS_KEY }} + gradle-enterprise-cache-user: ${{ secrets.GRADLE_ENTERPRISE_CACHE_USER }} + gradle-enterprise-cache-password: ${{ secrets.GRADLE_ENTERPRISE_CACHE_PASSWORD }} + publish: true - name: Deploy uses: spring-io/artifactory-deploy-action@26bbe925a75f4f863e1e529e85be2d0093cac116 # v0.0.1 with: @@ -59,15 +41,8 @@ jobs: status: ${{ job.status }} build-scan-url: ${{ steps.build.outputs.build-scan-url }} run-name: ${{ format('{0} | Linux | Java 17', github.ref_name) }} - - name: Read Version From gradle.properties - id: read-version - shell: bash - run: | - version=$(sed -n 's/version=\(.*\)/\1/p' gradle.properties) - echo "Version is $version" - echo "version=$version" >> $GITHUB_OUTPUT outputs: - version: ${{ steps.read-version.outputs.version }} + version: ${{ steps.build.outputs.version }} verify: name: Verify needs: build-and-deploy-snapshot diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f90b068bf0..0479ce7896 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -28,13 +28,6 @@ jobs: java: version: 17 steps: - - name: Set Up Java - uses: actions/setup-java@v4 - with: - distribution: 'liberica' - java-version: | - ${{ matrix.java.version }} - ${{ matrix.java.toolchain && '17' || '' }} - name: Prepare Windows runner if: ${{ runner.os == 'Windows' }} run: | @@ -43,34 +36,14 @@ jobs: Stop-Service -name Docker - name: Check Out Code uses: actions/checkout@v4 - - name: Set Up Gradle - uses: gradle/actions/setup-gradle@1168cd3d07c1876a65e1724114de42ccbdfa7b78 # v3.2.1 - with: - cache-read-only: false - - name: Configure Gradle Properties - shell: bash - run: | - mkdir -p $HOME/.gradle - echo 'systemProp.user.name=spring-builds+github' >> $HOME/.gradle/gradle.properties - echo 'systemProp.org.gradle.internal.launcher.welcomeMessageEnabled=false' >> $HOME/.gradle/gradle.properties - echo 'org.gradle.daemon=false' >> $HOME/.gradle/gradle.properties - - name: Configure Toolchain Properties - if: ${{ matrix.java.toolchain }} - shell: bash - run: | - echo toolchainVersion=${{ matrix.java.version }} >> $HOME/.gradle/gradle.properties - echo systemProp.org.gradle.java.installations.auto-detect=false >> $HOME/.gradle/gradle.properties - echo systemProp.org.gradle.java.installations.auto-download=false >> $HOME/.gradle/gradle.properties - echo systemProp.org.gradle.java.installations.paths=${{ format('$JAVA_HOME_{0}_X64', matrix.java.version) }} >> $HOME/.gradle/gradle.properties - name: Build - id: build - env: - CI: 'true' - GRADLE_ENTERPRISE_URL: 'https://ge.spring.io' - GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GRADLE_ENTERPRISE_SECRET_ACCESS_KEY }} - GRADLE_ENTERPRISE_CACHE_USERNAME: ${{ secrets.GRADLE_ENTERPRISE_CACHE_USER }} - GRADLE_ENTERPRISE_CACHE_PASSWORD: ${{ secrets.GRADLE_ENTERPRISE_CACHE_PASSWORD }} - run: ./gradlew build + uses: ./.github/actions/build + with: + java-version: ${{ matrix.java.version }} + java-toolchain: ${{ matrix.java.toolchain }} + gradle-enterprise-access-key: ${{ secrets.GRADLE_ENTERPRISE_SECRET_ACCESS_KEY }} + gradle-enterprise-cache-user: ${{ secrets.GRADLE_ENTERPRISE_CACHE_USER }} + gradle-enterprise-cache-password: ${{ secrets.GRADLE_ENTERPRISE_CACHE_PASSWORD }} - name: Send Notification uses: ./.github/actions/send-notification if: always()