From e4a023fa6416a76afa739f2774ca147281c7f11d Mon Sep 17 00:00:00 2001 From: Marcus Da Coregio Date: Mon, 6 Mar 2023 13:52:52 -0300 Subject: [PATCH] Revert "Update Antora Plugin to 1.0.0" This reverts commit 280f31167740b6520e8a7f7ee080f06c9b5aed59. --- .github/actions/algolia-config.json | 20 +++ .github/actions/algolia-deploy.sh | 20 +++ .github/actions/algolia-docsearch-scraper.sh | 21 +++ .github/actions/dispatch.sh | 5 + .github/workflows/algolia-index.yml | 16 +++ .github/workflows/antora-generate.yml | 31 +++++ .github/workflows/deploy-docs.yml | 30 ---- .github/workflows/deploy-reference.yml | 33 +++++ .github/workflows/rebuild-search-index.yml | 20 --- buildSrc/build.gradle | 5 - .../gradle/antora/AntoraVersionPlugin.java | 71 ---------- .../gradle/antora/AntoraVersionUtils.java | 55 -------- .../gradle/antora/CheckAntoraVersionTask.java | 96 ------------- .../antora/UpdateAntoraVersionTask.java | 130 ------------------ spring-session-docs/antora-playbook.yml | 27 ++++ spring-session-docs/antora.yml | 13 +- .../cached-antora-playbook.yml | 35 ----- spring-session-docs/local-antora-playbook.yml | 26 ++++ .../spring-session-docs.gradle | 111 +++++++-------- 19 files changed, 258 insertions(+), 507 deletions(-) create mode 100644 .github/actions/algolia-config.json create mode 100755 .github/actions/algolia-deploy.sh create mode 100755 .github/actions/algolia-docsearch-scraper.sh create mode 100755 .github/actions/dispatch.sh create mode 100644 .github/workflows/algolia-index.yml create mode 100644 .github/workflows/antora-generate.yml delete mode 100644 .github/workflows/deploy-docs.yml create mode 100644 .github/workflows/deploy-reference.yml delete mode 100644 .github/workflows/rebuild-search-index.yml delete mode 100644 buildSrc/src/main/java/org/springframework/gradle/antora/AntoraVersionPlugin.java delete mode 100644 buildSrc/src/main/java/org/springframework/gradle/antora/AntoraVersionUtils.java delete mode 100644 buildSrc/src/main/java/org/springframework/gradle/antora/CheckAntoraVersionTask.java delete mode 100644 buildSrc/src/main/java/org/springframework/gradle/antora/UpdateAntoraVersionTask.java create mode 100644 spring-session-docs/antora-playbook.yml delete mode 100644 spring-session-docs/cached-antora-playbook.yml create mode 100644 spring-session-docs/local-antora-playbook.yml diff --git a/.github/actions/algolia-config.json b/.github/actions/algolia-config.json new file mode 100644 index 00000000..6fdbf5b3 --- /dev/null +++ b/.github/actions/algolia-config.json @@ -0,0 +1,20 @@ +{ + "index_name": "session-docs", + "start_urls": [ + "https://docs.spring.io/spring-session/reference/" + ], + "selectors": { + "lvl0": { + "selector": "//nav[@class='crumbs']//li[@class='crumb'][last()-1]", + "type": "xpath", + "global": true, + "default_value": "Home" + }, + "lvl1": ".doc h1", + "lvl2": ".doc h2", + "lvl3": ".doc h3", + "lvl4": ".doc h4", + "text": ".doc p, .doc td.content, .doc th.tableblock" + } +} + diff --git a/.github/actions/algolia-deploy.sh b/.github/actions/algolia-deploy.sh new file mode 100755 index 00000000..35021f18 --- /dev/null +++ b/.github/actions/algolia-deploy.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +HOST="$1" +HOST_PATH="$2" +SSH_PRIVATE_KEY="$3" +SSH_KNOWN_HOST="$4" + + +if [ "$#" -ne 4 ]; then + echo -e "not enough arguments USAGE:\n\n$0 \$HOST \$HOST_PATH \$SSH_PRIVATE_KEY \$SSH_KNOWN_HOSTS \n\n" >&2 + exit 1 +fi + +# Use a non-default path to avoid overriding when testing locally +SSH_PRIVATE_KEY_PATH=~/.ssh/github-actions-docs +install -m 600 -D /dev/null "$SSH_PRIVATE_KEY_PATH" +echo "$SSH_PRIVATE_KEY" > "$SSH_PRIVATE_KEY_PATH" +echo "$SSH_KNOWN_HOST" > ~/.ssh/known_hosts +rsync --delete -avze "ssh -i $SSH_PRIVATE_KEY_PATH" spring-session-docs/build/site/ "$HOST:$HOST_PATH" +rm -f "$SSH_PRIVATE_KEY_PATH" diff --git a/.github/actions/algolia-docsearch-scraper.sh b/.github/actions/algolia-docsearch-scraper.sh new file mode 100755 index 00000000..2bb9ce17 --- /dev/null +++ b/.github/actions/algolia-docsearch-scraper.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +### +# Docs +# config.json https://docsearch.algolia.com/docs/config-file +# Run the crawler https://docsearch.algolia.com/docs/run-your-own/#run-the-crawl-from-the-docker-image + +### USAGE +if [ "$#" -ne 3 ]; then + echo -e "not enough arguments USAGE:\n\n$0 \$ALGOLIA_APPLICATION_ID \$ALGOLIA_API_KEY \$CONFIG_FILE\n\n" >&2 + exit 1 +fi + +# Script Parameters +APPLICATION_ID=$1 +API_KEY=$2 +CONFIG_FILE=$3 + +#### Script +script_dir=$(dirname $0) +docker run -e "APPLICATION_ID=$APPLICATION_ID" -e "API_KEY=$API_KEY" -e "CONFIG=$(cat $CONFIG_FILE | jq -r tostring)" algolia/docsearch-scraper diff --git a/.github/actions/dispatch.sh b/.github/actions/dispatch.sh new file mode 100755 index 00000000..955e9cbb --- /dev/null +++ b/.github/actions/dispatch.sh @@ -0,0 +1,5 @@ +REPOSITORY_REF="$1" +TOKEN="$2" + +curl -H "Accept: application/vnd.github.everest-preview+json" -H "Authorization: token ${TOKEN}" --request POST --data '{"event_type": "request-build-reference"}' https://api.github.com/repos/${REPOSITORY_REF}/dispatches +echo "Requested Build for $REPOSITORY_REF" diff --git a/.github/workflows/algolia-index.yml b/.github/workflows/algolia-index.yml new file mode 100644 index 00000000..dfc2295a --- /dev/null +++ b/.github/workflows/algolia-index.yml @@ -0,0 +1,16 @@ +name: Update Algolia Index + +on: + schedule: + - cron: '0 10 * * *' # Once per day at 10am UTC + workflow_dispatch: # Manual trigger + +jobs: + update: + name: Update Algolia Index + runs-on: ubuntu-latest + steps: + - name: Checkout Source + uses: actions/checkout@v2 + - name: Update Index + run: ${GITHUB_WORKSPACE}/.github/actions/algolia-docsearch-scraper.sh "${{ secrets.ALGOLIA_APPLICATION_ID }}" "${{ secrets.ALGOLIA_WRITE_API_KEY }}" "${GITHUB_WORKSPACE}/.github/actions/algolia-config.json" diff --git a/.github/workflows/antora-generate.yml b/.github/workflows/antora-generate.yml new file mode 100644 index 00000000..2a5bed58 --- /dev/null +++ b/.github/workflows/antora-generate.yml @@ -0,0 +1,31 @@ +name: Generate Antora Files and Request Build + +on: + workflow_dispatch: # Manual trigger + push: + branches-ignore: + - 'gh-pages' + +env: + GH_ACTIONS_REPO_TOKEN: ${{ secrets.GH_ACTIONS_REPO_TOKEN }} + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout Source + uses: actions/checkout@v2 + - name: Generate antora.yml + run: ./gradlew :spring-session-docs:generateAntora + - name: Extract Branch Name + id: extract_branch_name + run: echo "##[set-output name=generated_branch_name;]$(echo ${GITHUB_REPOSITORY}/${GITHUB_REF##*/})" + - name: Push generated antora files to the spring-generated-docs + uses: JamesIves/github-pages-deploy-action@4.1.4 + with: + branch: ${{ steps.extract_branch_name.outputs.generated_branch_name }} # The branch the action should deploy to. + folder: "spring-session-docs/build/generateAntora" # The folder the action should deploy. + repository-name: "spring-io/spring-generated-docs" + token: ${{ secrets.GH_ACTIONS_REPO_TOKEN }} + - name: Dispatch Build Request + run: ${GITHUB_WORKSPACE}/.github/actions/dispatch.sh 'spring-projects/spring-session' "$GH_ACTIONS_REPO_TOKEN" diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml deleted file mode 100644 index 88ffdac9..00000000 --- a/.github/workflows/deploy-docs.yml +++ /dev/null @@ -1,30 +0,0 @@ -name: Deploy Docs -on: - push: - branches-ignore: [ gh-pages ] - tags: '**' - repository_dispatch: - types: request-build-reference # legacy - workflow_dispatch: - -permissions: read-all -jobs: - build: - runs-on: ubuntu-latest - if: github.repository_owner == 'spring-projects' - 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) diff --git a/.github/workflows/deploy-reference.yml b/.github/workflows/deploy-reference.yml new file mode 100644 index 00000000..757d2f51 --- /dev/null +++ b/.github/workflows/deploy-reference.yml @@ -0,0 +1,33 @@ +name: Build & Deploy Reference + +on: + repository_dispatch: + types: request-build-reference + schedule: + - cron: '0 10 * * *' # Once per day at 10am UTC + workflow_dispatch: # Manual trigger + +jobs: + deploy: + name: deploy + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Set up JDK 11 + uses: actions/setup-java@v2 + with: + java-version: '11' + distribution: 'adopt' + cache: gradle + - name: Validate Gradle wrapper + uses: gradle/wrapper-validation-action@e6e38bacfdf1a337459f332974bb2327a31aaf4b + - name: Build with Gradle + run: ./gradlew :spring-session-docs:antora --stacktrace + - name: Cleanup Gradle Cache + # Remove some files from the Gradle cache, so they aren't cached by GitHub Actions. + # Restoring these files from a GitHub Actions cache might cause problems for future builds. + run: | + rm -f ~/.gradle/caches/modules-2/modules-2.lock + rm -f ~/.gradle/caches/modules-2/gc.properties + - name: Deploy + run: ${GITHUB_WORKSPACE}/.github/actions/algolia-deploy.sh "${{ secrets.DOCS_USERNAME }}@${{ secrets.DOCS_HOST }}" "/opt/www/domains/spring.io/docs/htdocs/spring-session/reference/" "${{ secrets.DOCS_SSH_KEY }}" "${{ secrets.DOCS_SSH_HOST_KEY }}" diff --git a/.github/workflows/rebuild-search-index.yml b/.github/workflows/rebuild-search-index.yml deleted file mode 100644 index 960328e9..00000000 --- a/.github/workflows/rebuild-search-index.yml +++ /dev/null @@ -1,20 +0,0 @@ -name: Rebuild Search Index -on: - schedule: - - cron: '0 10 * * *' # Once per day at 10am UTC - workflow_dispatch: -permissions: read-all -jobs: - build: - if: github.repository_owner == 'spring-projects' - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v3 - with: - ref: docs-build - fetch-depth: 1 - - name: Dispatch - env: - GH_TOKEN: ${{ secrets.GH_ACTIONS_REPO_TOKEN }} - run: gh workflow run rebuild-search-index.yml -r $(git rev-parse --abbrev-ref HEAD) diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle index b35a7fc8..ff07b96a 100644 --- a/buildSrc/build.gradle +++ b/buildSrc/build.gradle @@ -26,10 +26,6 @@ sourceSets { gradlePlugin { plugins { - checkAntoraVersion { - id = "org.springframework.antora.check-version" - implementationClass = "org.springframework.gradle.antora.AntoraVersionPlugin" - } managementConfiguration { id = "io.spring.convention.management-configuration" implementationClass = "io.spring.gradle.convention.ManagementConfigurationPlugin" @@ -58,7 +54,6 @@ configurations { dependencies { implementation 'com.google.code.gson:gson:2.8.8' implementation 'net.sourceforge.saxon:saxon:9.1.0.8' - implementation 'org.yaml:snakeyaml:1.30' implementation localGroovy() implementation 'io.github.gradle-nexus:publish-plugin:1.1.0' diff --git a/buildSrc/src/main/java/org/springframework/gradle/antora/AntoraVersionPlugin.java b/buildSrc/src/main/java/org/springframework/gradle/antora/AntoraVersionPlugin.java deleted file mode 100644 index 9a1f95d5..00000000 --- a/buildSrc/src/main/java/org/springframework/gradle/antora/AntoraVersionPlugin.java +++ /dev/null @@ -1,71 +0,0 @@ -package org.springframework.gradle.antora; - -import org.gradle.api.Action; -import org.gradle.api.GradleException; -import org.gradle.api.Plugin; -import org.gradle.api.Project; -import org.gradle.api.Task; -import org.gradle.api.tasks.TaskProvider; -import org.gradle.language.base.plugins.LifecycleBasePlugin; - -public class AntoraVersionPlugin implements Plugin { - public static final String ANTORA_CHECK_VERSION_TASK_NAME = "antoraCheckVersion"; - - @Override - public void apply(Project project) { - TaskProvider antoraCheckVersion = project.getTasks().register(ANTORA_CHECK_VERSION_TASK_NAME, CheckAntoraVersionTask.class, new Action() { - @Override - public void execute(CheckAntoraVersionTask antoraCheckVersion) { - antoraCheckVersion.setGroup(LifecycleBasePlugin.VERIFICATION_GROUP); - antoraCheckVersion.setDescription("Checks the antora.yml version properties match the Gradle version"); - antoraCheckVersion.getAntoraVersion().convention(project.provider(() -> getDefaultAntoraVersion(project))); - antoraCheckVersion.getAntoraPrerelease().convention(project.provider(() -> getDefaultAntoraPrerelease(project))); - antoraCheckVersion.getAntoraDisplayVersion().convention(project.provider(() -> getDefaultAntoraDisplayVersion(project))); - antoraCheckVersion.getAntoraYmlFile().fileProvider(project.provider(() -> project.file("antora.yml"))); - } - }); - project.getPlugins().withType(LifecycleBasePlugin.class, new Action() { - @Override - public void execute(LifecycleBasePlugin lifecycleBasePlugin) { - project.getTasks().named(LifecycleBasePlugin.CHECK_TASK_NAME).configure(new Action() { - @Override - public void execute(Task check) { - check.dependsOn(antoraCheckVersion); - } - }); - } - }); - project.getTasks().register("antoraUpdateVersion", UpdateAntoraVersionTask.class, new Action() { - @Override - public void execute(UpdateAntoraVersionTask antoraUpdateVersion) { - antoraUpdateVersion.setGroup("Release"); - antoraUpdateVersion.setDescription("Updates the antora.yml version properties to match the Gradle version"); - antoraUpdateVersion.getAntoraYmlFile().fileProvider(project.provider(() -> project.file("antora.yml"))); - } - }); - } - - private static String getDefaultAntoraVersion(Project project) { - String projectVersion = getProjectVersion(project); - return AntoraVersionUtils.getDefaultAntoraVersion(projectVersion); - } - - private static String getDefaultAntoraPrerelease(Project project) { - String projectVersion = getProjectVersion(project); - return AntoraVersionUtils.getDefaultAntoraPrerelease(projectVersion); - } - - private static String getDefaultAntoraDisplayVersion(Project project) { - String projectVersion = getProjectVersion(project); - return AntoraVersionUtils.getDefaultAntoraDisplayVersion(projectVersion); - } - - private static String getProjectVersion(Project project) { - Object projectVersion = project.getVersion(); - if (projectVersion == null) { - throw new GradleException("Please define antoraVersion and antoraPrerelease on " + ANTORA_CHECK_VERSION_TASK_NAME + " or provide a Project version so they can be defaulted"); - } - return String.valueOf(projectVersion); - } - -} diff --git a/buildSrc/src/main/java/org/springframework/gradle/antora/AntoraVersionUtils.java b/buildSrc/src/main/java/org/springframework/gradle/antora/AntoraVersionUtils.java deleted file mode 100644 index 9bb17b55..00000000 --- a/buildSrc/src/main/java/org/springframework/gradle/antora/AntoraVersionUtils.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright 2019-2022 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.gradle.antora; - -public class AntoraVersionUtils { - - public static String getDefaultAntoraVersion(String projectVersion) { - int preReleaseIndex = getSnapshotIndex(projectVersion); - return isSnapshot(projectVersion) ? projectVersion.substring(0, preReleaseIndex) : projectVersion; - } - - public static String getDefaultAntoraPrerelease(String projectVersion) { - if (isSnapshot(projectVersion)) { - int preReleaseIndex = getSnapshotIndex(projectVersion); - return projectVersion.substring(preReleaseIndex); - } - if (isPreRelease(projectVersion)) { - return Boolean.TRUE.toString(); - } - return null; - } - - public static String getDefaultAntoraDisplayVersion(String projectVersion) { - if (!isSnapshot(projectVersion) && isPreRelease(projectVersion)) { - return getDefaultAntoraVersion(projectVersion); - } - return null; - } - - private static boolean isSnapshot(String projectVersion) { - return getSnapshotIndex(projectVersion) >= 0; - } - - private static int getSnapshotIndex(String projectVersion) { - return projectVersion.lastIndexOf("-SNAPSHOT"); - } - - private static boolean isPreRelease(String projectVersion) { - return projectVersion.lastIndexOf("-") >= 0; - } -} diff --git a/buildSrc/src/main/java/org/springframework/gradle/antora/CheckAntoraVersionTask.java b/buildSrc/src/main/java/org/springframework/gradle/antora/CheckAntoraVersionTask.java deleted file mode 100644 index aeaf9b86..00000000 --- a/buildSrc/src/main/java/org/springframework/gradle/antora/CheckAntoraVersionTask.java +++ /dev/null @@ -1,96 +0,0 @@ -package org.springframework.gradle.antora; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; - -import org.gradle.api.DefaultTask; -import org.gradle.api.GradleException; -import org.gradle.api.file.RegularFileProperty; -import org.gradle.api.provider.Property; -import org.gradle.api.tasks.Input; -import org.gradle.api.tasks.InputFile; -import org.gradle.api.tasks.Optional; -import org.gradle.api.tasks.TaskAction; -import org.yaml.snakeyaml.Yaml; -import org.yaml.snakeyaml.constructor.Constructor; -import org.yaml.snakeyaml.representer.Representer; - -public abstract class CheckAntoraVersionTask extends DefaultTask { - - @TaskAction - public void check() throws FileNotFoundException { - File antoraYmlFile = getAntoraYmlFile().getAsFile().get(); - String expectedAntoraVersion = getAntoraVersion().get(); - String expectedAntoraPrerelease = getAntoraPrerelease().getOrElse(null); - String expectedAntoraDisplayVersion = getAntoraDisplayVersion().getOrElse(null); - - Representer representer = new Representer(); - representer.getPropertyUtils().setSkipMissingProperties(true); - - Yaml yaml = new Yaml(new Constructor(AntoraYml.class), representer); - AntoraYml antoraYml = yaml.load(new FileInputStream(antoraYmlFile)); - - String actualAntoraPrerelease = antoraYml.getPrerelease(); - boolean preReleaseMatches = antoraYml.getPrerelease() == null && expectedAntoraPrerelease == null || - (actualAntoraPrerelease != null && actualAntoraPrerelease.equals(expectedAntoraPrerelease)); - String actualAntoraDisplayVersion = antoraYml.getDisplay_version(); - boolean displayVersionMatches = antoraYml.getDisplay_version() == null && expectedAntoraDisplayVersion == null || - (actualAntoraDisplayVersion != null && actualAntoraDisplayVersion.equals(expectedAntoraDisplayVersion)); - String actualAntoraVersion = antoraYml.getVersion(); - if (!preReleaseMatches || - !displayVersionMatches || - !expectedAntoraVersion.equals(actualAntoraVersion)) { - throw new GradleException("The Gradle version of '" + getProject().getVersion() + "' should have version: '" - + expectedAntoraVersion + "' prerelease: '" + expectedAntoraPrerelease + "' display_version: '" - + expectedAntoraDisplayVersion + "' defined in " + antoraYmlFile + " but got version: '" - + actualAntoraVersion + "' prerelease: '" + actualAntoraPrerelease + "' display_version: '" + actualAntoraDisplayVersion + "'"); - } - } - - @InputFile - public abstract RegularFileProperty getAntoraYmlFile(); - - @Input - public abstract Property getAntoraVersion(); - - @Input - @Optional - public abstract Property getAntoraPrerelease(); - - @Input - @Optional - public abstract Property getAntoraDisplayVersion(); - - public static class AntoraYml { - private String version; - - private String prerelease; - - private String display_version; - - public String getVersion() { - return version; - } - - public void setVersion(String version) { - this.version = version; - } - - public String getPrerelease() { - return prerelease; - } - - public void setPrerelease(String prerelease) { - this.prerelease = prerelease; - } - - public String getDisplay_version() { - return display_version; - } - - public void setDisplay_version(String display_version) { - this.display_version = display_version; - } - } -} diff --git a/buildSrc/src/main/java/org/springframework/gradle/antora/UpdateAntoraVersionTask.java b/buildSrc/src/main/java/org/springframework/gradle/antora/UpdateAntoraVersionTask.java deleted file mode 100644 index 46a2d4f4..00000000 --- a/buildSrc/src/main/java/org/springframework/gradle/antora/UpdateAntoraVersionTask.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Copyright 2019-2022 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.gradle.antora; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileWriter; -import java.io.IOException; - -import org.gradle.api.DefaultTask; -import org.gradle.api.file.RegularFileProperty; -import org.gradle.api.tasks.InputFile; -import org.gradle.api.tasks.TaskAction; -import org.yaml.snakeyaml.DumperOptions; -import org.yaml.snakeyaml.Yaml; -import org.yaml.snakeyaml.constructor.Constructor; -import org.yaml.snakeyaml.nodes.NodeTuple; -import org.yaml.snakeyaml.nodes.Tag; -import org.yaml.snakeyaml.representer.Representer; - -public abstract class UpdateAntoraVersionTask extends DefaultTask { - - @TaskAction - public void update() throws IOException { - String projectVersion = getProject().getVersion().toString(); - File antoraYmlFile = getAntoraYmlFile().getAsFile().get(); - String updatedAntoraVersion = AntoraVersionUtils.getDefaultAntoraVersion(projectVersion); - String updatedAntoraPrerelease = AntoraVersionUtils.getDefaultAntoraPrerelease(projectVersion); - String updatedAntoraDisplayVersion = AntoraVersionUtils.getDefaultAntoraDisplayVersion(projectVersion); - - Representer representer = new Representer(); - representer.getPropertyUtils().setSkipMissingProperties(true); - - Yaml yaml = new Yaml(new Constructor(AntoraYml.class), representer); - AntoraYml antoraYml = yaml.load(new FileInputStream(antoraYmlFile)); - - System.out.println("Updating the version parameters in " + antoraYmlFile.getName() + " to version: " - + updatedAntoraVersion + ", prerelease: " + updatedAntoraPrerelease + ", display_version: " - + updatedAntoraDisplayVersion); - antoraYml.setVersion(updatedAntoraVersion); - antoraYml.setPrerelease(updatedAntoraPrerelease); - antoraYml.setDisplay_version(updatedAntoraDisplayVersion); - - FileWriter outputWriter = new FileWriter(antoraYmlFile); - getYaml().dump(antoraYml, outputWriter); - } - - @InputFile - public abstract RegularFileProperty getAntoraYmlFile(); - - public static class AntoraYml { - - private String name; - - private String version; - - private String prerelease; - - private String display_version; - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getVersion() { - return version; - } - - public void setVersion(String version) { - this.version = version; - } - - public String getPrerelease() { - return prerelease; - } - - public void setPrerelease(String prerelease) { - this.prerelease = prerelease; - } - - public String getDisplay_version() { - return display_version; - } - - public void setDisplay_version(String display_version) { - this.display_version = display_version; - } - - } - - private Yaml getYaml() { - Representer representer = new Representer() { - @Override - protected NodeTuple representJavaBeanProperty(Object javaBean, - org.yaml.snakeyaml.introspector.Property property, Object propertyValue, Tag customTag) { - // Don't write out null values - if (propertyValue == null) { - return null; - } - else { - return super.representJavaBeanProperty(javaBean, property, propertyValue, customTag); - } - } - }; - representer.addClassTag(AntoraYml.class, Tag.MAP); - DumperOptions ymlOptions = new DumperOptions(); - ymlOptions.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); - ymlOptions.setDefaultScalarStyle(DumperOptions.ScalarStyle.SINGLE_QUOTED); - return new Yaml(representer, ymlOptions); - } - -} diff --git a/spring-session-docs/antora-playbook.yml b/spring-session-docs/antora-playbook.yml new file mode 100644 index 00000000..5d3a60f1 --- /dev/null +++ b/spring-session-docs/antora-playbook.yml @@ -0,0 +1,27 @@ +site: + title: Spring Session + url: https://docs.spring.io/spring-session/reference/ +asciidoc: + attributes: + page-pagination: true +content: + sources: + - url: https://github.com/spring-io/spring-generated-docs + branches: [spring-projects/spring-session/*] + - url: https://github.com/spring-projects/spring-session + branches: [main,3.0.x,2.6.x] + tags: [ '3.0.*', '2.7.*', '2.6.*','!2.6.0-M*','!2.6.0-RC*','!2.7.0-M1','!3.0.0-M1'] + start_path: spring-session-docs +urls: + latest_version_segment_strategy: redirect:to + latest_version_segment: '' + redirect_facility: httpd +ui: + bundle: + url: https://github.com/spring-io/antora-ui-spring/releases/download/latest/ui-bundle.zip + snapshot: true + +antora: + extensions: + - require: ./antora/extensions/version-fix.js + - require: ./antora/extensions/major-minor-segment.js diff --git a/spring-session-docs/antora.yml b/spring-session-docs/antora.yml index b185f18b..5c7c055f 100644 --- a/spring-session-docs/antora.yml +++ b/spring-session-docs/antora.yml @@ -1,12 +1,3 @@ name: ROOT -version: true -title: Documentation -nav: - - modules/ROOT/nav.adoc -ext: - collector: - run: - command: gradlew -q -PbuildSrc.skipTests=true "-Dorg.gradle.jvmargs=-Xmx3g -XX:+HeapDumpOnOutOfMemoryError" :spring-session-docs:generateAntoraYml - local: true - scan: - dir: ./build/generated-antora-resources +version: '2.7.1' +prerelease: '-SNAPSHOT' diff --git a/spring-session-docs/cached-antora-playbook.yml b/spring-session-docs/cached-antora-playbook.yml deleted file mode 100644 index 56cfa016..00000000 --- a/spring-session-docs/cached-antora-playbook.yml +++ /dev/null @@ -1,35 +0,0 @@ -# PACKAGES antora@3.2.0-alpha.2 @antora/atlas-extension:1.0.0-alpha.1 @antora/collector-extension@1.0.0-alpha.3 @springio/antora-extensions@1.0.0 @asciidoctor/tabs@1.0.0-beta.3 @opendevise/antora-release-line-extension@1.0.0 -# -# The purpose of this Antora playbook is to build the docs in the current branch. -antora: - extensions: - - '@antora/collector-extension' - - id: '@antora/atlas-extension' - require: '@antora/atlas-extension' - enabled: false - - '@opendevise/antora-release-line-extension' - - require: '@springio/antora-extensions/tabs-migration-extension' - unwrap_example_block: always -site: - title: Spring Session Reference -content: - sources: - - url: ./.. - branches: HEAD - start_path: spring-session-docs - worktrees: true -asciidoc: - attributes: - hide-uri-scheme: '@' - page-pagination: '' - primary-site-url: https://docs.spring.io/spring-session/reference - tabs-sync-option: '@' - extensions: - - '@asciidoctor/tabs' - sourcemap: true -urls: - latest_version_segment: '' -ui: - bundle: - url: https://github.com/spring-io/antora-ui-spring/releases/download/latest/ui-bundle.zip - snapshot: true diff --git a/spring-session-docs/local-antora-playbook.yml b/spring-session-docs/local-antora-playbook.yml new file mode 100644 index 00000000..d36554ec --- /dev/null +++ b/spring-session-docs/local-antora-playbook.yml @@ -0,0 +1,26 @@ +site: + title: Spring + url: https://docs.spring.io/spring-session/reference/ +asciidoc: + attributes: + page-pagination: true +content: + sources: + - url: ../../spring-io/spring-generated-docs + branches: [spring-projects/spring-session/*] + - url: ../../spring-projects/spring-session + branches: [main] + start_path: spring-session-docs +urls: + latest_version_segment_strategy: redirect:to + latest_version_segment: '' + redirect_facility: httpd +ui: + bundle: + url: https://github.com/spring-io/antora-ui-spring/releases/download/latest/ui-bundle.zip + snapshot: true + +antora: + extensions: + - require: ./antora/extensions/version-fix.js + - require: ./antora/extensions/major-minor-segment.js diff --git a/spring-session-docs/spring-session-docs.gradle b/spring-session-docs/spring-session-docs.gradle index dfb6da8c..20af1e58 100644 --- a/spring-session-docs/spring-session-docs.gradle +++ b/spring-session-docs/spring-session-docs.gradle @@ -1,6 +1,5 @@ plugins { - id 'org.antora' version '1.0.0' - id 'io.spring.antora.generate-antora-yml' version '0.0.1' + id "io.github.rwinch.antora" version "0.0.2" } apply plugin: 'io.spring.convention.docs' @@ -29,54 +28,16 @@ dependencies { } antora { - playbook = 'cached-antora-playbook.yml' - playbookProvider { - repository = 'spring-projects/spring-session' - branch = 'docs-build' - path = 'lib/antora/templates/per-branch-antora-playbook.yml' - checkLocalBranch = true - } - options = [clean: true, fetch: !project.gradle.startParameter.offline, stacktrace: true] + antoraVersion = "3.0.1" + arguments = ["--fetch"] } -tasks.named("generateAntoraYml") { - asciidocAttributes = project.provider( { generateAttributes() } ) -} - -def generateAttributes() { - def dollar = '$' - def ghTag = snapshotBuild ? 'main' : project.version - def ghUrl = "https://github.com/spring-projects/spring-session/tree/${ghTag.toString()}" - def snapshotBuild = project.version.contains("SNAPSHOT") - def milestoneBuild = project.version.contains("-M") - def releaseBuild = (!snapshotBuild && !milestoneBuild) - def springBootVersion = "2.7.0" - def downloadUrl = "https://github.com/spring-projects/spring-session/archive/${ghTag}.zip" - def ghSamplesUrl = "$ghUrl/spring-session-samples/" - def samplesDir = "example${dollar}spring-session-samples/" - def sessionJdbcMainResourcesDir = "example${dollar.toString()}session-jdbc-main-resources-dir/" - def springSessionDataMongoDbDir = "example${dollar.toString()}spring-session-data-mongodb-dir/" - def docsTestDir = "example${dollar.toString()}java/" - def websocketdocTestDir = "example${dollar.toString()}java/docs/websocket/" - def docsTestResourcesDir = "example${dollar.toString()}resources/" - def indexdocTests = "example${dollar.toString()}java/docs/IndexDocTests.java" - - return [ - 'download-url': downloadUrl.toString(), - 'gh-samples-url': ghSamplesUrl.toString(), - 'samples-dir': samplesDir.toString(), - 'session-jdbc-main-resources-dir': sessionJdbcMainResourcesDir.toString(), - 'spring-session-data-mongodb-dir': springSessionDataMongoDbDir.toString(), - 'docs-test-dir': docsTestDir.toString(), - 'websocketdoc-test-dir': websocketdocTestDir.toString(), - 'docs-test-resources-dir': docsTestResourcesDir.toString(), - 'indexdoc-tests': indexdocTests.toString(), - 'spring-session-version': project.version, - 'version-milestone': milestoneBuild, - 'version-release': releaseBuild, - 'version-snapshot': snapshotBuild, - 'spring-boot-version': springBootVersion - ] + resolvedVersions(project.configurations.testRuntimeClasspath) +tasks.antora { + environment = [ + "ALGOLIA_API_KEY" : "82c7ead946afbac3cf98c32446154691", + "ALGOLIA_APP_ID" : "244V8V9FGG", + "ALGOLIA_INDEX_NAME" : "session-docs" + ] } sourceSets { @@ -90,16 +51,58 @@ sourceSets { } } +tasks.register("generateAntora") { + group = "Documentation" + description = "Generates the antora.yml for dynamic properties" + doLast { + def dollar = '$' + def ghTag = snapshotBuild ? 'main' : project.version + def ghUrl = "https://github.com/spring-projects/spring-session/tree/$ghTag" + def versions = resolvedVersions(project.configurations.testRuntimeClasspath) + def ymlVersions = "" + versions.call().each { name, version -> + ymlVersions += """ + ${name}: ${version}""" + } + def outputFile = new File("$buildDir/generateAntora/antora.yml") + outputFile.getParentFile().mkdirs() + outputFile.createNewFile() + def antoraYmlText = file("antora.yml").getText() + outputFile.setText("""$antoraYmlText +title: Spring Session +start_page: ROOT:index.adoc +nav: + - modules/ROOT/nav.adoc + +asciidoc: + attributes: + download-url: "https://github.com/spring-projects/spring-session/archive/${ghTag}.zip" + gh-samples-url: "$ghUrl/spring-session-samples/" + samples-dir: "example${dollar}spring-session-samples/" + session-jdbc-main-resources-dir: "example${dollar}session-jdbc-main-resources-dir/" + spring-session-data-mongodb-dir: "example${dollar}spring-session-data-mongodb-dir/" + docs-test-dir: "example${dollar}java/" + websocketdoc-test-dir: 'example${dollar}java/docs/websocket/' + docs-test-resources-dir: "example${dollar}resources/" + indexdoc-tests: "example${dollar}java/docs/IndexDocTests.java" + spring-session-version: ${project.version} + version-milestone: $milestoneBuild + version-release: $releaseBuild + version-snapshot: $snapshotBuild + spring-boot-version: ${springBootVersion} +${ymlVersions} +""") + } +} + repositories { - mavenCentral() - maven { url 'https://repo.spring.io/release' } - maven { url 'https://repo.spring.io/milestone' } - maven { url 'https://repo.spring.io/snapshot' } + maven { url "https://repo.spring.io/release" } } def resolvedVersions(Configuration configuration) { - return configuration.resolvedConfiguration + return { + configuration.resolvedConfiguration .resolvedArtifacts .collectEntries { [(it.name + "-version"): it.moduleVersion.id.version] } - + } }