From 0591a8047c084b0bbe883460d0384b3e0f77a119 Mon Sep 17 00:00:00 2001 From: Chris Bono Date: Sat, 30 Sep 2023 16:45:41 -0500 Subject: [PATCH] [CI] Splitting build into multiple jobs * Testing direct invocation of Antora in CI * Remove deprecation for Node16 --- .github/workflows/ci-pr.yml | 2 +- .github/workflows/ci.yml | 112 +++++++++++++++++------ .github/workflows/deploy-docs-antora.yml | 6 +- 3 files changed, 86 insertions(+), 34 deletions(-) diff --git a/.github/workflows/ci-pr.yml b/.github/workflows/ci-pr.yml index 156dd920..d82ce1a1 100644 --- a/.github/workflows/ci-pr.yml +++ b/.github/workflows/ci-pr.yml @@ -21,7 +21,7 @@ jobs: uses: actions/checkout@v3 - name: Set up Java 17 - uses: actions/setup-java@v2 + uses: actions/setup-java@v3 with: java-version: 17 distribution: temurin diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5bebaa2b..94521f6a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,34 +12,50 @@ on: workflow_dispatch: env: + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} + GRADLE_ENTERPRISE_CACHE_USER: ${{ secrets.GRADLE_ENTERPRISE_CACHE_USER }} + GRADLE_ENTERPRISE_CACHE_PASSWORD: ${{ secrets.GRADLE_ENTERPRISE_CACHE_PASSWORD }} + GRADLE_ENTERPRISE_SECRET_ACCESS_KEY: ${{ secrets.GRADLE_ENTERPRISE_SECRET_ACCESS_KEY }} COMMIT_OWNER: ${{ github.event.pusher.name }} COMMIT_SHA: ${{ github.sha }} ARTIFACTORY_USERNAME: ${{ secrets.ARTIFACTORY_USERNAME }} ARTIFACTORY_PASSWORD: ${{ secrets.ARTIFACTORY_PASSWORD }} jobs: - build_and_deploy: - name: Build and Deploy - if: github.repository == 'spring-projects/spring-pulsar' + prerequisites: + name: Pre-requisites for building runs-on: ubuntu-latest + if: github.repository == 'spring-projects/spring-pulsar' outputs: - project_version: ${{ steps.extract_version.outputs.project_version }} + runjobs: ${{ steps.continue.outputs.runjobs }} + project_version: ${{ steps.continue.outputs.project_version }} steps: - - name: Checkout repo - uses: actions/checkout@v3 - - name: Set up Java 17 - uses: actions/setup-java@v2 - with: - java-version: 17 - distribution: temurin - - name: Setup Gradle user name + - uses: actions/checkout@v3 + - id: continue + name: Determine if should continue run: | - mkdir -p ~/.gradle - echo 'systemProp.user.name=spring-builds+github' >> ~/.gradle/gradle.properties - - name: Setup Gradle + # Run jobs if in upstream repository + echo "runjobs=true" >>$GITHUB_OUTPUT + # Extract version from gradle.properties + version=$(cat gradle.properties | grep "version=" | awk -F'=' '{print $2}') + echo "project_version=$version" >>$GITHUB_OUTPUT + build_jdk_17: + name: Build JDK 17 + needs: [prerequisites] + runs-on: ubuntu-latest + if: needs.prerequisites.outputs.runjobs + steps: + - uses: actions/checkout@v3 + - name: Set up JDK 17 + uses: actions/setup-java@v3 + with: + java-version: '17' + distribution: 'temurin' + cache: 'gradle' + - name: Set up Gradle uses: gradle/gradle-build-action@v2 - env: - GRADLE_USER_HOME: ~/.gradle + - name: Set up Gradle user name + run: echo 'systemProp.user.name=spring-builds+github' >> gradle.properties - name: Build and run unit tests run: | ./gradlew clean build -x integrationTest --continue --scan -PartifactoryUsername="$ARTIFACTORY_USERNAME" -PartifactoryPassword="$ARTIFACTORY_PASSWORD" @@ -53,33 +69,69 @@ jobs: name: test-results path: '*/build/reports/tests/**/*.*' retention-days: 3 + deploy_artifacts: + name: Deploy Artifacts + needs: [build_jdk_17] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Set up gradle + uses: spring-io/spring-gradle-build-action@v1 + with: + java-version: '17' + distribution: 'temurin' - name: Deploy artifacts run: | - ./gradlew publishArtifacts finalizeDeployArtifacts --stacktrace -PossrhUsername="$OSSRH_TOKEN_USERNAME" -PossrhPassword="$OSSRH_TOKEN_PASSWORD" -PartifactoryUsername="$ARTIFACTORY_USERNAME" -PartifactoryPassword="$ARTIFACTORY_PASSWORD" + export GRADLE_ENTERPRISE_CACHE_USERNAME="$GRADLE_ENTERPRISE_CACHE_USER" + export GRADLE_ENTERPRISE_CACHE_PASSWORD="$GRADLE_ENTERPRISE_CACHE_PASSWORD" + export GRADLE_ENTERPRISE_ACCESS_KEY="$GRADLE_ENTERPRISE_SECRET_ACCESS_KEY" + ./gradlew publishArtifacts finalizeDeployArtifacts -PossrhUsername="$OSSRH_TOKEN_USERNAME" -PossrhPassword="$OSSRH_TOKEN_PASSWORD" -PartifactoryUsername="$ARTIFACTORY_USERNAME" -PartifactoryPassword="$ARTIFACTORY_PASSWORD" --stacktrace env: ORG_GRADLE_PROJECT_signingKey: ${{ secrets.GPG_PRIVATE_KEY }} ORG_GRADLE_PROJECT_signingPassword: ${{ secrets.GPG_PASSPHRASE }} OSSRH_TOKEN_USERNAME: ${{ secrets.OSSRH_S01_TOKEN_USERNAME }} OSSRH_TOKEN_PASSWORD: ${{ secrets.OSSRH_S01_TOKEN_PASSWORD }} - - id: extract_version - name: Extract current version + deploy_docs_antora: + name: Deploy Antora Docs + needs: [build_jdk_17] + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + ref: docs-build + fetch-depth: 1 + - name: Dispatch (partial build) + if: github.ref_type == 'branch' + env: + GH_TOKEN: ${{ secrets.GH_ACTIONS_REPO_TOKEN }} + run: gh workflow run deploy-docs.yml -r $(git rev-parse --abbrev-ref HEAD) -f build-refname=${{ github.ref_name }} + - name: Dispatch (full build) + if: github.ref_type == 'tag' + env: + GH_TOKEN: ${{ secrets.GH_ACTIONS_REPO_TOKEN }} + run: gh workflow run deploy-docs.yml -r $(git rev-parse --abbrev-ref HEAD) + log_complete: + name: Log Complete + needs: [prerequisites, deploy_artifacts, deploy_docs_antora] + runs-on: ubuntu-latest + steps: + - name: Echo completion message run: | - version=$(cat gradle.properties | grep "version=" | awk -F'=' '{print $2}') - echo "project_version=$version" >> $GITHUB_OUTPUT - + echo "All complete!!" perform_release: name: Perform Release - needs: [build_and_deploy] + needs: [prerequisites, deploy_artifacts, deploy_docs_antora] runs-on: ubuntu-latest permissions: contents: write timeout-minutes: 90 - if: ${{ !endsWith(needs.build_and_deploy.outputs.project_version, '-SNAPSHOT') }} + if: ${{ !endsWith(needs.prerequisites.outputs.project_version, '-SNAPSHOT') }} env: REPO: ${{ github.repository }} BRANCH: ${{ github.ref_name }} TOKEN: ${{ github.token }} - VERSION: ${{ needs.build_and_deploy.outputs.project_version }} + VERSION: ${{ needs.prerequisites.outputs.project_version }} steps: - uses: actions/checkout@v3 with: @@ -91,7 +143,7 @@ jobs: distribution: 'temurin' - name: Wait for Artifactory artifacts (milestone) - if: ${{ contains(needs.build_and_deploy.outputs.project_version, '-RC') || contains(needs.build_and_deploy.outputs.project_version, '-M') }} + if: ${{ contains(needs.prerequisites.outputs.project_version, '-RC') || contains(needs.prerequisites.outputs.project_version, '-M') }} run: | echo "Wait for artifacts of $REPO@$VERSION to appear on Artifactory." until curl -f -s https://repo.spring.io/artifactory/milestone/org/springframework/pulsar/spring-pulsar/$VERSION/ > /dev/null @@ -102,7 +154,7 @@ jobs: echo "Artifacts for $REPO@$VERSION have been released to Artifactory." - name: Wait for Maven Central artifacts (GA) - if: ${{ !contains(needs.build_and_deploy.outputs.project_version, '-SNAPSHOT') && !contains(needs.build_and_deploy.outputs.project_version, '-RC') && !contains(needs.build_and_deploy.outputs.project_version, '-M') }} + if: ${{ !contains(needs.prerequisites.outputs.project_version, '-SNAPSHOT') && !contains(needs.prerequisites.outputs.project_version, '-RC') && !contains(needs.prerequisites.outputs.project_version, '-M') }} run: | echo "Wait for artifacts of $REPO@$VERSION to appear on Maven Central." until curl -f -s https://repo1.maven.org/maven2/org/springframework/pulsar/spring-pulsar/$VERSION/ > /dev/null @@ -117,13 +169,13 @@ jobs: git config user.name 'github-actions[bot]' git config user.email 'github-actions[bot]@users.noreply.github.com' - name: Tag release (milestone) - if: ${{ startsWith(needs.build_and_deploy.outputs.project_version, '0.') || contains(needs.build_and_deploy.outputs.project_version, '-RC') || contains(needs.build_and_deploy.outputs.project_version, '-M') }} + if: ${{ startsWith(needs.prerequisites.outputs.project_version, '0.') || contains(needs.prerequisites.outputs.project_version, '-RC') || contains(needs.prerequisites.outputs.project_version, '-M') }} run: | echo "Tagging $REPO@$VERSION release." git tag v$VERSION git push --tags origin - name: Create branch and tag release (GA) - if: ${{ !startsWith(needs.build_and_deploy.outputs.project_version, '0.') && !contains(needs.build_and_deploy.outputs.project_version, '-RC') && !contains(needs.build_and_deploy.outputs.project_version, '-M') }} + if: ${{ !startsWith(needs.prerequisites.outputs.project_version, '0.') && !contains(needs.prerequisites.outputs.project_version, '-RC') && !contains(needs.prerequisites.outputs.project_version, '-M') }} run: | echo "Tagging $REPO@$VERSION and creating release branch." git checkout -b $VERSION diff --git a/.github/workflows/deploy-docs-antora.yml b/.github/workflows/deploy-docs-antora.yml index 188b7630..ffb979a4 100644 --- a/.github/workflows/deploy-docs-antora.yml +++ b/.github/workflows/deploy-docs-antora.yml @@ -1,8 +1,8 @@ name: Deploy Docs (Antora) on: - push: - branches-ignore: [ gh-pages ] - tags: '**' +# push: +# branches-ignore: [ gh-pages ] +# tags: '**' workflow_dispatch: permissions: actions: write