From 743e37e481fadba930c313b9e279f2b81328a73b Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Tue, 6 Sep 2022 14:57:12 -0500 Subject: [PATCH 001/178] Initial docs build branch From c993da749c92e5fea194d61cdb0dd2db922c7b2b Mon Sep 17 00:00:00 2001 From: Dan Allen Date: Tue, 30 Aug 2022 15:58:27 -0600 Subject: [PATCH 002/178] populate playbook branch for docs site --- .editorconfig | 22 ++ .gitignore | 13 ++ .idea/checkstyle-idea.xml | 16 ++ .idea/externalDependencies.xml | 7 + .npmrc | 2 + antora-playbook.yml | 33 +++ build.gradle | 27 +++ gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 59821 bytes gradle/wrapper/gradle-wrapper.properties | 5 + gradlew | 234 +++++++++++++++++++ gradlew.bat | 89 +++++++ lib/antora/extensions/major-minor-segment.js | 204 ++++++++++++++++ lib/antora/extensions/version-fix.js | 35 +++ package.json | 14 ++ 14 files changed, 701 insertions(+) create mode 100644 .editorconfig create mode 100644 .gitignore create mode 100644 .idea/checkstyle-idea.xml create mode 100644 .idea/externalDependencies.xml create mode 100644 .npmrc create mode 100644 antora-playbook.yml create mode 100644 build.gradle create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100755 gradlew create mode 100644 gradlew.bat create mode 100644 lib/antora/extensions/major-minor-segment.js create mode 100644 lib/antora/extensions/version-fix.js create mode 100644 package.json diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000000..d6ec28c86e4 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,22 @@ +# EditorConfig for Spring Security +# see https://github.com/spring-projects/spring-security/blob/master/CONTRIBUTING.adoc#mind-the-whitespace + +root = true + +[*] +end_of_line = lf +trim_trailing_whitespace = true +insert_final_newline = true +max_line_length = 120 + +[*.{java,xml}] +indent_style = tab +indent_size = 4 +charset = utf-8 +continuation_indent_size = 8 + +ij_smart_tabs = false +ij_java_align_multiline_parameters = false + +[*.gradle] +indent_style = tab diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000000..60bfae78748 --- /dev/null +++ b/.gitignore @@ -0,0 +1,13 @@ +/.gradle/ +/.idea/* +/.settings/ +/.classpath +/.project +/build/ +/node_modules/ +/package-lock.json +/*.iml +/*.ipr +/*.iws +!/.idea/checkstyle-idea.xml +!/.idea/externalDependencies.xml diff --git a/.idea/checkstyle-idea.xml b/.idea/checkstyle-idea.xml new file mode 100644 index 00000000000..bf41a5a9de3 --- /dev/null +++ b/.idea/checkstyle-idea.xml @@ -0,0 +1,16 @@ + + + + + + \ No newline at end of file diff --git a/.idea/externalDependencies.xml b/.idea/externalDependencies.xml new file mode 100644 index 00000000000..1e8bdd64928 --- /dev/null +++ b/.idea/externalDependencies.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/.npmrc b/.npmrc new file mode 100644 index 00000000000..c4aece09060 --- /dev/null +++ b/.npmrc @@ -0,0 +1,2 @@ +lockfile-version=3 +omit=optional diff --git a/antora-playbook.yml b/antora-playbook.yml new file mode 100644 index 00000000000..51a1f2843f7 --- /dev/null +++ b/antora-playbook.yml @@ -0,0 +1,33 @@ +antora: + extensions: + - ./lib/antora/extensions/version-fix.js + - ./lib/antora/extensions/major-minor-segment.js +runtime: + log: + format: pretty +site: + title: Spring Security + url: https://docs.spring.io/spring-security/reference + robots: allow +git: + ensure_git_suffix: false +content: + sources: + - url: https://github.com/spring-io/spring-generated-docs + branches: 'spring-projects/spring-security/{main,5.{{6..9},{1..9}+({0..9})}.{x,+({0..9})}}' + - url: https://github.com/spring-projects/spring-security + branches: '{main,5.{{6..9},{1..9}+({0..9})}.x}' + tags: '5.{{6..9},{1..9}+({0..9})}.+({0..9})' + start_path: docs +asciidoc: + attributes: + page-pagination: '' + hide-uri-scheme: '@' +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 diff --git a/build.gradle b/build.gradle new file mode 100644 index 00000000000..e008a04c6ab --- /dev/null +++ b/build.gradle @@ -0,0 +1,27 @@ +plugins { + id "io.github.rwinch.antora" version "0.0.2" +} + +group = 'org.springframework.security' +description = 'Spring Security' + +node { + version = "16.17.0" +} + +antora { + antoraVersion = "3.1.0" + arguments = ["--fetch", "--stacktrace"] +} + +tasks.antora { + environment = [ + "ALGOLIA_API_KEY" : "82c7ead946afbac3cf98c32446154691", + "ALGOLIA_APP_ID" : "244V8V9FGG", + "ALGOLIA_INDEX_NAME" : "security-docs" + ] +} + +repositories { + mavenCentral() +} diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..41d9927a4d4fb3f96a785543079b8df6723c946b GIT binary patch literal 59821 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 literal 0 HcmV?d00001 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 00000000000..aa991fceae6 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew new file mode 100755 index 00000000000..1b6c787337f --- /dev/null +++ b/gradlew @@ -0,0 +1,234 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original 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. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 00000000000..ac1b06f9382 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/lib/antora/extensions/major-minor-segment.js b/lib/antora/extensions/major-minor-segment.js new file mode 100644 index 00000000000..6cf7152b2c7 --- /dev/null +++ b/lib/antora/extensions/major-minor-segment.js @@ -0,0 +1,204 @@ +// https://gitlab.com/antora/antora/-/issues/132#note_712132072 +'use strict' + +const { posix: path } = require('path') + +module.exports.register = function({ config }) { + this.on('contentClassified', ({ contentCatalog }) => { + contentCatalog.getComponents().forEach(component => { + const componentName = component.name; + const generationToVersion = new Map(); + component.versions.forEach(version => { + const generation = getGeneration(version.version); + const original = generationToVersion.get(generation); + if (original === undefined || (original.prerelease && !version.prerelease)) { + generationToVersion.set(generation, version); + } + }); + + const versionToGeneration = Array.from(generationToVersion.entries()).reduce((acc, entry) => { + const [ generation, version ] = entry; + acc.set(version.version, generation); + return acc; + }, new Map()); + + contentCatalog.findBy({ component: componentName }).forEach((file) => { + const candidateVersion = file.src.version; + if (versionToGeneration.has(candidateVersion)) { + const generation = versionToGeneration.get(candidateVersion); + if (file.out) { + if (file.out) { + file.out.dirname = file.out.dirname.replace(candidateVersion, generation) + file.out.path = file.out.path.replace(candidateVersion, generation); + } + } + if (file.pub) { + file.pub.url = file.pub.url.replace(candidateVersion, generation) + } + } + }); + versionToGeneration.forEach((generation, mappedVersion) => { + contentCatalog.getComponent(componentName).versions.filter(version => version.version === mappedVersion).forEach((version) => { + version.url = version.url.replace(mappedVersion, generation); + }) + const symbolicVersionAlias = createSymbolicVersionAlias( + componentName, + mappedVersion, + generation, + 'redirect:to' + ) + symbolicVersionAlias.src.version = generation; + contentCatalog.addFile(symbolicVersionAlias); + }); + }) + }) +} + +function createSymbolicVersionAlias (component, version, symbolicVersionSegment, strategy) { + if (symbolicVersionSegment == null || symbolicVersionSegment === version) return + const family = 'alias' + const baseVersionAliasSrc = { component, module: 'ROOT', family, relative: '', basename: '', stem: '', extname: '' } + const symbolicVersionAliasSrc = Object.assign({}, baseVersionAliasSrc, { version: symbolicVersionSegment }) + const symbolicVersionAlias = { + src: symbolicVersionAliasSrc, + pub: computePub( + symbolicVersionAliasSrc, + computeOut(symbolicVersionAliasSrc, family, symbolicVersionSegment), + family + ), + } + const originalVersionAliasSrc = Object.assign({}, baseVersionAliasSrc, { version }) + const originalVersionSegment = computeVersionSegment(component, version, 'original') + const originalVersionAlias = { + src: originalVersionAliasSrc, + pub: computePub( + originalVersionAliasSrc, + computeOut(originalVersionAliasSrc, family, originalVersionSegment), + family + ), + } + if (strategy === 'redirect:to') { + originalVersionAlias.out = undefined + originalVersionAlias.rel = symbolicVersionAlias + return originalVersionAlias + } else { + symbolicVersionAlias.out = undefined + symbolicVersionAlias.rel = originalVersionAlias + return symbolicVersionAlias + } +} + + +function computeOut (src, family, version, htmlUrlExtensionStyle) { + let { component, module: module_, basename, extname, relative, stem } = src + if (component === 'ROOT') component = '' + if (module_ === 'ROOT') module_ = '' + let indexifyPathSegment = '' + let familyPathSegment = '' + + if (family === 'page') { + if (stem !== 'index' && htmlUrlExtensionStyle === 'indexify') { + basename = 'index.html' + indexifyPathSegment = stem + } else if (extname === '.adoc') { + basename = stem + '.html' + } + } else if (family === 'image') { + familyPathSegment = '_images' + } else if (family === 'attachment') { + familyPathSegment = '_attachments' + } + const modulePath = path.join(component, version, module_) + const dirname = path.join(modulePath, familyPathSegment, path.dirname(relative), indexifyPathSegment) + const path_ = path.join(dirname, basename) + const moduleRootPath = path.relative(dirname, modulePath) || '.' + const rootPath = path.relative(dirname, '') || '.' + + return { dirname, basename, path: path_, moduleRootPath, rootPath } +} + +function computePub (src, out, family, version, htmlUrlExtensionStyle) { + const pub = {} + let url + if (family === 'nav') { + const component = src.component || 'ROOT' + const urlSegments = component === 'ROOT' ? [] : [component] + if (version) urlSegments.push(version) + const module_ = src.module || 'ROOT' + if (module_ !== 'ROOT') urlSegments.push(module_) + // an artificial URL used for resolving page references in navigation model + url = '/' + urlSegments.join('/') + '/' + pub.moduleRootPath = '.' + } else if (family === 'page') { + const urlSegments = out.path.split('/') + const lastUrlSegmentIdx = urlSegments.length - 1 + if (htmlUrlExtensionStyle === 'drop') { + // drop just the .html extension or, if the filename is index.html, the whole segment + const lastUrlSegment = urlSegments[lastUrlSegmentIdx] + urlSegments[lastUrlSegmentIdx] = + lastUrlSegment === 'index.html' ? '' : lastUrlSegment.substr(0, lastUrlSegment.length - 5) + } else if (htmlUrlExtensionStyle === 'indexify') { + urlSegments[lastUrlSegmentIdx] = '' + } + url = '/' + urlSegments.join('/') + } else { + url = '/' + out.path + if (family === 'alias' && !src.relative.length) pub.splat = true + } + + pub.url = ~url.indexOf(' ') ? url.replace(SPACE_RX, '%20') : url + + if (out) { + pub.moduleRootPath = out.moduleRootPath + pub.rootPath = out.rootPath + } + + return pub +} + +function computeVersionSegment (name, version, mode) { + if (mode === 'original') return !version || version === 'master' ? '' : version + const strategy = this.latestVersionUrlSegmentStrategy + // NOTE: special exception; revisit in Antora 3 + if (!version || version === 'master') { + if (mode !== 'alias') return '' + if (strategy === 'redirect:to') return + } + if (strategy === 'redirect:to' || strategy === (mode === 'alias' ? 'redirect:from' : 'replace')) { + const component = this.getComponent(name) + const componentVersion = component && this.getComponentVersion(component, version) + if (componentVersion) { + const segment = + componentVersion === component.latest + ? this.latestVersionUrlSegment + : componentVersion === component.latestPrerelease + ? this.latestPrereleaseVersionUrlSegment + : undefined + return segment == null ? version : segment + } + } + return version +} + +function getGeneration(version) { + if (!version) return version; + const firstIndex = version.indexOf('.') + if (firstIndex < 0) { + return version; + } + const secondIndex = version.indexOf('.', firstIndex + 1); + const result = version.substr(0, secondIndex); + return result; +} + +function out(args) { + console.log(JSON.stringify(args, no_data, 2)); +} + + +function no_data(key, value) { + if (key == "data" || key == "files") { + return value ? "__data__" : value; + } + return value; +} diff --git a/lib/antora/extensions/version-fix.js b/lib/antora/extensions/version-fix.js new file mode 100644 index 00000000000..b0208d25d75 --- /dev/null +++ b/lib/antora/extensions/version-fix.js @@ -0,0 +1,35 @@ +// https://gitlab.com/antora/antora/-/issues/132#note_712132072 +'use strict' + + +module.exports.register = function({ config }) { + this.on('contentAggregated', ({ contentAggregate }) => { + contentAggregate.forEach(aggregate => { + if (aggregate.name === "" && aggregate.displayVersion === 5.6) { + aggregate.name = "ROOT"; + aggregate.version = "5.6.0-RC1" + aggregate.startPage = "ROOT:index.adoc" + aggregate.displayVersion = `${aggregate.version}` + delete aggregate.prerelease + } + if (aggregate.version === "5.6.1" && + aggregate.prerelease == "-SNAPSHOT") { + aggregate.version = "5.6.1" + aggregate.displayVersion = `${aggregate.version}` + delete aggregate.prerelease + } + }) + }) +} + +function out(args) { + console.log(JSON.stringify(args, no_data, 2)); +} + + +function no_data(key, value) { + if (key == "data" || key == "files") { + return value ? "__data__" : value; + } + return value; +} diff --git a/package.json b/package.json new file mode 100644 index 00000000000..e79a9923ee1 --- /dev/null +++ b/package.json @@ -0,0 +1,14 @@ +{ + "name": "spring-security-docs-site", + "description": "Spring Security Docs", + "private": true, + "dependencies": { + "@antora/cli": "^3.1.0", + "@antora/site-generator-default": "^3.1.0" + }, + "overrides": { + "vinyl-fs": { + "glob-stream": "~7.0" + } + } +} From 7cea7b49aafd677a96857eeac8365a44948c3afd Mon Sep 17 00:00:00 2001 From: Dan Allen Date: Thu, 1 Sep 2022 14:03:36 -0600 Subject: [PATCH 003/178] set up CI workflow to deploy docs --- .github/actions/publish-docs.sh | 18 ++++++++++++++++++ .github/workflows/deploy-docs.yml | 28 ++++++++++++++++++++++++++++ .sdkmanrc | 6 ++++++ build.gradle | 2 +- 4 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 .github/actions/publish-docs.sh create mode 100644 .github/workflows/deploy-docs.yml create mode 100644 .sdkmanrc diff --git a/.github/actions/publish-docs.sh b/.github/actions/publish-docs.sh new file mode 100644 index 00000000000..ce60e1793f2 --- /dev/null +++ b/.github/actions/publish-docs.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +HOST="$1" +HOST_PATH="$2" +SSH_PRIVATE_KEY="$3" +SSH_KNOWN_HOST="$4" +SSH_PRIVATE_KEY_PATH="$HOME/.ssh-ci/${GITHUB_REPOSITORY:-publish-docs}" + +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 + +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" docs/build/site/ "$HOST:$HOST_PATH" +rm -f "$SSH_PRIVATE_KEY_PATH" diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml new file mode 100644 index 00000000000..5707ae50a99 --- /dev/null +++ b/.github/workflows/deploy-docs.yml @@ -0,0 +1,28 @@ +name: Deploy Docs +on: + workflow_dispatch: +permissions: read-all +jobs: + build: + runs-on: ubuntu-latest + #if: github.repository_owner == 'spring-projects' + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + fetch-depth: 5 + - name: Set Up Gradle + uses: spring-io/spring-gradle-build-action@v1 + with: + java-version: '17' + distribution: temurin + - name: Scrub 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 /home/runner/.gradle/caches/modules-2/modules-2.lock + rm -f /home/runner/.gradle/caches/modules-2/gc.properties + - name: Run Antora + run: ./gradlew antora + - name: Publish Docs + run: ${GITHUB_WORKSPACE}/.github/actions/publish-docs.sh "${{ secrets.DOCS_USERNAME }}@${{ secrets.DOCS_HOST }}" /opt/www/domains/spring.io/docs/htdocs/spring-security/reference/ "${{ secrets.DOCS_SSH_KEY }}" "${{ secrets.DOCS_SSH_HOST_KEY }}" diff --git a/.sdkmanrc b/.sdkmanrc new file mode 100644 index 00000000000..64345a4be3a --- /dev/null +++ b/.sdkmanrc @@ -0,0 +1,6 @@ +# Use sdkman to run "sdk env" to initialize with correct JDK version +# Enable auto-env through the sdkman_auto_env config +# See https://sdkman.io/usage#config +# A summary is to add the following to ~/.sdkman/etc/config +# sdkman_auto_env=true +java=17.0.3-tem diff --git a/build.gradle b/build.gradle index e008a04c6ab..b854b68865c 100644 --- a/build.gradle +++ b/build.gradle @@ -11,7 +11,7 @@ node { antora { antoraVersion = "3.1.0" - arguments = ["--fetch", "--stacktrace"] + arguments = ["--clean", "--fetch", "--stacktrace"] } tasks.antora { From a3024326a34a580b4198cc4f09dadbf8907e06ea Mon Sep 17 00:00:00 2001 From: Dan Allen Date: Thu, 1 Sep 2022 17:51:37 -0600 Subject: [PATCH 004/178] add CI workflow and scripts to rebuild search index --- .github/actions/algolia-config.json | 20 +++++++++++++++++++ .github/actions/algolia-docsearch-scraper.sh | 21 ++++++++++++++++++++ .github/workflows/deploy-docs.yml | 2 +- .github/workflows/rebuild-search-index.yml | 15 ++++++++++++++ 4 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 .github/actions/algolia-config.json create mode 100755 .github/actions/algolia-docsearch-scraper.sh create mode 100644 .github/workflows/rebuild-search-index.yml diff --git a/.github/actions/algolia-config.json b/.github/actions/algolia-config.json new file mode 100644 index 00000000000..09d30d486ea --- /dev/null +++ b/.github/actions/algolia-config.json @@ -0,0 +1,20 @@ +{ + "index_name": "security-docs", + "start_urls": [ + "https://docs.spring.io/spring-security/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-docsearch-scraper.sh b/.github/actions/algolia-docsearch-scraper.sh new file mode 100755 index 00000000000..2bb9ce178ac --- /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/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index 5707ae50a99..94805d3883b 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -4,8 +4,8 @@ on: permissions: read-all jobs: build: - runs-on: ubuntu-latest #if: github.repository_owner == 'spring-projects' + runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v2 diff --git a/.github/workflows/rebuild-search-index.yml b/.github/workflows/rebuild-search-index.yml new file mode 100644 index 00000000000..a6348b5f3ed --- /dev/null +++ b/.github/workflows/rebuild-search-index.yml @@ -0,0 +1,15 @@ +name: Rebuild Search Index +on: + workflow_dispatch: +permissions: read-all +jobs: + build: + #if: github.repository_owner == 'spring-projects' + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + fetch-depth: 5 + - name: Run Docsearch Scraper + 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 From ba7a6d1c640a51ad95182494ebd0a5ac1b2f373e Mon Sep 17 00:00:00 2001 From: Dan Allen Date: Wed, 31 Aug 2022 02:51:42 -0600 Subject: [PATCH 005/178] add Antora playbook that is configured to use worktrees --- antora-playbook-with-worktrees.yml | 35 ++++++++++++ .../antora-linked-worktree-patch.js | 53 +++++++++++++++++++ 2 files changed, 88 insertions(+) create mode 100644 antora-playbook-with-worktrees.yml create mode 100644 lib/antora/extensions/antora-linked-worktree-patch.js diff --git a/antora-playbook-with-worktrees.yml b/antora-playbook-with-worktrees.yml new file mode 100644 index 00000000000..5cbd1436d42 --- /dev/null +++ b/antora-playbook-with-worktrees.yml @@ -0,0 +1,35 @@ +antora: + extensions: + - ./lib/antora/extensions/antora-linked-worktree-patch.js + - ./lib/antora/extensions/version-fix.js + - ./lib/antora/extensions/major-minor-segment.js +runtime: + log: + format: pretty +site: + title: Spring Security + url: https://docs.spring.io/spring-security/reference + robots: allow +git: + ensure_git_suffix: false +content: + sources: + - url: https://github.com/spring-io/spring-generated-docs + branches: 'spring-projects/spring-security/{main,5.{{6..9},{1..9}+({0..9})}.{x,+({0..9})}}' + - url: . + branches: '{main,5.{{6..9},{1..9}+({0..9})}.x}' + worktrees: true # will automatically discover worktrees if they are set up; otherwise, will use git tree + tags: '5.{{6..9},{1..9}+({0..9})}.+({0..9})' + start_path: docs +asciidoc: + attributes: + page-pagination: '' + hide-uri-scheme: '@' +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 diff --git a/lib/antora/extensions/antora-linked-worktree-patch.js b/lib/antora/extensions/antora-linked-worktree-patch.js new file mode 100644 index 00000000000..3ef07ed14c8 --- /dev/null +++ b/lib/antora/extensions/antora-linked-worktree-patch.js @@ -0,0 +1,53 @@ +'use strict' + +/* Copyright (c) 2002-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 + * + * http://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. + */ +const { promises: fsp } = require('fs') +const ospath = require('path') + +/** + * Rewrites local content sources to support the use of linked worktrees. + * + * @author Dan Allen + */ +module.exports.register = function () { + this.once('playbookBuilt', async ({ playbook }) => { + const expandPath = this.require('@antora/expand-path-helper') + for (const contentSource of playbook.content.sources) { + const { url, branches } = contentSource + if (url.charAt() !== '.') continue + const absdir = expandPath(url, { dot: playbook.dir }) + const gitfile = ospath.join(absdir, '.git') + if (await fsp.stat(gitfile).then((stat) => !stat.isDirectory(), () => false)) { + const worktreeGitdir = await fsp.readFile(gitfile, 'utf8') + .then((contents) => contents.trimRight().substr(8)) + const worktreeBranch = await fsp.readFile(ospath.join(worktreeGitdir, 'HEAD'), 'utf8') + .then((contents) => contents.trimRight().replace(/^ref: (?:refs\/heads\/)?/, '')) + const reldir = ospath.relative( + playbook.dir, + await fsp.readFile(ospath.join(worktreeGitdir, 'commondir'), 'utf8') + .then((contents) => { + const gitdir = ospath.join(worktreeGitdir, contents.trimRight()) + return ospath.basename(gitdir) === '.git' ? ospath.dirname(gitdir) : gitdir + }) + ) + contentSource.url = reldir ? `.${ospath.sep}${reldir}` : '.' + if (!branches) continue + contentSource.branches = (branches.constructor === Array ? branches : [branches]) + .map((pattern) => pattern.replaceAll('HEAD', worktreeBranch)) + } + } + }) +} From ca1a83fd06416d9733046ac35530a19097196edd Mon Sep 17 00:00:00 2001 From: Dan Allen Date: Tue, 6 Sep 2022 15:16:34 -0600 Subject: [PATCH 006/178] enable restriction on workflows --- .github/workflows/deploy-docs.yml | 2 +- .github/workflows/rebuild-search-index.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index 94805d3883b..080b5b0060f 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -4,7 +4,7 @@ on: permissions: read-all jobs: build: - #if: github.repository_owner == 'spring-projects' + if: github.repository_owner == 'spring-projects' runs-on: ubuntu-latest steps: - name: Checkout diff --git a/.github/workflows/rebuild-search-index.yml b/.github/workflows/rebuild-search-index.yml index a6348b5f3ed..2e21ef9ea63 100644 --- a/.github/workflows/rebuild-search-index.yml +++ b/.github/workflows/rebuild-search-index.yml @@ -4,7 +4,7 @@ on: permissions: read-all jobs: build: - #if: github.repository_owner == 'spring-projects' + if: github.repository_owner == 'spring-projects' runs-on: ubuntu-latest steps: - name: Checkout From f2020a2cf41d1e45e8c096eb09e67ec98ff589c4 Mon Sep 17 00:00:00 2001 From: Dan Allen Date: Thu, 8 Sep 2022 14:19:58 -0600 Subject: [PATCH 007/178] build and publish RC versions --- antora-playbook.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/antora-playbook.yml b/antora-playbook.yml index 51a1f2843f7..cb16c25750a 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -14,10 +14,10 @@ git: content: sources: - url: https://github.com/spring-io/spring-generated-docs - branches: 'spring-projects/spring-security/{main,5.{{6..9},{1..9}+({0..9})}.{x,+({0..9})}}' + branches: 'spring-projects/spring-security/{main,5.{{6..9},{1..9}+({0..9})}.{x,+({0..9}?(-RC{1..9}))}}' - url: https://github.com/spring-projects/spring-security - branches: '{main,5.{{6..9},{1..9}+({0..9})}.x}' - tags: '5.{{6..9},{1..9}+({0..9})}.+({0..9})' + branches: [main, '5.{{6..9},{1..9}+({0..9})}.x'] + tags: '5.{{6..9},{1..9}+({0..9})}.+({0..9})?(-RC{1..9})' start_path: docs asciidoc: attributes: From 93cae95b121ce9e8218604e07c20f0f67d7cddc1 Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Fri, 9 Sep 2022 13:05:25 -0500 Subject: [PATCH 008/178] chmod +x publish-docs.sh Issue: gh-11787 --- .github/actions/publish-docs.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 .github/actions/publish-docs.sh diff --git a/.github/actions/publish-docs.sh b/.github/actions/publish-docs.sh old mode 100644 new mode 100755 From edf2f55db170e144a3fe56953c99ff34a3b450a0 Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Fri, 9 Sep 2022 15:06:40 -0500 Subject: [PATCH 009/178] Add on push deploy-docs --- .github/workflows/deploy-docs.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index 080b5b0060f..ae567204edb 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -1,6 +1,8 @@ name: Deploy Docs on: workflow_dispatch: + push: + branches: deploy-docs permissions: read-all jobs: build: From 826f776d9b640a34a39c48689c3258686d180f7c Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Fri, 9 Sep 2022 15:09:40 -0500 Subject: [PATCH 010/178] Use .ssh for SSH_PRIVATE_KEY_PATH This ensures the .ssh folder is being created and aligns the private key and known host location. --- .github/actions/publish-docs.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/actions/publish-docs.sh b/.github/actions/publish-docs.sh index ce60e1793f2..0f75f39c3d4 100755 --- a/.github/actions/publish-docs.sh +++ b/.github/actions/publish-docs.sh @@ -4,7 +4,7 @@ HOST="$1" HOST_PATH="$2" SSH_PRIVATE_KEY="$3" SSH_KNOWN_HOST="$4" -SSH_PRIVATE_KEY_PATH="$HOME/.ssh-ci/${GITHUB_REPOSITORY:-publish-docs}" +SSH_PRIVATE_KEY_PATH="$HOME/.ssh/${GITHUB_REPOSITORY:-publish-docs}" 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 From bcdde1c850add522bca5ba03f830eb626794ae70 Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Fri, 9 Sep 2022 15:10:05 -0500 Subject: [PATCH 011/178] Fix error message to use SSH_KNOWN_HOST variable properly Previously SSH_KNOWN_HOSTS was used which is undefined. --- .github/actions/publish-docs.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/actions/publish-docs.sh b/.github/actions/publish-docs.sh index 0f75f39c3d4..87451a4574a 100755 --- a/.github/actions/publish-docs.sh +++ b/.github/actions/publish-docs.sh @@ -7,7 +7,7 @@ SSH_KNOWN_HOST="$4" SSH_PRIVATE_KEY_PATH="$HOME/.ssh/${GITHUB_REPOSITORY:-publish-docs}" 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 + echo -e "not enough arguments USAGE:\n\n$0 \$HOST \$HOST_PATH \$SSH_PRIVATE_KEY \$SSH_KNOWN_HOST\n\n" >&2 exit 1 fi From 3f979ac9581b802f662be7f3ddbeb9dce361b1e7 Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Fri, 9 Sep 2022 15:12:40 -0500 Subject: [PATCH 012/178] Fix branch name to docs-build --- .github/workflows/deploy-docs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index ae567204edb..0adda43470e 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -2,7 +2,7 @@ name: Deploy Docs on: workflow_dispatch: push: - branches: deploy-docs + branches: docs-deploy permissions: read-all jobs: build: From 79a23b8b27beb1a4042baaa887228881dca8bff5 Mon Sep 17 00:00:00 2001 From: Dan Allen Date: Fri, 9 Sep 2022 14:24:51 -0600 Subject: [PATCH 013/178] fix docs publish script and trigger workflow on correct branch name --- .github/actions/publish-docs.sh | 2 +- .github/workflows/deploy-docs.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/actions/publish-docs.sh b/.github/actions/publish-docs.sh index 87451a4574a..819ec73d15d 100755 --- a/.github/actions/publish-docs.sh +++ b/.github/actions/publish-docs.sh @@ -14,5 +14,5 @@ fi 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" docs/build/site/ "$HOST:$HOST_PATH" +rsync --delete -avze "ssh -i $SSH_PRIVATE_KEY_PATH" build/site/ "$HOST:$HOST_PATH" rm -f "$SSH_PRIVATE_KEY_PATH" diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index 0adda43470e..2e6a2647efb 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -2,7 +2,7 @@ name: Deploy Docs on: workflow_dispatch: push: - branches: docs-deploy + branches: docs-build permissions: read-all jobs: build: From 6bd10b40562a7a7e2cc45477c6e8208a2cfe9ea2 Mon Sep 17 00:00:00 2001 From: Dan Allen Date: Fri, 9 Sep 2022 16:06:36 -0600 Subject: [PATCH 014/178] propagate exit code in publish-docs script --- .github/actions/publish-docs.sh | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/.github/actions/publish-docs.sh b/.github/actions/publish-docs.sh index 819ec73d15d..1267e56a10b 100755 --- a/.github/actions/publish-docs.sh +++ b/.github/actions/publish-docs.sh @@ -11,8 +11,15 @@ if [ "$#" -ne 4 ]; then exit 1 fi -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" build/site/ "$HOST:$HOST_PATH" +( + set -e + 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" build/site/ "$HOST:$HOST_PATH" +) +exit_code=$? + rm -f "$SSH_PRIVATE_KEY_PATH" + +exit $exit_code From f2f7eb748296c48a17f2e2a6882e2c2ff8a1aa95 Mon Sep 17 00:00:00 2001 From: Dan Allen Date: Wed, 7 Sep 2022 18:34:22 -0600 Subject: [PATCH 015/178] eliminate the dependency on the generated-docs repository - add and register Antora Collector - configure Antora Collection at runtime using another extension --- antora-playbook-with-worktrees.yml | 8 +++--- antora-playbook.yml | 4 +-- .../extensions/inject-collector-config.js | 28 +++++++++++++++++++ package.json | 3 +- 4 files changed, 36 insertions(+), 7 deletions(-) create mode 100644 lib/antora/extensions/inject-collector-config.js diff --git a/antora-playbook-with-worktrees.yml b/antora-playbook-with-worktrees.yml index 5cbd1436d42..730851715e6 100644 --- a/antora-playbook-with-worktrees.yml +++ b/antora-playbook-with-worktrees.yml @@ -1,6 +1,8 @@ antora: extensions: - ./lib/antora/extensions/antora-linked-worktree-patch.js + - ./lib/antora/extensions/inject-collector-config.js + - '@antora/collector-extension' - ./lib/antora/extensions/version-fix.js - ./lib/antora/extensions/major-minor-segment.js runtime: @@ -14,12 +16,10 @@ git: ensure_git_suffix: false content: sources: - - url: https://github.com/spring-io/spring-generated-docs - branches: 'spring-projects/spring-security/{main,5.{{6..9},{1..9}+({0..9})}.{x,+({0..9})}}' - url: . - branches: '{main,5.{{6..9},{1..9}+({0..9})}.x}' + branches: [main, '5.{{6..9},{1..9}+({0..9})}.x'] worktrees: true # will automatically discover worktrees if they are set up; otherwise, will use git tree - tags: '5.{{6..9},{1..9}+({0..9})}.+({0..9})' + tags: '5.{{6..9},{1..9}+({0..9})}.+({0..9})?(-RC{1..9})' start_path: docs asciidoc: attributes: diff --git a/antora-playbook.yml b/antora-playbook.yml index cb16c25750a..0eba9954c39 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -1,5 +1,7 @@ antora: extensions: + - ./lib/antora/extensions/inject-collector-config.js + - '@antora/collector-extension' - ./lib/antora/extensions/version-fix.js - ./lib/antora/extensions/major-minor-segment.js runtime: @@ -13,8 +15,6 @@ git: ensure_git_suffix: false content: sources: - - url: https://github.com/spring-io/spring-generated-docs - branches: 'spring-projects/spring-security/{main,5.{{6..9},{1..9}+({0..9})}.{x,+({0..9}?(-RC{1..9}))}}' - url: https://github.com/spring-projects/spring-security branches: [main, '5.{{6..9},{1..9}+({0..9})}.x'] tags: '5.{{6..9},{1..9}+({0..9})}.+({0..9})?(-RC{1..9})' diff --git a/lib/antora/extensions/inject-collector-config.js b/lib/antora/extensions/inject-collector-config.js new file mode 100644 index 00000000000..f73f3a76cc0 --- /dev/null +++ b/lib/antora/extensions/inject-collector-config.js @@ -0,0 +1,28 @@ +'use strict' + +const BASE_COMMAND = 'gradlew -PbuildSrc.skipTests=true' +const JVM_ARGS='-Xmx3g -XX:+HeapDumpOnOutOfMemoryError' +const REPO_URL = 'https://github.com/spring-projects/spring-security' +const TASK_NAME=':spring-security-docs:generateAntora' + +module.exports.register = function () { + this.once('contentAggregated', ({ contentAggregate }) => { + for (const { origins } of contentAggregate) { + for (const origin of origins) { + if (origin.url === REPO_URL && origin.descriptor.ext?.collector === undefined) { + origin.descriptor.ext = { + collector: { + run: { + command: `${BASE_COMMAND} "-Dorg.gradle.jvmargs=${JVM_ARGS}" ${TASK_NAME}`, + local: true, + }, + scan: { + dir: './build/generateAntora', + }, + } + } + } + } + } + }) +} diff --git a/package.json b/package.json index e79a9923ee1..5fad75403bd 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,8 @@ "private": true, "dependencies": { "@antora/cli": "^3.1.0", - "@antora/site-generator-default": "^3.1.0" + "@antora/site-generator-default": "^3.1.0", + "@antora/collector-extension": "1.0.0-alpha.2" }, "overrides": { "vinyl-fs": { From 957566ebd74f76beb61b6fa861b5e1c7f64765e1 Mon Sep 17 00:00:00 2001 From: Sarah White Date: Fri, 16 Sep 2022 14:23:02 -0600 Subject: [PATCH 016/178] add a README that documents how to build the docs for a software branch and the whole project --- README.adoc | 136 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100644 README.adoc diff --git a/README.adoc b/README.adoc new file mode 100644 index 00000000000..60f1943a935 --- /dev/null +++ b/README.adoc @@ -0,0 +1,136 @@ += Spring Security Docs Build + +You're currently viewing the Antora playbook branch. +The playbook branch hosts the docs build that is used to build and publish the production docs site. + +The Spring Security reference docs are built using https://antora.org[Antora]. +This README covers how to build the docs in a software branch as well as how to build the production docs site locally. + +== Overview + +To prepare your system for building the documentation, <> and then <>. +Once you've completed those steps, follow the instructions in <> to learn how to build the documentation for a version branch you haven't previously checked out. + +To build the production site documentation on your computer, follow the instructions in <>, <>, and then <>. + +.Branch checkout instead of worktrees +[NOTE] +==== +If you prefer to set up your workspace without worktrees, complete the steps in <> and clone the project repository onto your computer. +Then follow the instructions in each section starting from the `sdk env || sdk env install` step once you've checked out the desired branch. +==== + +[#prerequisites] +== Prerequisites (everyone) + +These instructions assume you already have basic tools on your system, including bash, zip, unzip, git, and curl. +In addition to these basic tools, you need https://sdkman.io/install[SDKMAN!] installed so that the correct JDK is set for each branch. + +. Open your terminal and enter the following command: ++ +-- + $ curl -s "https://get.sdkman.io" | bash + +This command downloads and installs SDKMAN! +Once installation is complete, you should see a command displayed in your terminal that will initiate SDKMAN. +-- + +. Copy the command displayed in your terminal and run it. +`$HOME` is the path unique to your computer (e.g., _home/my-jam/.sdkman/bin/sdkman-init.sh_). + + $ source "$HOME/.sdkman/bin/sdkman-init.sh" + +You'll use SDKMAN in the next sections to install and switch to the JDK required for each branch. +Now you're ready to <>. + +[#build-main] +== Build the main branch documentation (writers) + +Your workspace will be the folder that contains the git worktrees of the project. + +. In your terminal, create a directory for the project and then change into that directory. + + $ mkdir spring-security + $ cd spring-security + +. Clone the project repository and create the primary worktree for the main branch. +Then change into the new _main_ folder. + + $ git clone https://github.com/spring-projects/spring-security main + $ cd main + +. Switch to the required JDK using SDKMAN by running the following command: ++ +-- + $ sdk env || sdk env install + +SDKMAN will switch to the required JDK or install it if it isn't present. +-- + +. Generate the documentation with Antora using the following command: ++ +-- + $ ./gradlew -PbuildSrc.skipTests=true :spring-security-docs:antora + +This command will build the documentation, including any generated attributes, for the main branch. +-- + +. Navigate to _$HOME/spring-security/main/docs/build/site/index.html_ to view the documentation. + +[#build-branch] +== Build the 5.8.x branch documentation (writers) + +NOTE: The instructions in this section assume you've completed the steps in the <>. + +After creating the worktree for the main branch, you can set up a worktree for any other branches you'll work on in the future. +In this section, you'll create a worktree for the 5.8.x branch in your project workspace. + +. To add a worktree, you have to be in a worktree. +In your terminal, change to the _main_ folder if you aren't already in it, e.g., _$HOME/spring-security/main_. +Set up a worktree for the 5.8.x branch and then change into the new directory by running the following commands: + + $ git worktree add ../5.8.x 5.8.x --track + $ cd ../5.8.x + +. Switch to the required JDK or install it. + + $ sdk env || sdk env install + +. Generate the documentation with the following command: ++ +-- + $ ./gradlew -PbuildSrc.skipTests=true :spring-security-docs:antora + +This command will build the documentation, including any generated attributes, for the 5.8.x branch. +-- + +. Navigate to _$HOME/spring-security/5.8.x/docs/build/site/index.html_ to view the documentation. + +[#build-production] +== Build the production documentation site (docs manager) + +NOTE: The instructions in this section assume you've <>. + +To build the project's production site, you'll set up a worktree for the docs-build branch of the repository. + +. To add a worktree, you have to be in a worktree. +In your terminal, change to the _main_ folder if you aren't already in it, e.g., _$HOME/spring-security/main_. +Run the following command to set up the worktree for the _docs-build_ branch. +Then change into the new _docs-build_ directory. + + $ git worktree add ../docs-build docs-build --track + $ cd ../docs-build + +. Switch to the required JDK or install it. + + $ sdk env || sdk env install + +. Generate the documentation for the project's production site using the following command: ++ +-- + $ ./gradlew antora + +This command will build all of the documentation included in the project's production site. +-- + +. Navigate to _$HOME/spring-security/docs-site/build/site/index.html_ to view the documentation. From 649823f401b96ce2cc6c8653a9f86c0fdc8d19aa Mon Sep 17 00:00:00 2001 From: Dan Allen Date: Mon, 26 Sep 2022 14:28:34 -0600 Subject: [PATCH 017/178] switch to official Antora Plugin for Gradle - lock version to latest release of Antora 3.1 - declare Node.js dependencies in build.gradle - use Node.js version provided by plugin - assign environment variables using environments property on extension block - move group and description project properties to gradle.properties - remove unneeded .npmrc - upgrade to Gradle 7.5.1 - pass -q when running gradlew from Collector --- .npmrc | 2 -- antora-playbook-with-worktrees.yml | 3 -- antora-playbook.yml | 3 -- build.gradle | 29 ++++++------------ gradle.properties | 2 ++ gradle/wrapper/gradle-wrapper.jar | Bin 59821 -> 60756 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 6 ++++ gradlew.bat | 14 +++++---- .../extensions/inject-collector-config.js | 2 +- package.json | 15 --------- 11 files changed, 27 insertions(+), 51 deletions(-) delete mode 100644 .npmrc create mode 100644 gradle.properties delete mode 100644 package.json diff --git a/.npmrc b/.npmrc deleted file mode 100644 index c4aece09060..00000000000 --- a/.npmrc +++ /dev/null @@ -1,2 +0,0 @@ -lockfile-version=3 -omit=optional diff --git a/antora-playbook-with-worktrees.yml b/antora-playbook-with-worktrees.yml index 730851715e6..7b84d67d730 100644 --- a/antora-playbook-with-worktrees.yml +++ b/antora-playbook-with-worktrees.yml @@ -5,9 +5,6 @@ antora: - '@antora/collector-extension' - ./lib/antora/extensions/version-fix.js - ./lib/antora/extensions/major-minor-segment.js -runtime: - log: - format: pretty site: title: Spring Security url: https://docs.spring.io/spring-security/reference diff --git a/antora-playbook.yml b/antora-playbook.yml index 0eba9954c39..0237a14308b 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -4,9 +4,6 @@ antora: - '@antora/collector-extension' - ./lib/antora/extensions/version-fix.js - ./lib/antora/extensions/major-minor-segment.js -runtime: - log: - format: pretty site: title: Spring Security url: https://docs.spring.io/spring-security/reference diff --git a/build.gradle b/build.gradle index b854b68865c..922d816ff03 100644 --- a/build.gradle +++ b/build.gradle @@ -1,27 +1,16 @@ plugins { - id "io.github.rwinch.antora" version "0.0.2" -} - -group = 'org.springframework.security' -description = 'Spring Security' - -node { - version = "16.17.0" + id 'org.antora' version '1.0.0-alpha.3' } antora { - antoraVersion = "3.1.0" - arguments = ["--clean", "--fetch", "--stacktrace"] -} - -tasks.antora { + version = '~3.1' + options = ['--clean', '--fetch', '--stacktrace'] environment = [ - "ALGOLIA_API_KEY" : "82c7ead946afbac3cf98c32446154691", - "ALGOLIA_APP_ID" : "244V8V9FGG", - "ALGOLIA_INDEX_NAME" : "security-docs" + 'ALGOLIA_API_KEY': '82c7ead946afbac3cf98c32446154691', + 'ALGOLIA_APP_ID': '244V8V9FGG', + 'ALGOLIA_INDEX_NAME': 'security-docs' + ] + dependencies = [ + '@antora/collector-extension': '1.0.0-alpha.2' ] } - -repositories { - mavenCentral() -} diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 00000000000..82a76aa6b7e --- /dev/null +++ b/gradle.properties @@ -0,0 +1,2 @@ +group=org.springframework.security +description=Spring Security Docs Site diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 41d9927a4d4fb3f96a785543079b8df6723c946b..249e5832f090a2944b7473328c07c9755baa3196 100644 GIT binary patch delta 10197 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 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index aa991fceae6..ae04661ee73 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 1b6c787337f..a69d9cb6c20 100755 --- a/gradlew +++ b/gradlew @@ -205,6 +205,12 @@ set -- \ org.gradle.wrapper.GradleWrapperMain \ "$@" +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + # Use "xargs" to parse quoted args. # # With -n1 it outputs one arg per line, with the quotes and backslashes removed. diff --git a/gradlew.bat b/gradlew.bat index ac1b06f9382..53a6b238d41 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -14,7 +14,7 @@ @rem limitations under the License. @rem -@if "%DEBUG%" == "" @echo off +@if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @@ -25,7 +25,7 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. +if "%DIRNAME%"=="" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @@ -40,7 +40,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto execute +if %ERRORLEVEL% equ 0 goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -75,13 +75,15 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar :end @rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd +if %ERRORLEVEL% equ 0 goto mainEnd :fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% :mainEnd if "%OS%"=="Windows_NT" endlocal diff --git a/lib/antora/extensions/inject-collector-config.js b/lib/antora/extensions/inject-collector-config.js index f73f3a76cc0..044c7f2d9ee 100644 --- a/lib/antora/extensions/inject-collector-config.js +++ b/lib/antora/extensions/inject-collector-config.js @@ -1,6 +1,6 @@ 'use strict' -const BASE_COMMAND = 'gradlew -PbuildSrc.skipTests=true' +const BASE_COMMAND = 'gradlew -q -PbuildSrc.skipTests=true' const JVM_ARGS='-Xmx3g -XX:+HeapDumpOnOutOfMemoryError' const REPO_URL = 'https://github.com/spring-projects/spring-security' const TASK_NAME=':spring-security-docs:generateAntora' diff --git a/package.json b/package.json deleted file mode 100644 index 5fad75403bd..00000000000 --- a/package.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "spring-security-docs-site", - "description": "Spring Security Docs", - "private": true, - "dependencies": { - "@antora/cli": "^3.1.0", - "@antora/site-generator-default": "^3.1.0", - "@antora/collector-extension": "1.0.0-alpha.2" - }, - "overrides": { - "vinyl-fs": { - "glob-stream": "~7.0" - } - } -} From c4bff97fe8f9d82b40290f01e56cbbb687642b1e Mon Sep 17 00:00:00 2001 From: Dan Allen Date: Fri, 30 Sep 2022 23:58:20 -0600 Subject: [PATCH 018/178] apply base plugin to add clean task --- build.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/build.gradle b/build.gradle index 922d816ff03..12936fca621 100644 --- a/build.gradle +++ b/build.gradle @@ -1,4 +1,5 @@ plugins { + id 'base' id 'org.antora' version '1.0.0-alpha.3' } From d6ccf679c4a9647ce2ba6baacc56429b5ddd0da8 Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Tue, 18 Oct 2022 13:29:52 -0500 Subject: [PATCH 019/178] Fix any prerelease that != true or undefined Previously the build would fail with duplicate versions because milestones and RCs had the same version with a different prerelease value. Now this is patched by changing the version to contain any prerelease value other than true and changing prerelease to true. --- lib/antora/extensions/version-fix.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/antora/extensions/version-fix.js b/lib/antora/extensions/version-fix.js index b0208d25d75..6a158db26ec 100644 --- a/lib/antora/extensions/version-fix.js +++ b/lib/antora/extensions/version-fix.js @@ -12,12 +12,16 @@ module.exports.register = function({ config }) { aggregate.displayVersion = `${aggregate.version}` delete aggregate.prerelease } - if (aggregate.version === "5.6.1" && + else if (aggregate.version === "5.6.1" && aggregate.prerelease == "-SNAPSHOT") { aggregate.version = "5.6.1" aggregate.displayVersion = `${aggregate.version}` delete aggregate.prerelease } + else if (aggregate.prerelease && aggregate.prerelease != true) { + aggregate.version += aggregate.prerelease + aggregate.prerelease = true + } }) }) } From 40f6324d8f7099d160b36b19a00d9899de20bd54 Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Tue, 18 Oct 2022 13:30:55 -0500 Subject: [PATCH 020/178] Instead of deleting aggregate.prerelease set to true This ensures that the aggregate is not marked as a stable version. --- lib/antora/extensions/version-fix.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/antora/extensions/version-fix.js b/lib/antora/extensions/version-fix.js index 6a158db26ec..e6baf669c50 100644 --- a/lib/antora/extensions/version-fix.js +++ b/lib/antora/extensions/version-fix.js @@ -10,13 +10,13 @@ module.exports.register = function({ config }) { aggregate.version = "5.6.0-RC1" aggregate.startPage = "ROOT:index.adoc" aggregate.displayVersion = `${aggregate.version}` - delete aggregate.prerelease + aggregate.prerelease = true } else if (aggregate.version === "5.6.1" && aggregate.prerelease == "-SNAPSHOT") { aggregate.version = "5.6.1" aggregate.displayVersion = `${aggregate.version}` - delete aggregate.prerelease + aggregate.prerelease = true } else if (aggregate.prerelease && aggregate.prerelease != true) { aggregate.version += aggregate.prerelease From d7d1ee2b7e944d2c38e50c7c8094da2e6f20f38d Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Tue, 18 Oct 2022 13:31:54 -0500 Subject: [PATCH 021/178] Include tags for versions larger than 5 This includes tags for versions larger than 5, but only as large as 9. We will need to fix this for versions >= 10. --- antora-playbook.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/antora-playbook.yml b/antora-playbook.yml index 0237a14308b..42bceff3af8 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -14,7 +14,7 @@ content: sources: - url: https://github.com/spring-projects/spring-security branches: [main, '5.{{6..9},{1..9}+({0..9})}.x'] - tags: '5.{{6..9},{1..9}+({0..9})}.+({0..9})?(-RC{1..9})' + tags: ['5.{{6..9},{1..9}+({0..9})}.+({0..9})?(-RC{1..9})','{6..9}.*'] start_path: docs asciidoc: attributes: From 466b882d8226bcb6ce3796d9286eab6c67607dcd Mon Sep 17 00:00:00 2001 From: Dan Allen Date: Thu, 20 Oct 2022 16:27:08 -0600 Subject: [PATCH 022/178] refine docs build - upgrade Antora to 3.2.0-alpha.1 - remove extension (patch) to support linked worktrees - rename local playbook to local-antora-playbook.yml - use more precise tags pattern --- README.adoc | 12 +++-- antora-playbook.yml | 8 +-- build.gradle | 2 +- .../antora-linked-worktree-patch.js | 53 ------------------- ...worktrees.yml => local-antora-playbook.yml | 14 ++--- 5 files changed, 18 insertions(+), 71 deletions(-) delete mode 100644 lib/antora/extensions/antora-linked-worktree-patch.js rename antora-playbook-with-worktrees.yml => local-antora-playbook.yml (58%) diff --git a/README.adoc b/README.adoc index 60f1943a935..46c171e4b62 100644 --- a/README.adoc +++ b/README.adoc @@ -75,7 +75,7 @@ SDKMAN will switch to the required JDK or install it if it isn't present. This command will build the documentation, including any generated attributes, for the main branch. -- -. Navigate to _$HOME/spring-security/main/docs/build/site/index.html_ to view the documentation. +. Navigate to _$HOME/spring-security/main/docs/build/site/index.html_ to view the generated documentation. [#build-branch] == Build the 5.8.x branch documentation (writers) @@ -104,7 +104,7 @@ Set up a worktree for the 5.8.x branch and then change into the new directory by This command will build the documentation, including any generated attributes, for the 5.8.x branch. -- -. Navigate to _$HOME/spring-security/5.8.x/docs/build/site/index.html_ to view the documentation. +. Navigate to _$HOME/spring-security/5.8.x/docs/build/site/index.html_ to view the generated documentation. [#build-production] == Build the production documentation site (docs manager) @@ -130,7 +130,11 @@ Then change into the new _docs-build_ directory. -- $ ./gradlew antora -This command will build all of the documentation included in the project's production site. +This command will build all of the documentation included in the project's production site from the repository on GitHub. + +To build the documentation from the current clone, using any worktrees that are available, use the following command instead: + + $ ./gradlew antora --playbook local-antora-playbook.yml -- -. Navigate to _$HOME/spring-security/docs-site/build/site/index.html_ to view the documentation. +. Navigate to _$HOME/spring-security/docs-site/build/site/index.html_ to view the generated documentation. diff --git a/antora-playbook.yml b/antora-playbook.yml index 42bceff3af8..2bfe895764c 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -12,10 +12,10 @@ git: ensure_git_suffix: false content: sources: - - url: https://github.com/spring-projects/spring-security - branches: [main, '5.{{6..9},{1..9}+({0..9})}.x'] - tags: ['5.{{6..9},{1..9}+({0..9})}.+({0..9})?(-RC{1..9})','{6..9}.*'] - start_path: docs + - url: https://github.com/spring-projects/spring-security + branches: [main, '5.{{6..9},{1..9}+({0..9})}.x'] + tags: ['5.{{6..9},{1..9}+({0..9})}.+({0..9})?(-RC+({0..9}))', '6.+({0..9}).+({0..9})?(-{RC,M}*)'] + start_path: docs asciidoc: attributes: page-pagination: '' diff --git a/build.gradle b/build.gradle index 12936fca621..ea56af613ab 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ plugins { } antora { - version = '~3.1' + version = '3.2.0-alpha.1' options = ['--clean', '--fetch', '--stacktrace'] environment = [ 'ALGOLIA_API_KEY': '82c7ead946afbac3cf98c32446154691', diff --git a/lib/antora/extensions/antora-linked-worktree-patch.js b/lib/antora/extensions/antora-linked-worktree-patch.js deleted file mode 100644 index 3ef07ed14c8..00000000000 --- a/lib/antora/extensions/antora-linked-worktree-patch.js +++ /dev/null @@ -1,53 +0,0 @@ -'use strict' - -/* Copyright (c) 2002-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 - * - * http://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. - */ -const { promises: fsp } = require('fs') -const ospath = require('path') - -/** - * Rewrites local content sources to support the use of linked worktrees. - * - * @author Dan Allen - */ -module.exports.register = function () { - this.once('playbookBuilt', async ({ playbook }) => { - const expandPath = this.require('@antora/expand-path-helper') - for (const contentSource of playbook.content.sources) { - const { url, branches } = contentSource - if (url.charAt() !== '.') continue - const absdir = expandPath(url, { dot: playbook.dir }) - const gitfile = ospath.join(absdir, '.git') - if (await fsp.stat(gitfile).then((stat) => !stat.isDirectory(), () => false)) { - const worktreeGitdir = await fsp.readFile(gitfile, 'utf8') - .then((contents) => contents.trimRight().substr(8)) - const worktreeBranch = await fsp.readFile(ospath.join(worktreeGitdir, 'HEAD'), 'utf8') - .then((contents) => contents.trimRight().replace(/^ref: (?:refs\/heads\/)?/, '')) - const reldir = ospath.relative( - playbook.dir, - await fsp.readFile(ospath.join(worktreeGitdir, 'commondir'), 'utf8') - .then((contents) => { - const gitdir = ospath.join(worktreeGitdir, contents.trimRight()) - return ospath.basename(gitdir) === '.git' ? ospath.dirname(gitdir) : gitdir - }) - ) - contentSource.url = reldir ? `.${ospath.sep}${reldir}` : '.' - if (!branches) continue - contentSource.branches = (branches.constructor === Array ? branches : [branches]) - .map((pattern) => pattern.replaceAll('HEAD', worktreeBranch)) - } - } - }) -} diff --git a/antora-playbook-with-worktrees.yml b/local-antora-playbook.yml similarity index 58% rename from antora-playbook-with-worktrees.yml rename to local-antora-playbook.yml index 7b84d67d730..089af4e1437 100644 --- a/antora-playbook-with-worktrees.yml +++ b/local-antora-playbook.yml @@ -1,6 +1,5 @@ antora: extensions: - - ./lib/antora/extensions/antora-linked-worktree-patch.js - ./lib/antora/extensions/inject-collector-config.js - '@antora/collector-extension' - ./lib/antora/extensions/version-fix.js @@ -8,24 +7,21 @@ antora: site: title: Spring Security url: https://docs.spring.io/spring-security/reference - robots: allow git: ensure_git_suffix: false content: sources: - - url: . - branches: [main, '5.{{6..9},{1..9}+({0..9})}.x'] - worktrees: true # will automatically discover worktrees if they are set up; otherwise, will use git tree - tags: '5.{{6..9},{1..9}+({0..9})}.+({0..9})?(-RC{1..9})' - start_path: docs + - url: . + branches: [main, '5.{{6..9},{1..9}+({0..9})}.x'] + worktrees: true # automatically discovers worktrees, if present; otherwise, will use git tree + #tags: ['5.{{6..9},{1..9}+({0..9})}.+({0..9})?(-RC+({0..9}))', '6.+({0..9}).+({0..9})?(-{RC,M}*)'] + start_path: docs asciidoc: attributes: page-pagination: '' hide-uri-scheme: '@' 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 From c7d14e0c026e79a17ef4825279287da26cea818b Mon Sep 17 00:00:00 2001 From: Dan Allen Date: Mon, 24 Oct 2022 18:26:56 -0600 Subject: [PATCH 023/178] refactor version patching extension --- lib/antora/extensions/version-fix.js | 53 ++++++++++------------------ 1 file changed, 18 insertions(+), 35 deletions(-) diff --git a/lib/antora/extensions/version-fix.js b/lib/antora/extensions/version-fix.js index e6baf669c50..788d2b01927 100644 --- a/lib/antora/extensions/version-fix.js +++ b/lib/antora/extensions/version-fix.js @@ -1,39 +1,22 @@ -// https://gitlab.com/antora/antora/-/issues/132#note_712132072 'use strict' - -module.exports.register = function({ config }) { - this.on('contentAggregated', ({ contentAggregate }) => { - contentAggregate.forEach(aggregate => { - if (aggregate.name === "" && aggregate.displayVersion === 5.6) { - aggregate.name = "ROOT"; - aggregate.version = "5.6.0-RC1" - aggregate.startPage = "ROOT:index.adoc" - aggregate.displayVersion = `${aggregate.version}` - aggregate.prerelease = true - } - else if (aggregate.version === "5.6.1" && - aggregate.prerelease == "-SNAPSHOT") { - aggregate.version = "5.6.1" - aggregate.displayVersion = `${aggregate.version}` - aggregate.prerelease = true - } - else if (aggregate.prerelease && aggregate.prerelease != true) { - aggregate.version += aggregate.prerelease - aggregate.prerelease = true - } - }) +module.exports.register = function () { + this.once('contentAggregated', ({ contentAggregate }) => { + contentAggregate.forEach((componentVersionBucket) => { + if (componentVersionBucket.prerelease === 'true') componentVersionBucket.prerelease = true + if (!componentVersionBucket.name && componentVersionBucket.displayVersion === '5.6') { + componentVersionBucket.name = 'ROOT' + componentVersionBucket.version = '5.6.0-RC1' + delete componentVersionBucket.displayVersion + componentVersionBucket.prerelease = true + } + else if (componentVersionBucket.version === '5.6.1') { + delete componentVersionBucket.prerelease + } + else if (typeof componentVersionBucket.prerelease === 'string' && componentVersionBucket.prerelease !== '-SNAPSHOT') { + componentVersionBucket.version += componentVersionBucket.prerelease + componentVersionBucket.prerelease = true + } }) -} - -function out(args) { - console.log(JSON.stringify(args, no_data, 2)); -} - - -function no_data(key, value) { - if (key == "data" || key == "files") { - return value ? "__data__" : value; - } - return value; + }) } From e2f3ba2245dafc3dcd4f3e6609023af3b7c2addc Mon Sep 17 00:00:00 2001 From: Dan Allen Date: Mon, 24 Oct 2022 18:07:29 -0600 Subject: [PATCH 024/178] add release line extension --- antora-playbook.yml | 2 +- build.gradle | 3 +- lib/antora/extensions/major-minor-segment.js | 204 ------------------- 3 files changed, 3 insertions(+), 206 deletions(-) delete mode 100644 lib/antora/extensions/major-minor-segment.js diff --git a/antora-playbook.yml b/antora-playbook.yml index 2bfe895764c..85336f7f32d 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -3,7 +3,7 @@ antora: - ./lib/antora/extensions/inject-collector-config.js - '@antora/collector-extension' - ./lib/antora/extensions/version-fix.js - - ./lib/antora/extensions/major-minor-segment.js + - '@opendevise/antora-release-line-extension' site: title: Spring Security url: https://docs.spring.io/spring-security/reference diff --git a/build.gradle b/build.gradle index ea56af613ab..962af95b607 100644 --- a/build.gradle +++ b/build.gradle @@ -12,6 +12,7 @@ antora { 'ALGOLIA_INDEX_NAME': 'security-docs' ] dependencies = [ - '@antora/collector-extension': '1.0.0-alpha.2' + '@antora/collector-extension': '1.0.0-alpha.2', + '@opendevise/antora-release-line-extension': '1.0.0-alpha.1' ] } diff --git a/lib/antora/extensions/major-minor-segment.js b/lib/antora/extensions/major-minor-segment.js deleted file mode 100644 index 6cf7152b2c7..00000000000 --- a/lib/antora/extensions/major-minor-segment.js +++ /dev/null @@ -1,204 +0,0 @@ -// https://gitlab.com/antora/antora/-/issues/132#note_712132072 -'use strict' - -const { posix: path } = require('path') - -module.exports.register = function({ config }) { - this.on('contentClassified', ({ contentCatalog }) => { - contentCatalog.getComponents().forEach(component => { - const componentName = component.name; - const generationToVersion = new Map(); - component.versions.forEach(version => { - const generation = getGeneration(version.version); - const original = generationToVersion.get(generation); - if (original === undefined || (original.prerelease && !version.prerelease)) { - generationToVersion.set(generation, version); - } - }); - - const versionToGeneration = Array.from(generationToVersion.entries()).reduce((acc, entry) => { - const [ generation, version ] = entry; - acc.set(version.version, generation); - return acc; - }, new Map()); - - contentCatalog.findBy({ component: componentName }).forEach((file) => { - const candidateVersion = file.src.version; - if (versionToGeneration.has(candidateVersion)) { - const generation = versionToGeneration.get(candidateVersion); - if (file.out) { - if (file.out) { - file.out.dirname = file.out.dirname.replace(candidateVersion, generation) - file.out.path = file.out.path.replace(candidateVersion, generation); - } - } - if (file.pub) { - file.pub.url = file.pub.url.replace(candidateVersion, generation) - } - } - }); - versionToGeneration.forEach((generation, mappedVersion) => { - contentCatalog.getComponent(componentName).versions.filter(version => version.version === mappedVersion).forEach((version) => { - version.url = version.url.replace(mappedVersion, generation); - }) - const symbolicVersionAlias = createSymbolicVersionAlias( - componentName, - mappedVersion, - generation, - 'redirect:to' - ) - symbolicVersionAlias.src.version = generation; - contentCatalog.addFile(symbolicVersionAlias); - }); - }) - }) -} - -function createSymbolicVersionAlias (component, version, symbolicVersionSegment, strategy) { - if (symbolicVersionSegment == null || symbolicVersionSegment === version) return - const family = 'alias' - const baseVersionAliasSrc = { component, module: 'ROOT', family, relative: '', basename: '', stem: '', extname: '' } - const symbolicVersionAliasSrc = Object.assign({}, baseVersionAliasSrc, { version: symbolicVersionSegment }) - const symbolicVersionAlias = { - src: symbolicVersionAliasSrc, - pub: computePub( - symbolicVersionAliasSrc, - computeOut(symbolicVersionAliasSrc, family, symbolicVersionSegment), - family - ), - } - const originalVersionAliasSrc = Object.assign({}, baseVersionAliasSrc, { version }) - const originalVersionSegment = computeVersionSegment(component, version, 'original') - const originalVersionAlias = { - src: originalVersionAliasSrc, - pub: computePub( - originalVersionAliasSrc, - computeOut(originalVersionAliasSrc, family, originalVersionSegment), - family - ), - } - if (strategy === 'redirect:to') { - originalVersionAlias.out = undefined - originalVersionAlias.rel = symbolicVersionAlias - return originalVersionAlias - } else { - symbolicVersionAlias.out = undefined - symbolicVersionAlias.rel = originalVersionAlias - return symbolicVersionAlias - } -} - - -function computeOut (src, family, version, htmlUrlExtensionStyle) { - let { component, module: module_, basename, extname, relative, stem } = src - if (component === 'ROOT') component = '' - if (module_ === 'ROOT') module_ = '' - let indexifyPathSegment = '' - let familyPathSegment = '' - - if (family === 'page') { - if (stem !== 'index' && htmlUrlExtensionStyle === 'indexify') { - basename = 'index.html' - indexifyPathSegment = stem - } else if (extname === '.adoc') { - basename = stem + '.html' - } - } else if (family === 'image') { - familyPathSegment = '_images' - } else if (family === 'attachment') { - familyPathSegment = '_attachments' - } - const modulePath = path.join(component, version, module_) - const dirname = path.join(modulePath, familyPathSegment, path.dirname(relative), indexifyPathSegment) - const path_ = path.join(dirname, basename) - const moduleRootPath = path.relative(dirname, modulePath) || '.' - const rootPath = path.relative(dirname, '') || '.' - - return { dirname, basename, path: path_, moduleRootPath, rootPath } -} - -function computePub (src, out, family, version, htmlUrlExtensionStyle) { - const pub = {} - let url - if (family === 'nav') { - const component = src.component || 'ROOT' - const urlSegments = component === 'ROOT' ? [] : [component] - if (version) urlSegments.push(version) - const module_ = src.module || 'ROOT' - if (module_ !== 'ROOT') urlSegments.push(module_) - // an artificial URL used for resolving page references in navigation model - url = '/' + urlSegments.join('/') + '/' - pub.moduleRootPath = '.' - } else if (family === 'page') { - const urlSegments = out.path.split('/') - const lastUrlSegmentIdx = urlSegments.length - 1 - if (htmlUrlExtensionStyle === 'drop') { - // drop just the .html extension or, if the filename is index.html, the whole segment - const lastUrlSegment = urlSegments[lastUrlSegmentIdx] - urlSegments[lastUrlSegmentIdx] = - lastUrlSegment === 'index.html' ? '' : lastUrlSegment.substr(0, lastUrlSegment.length - 5) - } else if (htmlUrlExtensionStyle === 'indexify') { - urlSegments[lastUrlSegmentIdx] = '' - } - url = '/' + urlSegments.join('/') - } else { - url = '/' + out.path - if (family === 'alias' && !src.relative.length) pub.splat = true - } - - pub.url = ~url.indexOf(' ') ? url.replace(SPACE_RX, '%20') : url - - if (out) { - pub.moduleRootPath = out.moduleRootPath - pub.rootPath = out.rootPath - } - - return pub -} - -function computeVersionSegment (name, version, mode) { - if (mode === 'original') return !version || version === 'master' ? '' : version - const strategy = this.latestVersionUrlSegmentStrategy - // NOTE: special exception; revisit in Antora 3 - if (!version || version === 'master') { - if (mode !== 'alias') return '' - if (strategy === 'redirect:to') return - } - if (strategy === 'redirect:to' || strategy === (mode === 'alias' ? 'redirect:from' : 'replace')) { - const component = this.getComponent(name) - const componentVersion = component && this.getComponentVersion(component, version) - if (componentVersion) { - const segment = - componentVersion === component.latest - ? this.latestVersionUrlSegment - : componentVersion === component.latestPrerelease - ? this.latestPrereleaseVersionUrlSegment - : undefined - return segment == null ? version : segment - } - } - return version -} - -function getGeneration(version) { - if (!version) return version; - const firstIndex = version.indexOf('.') - if (firstIndex < 0) { - return version; - } - const secondIndex = version.indexOf('.', firstIndex + 1); - const result = version.substr(0, secondIndex); - return result; -} - -function out(args) { - console.log(JSON.stringify(args, no_data, 2)); -} - - -function no_data(key, value) { - if (key == "data" || key == "files") { - return value ? "__data__" : value; - } - return value; -} From 32e27931676939821b606b4ce8a94dc6d684b420 Mon Sep 17 00:00:00 2001 From: Dan Allen Date: Tue, 25 Oct 2022 17:45:52 -0600 Subject: [PATCH 025/178] sync local-antora-playbook.yml with antora-playbook.yml --- local-antora-playbook.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/local-antora-playbook.yml b/local-antora-playbook.yml index 089af4e1437..1103d955e12 100644 --- a/local-antora-playbook.yml +++ b/local-antora-playbook.yml @@ -3,7 +3,7 @@ antora: - ./lib/antora/extensions/inject-collector-config.js - '@antora/collector-extension' - ./lib/antora/extensions/version-fix.js - - ./lib/antora/extensions/major-minor-segment.js + - '@opendevise/antora-release-line-extension' site: title: Spring Security url: https://docs.spring.io/spring-security/reference @@ -14,7 +14,7 @@ content: - url: . branches: [main, '5.{{6..9},{1..9}+({0..9})}.x'] worktrees: true # automatically discovers worktrees, if present; otherwise, will use git tree - #tags: ['5.{{6..9},{1..9}+({0..9})}.+({0..9})?(-RC+({0..9}))', '6.+({0..9}).+({0..9})?(-{RC,M}*)'] + tags: ['5.{{6..9},{1..9}+({0..9})}.+({0..9})?(-RC+({0..9}))', '6.+({0..9}).+({0..9})?(-{RC,M}*)'] start_path: docs asciidoc: attributes: From b211b55043d6cbd482d40ac5fda147448edc256f Mon Sep 17 00:00:00 2001 From: Dan Allen Date: Wed, 2 Nov 2022 17:29:58 -0600 Subject: [PATCH 026/178] fix the version fix for 5.6.0-RC1 * look for number instead of string --- lib/antora/extensions/version-fix.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/antora/extensions/version-fix.js b/lib/antora/extensions/version-fix.js index 788d2b01927..eeba12e12b5 100644 --- a/lib/antora/extensions/version-fix.js +++ b/lib/antora/extensions/version-fix.js @@ -4,7 +4,7 @@ module.exports.register = function () { this.once('contentAggregated', ({ contentAggregate }) => { contentAggregate.forEach((componentVersionBucket) => { if (componentVersionBucket.prerelease === 'true') componentVersionBucket.prerelease = true - if (!componentVersionBucket.name && componentVersionBucket.displayVersion === '5.6') { + if (!componentVersionBucket.name && componentVersionBucket.displayVersion === 5.6) { componentVersionBucket.name = 'ROOT' componentVersionBucket.version = '5.6.0-RC1' delete componentVersionBucket.displayVersion From 7491f8a76d723dff2f4c81e49c4302a066fb3856 Mon Sep 17 00:00:00 2001 From: Dan Allen Date: Tue, 8 Nov 2022 16:12:04 -0700 Subject: [PATCH 027/178] configure Antora and CI workflow to support partial build (single version) - upgrade to Antora 3.2.0-alpha.2 - upgrade release-line-extension to 1.0.0-alpha.2 - add atlas-extension - add local autoconfig-partial-build extension - configure deploy-docs.yml workflow to detect and set up partial build - configure publish-docs.sh script to sync partial build --- .github/actions/publish-docs.sh | 9 ++- .github/workflows/deploy-docs.yml | 12 +++- antora-playbook.yml | 2 + build.gradle | 5 +- .../extensions/autoconfig-partial-build.js | 55 +++++++++++++++++++ 5 files changed, 79 insertions(+), 4 deletions(-) create mode 100644 lib/antora/extensions/autoconfig-partial-build.js diff --git a/.github/actions/publish-docs.sh b/.github/actions/publish-docs.sh index 1267e56a10b..0f46bfea71c 100755 --- a/.github/actions/publish-docs.sh +++ b/.github/actions/publish-docs.sh @@ -1,5 +1,6 @@ #!/bin/bash +FROM=build/site HOST="$1" HOST_PATH="$2" SSH_PRIVATE_KEY="$3" @@ -13,10 +14,16 @@ fi ( set -e + set -f 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" build/site/ "$HOST:$HOST_PATH" + RSYNC_OPTS='-avz --delete' + if [ -n "$BUILD_REFNAME" ]; then + RSYNC_OPTS="-n $RSYNC_OPTS$(find $FROM -mindepth 1 -maxdepth 1 \! -name 404.html \! -name '.*' -type f -printf ' --include /%P')" + RSYNC_OPTS="$RSYNC_OPTS$(find $FROM -mindepth 1 -maxdepth 1 -type d \! -name _ -printf ' --include /%P --include /%P/**') --exclude **" + fi + rsync $RSYNC_OPTS -e "ssh -i $SSH_PRIVATE_KEY_PATH" $FROM/ "$HOST:$HOST_PATH" ) exit_code=$? diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index 2e6a2647efb..8208b82edff 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -1,6 +1,10 @@ name: Deploy Docs on: workflow_dispatch: + inputs: + build-refname: + description: Enter git refname to build (e.g., 5.7.x). + required: false push: branches: docs-build permissions: read-all @@ -10,7 +14,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: fetch-depth: 5 - name: Set Up Gradle @@ -24,6 +28,12 @@ jobs: run: | rm -f /home/runner/.gradle/caches/modules-2/modules-2.lock rm -f /home/runner/.gradle/caches/modules-2/gc.properties + - name: Set up refname build + if: github.event.inputs.build-refname + run: | + git fetch --depth 1 https://github.com/$GITHUB_REPOSITORY ${{ github.event.inputs.build-refname }} + echo BUILD_REFNAME=${{ github.event.inputs.build-refname }} >> $GITHUB_ENV + echo BUILD_VERSION=$(git cat-file --textconv FETCH_HEAD:gradle.properties | sed -n '/^version=/ { s/^version=//;p }') >> $GITHUB_ENV - name: Run Antora run: ./gradlew antora - name: Publish Docs diff --git a/antora-playbook.yml b/antora-playbook.yml index 85336f7f32d..9d35817d7f9 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -1,8 +1,10 @@ antora: extensions: + - ./lib/antora/extensions/autoconfig-partial-build.js - ./lib/antora/extensions/inject-collector-config.js - '@antora/collector-extension' - ./lib/antora/extensions/version-fix.js + - '@antora/atlas-extension' - '@opendevise/antora-release-line-extension' site: title: Spring Security diff --git a/build.gradle b/build.gradle index 962af95b607..ac8fc604543 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ plugins { } antora { - version = '3.2.0-alpha.1' + version = '3.2.0-alpha.2' options = ['--clean', '--fetch', '--stacktrace'] environment = [ 'ALGOLIA_API_KEY': '82c7ead946afbac3cf98c32446154691', @@ -12,7 +12,8 @@ antora { 'ALGOLIA_INDEX_NAME': 'security-docs' ] dependencies = [ + '@antora/atlas-extension': '1.0.0-alpha.1', '@antora/collector-extension': '1.0.0-alpha.2', - '@opendevise/antora-release-line-extension': '1.0.0-alpha.1' + '@opendevise/antora-release-line-extension': '1.0.0-alpha.2' ] } diff --git a/lib/antora/extensions/autoconfig-partial-build.js b/lib/antora/extensions/autoconfig-partial-build.js new file mode 100644 index 00000000000..a0641492fdf --- /dev/null +++ b/lib/antora/extensions/autoconfig-partial-build.js @@ -0,0 +1,55 @@ +'use strict' + +const execFile = require('node:util').promisify(require('node:child_process').execFile) +const { promises: fsp } = require('node:fs') + +module.exports.register = function () { + if (!process.env.BUILD_REFNAME) return + + this.once('playbookBuilt', async ({ playbook }) => { + const { concat: get } = this.require('simple-get') + const asciidocAttrs = ((playbook.asciidoc ||= {}).attributes ||= {}) + const siteManifestUrl = asciidocAttrs['primary-site-manifest-url'] || `${playbook.site.url}/site-manifest.json` + const siteManifestData = await (siteManifestUrl.startsWith('https://') + ? download(get, siteManifestUrl) + : fsp.readFile(siteManifestUrl) + ).then(JSON.parse) + let { BUILD_REFNAME: refname, BUILD_VERSION: version } = process.env + const isBranch = /[a-z]$/.test(refname) + if (!version) { + const repoUrl = await execFile('git', ['remote', 'get-url', 'origin']).then(({ stdout: output }) => output.trim()) + const propertiesUrl = `${repoUrl.replace('github.com', 'raw.githubusercontent.com')}/${refname}/gradle.properties` + version = await download(get, propertiesUrl) + .then((contents) => contents.toString().split('\n').find((it) => it.startsWith('version='))?.slice(8)) + } + if (isBranch && version.endsWith('-SNAPSHOT')) version = version.slice(0, -9) + const versionsInManifest = siteManifestData.components.ROOT.versions + if (!(version in versionsInManifest && isBranch === !!versionsInManifest[version].prerelease)) { + const category = require('path').basename(module.id, '.js') + this.getLogger(category).info(`version ${version} not previously built; reverting to full build`) + return + } + Object.assign( + playbook.content.sources[0], + isBranch ? { branches: [refname], tags: [] } : { branches: [], tags: [refname] } + ) + Object.assign( + asciidocAttrs, + { 'primary-site-url': '.', 'primary-site-manifest-url': siteManifestUrl } + ) + this.updateVariables({ playbook }) + }) +} + +function download (get, url) { + return new Promise((resolve, reject) => + get({ url }, (err, response, contents) => { + if (err) reject(err) + if (response.statusCode !== 200) { + const message = `Response code ${response.statusCode} (${response.statusMessage})` + return reject(Object.assign(new Error(message), { name: 'HTTPError' })) + } + resolve(contents) + }) + ) +} From 51fa7c0c3458d7f0dc2f717f56871759c66c154d Mon Sep 17 00:00:00 2001 From: Dan Allen Date: Thu, 10 Nov 2022 16:24:57 -0700 Subject: [PATCH 028/178] remove dry-run on sync script; replace with -c for partial build --- .github/actions/publish-docs.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/actions/publish-docs.sh b/.github/actions/publish-docs.sh index 0f46bfea71c..7db8dffb055 100755 --- a/.github/actions/publish-docs.sh +++ b/.github/actions/publish-docs.sh @@ -20,7 +20,7 @@ fi echo "$SSH_KNOWN_HOST" > ~/.ssh/known_hosts RSYNC_OPTS='-avz --delete' if [ -n "$BUILD_REFNAME" ]; then - RSYNC_OPTS="-n $RSYNC_OPTS$(find $FROM -mindepth 1 -maxdepth 1 \! -name 404.html \! -name '.*' -type f -printf ' --include /%P')" + RSYNC_OPTS="-c $RSYNC_OPTS$(find $FROM -mindepth 1 -maxdepth 1 \! -name 404.html \! -name '.*' -type f -printf ' --include /%P')" RSYNC_OPTS="$RSYNC_OPTS$(find $FROM -mindepth 1 -maxdepth 1 -type d \! -name _ -printf ' --include /%P --include /%P/**') --exclude **" fi rsync $RSYNC_OPTS -e "ssh -i $SSH_PRIVATE_KEY_PATH" $FROM/ "$HOST:$HOST_PATH" From 35bdfa87a020b504649bbf64687622ad4380ae63 Mon Sep 17 00:00:00 2001 From: Dan Allen Date: Tue, 22 Nov 2022 08:06:56 -0700 Subject: [PATCH 029/178] do full sync when Antora reverts to running a full build (#12263) --- .github/actions/publish-docs.sh | 4 ++++ lib/antora/extensions/autoconfig-partial-build.js | 6 ++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/.github/actions/publish-docs.sh b/.github/actions/publish-docs.sh index 7db8dffb055..5593d26c00e 100755 --- a/.github/actions/publish-docs.sh +++ b/.github/actions/publish-docs.sh @@ -19,6 +19,10 @@ fi echo "$SSH_PRIVATE_KEY" > "$SSH_PRIVATE_KEY_PATH" echo "$SSH_KNOWN_HOST" > ~/.ssh/known_hosts RSYNC_OPTS='-avz --delete' + if [ -f .full-build ]; then + unlink .full-build + BUILD_REFNAME= + fi if [ -n "$BUILD_REFNAME" ]; then RSYNC_OPTS="-c $RSYNC_OPTS$(find $FROM -mindepth 1 -maxdepth 1 \! -name 404.html \! -name '.*' -type f -printf ' --include /%P')" RSYNC_OPTS="$RSYNC_OPTS$(find $FROM -mindepth 1 -maxdepth 1 -type d \! -name _ -printf ' --include /%P --include /%P/**') --exclude **" diff --git a/lib/antora/extensions/autoconfig-partial-build.js b/lib/antora/extensions/autoconfig-partial-build.js index a0641492fdf..b81d32bdcf2 100644 --- a/lib/antora/extensions/autoconfig-partial-build.js +++ b/lib/antora/extensions/autoconfig-partial-build.js @@ -1,7 +1,8 @@ 'use strict' const execFile = require('node:util').promisify(require('node:child_process').execFile) -const { promises: fsp } = require('node:fs') +const fsp = require('node:fs/promises') +const ospath = require('node:path') module.exports.register = function () { if (!process.env.BUILD_REFNAME) return @@ -26,7 +27,8 @@ module.exports.register = function () { const versionsInManifest = siteManifestData.components.ROOT.versions if (!(version in versionsInManifest && isBranch === !!versionsInManifest[version].prerelease)) { const category = require('path').basename(module.id, '.js') - this.getLogger(category).info(`version ${version} not previously built; reverting to full build`) + await fsp.writeFile(ospath.join(playbook.dir, '.full-build'), '') + console.log(`version ${version} not previously built; reverting to full build`) return } Object.assign( From dd44928051b0fd511dae2d7a4296d1bc4efa375a Mon Sep 17 00:00:00 2001 From: Dan Allen Date: Wed, 23 Nov 2022 17:43:16 -0700 Subject: [PATCH 030/178] add 6.x branches to build --- antora-playbook.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/antora-playbook.yml b/antora-playbook.yml index 9d35817d7f9..91234035f5c 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -15,7 +15,7 @@ git: content: sources: - url: https://github.com/spring-projects/spring-security - branches: [main, '5.{{6..9},{1..9}+({0..9})}.x'] + branches: [main, '5.{{6..9},{1..9}+({0..9})}.x', '6.+({0..9}).x'] tags: ['5.{{6..9},{1..9}+({0..9})}.+({0..9})?(-RC+({0..9}))', '6.+({0..9}).+({0..9})?(-{RC,M}*)'] start_path: docs asciidoc: From 7757eab714393c8824417501d5bf0a3653005aae Mon Sep 17 00:00:00 2001 From: Dan Allen Date: Tue, 6 Dec 2022 14:17:36 -0700 Subject: [PATCH 031/178] add Asciidoctor Tabs, tabs migration, code chomping & code folding to production site --- antora-playbook.yml | 8 ++++++++ build.gradle | 6 ++++-- local-antora-playbook.yml | 10 +++++++++- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/antora-playbook.yml b/antora-playbook.yml index 91234035f5c..839ae5643d8 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -6,6 +6,10 @@ antora: - ./lib/antora/extensions/version-fix.js - '@antora/atlas-extension' - '@opendevise/antora-release-line-extension' + - require: '@springio/asciidoctor-extensions/tabs-migration-antora-extension' + # uncomment this option to save the migrated content to the worktree + #save_result: true + unwrap_example_block: always site: title: Spring Security url: https://docs.spring.io/spring-security/reference @@ -22,6 +26,10 @@ asciidoc: attributes: page-pagination: '' hide-uri-scheme: '@' + tabs-sync-option: '@' + extensions: + - '@asciidoctor/tabs' + - '@springio/asciidoctor-extensions' urls: latest_version_segment_strategy: redirect:to latest_version_segment: '' diff --git a/build.gradle b/build.gradle index ac8fc604543..71f0f7cda7a 100644 --- a/build.gradle +++ b/build.gradle @@ -9,11 +9,13 @@ antora { environment = [ 'ALGOLIA_API_KEY': '82c7ead946afbac3cf98c32446154691', 'ALGOLIA_APP_ID': '244V8V9FGG', - 'ALGOLIA_INDEX_NAME': 'security-docs' + 'ALGOLIA_INDEX_NAME': 'security-docs', ] dependencies = [ '@antora/atlas-extension': '1.0.0-alpha.1', '@antora/collector-extension': '1.0.0-alpha.2', - '@opendevise/antora-release-line-extension': '1.0.0-alpha.2' + '@asciidoctor/tabs': '1.0.0-alpha.8', + '@opendevise/antora-release-line-extension': '1.0.0-alpha.2', + '@springio/asciidoctor-extensions': '1.0.0-alpha.4', ] } diff --git a/local-antora-playbook.yml b/local-antora-playbook.yml index 1103d955e12..530ba43b344 100644 --- a/local-antora-playbook.yml +++ b/local-antora-playbook.yml @@ -4,6 +4,10 @@ antora: - '@antora/collector-extension' - ./lib/antora/extensions/version-fix.js - '@opendevise/antora-release-line-extension' + - require: '@springio/asciidoctor-extensions/tabs-migration-antora-extension' + # uncomment this option to save the migrated content to the worktree + #save_result: true + unwrap_example_block: always site: title: Spring Security url: https://docs.spring.io/spring-security/reference @@ -12,7 +16,7 @@ git: content: sources: - url: . - branches: [main, '5.{{6..9},{1..9}+({0..9})}.x'] + branches: [main, '5.{{6..9},{1..9}+({0..9})}.x', '6.+({0..9}).x'] worktrees: true # automatically discovers worktrees, if present; otherwise, will use git tree tags: ['5.{{6..9},{1..9}+({0..9})}.+({0..9})?(-RC+({0..9}))', '6.+({0..9}).+({0..9})?(-{RC,M}*)'] start_path: docs @@ -20,6 +24,10 @@ asciidoc: attributes: page-pagination: '' hide-uri-scheme: '@' + tabs-sync-option: '@' + extensions: + - '@asciidoctor/tabs' + - '@springio/asciidoctor-extensions' urls: latest_version_segment: '' ui: From c9ee194832862f9f44f952ce6c12a88e9bcfc7c9 Mon Sep 17 00:00:00 2001 From: Dan Allen Date: Tue, 6 Dec 2022 15:12:33 -0700 Subject: [PATCH 032/178] invalidate CDN cache after full build --- .github/actions/publish-docs.sh | 11 +++++++++-- .github/workflows/deploy-docs.yml | 2 +- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/.github/actions/publish-docs.sh b/.github/actions/publish-docs.sh index 5593d26c00e..0d133daca53 100755 --- a/.github/actions/publish-docs.sh +++ b/.github/actions/publish-docs.sh @@ -5,10 +5,12 @@ HOST="$1" HOST_PATH="$2" SSH_PRIVATE_KEY="$3" SSH_KNOWN_HOST="$4" +CLOUDFLARE_ZONE_ID="$5" +CLOUDFLARE_CACHE_TOKEN="$6" SSH_PRIVATE_KEY_PATH="$HOME/.ssh/${GITHUB_REPOSITORY:-publish-docs}" -if [ "$#" -ne 4 ]; then - echo -e "not enough arguments USAGE:\n\n$0 \$HOST \$HOST_PATH \$SSH_PRIVATE_KEY \$SSH_KNOWN_HOST\n\n" >&2 +if [ "$#" -ne 6 ]; then + echo -e "not enough arguments USAGE:\n\n$0 \$HOST \$HOST_PATH \$SSH_PRIVATE_KEY \$SSH_KNOWN_HOST \$CLOUDFLARE_ZONE_ID \$CLOUDFLARE_CACHE_TOKEN\n\n" >&2 exit 1 fi @@ -28,6 +30,11 @@ fi RSYNC_OPTS="$RSYNC_OPTS$(find $FROM -mindepth 1 -maxdepth 1 -type d \! -name _ -printf ' --include /%P --include /%P/**') --exclude **" fi rsync $RSYNC_OPTS -e "ssh -i $SSH_PRIVATE_KEY_PATH" $FROM/ "$HOST:$HOST_PATH" + if [ -z "$BUILD_REFNAME" ]; then + curl -X POST "https://api.cloudflare.com/client/v4/zones/$CLOUDFLARE_ZONE_ID/purge_cache" \ + -H "Content-Type:application/json" -H "Authorization: Bearer $CLOUDFLARE_CACHE_TOKEN" \ + --data '{"files":["https://docs.spring.io/spring-security"]}' + fi ) exit_code=$? diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index 8208b82edff..22e5a72a0b4 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -37,4 +37,4 @@ jobs: - name: Run Antora run: ./gradlew antora - name: Publish Docs - run: ${GITHUB_WORKSPACE}/.github/actions/publish-docs.sh "${{ secrets.DOCS_USERNAME }}@${{ secrets.DOCS_HOST }}" /opt/www/domains/spring.io/docs/htdocs/spring-security/reference/ "${{ secrets.DOCS_SSH_KEY }}" "${{ secrets.DOCS_SSH_HOST_KEY }}" + run: $GITHUB_WORKSPACE/.github/actions/publish-docs.sh "${{ secrets.DOCS_USERNAME }}@${{ secrets.DOCS_HOST }}" /opt/www/domains/spring.io/docs/htdocs/spring-security/reference/ "${{ secrets.DOCS_SSH_KEY }}" "${{ secrets.DOCS_SSH_HOST_KEY }}" "${{ secrets.CLOUDFLARE_ZONE_ID }}" "${{ secrets.CLOUDFLARE_CACHE_TOKEN }}" From f500c0fbe05da3113dc825fb17df93b79fa078f5 Mon Sep 17 00:00:00 2001 From: Dan Allen Date: Thu, 8 Dec 2022 17:14:28 -0700 Subject: [PATCH 033/178] upgrade version of Asciidoctor Tabs to 1.0.0-alpha.11 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 71f0f7cda7a..c60f2c3b091 100644 --- a/build.gradle +++ b/build.gradle @@ -14,7 +14,7 @@ antora { dependencies = [ '@antora/atlas-extension': '1.0.0-alpha.1', '@antora/collector-extension': '1.0.0-alpha.2', - '@asciidoctor/tabs': '1.0.0-alpha.8', + '@asciidoctor/tabs': '1.0.0-alpha.11', '@opendevise/antora-release-line-extension': '1.0.0-alpha.2', '@springio/asciidoctor-extensions': '1.0.0-alpha.4', ] From 2fb91e626619ebd867716e0419f5462e86487386 Mon Sep 17 00:00:00 2001 From: Dan Allen Date: Sun, 18 Dec 2022 17:44:34 -0700 Subject: [PATCH 034/178] switch to published partial build extension and remove local extension --- antora-playbook.yml | 4 +- build.gradle | 3 +- .../extensions/autoconfig-partial-build.js | 57 ------------------- 3 files changed, 4 insertions(+), 60 deletions(-) delete mode 100644 lib/antora/extensions/autoconfig-partial-build.js diff --git a/antora-playbook.yml b/antora-playbook.yml index 839ae5643d8..35f35f3f68d 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -1,12 +1,12 @@ antora: extensions: - - ./lib/antora/extensions/autoconfig-partial-build.js + - '@springio/antora-extensions/partial-build-extension' - ./lib/antora/extensions/inject-collector-config.js - '@antora/collector-extension' - ./lib/antora/extensions/version-fix.js - '@antora/atlas-extension' - '@opendevise/antora-release-line-extension' - - require: '@springio/asciidoctor-extensions/tabs-migration-antora-extension' + - require: '@springio/antora-extensions/tabs-migration-extension' # uncomment this option to save the migrated content to the worktree #save_result: true unwrap_example_block: always diff --git a/build.gradle b/build.gradle index c60f2c3b091..c42383c6477 100644 --- a/build.gradle +++ b/build.gradle @@ -16,6 +16,7 @@ antora { '@antora/collector-extension': '1.0.0-alpha.2', '@asciidoctor/tabs': '1.0.0-alpha.11', '@opendevise/antora-release-line-extension': '1.0.0-alpha.2', - '@springio/asciidoctor-extensions': '1.0.0-alpha.4', + '@springio/antora-extensions': '1.0.0-alpha.2', + '@springio/asciidoctor-extensions': '1.0.0-alpha.7', ] } diff --git a/lib/antora/extensions/autoconfig-partial-build.js b/lib/antora/extensions/autoconfig-partial-build.js deleted file mode 100644 index b81d32bdcf2..00000000000 --- a/lib/antora/extensions/autoconfig-partial-build.js +++ /dev/null @@ -1,57 +0,0 @@ -'use strict' - -const execFile = require('node:util').promisify(require('node:child_process').execFile) -const fsp = require('node:fs/promises') -const ospath = require('node:path') - -module.exports.register = function () { - if (!process.env.BUILD_REFNAME) return - - this.once('playbookBuilt', async ({ playbook }) => { - const { concat: get } = this.require('simple-get') - const asciidocAttrs = ((playbook.asciidoc ||= {}).attributes ||= {}) - const siteManifestUrl = asciidocAttrs['primary-site-manifest-url'] || `${playbook.site.url}/site-manifest.json` - const siteManifestData = await (siteManifestUrl.startsWith('https://') - ? download(get, siteManifestUrl) - : fsp.readFile(siteManifestUrl) - ).then(JSON.parse) - let { BUILD_REFNAME: refname, BUILD_VERSION: version } = process.env - const isBranch = /[a-z]$/.test(refname) - if (!version) { - const repoUrl = await execFile('git', ['remote', 'get-url', 'origin']).then(({ stdout: output }) => output.trim()) - const propertiesUrl = `${repoUrl.replace('github.com', 'raw.githubusercontent.com')}/${refname}/gradle.properties` - version = await download(get, propertiesUrl) - .then((contents) => contents.toString().split('\n').find((it) => it.startsWith('version='))?.slice(8)) - } - if (isBranch && version.endsWith('-SNAPSHOT')) version = version.slice(0, -9) - const versionsInManifest = siteManifestData.components.ROOT.versions - if (!(version in versionsInManifest && isBranch === !!versionsInManifest[version].prerelease)) { - const category = require('path').basename(module.id, '.js') - await fsp.writeFile(ospath.join(playbook.dir, '.full-build'), '') - console.log(`version ${version} not previously built; reverting to full build`) - return - } - Object.assign( - playbook.content.sources[0], - isBranch ? { branches: [refname], tags: [] } : { branches: [], tags: [refname] } - ) - Object.assign( - asciidocAttrs, - { 'primary-site-url': '.', 'primary-site-manifest-url': siteManifestUrl } - ) - this.updateVariables({ playbook }) - }) -} - -function download (get, url) { - return new Promise((resolve, reject) => - get({ url }, (err, response, contents) => { - if (err) reject(err) - if (response.statusCode !== 200) { - const message = `Response code ${response.statusCode} (${response.statusMessage})` - return reject(Object.assign(new Error(message), { name: 'HTTPError' })) - } - resolve(contents) - }) - ) -} From 409bd29abdcfa7034fed58de9425e9dc8f30270f Mon Sep 17 00:00:00 2001 From: Dan Allen Date: Wed, 21 Dec 2022 12:57:51 -0700 Subject: [PATCH 035/178] rework the search indexing process - reconfigure the docsearch scraper to store component and version for each res - switch from the Docker image to a resuable GitHub Action - add publish-docsearch-config extension to transform Handlebars into YAML --- .github/actions/algolia-config.json | 20 ------ .github/actions/algolia-docsearch-scraper.sh | 21 ------ .github/actions/docsearch-config.json.hbs | 67 +++++++++++++++++++ .github/workflows/rebuild-search-index.yml | 19 +++++- antora-playbook-for-indexing.yml | 43 ++++++++++++ antora-playbook.yml | 2 + build.gradle | 6 +- .../extensions/publish-docsearch-config.js | 28 ++++++++ 8 files changed, 159 insertions(+), 47 deletions(-) delete mode 100644 .github/actions/algolia-config.json delete mode 100755 .github/actions/algolia-docsearch-scraper.sh create mode 100644 .github/actions/docsearch-config.json.hbs create mode 100644 antora-playbook-for-indexing.yml create mode 100644 lib/antora/extensions/publish-docsearch-config.js diff --git a/.github/actions/algolia-config.json b/.github/actions/algolia-config.json deleted file mode 100644 index 09d30d486ea..00000000000 --- a/.github/actions/algolia-config.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "index_name": "security-docs", - "start_urls": [ - "https://docs.spring.io/spring-security/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-docsearch-scraper.sh b/.github/actions/algolia-docsearch-scraper.sh deleted file mode 100755 index 2bb9ce178ac..00000000000 --- a/.github/actions/algolia-docsearch-scraper.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/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/docsearch-config.json.hbs b/.github/actions/docsearch-config.json.hbs new file mode 100644 index 00000000000..05ed2890c49 --- /dev/null +++ b/.github/actions/docsearch-config.json.hbs @@ -0,0 +1,67 @@ +{ + "index_name": "spring-security-docs", + "start_urls": [ + {{#each components}} + {{#each versions}} + { + "url": "{{{@root.site.url}}}/{{#if (eq ./activeVersionSegment '')}}(?:$|index.html$|[a-z].*){{else}}{{{./activeVersionSegment}}}/{{/if}}", + "extra_attributes": { + "component": "{{#if (eq ./name 'ROOT')}}spring-security{{else}}{{{./name}}}{{/if}}", + "version": "{{{./version}}}", + "version_rank": {{#if (eq this ../latest)}}1{{else}}2{{/if}} + } + }{{#unless (and @last @../last)}},{{/unless}} + {{/each}} + {{/each}} + ], + "sitemap_urls": [ + "{{{site.url}}}/sitemap.xml" + ], + "scrape_start_urls": true, + "stop_urls": [ + {{#each stopPages}} + "{{{@root.site.url}}}{{{./pub.url}}}"{{#unless @last}},{{/unless}} + {{/each}} + ], + "selectors": { + "default": { + "lvl0": { + "global": true, + "selector": ".nav-panel-explore .context .title, .nav-panel-explore .context .version" + }, + "lvl1": ".doc > h1.page", + "lvl2": ".doc .sect1 > h2:first-child", + "lvl3": ".doc .sect2 > h3:first-child", + "lvl4": ".doc .sect3 > h4:first-child", + "text": ".doc p, .doc dt, .doc td.content, .doc th.tableblock" + } + }, + "selectors_exclude": [ + "#section-summary" + ], + "min_indexed_level": 1, + "custom_settings": { + "advancedSyntax": true, + "attributesForFaceting": [ + "component", + "version" + ], + "attributesToRetrieve": [ + "anchor", + "content", + "hierarchy", + "url", + "component", + "version" + ], + "attributesToSnippet": [ + "content:25" + ], + "customRanking": [ + "desc(weight.page_rank)", + "asc(version_rank)", + "desc(weight.level)", + "asc(weight.position)" + ] + } +} diff --git a/.github/workflows/rebuild-search-index.yml b/.github/workflows/rebuild-search-index.yml index 2e21ef9ea63..780090caccb 100644 --- a/.github/workflows/rebuild-search-index.yml +++ b/.github/workflows/rebuild-search-index.yml @@ -8,8 +8,21 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: fetch-depth: 5 - - name: Run Docsearch Scraper - 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 + - name: Configure Indexer + run: | + CONFIG_FILE=.github/actions/docsearch-config.json + if [ ! -f $CONFIG_FILE ]; then + curl -sL -o $CONFIG_FILE $(node -p "require('fs').readFileSync('antora-playbook.yml', 'utf8').match(/^ url: (.*)/m)[1]")/docsearch-config.json + fi + INDEX_NAME=$(node -p "JSON.parse(require('fs').readFileSync('$CONFIG_FILE')).index_name") + echo "CONFIG_FILE=${CONFIG_FILE}" >> $GITHUB_ENV + echo "INDEX_NAME_TMP=${INDEX_NAME}-${GITHUB_RUN_ID}" >> $GITHUB_ENV + - name: Run Indexer + uses: darrenjennings/algolia-docsearch-action@master + with: + algolia_application_id: ${{ secrets.ALGOLIA_APP_ID }} + algolia_api_key: ${{ secrets.ALGOLIA_API_KEY }} + file: ${{ env.CONFIG_FILE }} diff --git a/antora-playbook-for-indexing.yml b/antora-playbook-for-indexing.yml new file mode 100644 index 00000000000..1170528e914 --- /dev/null +++ b/antora-playbook-for-indexing.yml @@ -0,0 +1,43 @@ +antora: + extensions: + - '@springio/antora-extensions/partial-build-extension' + - ./lib/antora/extensions/inject-collector-config.js + - '@antora/collector-extension' + - ./lib/antora/extensions/version-fix.js + - '@antora/atlas-extension' + - '@opendevise/antora-release-line-extension' + - require: '@springio/antora-extensions/tabs-migration-extension' + # uncomment this option to save the migrated content to the worktree + #save_result: true + unwrap_example_block: always + - id: publish-docsearch-config + require: ./lib/antora/extensions/publish-docsearch-config + template_path: ./.github/actions/docsearch-config.json.hbs +site: + title: Spring Security + url: https://docs.spring.io/spring-security/reference + robots: allow +git: + ensure_git_suffix: false +content: + sources: + - url: https://github.com/spring-projects/spring-security + branches: main + tags: 6.0.1 + start_path: docs +asciidoc: + attributes: + page-pagination: '' + hide-uri-scheme: '@' + tabs-sync-option: '@' + extensions: + - '@asciidoctor/tabs' + - '@springio/asciidoctor-extensions' +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 diff --git a/antora-playbook.yml b/antora-playbook.yml index 35f35f3f68d..a03da3b8dd9 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -10,6 +10,8 @@ antora: # uncomment this option to save the migrated content to the worktree #save_result: true unwrap_example_block: always + - require: ./lib/antora/extensions/publish-docsearch-config + template_path: ./.github/actions/docsearch-config.json.hbs site: title: Spring Security url: https://docs.spring.io/spring-security/reference diff --git a/build.gradle b/build.gradle index c42383c6477..85eb3922114 100644 --- a/build.gradle +++ b/build.gradle @@ -4,13 +4,13 @@ plugins { } antora { - version = '3.2.0-alpha.2' + version = '3.2.0-alpha.2' options = ['--clean', '--fetch', '--stacktrace'] environment = [ 'ALGOLIA_API_KEY': '82c7ead946afbac3cf98c32446154691', 'ALGOLIA_APP_ID': '244V8V9FGG', - 'ALGOLIA_INDEX_NAME': 'security-docs', - ] + 'ALGOLIA_INDEX_NAME': 'spring-security-docs', + ] dependencies = [ '@antora/atlas-extension': '1.0.0-alpha.1', '@antora/collector-extension': '1.0.0-alpha.2', diff --git a/lib/antora/extensions/publish-docsearch-config.js b/lib/antora/extensions/publish-docsearch-config.js new file mode 100644 index 00000000000..724f1f373bb --- /dev/null +++ b/lib/antora/extensions/publish-docsearch-config.js @@ -0,0 +1,28 @@ +'use strict' + +const fsp = require('node:fs/promises') +const ospath = require('node:path') + +/** + * An Antora extension that generates the docsearch config file from a Handlebars template and publishes it with the + * site, where the scraper job can retrieve it. + */ +module.exports.register = function ({ config: { templatePath = './docsearch/config.json.hbs' } }) { + const expandPath = this.require('@antora/expand-path-helper') + const handlebars = this.require('handlebars').create() + handlebars.registerHelper('eq', (a, b) => a === b) + handlebars.registerHelper('and', (a, b) => a && b) + + this.on('beforePublish', async ({ playbook, contentCatalog, siteCatalog }) => { + templatePath = expandPath(templatePath, { dot: playbook.dir }) + const templateSrc = await fsp.readFile(templatePath, 'utf8') + const templateBasename = ospath.basename(templatePath) + const template = handlebars.compile(templateSrc, { noEscape: true, preventIndent: true, srcName: templateBasename }) + const components = contentCatalog.getComponentsSortedBy('name').filter((component) => component.latest.version) + const stopPages = contentCatalog.getPages((page) => { + return page.out && ('page-archived' in page.asciidoc.attributes || 'page-noindex' in page.asciidoc.attributes) + }) + const compiled = template({ components, site: playbook.site, stopPages }) + siteCatalog.addFile({ contents: Buffer.from(compiled), out: { path: 'docsearch-config.json' } }) + }) +} From 5855bbb3783a99bafa78d26d281b1ddbd434b314 Mon Sep 17 00:00:00 2001 From: Dan Allen Date: Fri, 23 Dec 2022 04:48:33 -0700 Subject: [PATCH 036/178] fix secret for indexer workflow --- .github/workflows/rebuild-search-index.yml | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/.github/workflows/rebuild-search-index.yml b/.github/workflows/rebuild-search-index.yml index 780090caccb..2b2269ca262 100644 --- a/.github/workflows/rebuild-search-index.yml +++ b/.github/workflows/rebuild-search-index.yml @@ -6,6 +6,8 @@ jobs: build: if: github.repository_owner == 'spring-projects' runs-on: ubuntu-latest + env: + CONFIG_FILE: .github/actions/docsearch-config.json steps: - name: Checkout uses: actions/checkout@v3 @@ -13,16 +15,12 @@ jobs: fetch-depth: 5 - name: Configure Indexer run: | - CONFIG_FILE=.github/actions/docsearch-config.json - if [ ! -f $CONFIG_FILE ]; then - curl -sL -o $CONFIG_FILE $(node -p "require('fs').readFileSync('antora-playbook.yml', 'utf8').match(/^ url: (.*)/m)[1]")/docsearch-config.json - fi + curl -sL -o $CONFIG_FILE $(node -p "require('fs').readFileSync('antora-playbook.yml', 'utf8').match(/^ url: (.*)/m)[1]")/docsearch-config.json INDEX_NAME=$(node -p "JSON.parse(require('fs').readFileSync('$CONFIG_FILE')).index_name") - echo "CONFIG_FILE=${CONFIG_FILE}" >> $GITHUB_ENV echo "INDEX_NAME_TMP=${INDEX_NAME}-${GITHUB_RUN_ID}" >> $GITHUB_ENV - name: Run Indexer uses: darrenjennings/algolia-docsearch-action@master with: - algolia_application_id: ${{ secrets.ALGOLIA_APP_ID }} + algolia_application_id: ${{ secrets.ALGOLIA_APPLICATION_ID }} algolia_api_key: ${{ secrets.ALGOLIA_API_KEY }} file: ${{ env.CONFIG_FILE }} From 5ac63ed64fb3671ecf9bc7d9a57a8b5f29a16fa6 Mon Sep 17 00:00:00 2001 From: Dan Allen Date: Fri, 23 Dec 2022 04:57:23 -0700 Subject: [PATCH 037/178] show build-refname value in Deploy Docs workflow name --- .github/workflows/deploy-docs.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index 22e5a72a0b4..b2904a00def 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -1,4 +1,5 @@ name: Deploy Docs +run-name: ${{ format('{0} ({1})', github.workflow, github.event.inputs.build-refname || 'all') }} on: workflow_dispatch: inputs: From fdfbdcc64523dfaa76ec225a976c7123d18017cf Mon Sep 17 00:00:00 2001 From: Dan Allen Date: Fri, 23 Dec 2022 13:47:45 -0700 Subject: [PATCH 038/178] fix name of secret for Algolia API key [no ci] --- .github/workflows/rebuild-search-index.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/rebuild-search-index.yml b/.github/workflows/rebuild-search-index.yml index 2b2269ca262..4f969e84d5a 100644 --- a/.github/workflows/rebuild-search-index.yml +++ b/.github/workflows/rebuild-search-index.yml @@ -22,5 +22,5 @@ jobs: uses: darrenjennings/algolia-docsearch-action@master with: algolia_application_id: ${{ secrets.ALGOLIA_APPLICATION_ID }} - algolia_api_key: ${{ secrets.ALGOLIA_API_KEY }} + algolia_api_key: ${{ secrets.ALGOLIA_WRITE_KEY }} file: ${{ env.CONFIG_FILE }} From 1c181dc81c4c43198648ee509b1b60e6af6b286c Mon Sep 17 00:00:00 2001 From: Dan Allen Date: Fri, 23 Dec 2022 15:57:35 -0700 Subject: [PATCH 039/178] remove temporary playbook --- antora-playbook-for-indexing.yml | 43 -------------------------------- 1 file changed, 43 deletions(-) delete mode 100644 antora-playbook-for-indexing.yml diff --git a/antora-playbook-for-indexing.yml b/antora-playbook-for-indexing.yml deleted file mode 100644 index 1170528e914..00000000000 --- a/antora-playbook-for-indexing.yml +++ /dev/null @@ -1,43 +0,0 @@ -antora: - extensions: - - '@springio/antora-extensions/partial-build-extension' - - ./lib/antora/extensions/inject-collector-config.js - - '@antora/collector-extension' - - ./lib/antora/extensions/version-fix.js - - '@antora/atlas-extension' - - '@opendevise/antora-release-line-extension' - - require: '@springio/antora-extensions/tabs-migration-extension' - # uncomment this option to save the migrated content to the worktree - #save_result: true - unwrap_example_block: always - - id: publish-docsearch-config - require: ./lib/antora/extensions/publish-docsearch-config - template_path: ./.github/actions/docsearch-config.json.hbs -site: - title: Spring Security - url: https://docs.spring.io/spring-security/reference - robots: allow -git: - ensure_git_suffix: false -content: - sources: - - url: https://github.com/spring-projects/spring-security - branches: main - tags: 6.0.1 - start_path: docs -asciidoc: - attributes: - page-pagination: '' - hide-uri-scheme: '@' - tabs-sync-option: '@' - extensions: - - '@asciidoctor/tabs' - - '@springio/asciidoctor-extensions' -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 From ea5260adad09ddf9cacd96dc2f81e4ce93158e73 Mon Sep 17 00:00:00 2001 From: Dan Allen Date: Fri, 6 Jan 2023 14:12:37 -0700 Subject: [PATCH 040/178] add playbook template to support local build in content branches (#12497) --- .../templates/per-branch-antora-playbook.yml | 19 +++++++++++++++++++ local-antora-playbook.yml | 2 -- 2 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 lib/antora/templates/per-branch-antora-playbook.yml diff --git a/lib/antora/templates/per-branch-antora-playbook.yml b/lib/antora/templates/per-branch-antora-playbook.yml new file mode 100644 index 00000000000..85d4338a183 --- /dev/null +++ b/lib/antora/templates/per-branch-antora-playbook.yml @@ -0,0 +1,19 @@ +# The purpose of this Antora playbook is to generate a preview of the docs in the current branch. +site: + title: Spring Security Reference +content: + sources: + - url: ./.. + branches: HEAD + start_path: docs + worktrees: true +asciidoc: + attributes: + page-pagination: '' + hide-uri-scheme: '@' +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/local-antora-playbook.yml b/local-antora-playbook.yml index 530ba43b344..b1a8df19ff6 100644 --- a/local-antora-playbook.yml +++ b/local-antora-playbook.yml @@ -11,8 +11,6 @@ antora: site: title: Spring Security url: https://docs.spring.io/spring-security/reference -git: - ensure_git_suffix: false content: sources: - url: . From 9442191a840a109d055520326d1ce0d335ac904a Mon Sep 17 00:00:00 2001 From: Dan Allen Date: Fri, 6 Jan 2023 16:12:06 -0700 Subject: [PATCH 041/178] enable AsciiDoc sourcemap in branch/author builds for more accurate log messages --- lib/antora/templates/per-branch-antora-playbook.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/antora/templates/per-branch-antora-playbook.yml b/lib/antora/templates/per-branch-antora-playbook.yml index 85d4338a183..fc087ec5ac0 100644 --- a/lib/antora/templates/per-branch-antora-playbook.yml +++ b/lib/antora/templates/per-branch-antora-playbook.yml @@ -11,6 +11,7 @@ asciidoc: attributes: page-pagination: '' hide-uri-scheme: '@' + sourcemap: true urls: latest_version_segment: '' ui: From 063b48c7391c4f0b1146ea187e25bfeee3a8a5f0 Mon Sep 17 00:00:00 2001 From: Dan Allen Date: Mon, 9 Jan 2023 17:44:01 -0700 Subject: [PATCH 042/178] add packages (dependencies) to playbook template in docs-build branch --- lib/antora/templates/per-branch-antora-playbook.yml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/antora/templates/per-branch-antora-playbook.yml b/lib/antora/templates/per-branch-antora-playbook.yml index fc087ec5ac0..e3f7f5676b8 100644 --- a/lib/antora/templates/per-branch-antora-playbook.yml +++ b/lib/antora/templates/per-branch-antora-playbook.yml @@ -1,4 +1,11 @@ -# The purpose of this Antora playbook is to generate a preview of the docs in the current branch. +# PACKAGES antora@3.2.0-alpha.2 @antora/collector-extension@1.0.0-alpha.3 @springio/antora-extensions@1.0.0-alpha.2 @asciidoctor/tabs@1.0.0-alpha.11 +# +# The purpose of this Antora playbook is to build the docs in the current branch. +antora: + extensions: + - '@antora/collector-extension' + - require: '@springio/antora-extensions/tabs-migration-extension' + unwrap_example_block: always site: title: Spring Security Reference content: @@ -11,6 +18,9 @@ asciidoc: attributes: page-pagination: '' hide-uri-scheme: '@' + tabs-sync-option: '@' + extensions: + - '@asciidoctor/tabs' sourcemap: true urls: latest_version_segment: '' From 33b1038eb68e9ace944d767c7cad3ab8a0379ad7 Mon Sep 17 00:00:00 2001 From: Dan Allen Date: Wed, 11 Jan 2023 00:52:03 -0700 Subject: [PATCH 043/178] upgrade Gradle Antora plugin and extension packages --- build.gradle | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index 85eb3922114..4a06b581c62 100644 --- a/build.gradle +++ b/build.gradle @@ -1,11 +1,11 @@ plugins { id 'base' - id 'org.antora' version '1.0.0-alpha.3' + id 'org.antora' version '1.0.0-alpha.5' } antora { version = '3.2.0-alpha.2' - options = ['--clean', '--fetch', '--stacktrace'] + options = [clean: true, fetch: true, stacktrace: true] environment = [ 'ALGOLIA_API_KEY': '82c7ead946afbac3cf98c32446154691', 'ALGOLIA_APP_ID': '244V8V9FGG', @@ -13,10 +13,10 @@ antora { ] dependencies = [ '@antora/atlas-extension': '1.0.0-alpha.1', - '@antora/collector-extension': '1.0.0-alpha.2', + '@antora/collector-extension': '1.0.0-alpha.3', '@asciidoctor/tabs': '1.0.0-alpha.11', '@opendevise/antora-release-line-extension': '1.0.0-alpha.2', '@springio/antora-extensions': '1.0.0-alpha.2', - '@springio/asciidoctor-extensions': '1.0.0-alpha.7', + '@springio/asciidoctor-extensions': '1.0.0-alpha.8', ] } From ac8e3f68105073d2714df629619ad559aec3e1cf Mon Sep 17 00:00:00 2001 From: Dan Allen Date: Wed, 11 Jan 2023 03:04:03 -0700 Subject: [PATCH 044/178] only index pages from the latest version in each release line --- .github/actions/docsearch-config.json.hbs | 10 ++++------ lib/antora/extensions/publish-docsearch-config.js | 7 +++++-- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/.github/actions/docsearch-config.json.hbs b/.github/actions/docsearch-config.json.hbs index 05ed2890c49..94f73dd8314 100644 --- a/.github/actions/docsearch-config.json.hbs +++ b/.github/actions/docsearch-config.json.hbs @@ -1,17 +1,15 @@ { "index_name": "spring-security-docs", "start_urls": [ - {{#each components}} - {{#each versions}} + {{#each latestVersions}} { "url": "{{{@root.site.url}}}/{{#if (eq ./activeVersionSegment '')}}(?:$|index.html$|[a-z].*){{else}}{{{./activeVersionSegment}}}/{{/if}}", "extra_attributes": { - "component": "{{#if (eq ./name 'ROOT')}}spring-security{{else}}{{{./name}}}{{/if}}", + "component": "{{#if (eq ./name 'ROOT')}}security{{else}}{{{./name}}}{{/if}}", "version": "{{{./version}}}", - "version_rank": {{#if (eq this ../latest)}}1{{else}}2{{/if}} + "version_rank": {{#if (eq ./activeVersionSegment '')}}1{{else}}2{{/if}} } - }{{#unless (and @last @../last)}},{{/unless}} - {{/each}} + }{{#unless @last}},{{/unless}} {{/each}} ], "sitemap_urls": [ diff --git a/lib/antora/extensions/publish-docsearch-config.js b/lib/antora/extensions/publish-docsearch-config.js index 724f1f373bb..7a7c6fadcf2 100644 --- a/lib/antora/extensions/publish-docsearch-config.js +++ b/lib/antora/extensions/publish-docsearch-config.js @@ -18,11 +18,14 @@ module.exports.register = function ({ config: { templatePath = './docsearch/conf const templateSrc = await fsp.readFile(templatePath, 'utf8') const templateBasename = ospath.basename(templatePath) const template = handlebars.compile(templateSrc, { noEscape: true, preventIndent: true, srcName: templateBasename }) - const components = contentCatalog.getComponentsSortedBy('name').filter((component) => component.latest.version) + const latestVersions = contentCatalog.getComponentsSortedBy('name').reduce((accum, component) => { + component.versions.forEach((version) => version.versionSegment !== undefined && accum.push(version)) + return accum + }, []) const stopPages = contentCatalog.getPages((page) => { return page.out && ('page-archived' in page.asciidoc.attributes || 'page-noindex' in page.asciidoc.attributes) }) - const compiled = template({ components, site: playbook.site, stopPages }) + const compiled = template({ latestVersions, site: playbook.site, stopPages }) siteCatalog.addFile({ contents: Buffer.from(compiled), out: { path: 'docsearch-config.json' } }) }) } From fcc344dfa2b873db722721e6c14ed82922f971ec Mon Sep 17 00:00:00 2001 From: Dan Allen Date: Sat, 14 Jan 2023 02:13:21 -0700 Subject: [PATCH 045/178] document how to trigger the docs build workflow using the GitHub Actions UI or GitHub CLI --- README.adoc | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/README.adoc b/README.adoc index 46c171e4b62..7a05d3a085e 100644 --- a/README.adoc +++ b/README.adoc @@ -138,3 +138,29 @@ To build the documentation from the current clone, using any worktrees that are -- . Navigate to _$HOME/spring-security/docs-site/build/site/index.html_ to view the generated documentation. + +[#trigger] +== Trigger the documentation build workflow (docs manager) + +You can either trigger the production document build using the Deploy Docs entry in the GitHub Actions web UI or using the https://cli.github.com/[GitHub CLI]. + +=== GitHub Actions web UI + +In the GitHub Actions web UI, click the Deploy Docs entry. +Click on the "Run workflow" menu. +Select the branch `docs-build` and click "Run workflow" to trigger a full build. +To trigger a partial build, specify a release line branch name in the input field labeled "Enter git refname to build". + +=== GitHub CLI + +Starting from within the cloned repository (ideally the playbook branch), here's how to trigger a full build of the documentation site using the `gh` command: + + $ gh workflow run deploy-docs.yml --ref docs-build + +Here's how to trigger a partial build of a single version (based on the release line branch name): + + $ gh workflow run deploy-docs.yml --ref docs-build -f build-refname=5.7.x + +Run `gh help workflow run` to show the docs for this command and other examples of how to use it. + +If you're not running the `gh` command from within the cloned repository, you can specify the repository using the `--repo` CLI option (e.g., `--repo spring-projects/spring-security`). From f2aa1c7687bdc1e5e5e33084b4bc1264f73ec010 Mon Sep 17 00:00:00 2001 From: Dan Allen Date: Fri, 13 Jan 2023 16:29:12 -0700 Subject: [PATCH 046/178] upgrade Asciidoctor Tabs, the Antora Gradle plugin, and Node.js --- build.gradle | 8 ++++++-- lib/antora/templates/per-branch-antora-playbook.yml | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index 4a06b581c62..9dcf89cba2b 100644 --- a/build.gradle +++ b/build.gradle @@ -1,6 +1,10 @@ plugins { id 'base' - id 'org.antora' version '1.0.0-alpha.5' + id 'org.antora' version '1.0.0-alpha.7' +} + +node { + version = '19.4.0' } antora { @@ -14,7 +18,7 @@ antora { dependencies = [ '@antora/atlas-extension': '1.0.0-alpha.1', '@antora/collector-extension': '1.0.0-alpha.3', - '@asciidoctor/tabs': '1.0.0-alpha.11', + '@asciidoctor/tabs': '1.0.0-alpha.12', '@opendevise/antora-release-line-extension': '1.0.0-alpha.2', '@springio/antora-extensions': '1.0.0-alpha.2', '@springio/asciidoctor-extensions': '1.0.0-alpha.8', diff --git a/lib/antora/templates/per-branch-antora-playbook.yml b/lib/antora/templates/per-branch-antora-playbook.yml index e3f7f5676b8..45b598b9def 100644 --- a/lib/antora/templates/per-branch-antora-playbook.yml +++ b/lib/antora/templates/per-branch-antora-playbook.yml @@ -1,4 +1,4 @@ -# PACKAGES antora@3.2.0-alpha.2 @antora/collector-extension@1.0.0-alpha.3 @springio/antora-extensions@1.0.0-alpha.2 @asciidoctor/tabs@1.0.0-alpha.11 +# PACKAGES antora@3.2.0-alpha.2 @antora/collector-extension@1.0.0-alpha.3 @springio/antora-extensions@1.0.0-alpha.2 @asciidoctor/tabs@1.0.0-alpha.12 # # The purpose of this Antora playbook is to build the docs in the current branch. antora: From 765f4f65fd95f97f0af297a3863361c06385696e Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Wed, 18 Jan 2023 16:27:33 -0600 Subject: [PATCH 047/178] Update to spring-io/spring-gradle-build-action@v2 --- .github/workflows/deploy-docs.yml | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index b2904a00def..70d53390528 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -19,16 +19,10 @@ jobs: with: fetch-depth: 5 - name: Set Up Gradle - uses: spring-io/spring-gradle-build-action@v1 + uses: spring-io/spring-gradle-build-action@v2 with: java-version: '17' distribution: temurin - - name: Scrub 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 /home/runner/.gradle/caches/modules-2/modules-2.lock - rm -f /home/runner/.gradle/caches/modules-2/gc.properties - name: Set up refname build if: github.event.inputs.build-refname run: | From 576e4d4711a1fb7ec2b2ce2a7c87cdc9b55af527 Mon Sep 17 00:00:00 2001 From: Dan Allen Date: Tue, 17 Jan 2023 11:00:25 -0700 Subject: [PATCH 048/178] prime atlas extension for use in playbook template - declare atlas extension as package - declare release line extension as package - enable release line extension by default - configure atlas extension, but do not enable by default (enable using --extension @antora/atlas-extension) --- lib/antora/templates/per-branch-antora-playbook.yml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/lib/antora/templates/per-branch-antora-playbook.yml b/lib/antora/templates/per-branch-antora-playbook.yml index 45b598b9def..a8d5cbd6d76 100644 --- a/lib/antora/templates/per-branch-antora-playbook.yml +++ b/lib/antora/templates/per-branch-antora-playbook.yml @@ -1,9 +1,13 @@ -# PACKAGES antora@3.2.0-alpha.2 @antora/collector-extension@1.0.0-alpha.3 @springio/antora-extensions@1.0.0-alpha.2 @asciidoctor/tabs@1.0.0-alpha.12 +# 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-alpha.2 @asciidoctor/tabs@1.0.0-alpha.12 @opendevise/antora-release-line-extension@1.0.0-alpha.2 # # 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: @@ -16,8 +20,9 @@ content: worktrees: true asciidoc: attributes: - page-pagination: '' hide-uri-scheme: '@' + page-pagination: '' + primary-site-url: https://docs.spring.io/spring-security/reference tabs-sync-option: '@' extensions: - '@asciidoctor/tabs' From 0f0c341cfacf628513502c5ab27974385f737661 Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Thu, 19 Jan 2023 22:07:45 -0600 Subject: [PATCH 049/178] Add GRADLE_ENTERPRISE_SECRET_ACCESS_KEY --- .github/workflows/deploy-docs.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index 70d53390528..65fa942acd9 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -8,6 +8,8 @@ on: required: false push: branches: docs-build +env: + GRADLE_ENTERPRISE_SECRET_ACCESS_KEY: ${{ secrets.GRADLE_ENTERPRISE_SECRET_ACCESS_KEY }} permissions: read-all jobs: build: From 06cb8bfe6a70026205f50ef6c259c627e5158422 Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Fri, 20 Jan 2023 08:50:46 -0600 Subject: [PATCH 050/178] Not quiet scan --- lib/antora/extensions/inject-collector-config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/antora/extensions/inject-collector-config.js b/lib/antora/extensions/inject-collector-config.js index 044c7f2d9ee..3c312bdf2c5 100644 --- a/lib/antora/extensions/inject-collector-config.js +++ b/lib/antora/extensions/inject-collector-config.js @@ -1,6 +1,6 @@ 'use strict' -const BASE_COMMAND = 'gradlew -q -PbuildSrc.skipTests=true' +const BASE_COMMAND = 'gradlew -PbuildSrc.skipTests=true --scan' const JVM_ARGS='-Xmx3g -XX:+HeapDumpOnOutOfMemoryError' const REPO_URL = 'https://github.com/spring-projects/spring-security' const TASK_NAME=':spring-security-docs:generateAntora' From ff30a7e3db8b6adea8d3f810dfc529202f9c40b9 Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Thu, 19 Jan 2023 23:11:29 -0600 Subject: [PATCH 051/178] --stacktrace --- lib/antora/extensions/inject-collector-config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/antora/extensions/inject-collector-config.js b/lib/antora/extensions/inject-collector-config.js index 3c312bdf2c5..de2e15f2adb 100644 --- a/lib/antora/extensions/inject-collector-config.js +++ b/lib/antora/extensions/inject-collector-config.js @@ -1,6 +1,6 @@ 'use strict' -const BASE_COMMAND = 'gradlew -PbuildSrc.skipTests=true --scan' +const BASE_COMMAND = 'gradlew -PbuildSrc.skipTests=true --scan --stacktrace' const JVM_ARGS='-Xmx3g -XX:+HeapDumpOnOutOfMemoryError' const REPO_URL = 'https://github.com/spring-projects/spring-security' const TASK_NAME=':spring-security-docs:generateAntora' From c4ab7e2353076d7f59a8d6e01db9e149404c2362 Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Fri, 20 Jan 2023 08:35:28 -0600 Subject: [PATCH 052/178] Revert to spring-gradle-build-action@v1 --- .github/workflows/deploy-docs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index 65fa942acd9..dc3b0ae1284 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -21,7 +21,7 @@ jobs: with: fetch-depth: 5 - name: Set Up Gradle - uses: spring-io/spring-gradle-build-action@v2 + uses: spring-io/spring-gradle-build-action@v1 with: java-version: '17' distribution: temurin From d9bb5862570cc922891f00045b97d38677497bef Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Fri, 20 Jan 2023 13:17:37 -0600 Subject: [PATCH 053/178] Use spring-gradle-build-action@v2 We also need to use -Porg.gradle.java.installations.auto-detect=false so some of the Gradle versions don't get xerces ClassCastExceptions. Closes gh-12568 --- .github/workflows/deploy-docs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index dc3b0ae1284..65fa942acd9 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -21,7 +21,7 @@ jobs: with: fetch-depth: 5 - name: Set Up Gradle - uses: spring-io/spring-gradle-build-action@v1 + uses: spring-io/spring-gradle-build-action@v2 with: java-version: '17' distribution: temurin From 53acce43bc5d9bb49ea8ea8fc5166888d3ae8668 Mon Sep 17 00:00:00 2001 From: Dan Allen Date: Fri, 20 Jan 2023 18:50:05 -0700 Subject: [PATCH 054/178] add docs to local Antora extensions --- .../extensions/inject-collector-config.js | 22 +++++++++---------- .../extensions/publish-docsearch-config.js | 10 +++++++-- lib/antora/extensions/version-fix.js | 14 ++++++++++++ 3 files changed, 33 insertions(+), 13 deletions(-) diff --git a/lib/antora/extensions/inject-collector-config.js b/lib/antora/extensions/inject-collector-config.js index de2e15f2adb..0ded65bd3cc 100644 --- a/lib/antora/extensions/inject-collector-config.js +++ b/lib/antora/extensions/inject-collector-config.js @@ -5,21 +5,21 @@ const JVM_ARGS='-Xmx3g -XX:+HeapDumpOnOutOfMemoryError' const REPO_URL = 'https://github.com/spring-projects/spring-security' const TASK_NAME=':spring-security-docs:generateAntora' +/** + * The purpose of this extension is to inject the Antora Collector configuration into the parsed component version + * descriptor in tags created before Antora Collector was introduced. Antora Collector runs a command to generate a + * replacement antora.yml that a) sets the version from the value of the version property in gradle.properties and b) + * populates AsciiDoc attributes with information from the Gradle build, such as software versions and resource URLs. + */ module.exports.register = function () { this.once('contentAggregated', ({ contentAggregate }) => { for (const { origins } of contentAggregate) { for (const origin of origins) { - if (origin.url === REPO_URL && origin.descriptor.ext?.collector === undefined) { - origin.descriptor.ext = { - collector: { - run: { - command: `${BASE_COMMAND} "-Dorg.gradle.jvmargs=${JVM_ARGS}" ${TASK_NAME}`, - local: true, - }, - scan: { - dir: './build/generateAntora', - }, - } + if (!(origin.url === REPO_URL && origin.descriptor.ext?.collector === undefined)) continue + origin.descriptor.ext = { + collector: { + run: { command: `${BASE_COMMAND} "-Dorg.gradle.jvmargs=${JVM_ARGS}" ${TASK_NAME}`, local: true }, + scan: { dir: './build/generateAntora' }, } } } diff --git a/lib/antora/extensions/publish-docsearch-config.js b/lib/antora/extensions/publish-docsearch-config.js index 7a7c6fadcf2..a40213e9b53 100644 --- a/lib/antora/extensions/publish-docsearch-config.js +++ b/lib/antora/extensions/publish-docsearch-config.js @@ -4,8 +4,14 @@ const fsp = require('node:fs/promises') const ospath = require('node:path') /** - * An Antora extension that generates the docsearch config file from a Handlebars template and publishes it with the - * site, where the scraper job can retrieve it. + * An Antora extension that generates a config file that controls the behavior of the docsearch scraper. + * + * This extension generates a docsearch config file by evaluating a Handlebars template (e.g., + * .github/actions/docsearch-config.json.hbs). It then publishes the output file to the root of the site + * (docsearch-config.json). The docsearch scraper will retrieve for the config file from the published site. + * + * This extension will only add entries for the latest version in each release line. Additionally, if the page-archived + * or page-noindex attribute is defined in the document header of the page, that page will be excluded from the index. */ module.exports.register = function ({ config: { templatePath = './docsearch/config.json.hbs' } }) { const expandPath = this.require('@antora/expand-path-helper') diff --git a/lib/antora/extensions/version-fix.js b/lib/antora/extensions/version-fix.js index eeba12e12b5..70518455323 100644 --- a/lib/antora/extensions/version-fix.js +++ b/lib/antora/extensions/version-fix.js @@ -1,5 +1,19 @@ 'use strict' +/** + * The purpose of this extension is to fix invalid metadata saved to either antora.yml or gradle.properties in certain + * tags. This invalid metadata prevents Antora from classifying the component versions properly. + * + * This extension addresses with the following cases: + * + * . the boolean value on the prerelease key is incorrectly quoted + * . the prerelease tag is set to true for a GA version + * . the value of the name key is empty + * . the value of the displayVersion key doesn't match the actual version + * . the -SNAPSHOT suffix is appended to the value of the version key instead of the value of the prerelease key + * + * This extension should be listed directly after @antora/collector-extension. + */ module.exports.register = function () { this.once('contentAggregated', ({ contentAggregate }) => { contentAggregate.forEach((componentVersionBucket) => { From 8940bc89798c9c6002f473ba5905d6b33a3fcabc Mon Sep 17 00:00:00 2001 From: Dan Allen Date: Tue, 24 Jan 2023 12:52:44 -0700 Subject: [PATCH 055/178] document the authoring process and publishing workflow for the documentation --- README.adoc | 426 +++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 369 insertions(+), 57 deletions(-) diff --git a/README.adoc b/README.adoc index 7a05d3a085e..75603e111a2 100644 --- a/README.adoc +++ b/README.adoc @@ -1,27 +1,69 @@ -= Spring Security Docs Build += Spring Security Docs Home +ifndef::env-github[:toc:] +ifdef::env-github[] +:important-caption: :exclamation: +:note-caption: :paperclip: +endif::[] -You're currently viewing the Antora playbook branch. -The playbook branch hosts the docs build that is used to build and publish the production docs site. - -The Spring Security reference docs are built using https://antora.org[Antora]. -This README covers how to build the docs in a software branch as well as how to build the production docs site locally. +This README describes the processes and tools used to build the documentation for production as well as how to generate a local preview of the documentation. == Overview -To prepare your system for building the documentation, <> and then <>. -Once you've completed those steps, follow the instructions in <> to learn how to build the documentation for a version branch you haven't previously checked out. +The Spring Security reference docs are generated using Antora. +The Gradle Antora Plugin is used as the primary interface to Antora. + +You're viewing the playbook branch for the Spring Security project. +The playbook branch hosts the docs build used to build and publish the production docs site, and is thus the documentation home base. +If you're a docs developer, you'll mostly work in this branch. +If you're a writer, you'll mostly work in software branches. + +=== Layout + +The playbook branch, named *docs-build*, hosts the primary documentation build. +The documentation itself is located in a dedicated subproject in each software branch (i.e., the docs are stored alongside the code). +Software branches, also referred to as release line branches or content branches, follow the pattern `major.minor.x` (e.g., 6.0.x), or `main` for the latest release line. +Software tags follow the pattern `major.minor.patch` (e.g., 6.0.1). +The latest version of the docs for each release line is always sourced from a tag. +The release line branches host the prerelease materials for the next version. + +=== Builds + +The build for the production site is stored at the root of the playbook branch. +This branch also holds the search crawler configuration and runner for the production site. +This build is only needed for building the production site (or for developing and testing the docs build itself). +The build for each content branch is located in a subproject, typically the folder named _docs_. +This is the build that authors use to preview the docs for a single version when writing content. + +Regardless of how the docs site is built, Antora is configured to run a separate command to compute the version of the docs per git reference. +This command is run by an Antora extension named Antora Collector. +Using Collector allows the version of the docs to be maintained centrally in the _gradle.properties_ file in each git reference. +The command also populates a collection of AsciiDoc attributes that provide access to software versions and resource URLs. +_The docs build will not work without Collector._ + +=== UI + +The UI is developed in a separate project named https://github.com/spring-io/antora-ui-spring[antora-ui-spring]. +That project generates and publishes a UI bundle, which the docs build refers to using its public bundle URL. +There is one UI for all versions of the documentation. + +The UI only shows the latest version in each release line. +In order to access other versions that are published, the URL must be known in advance. + +[#usage] +== Usage -To build the production site documentation on your computer, follow the instructions in <>, <>, and then <>. +To prepare your system for building the documentation, <>, then <>. +Then you can build the documentation in either the main branch or 6.0.x branch. .Branch checkout instead of worktrees [NOTE] ==== If you prefer to set up your workspace without worktrees, complete the steps in <> and clone the project repository onto your computer. -Then follow the instructions in each section starting from the `sdk env || sdk env install` step once you've checked out the desired branch. +Then, check out the desired branch and follow the instructions in each section starting from the `sdk env || sdk env install` step. ==== [#prerequisites] -== Prerequisites (everyone) +=== Prerequisites (everyone) These instructions assume you already have basic tools on your system, including bash, zip, unzip, git, and curl. In addition to these basic tools, you need https://sdkman.io/install[SDKMAN!] installed so that the correct JDK is set for each branch. @@ -32,19 +74,19 @@ In addition to these basic tools, you need https://sdkman.io/install[SDKMAN!] in $ curl -s "https://get.sdkman.io" | bash This command downloads and installs SDKMAN! -Once installation is complete, you should see a command displayed in your terminal that will initiate SDKMAN. +Once installation is complete, you should see a command displayed in your terminal that will initiate SDKMAN!. -- . Copy the command displayed in your terminal and run it. -`$HOME` is the path unique to your computer (e.g., _home/my-jam/.sdkman/bin/sdkman-init.sh_). +In the following command, `$HOME` is the path unique to your computer (e.g., _home/username/.sdkman/bin/sdkman-init.sh_). $ source "$HOME/.sdkman/bin/sdkman-init.sh" -You'll use SDKMAN in the next sections to install and switch to the JDK required for each branch. -Now you're ready to <>. +You'll use SDKMAN! in the following sections to install and switch to the JDK required for each branch. +Now you're ready to prepare your workspace. -[#build-main] -== Build the main branch documentation (writers) +[#prepare-workspace] +=== Prepare your workspace (everyone) Your workspace will be the folder that contains the git worktrees of the project. @@ -53,18 +95,31 @@ Your workspace will be the folder that contains the git worktrees of the project $ mkdir spring-security $ cd spring-security -. Clone the project repository and create the primary worktree for the main branch. -Then change into the new _main_ folder. +. Clone the project repository and create the worktree for the main branch. +Then change into the new *main* worktree. $ git clone https://github.com/spring-projects/spring-security main $ cd main -. Switch to the required JDK using SDKMAN by running the following command: +. Set up a worktree for the 6.0.x branch by running the following commands: + + $ git worktree add ../6.0.x 6.0.x --track + +. Repeat the last step for all release line branches (e.g., 5.8.x, 5.7.x, etc) you intend to work with. + +Now you're ready to build the docs in the main or 6.0.x branches. + +=== Build the documentation in the main branch (writers) + +NOTE: The instructions in this section assume you've completed the steps in <>. + +. First, make sure you're in the *main* worktree. +. Switch to the required JDK using SDKMAN! by running the following command: + -- $ sdk env || sdk env install -SDKMAN will switch to the required JDK or install it if it isn't present. +SDKMAN! will switch to the required JDK, provisioning it first if it isn't already available on your machine. -- . Generate the documentation with Antora using the following command: @@ -72,50 +127,58 @@ SDKMAN will switch to the required JDK or install it if it isn't present. -- $ ./gradlew -PbuildSrc.skipTests=true :spring-security-docs:antora -This command will build the documentation, including any generated attributes, for the main branch. --- +You can also run this command directly from the _docs_ folder: -. Navigate to _$HOME/spring-security/main/docs/build/site/index.html_ to view the generated documentation. + $ cd docs + $ ../gradlew -PbuildSrc.skipTests=true antora -[#build-branch] -== Build the 5.8.x branch documentation (writers) +This command will build the documentation for the *main* branch. +The Antora playbook is retrieved by the playbook provider from the *docs-build* branch. +The retrieved playbook file will be cached as _cached-antora-playbook.yml_. +-- -NOTE: The instructions in this section assume you've completed the steps in the <>. +. Navigate to the local file URI shown in the terminal to view the generated documentation. -After creating the worktree for the main branch, you can set up a worktree for any other branches you'll work on in the future. -In this section, you'll create a worktree for the 5.8.x branch in your project workspace. +=== Build the documentation in the 6.0.x branch (writers) -. To add a worktree, you have to be in a worktree. -In your terminal, change to the _main_ folder if you aren't already in it, e.g., _$HOME/spring-security/main_. -Set up a worktree for the 5.8.x branch and then change into the new directory by running the following commands: +NOTE: The instructions in this section assume you've completed the steps in <>. - $ git worktree add ../5.8.x 5.8.x --track - $ cd ../5.8.x +. First, change to the *6.0.x* worktree. -. Switch to the required JDK or install it. + $ cd ../6.0.x +. Switch to the required JDK using SDKMAN! by running the following command: ++ +-- $ sdk env || sdk env install +SDKMAN! will switch to the required JDK, provisioning it first if it isn't already available on your machine. +-- + . Generate the documentation with the following command: + -- $ ./gradlew -PbuildSrc.skipTests=true :spring-security-docs:antora -This command will build the documentation, including any generated attributes, for the 5.8.x branch. +This command will build the documentation for the *6.0.x* branch. +The Antora playbook is retrieved by the playbook provider from the *docs-build* branch. +The retrieved playbook file will be cached as _cached-antora-playbook.yml_. -- -. Navigate to _$HOME/spring-security/5.8.x/docs/build/site/index.html_ to view the generated documentation. +. Navigate to the local file URI shown in the terminal to view the generated documentation. + +=== Build the documentation for production (docs developer) + +NOTE: The instructions in this section assume you've completed the steps in <>. -[#build-production] -== Build the production documentation site (docs manager) +To build the project's production site, you'll set up a worktree for the *docs-build* branch of the repository. -NOTE: The instructions in this section assume you've <>. +. To add a worktree, you have to be in the main worktree. +In your terminal, change to the *main* worktree if you aren't already in it. -To build the project's production site, you'll set up a worktree for the docs-build branch of the repository. + $ cd ../main -. To add a worktree, you have to be in a worktree. -In your terminal, change to the _main_ folder if you aren't already in it, e.g., _$HOME/spring-security/main_. -Run the following command to set up the worktree for the _docs-build_ branch. +. Run the following command to set up the worktree for the *docs-build* branch. Then change into the new _docs-build_ directory. $ git worktree add ../docs-build docs-build --track @@ -130,37 +193,286 @@ Then change into the new _docs-build_ directory. -- $ ./gradlew antora -This command will build all of the documentation included in the project's production site from the repository on GitHub. +This command will build all of the documentation for the production site from the git repository on GitHub. -To build the documentation from the current clone, using any worktrees that are available, use the following command instead: +(Optional) To build the documentation using the current clone, using any available worktrees, run the following command instead: $ ./gradlew antora --playbook local-antora-playbook.yml -- -. Navigate to _$HOME/spring-security/docs-site/build/site/index.html_ to view the generated documentation. +. Navigate to the local file URI shown in the terminal to view the generated documentation. + +=== Content authoring + +We highly recommend relying on the https://intellij-asciidoc-plugin.ahus1.de/docs/users-guide/index.html[IntelliJ AsciiDoc Plugin] while writing. +It provides assistance and autocompletion for the AsciiDoc syntax, Antora resource IDs, attributes and keys set in the playbook, component version descriptor, etc. +It also provides single page preview. + +Once you've completed your edits, you'll build the branch locally to review and validate the changes. +*You don't need to build the entire site!* +*You don't need to create or edit the playbook or gradle.properties file either.* +Rather, you'll interface with the docs build, and it will automatically set up a playbook for your branch and manage any required extensions, right from the docs subproject in your software (content) branch. +See <> to learn how to build the docs. + +If the branch you modified has any AsciiDoc or Antora errors, they'll be printed to your terminal. +Once you've fixed any errors and reviewed your changes, submit a pull request to the relevant software branch. +If the change applies to multiple versions of the docs, you'll want to submit the pull request to the oldest active software branch. +The maintainer will then apply that change to each of the release line branches. + +== CI workflows + +CI workflows are run by GitHub Actions. +CI workflows are defined in YAML files in the _.github/workflows_ directory. +The CI workflows in the default (i.e., _main_) branch serve as the primary entry. +Corresponding CI workflows in a non-default branch may specialize the workflow for that branch. +However, the CI workflows in non-default branches do not receive all events and often have to be triggered. +A CI workflow must also be present in the default branch in order for it to appear in the list of workflows in the GitHub Actions web UI. + +CI workflows are triggered either by activity, on schedule, by the `gh workflow` call, or manually through the GitHub Actions web UI. +Scheduled workflows only run on the default branch (i.e., *main*). +However, a scheduled workflow may trigger a workflow in another branch using the `gh workflow` call. +Activity on a branch or tag is only picked up by workflows in that reference. +However, a workflow running in a branch or tag may trigger a workflow in another branch using the `gh workflow` call. + +There are two key CI workflows that pertain to the docs: + +* Deploy Docs (_.github/workflows/deploy-docs.yml_) +* Rebuild Search Index (_.github/workflows/rebuild-search-index.yml_) + +In both cases, the concrete steps are located in the CI workflow in the *docs-build* branch. +The CI workflows in the *main* branch only trigger the workflows in the *docs-build* branch. + +The production site is only deployed from the CI workflow in the *docs-build* branch. +Often times, activity in a git reference or a scheduled workflow will trigger the CI workflow in the *docs-build* branch. +Thus, this workflow is also present in each software branch to pick up on that activity. + +The production search index is built from the CI workflow in the *docs-build* branch. +This CI workflow is triggered once per day by the scheduler on the same workflow in the *main* branch. +This CI workflow must reside in the *main* branch in order to appear in the list of workflows in the CI branch so it can be triggered manually. + +Here's a list of activity that does and does not trigger the Deploy Docs workflow: + +pull request:: Does not trigger the Deploy Docs workflow. + +push to software branch:: Triggers the Deploy Docs workflow in that branch, which in turn triggers the Deploy Docs workflow in the *docs-build* branch. +Attempts to run the docs build as partial build, if applicable. + +push to docs-build branch:: Triggers the Deploy Docs workflow in that branch. +Runs the docs build as a full build. + +push tag:: Triggers the Deploy Docs workflow in that tag, which in turn triggers the Deploy Docs workflow in the *docs-build* branch. +Always runs the docs build as a full build. + +schedule:: Not configured for the Deploy Docs workflow. + +It's possible to trigger the Deploy Docs manually from the GitHub Actions web UI. +Be sure to select docs-build as the branch so that it will run a full build. +See <> for details. + +Note that updating the UI bundle does not currently trigger the Deploy Docs workflow, though it could be configured to do so. + +The Rebuild Search Index workflow is only triggered on a schedule, currently once per day. + +== Publishing + +The project in the *docs-build* branch supports publishing both full and partial builds of the production docs site. +The project uses a Gradle build to run Antora on the playbook file _antora-playbook.yml_ (i.e., `./gradlew antora`). +The production docs site is hosted on Linux server running Apache httpd. +Files are published over SSH to the server by the .github/actions/publish-docs.sh script. +A CDN (CloudFlare) caches URLs for a brief window of time. +The publish script attempts to invalidate the cache after publishing the files so new content is available immediately. + +=== Full build + +In a full build, the entire site is rebuilt from the content sources matched by the patterns listed in the playbook file. +The UI assets are also published when a full build is run. + +[#partial-builds] +=== Partial builds + +A partial build is a single version sources from a single git reference. +A partial build requested by git reference using the CI workflow variable *build-refname*. +Here's an example of how to trigger the CI workflow for a partial build: + + $ gh workflow run deploy-docs.yml --repo spring-projects/spring-security --ref docs-build -f build-refname=5.7.x + +The partial build is coordinated by the Antora Atlas extension and set up by the @springio/antora-extensions/partial-build-extension extension. +See https://github.com/spring-io/antora-extensions#partial-build[Partial Build] for a detailed explanation of the partial build extension and how to configure it. + +During a partial build, Atlas runs in same site mode, which means it creates relative links (rather than absolute links) to files imported from the site manifest. +This feature assumes that the built files will be reunited with the previously built files in the published site. +The @springio/antora-extensions/partial-build-extension reconfigures the playbook to run a partial build if the BUILD_REFNAME environment variable is set, reverting to a full build if it determines a partial build is not appropriate. + +During a partial build, only the version folder that was built is published to the web server. +Files in other folders are untouched. +The UI assets are not published when a partial build is run. [#trigger] -== Trigger the documentation build workflow (docs manager) +=== Trigger the documentation build workflow (docs developer) -You can either trigger the production document build using the Deploy Docs entry in the GitHub Actions web UI or using the https://cli.github.com/[GitHub CLI]. +You can trigger the production document build using the Deploy Docs entry in the GitHub Actions web UI or using the https://cli.github.com/[GitHub CLI]. -=== GitHub Actions web UI +==== GitHub Actions web UI -In the GitHub Actions web UI, click the Deploy Docs entry. -Click on the "Run workflow" menu. -Select the branch `docs-build` and click "Run workflow" to trigger a full build. -To trigger a partial build, specify a release line branch name in the input field labeled "Enter git refname to build". +. In the GitHub Actions web UI, click the Deploy Docs entry. +. Click on the "Run workflow" menu. +.. *To trigger full build*, select the *docs-build* branch and click "Run workflow". +.. *To trigger a partial build*, specify a release line branch name in the input field labeled "Enter git refname to build" and click "Run workflow". -=== GitHub CLI +==== GitHub CLI -Starting from within the cloned repository (ideally the playbook branch), here's how to trigger a full build of the documentation site using the `gh` command: +*To trigger full build*, start from within the cloned repository (ideally the playbook branch) and enter the `gh` command and options in the GitHub CLI: $ gh workflow run deploy-docs.yml --ref docs-build -Here's how to trigger a partial build of a single version (based on the release line branch name): +*To trigger a partial build*, enter the `gh` command and options to build a single version (based on the release line branch name): $ gh workflow run deploy-docs.yml --ref docs-build -f build-refname=5.7.x Run `gh help workflow run` to show the docs for this command and other examples of how to use it. If you're not running the `gh` command from within the cloned repository, you can specify the repository using the `--repo` CLI option (e.g., `--repo spring-projects/spring-security`). + +== Extensions + +The Spring Security docs have additional requirements above what Antora provides by default. +To fulfill these requirements, the docs build employs a handful of Antora and Asciidoctor extensions to build successfully. +You can't build the Spring Security docs using the base distribution of Antora. +Fortunately, this extra complexity is encapsulated in the Antora playbook and several distributed extensions. + +IMPORTANT: The order of Antora extensions in the playbook matters. +If the order is changed, it could result in files or metadata that an extension relies on not being available at the time it runs. + +For the most part, the extensions are retrieved from the npm package registry (npmjs.com). +There are also several local extensions in _lib/antora/extensions_. +The local extensions handle logic specific to this project and are only used for the production build. + +Below is a summary of the Antora and Asciidoctor extensions used in the docs build. + +=== Antora extensions + +@springio/antora-extensions/partial-build-extension (prod only):: Configures a partial build, when requested, by setting the `primary-site-url` and `primary-site-manifest-url` AsciiDoc attributes. +See <> for more information. +./lib/antora/extensions/inject-collector-config.js (prod only):: Injects configuration for Antora Collector into tags that predated Antora Collector being introduced. +See the next extension for details. +@antora/collector-extension:: Invokes a command (a Gradle task) to set the docs version from _gradle.properties_ and numerous AsciiDoc attributes that provide access to software versions and resource URLs. +The command that Antora Collector runs is essential for Antora to classify the docs properly. +./lib/antora/extensions/version-fix.js (prod only):: Fixes invalid metadata in _antora.yml_ and/or _gradle.properties_ in tags. +@antora/atlas-extension (prod only):: Generates the site manifest (_site-manifest.json_) and publishes it with the site. +Also coordinates the partial build when requested. +See <> for details. +@opendevise/antora-release-line-extension:: Abbreviates the version segment (in the URL) of the latest version in each release line from major.minor.patch to major.minor. +The version segment of the latest overall version is still abbreviated to empty string by Antora. +@springio/antora-extensions/tabs-migration-extension:: Migrates the tabs syntax from Spring Tabs to Asciidoctor Tabs. +See <> for details. +./lib/antora/extensions/publish-docsearch-config.js (prod only):: Publishes the docsearch config file to the production site so the indexer can use it. +See <> for details. + +=== Asciidoctor extensions + +@asciidoctor/tabs:: Enables the tabs block in AsciiDoc. +See <> and the https://github.com/asciidoctor/asciidoctor-tabs[Asciidoctor Tabs README] for details. +@springio/asciidoctor-extensions (prod only):: Provides various enhancements to the output generated by Asciidoctor, mostly around code blocks. +See https://github.com/spring-io/asciidoctor-extensions[Spring.io Asciidoctor Extensions] for an inventory of extensions and how to activate and configure them. + +[#tabs-migration] +== Tabs migration + +The Spring Security docs contain two variations of the tabs syntax, https://github.com/spring-io/spring-asciidoctor-backends#tabs[Spring Tabs] and https://github.com/asciidoctor/asciidoctor-tabs[Asciidoctor Tabs]. +Moving forward, Asciidoctor Tabs is the syntax that should be used. +However, since the Spring Security docs include content from tags that were written before Asciidoctor Tabs was introduced, the docs build must still be able to process the Spring Tabs syntax where it is used. + +When the docs build runs, the Spring Tabs are automatically converted to Asciidoctor Tabs by the @springio/antora-extensions/tabs-migration-extension extension. +Spring Tabs are never in the final output (unless the tabs migration extension is switched off). +This extension also has the ability to unwrap the example block that encloses adjacent tabs, when possible, so only the tabs block remains. +If Spring Tabs are not detected in a document, the migration will not run on that document. +See https://github.com/spring-io/antora-extensions#tabs-migration[Tabs Migration] for a detailed explanation of this extension and how to configure it. + +For the Spring Security docs, the tabs migration will always have to be used as long as there are tags in the build that contain Spring Tabs. +However, to reduce the amount of work the tabs migration extension has to do, the migration should be made permanent where possible. +Thus, we recommend making the migration permanent in release line branches that are active, and thus all future tags. + +Saving the result of the tabs migration is done one software branch at a time. +To start, switch to a branch and run the docs build in that branch (this will retrieve the Antora playbook). +Next, edit the _cached-antora-playbook.yml_ file and add `save: true` underneath the key `unwrap_example_block`. +This setting will save the migrated files back to their original location under the _docs_ folder. +Run the docs build in that branch again to apply the tabs migration. +Now commit the changed files. +Once that's done, the tabs migration won't have to run on any documents in that branch. + +[#search] +== Search + +The search component in the docs site is powered by Algolia DocSearch (specifically 2.6). +DocSearch is a documentation-oriented toolchain for using Algolia's search solution. +It provides both a crawler (aka scraper or indexer) and a search interface. +The search index is hosted on the Algolia platform and queried from the search interface via a web API. + +=== Client + +The search interface is integrated into the UI bundle and initialized when the page loads. +The search interface is configured using a collection of environment variables: `ALGOLIA_API_KEY`, `ALGOLIA_APP_ID`, and `ALGOLIA_INDEX_NAME`. +For now, these environment variables are defined in _build.gradle_ for the production build. +The search interface is only activated when all of these values are set. + +NOTE: The docsearch.js 2.6 package is marked as deprecated in npmjs.com. +However, the new client (@docsearch/js 3.x) has a completely different interaction model and search result display that's not compatible with customized client adapter currently in use. +In other words, switching to it means developing the customizations from scratch. +Even if that were to be done, the way the new client displays search results is over simplified. +The search results provided by docsearch.js 2.6 have proven to be clearer and easier to comprehend. + +=== Crawler + +The search index is created by the crawler component of DocSearch. +There are two steps involved. +First, the crawler must be configured. +Second, the crawler must be run with that configuration. + +==== Configure + +The behavior of the crawler is configured by a file name _docsearch-config.json_. +However, this file is not stored directly in the playbook branch. +Rather, it's generated from a template to account for the versions in the published site. + +The generation of the _docsearch-config.js_ file happens during the production build. +This file is generated by the Antora extension _lib/antora/extensions/publish-docsearch-config.js_. +The extension generates a docsearch config so that docsearch indexes the latest version in each release line. +To do so, the extension configures Handlebars to run using a model derived from information in Antora's content catalog. +It then evaluates the template at _.github/actions/docsearch-config.json.hbs_ to produce a file at the root of the generated site named _docsearch-config.js_. +That file is published as part of the site. + +==== Run + +The crawler is periodically run on the production site by the *Rebuild Search Index* workflow. +The crawler creates a fresh search index and replaces the previous one. +The name of the index is *spring-security-docs*. + +When the crawler runs, it downloads the _docsearch-config.json_ file from the production site and runs the docsearch action on it. + +NOTE: The crawler only needs to be run on files that are publicly accessible, so it makes sense that the configuration be located there too. + +In order to publish the search records (and thus create the index), the crawler must be configured using a collection of variables: `ALGOLIA_APPLICATION_ID` and `ALGOLIA_WRITE_KEY`. +These variables must be configured as secrets in GitHub Actions. +The index name is not required here as it is stored in the docsearch config file. + + + +== Maintenance + +The docs build requires regular maintenance. +Here's an inventory of the files or software versions to check and keep up to date. + +.Playbook branch (i.e., *docs-build*) +* Gradle Antora Plugin (_build.gradle_) +* GitHub Actions libraries (_.github/workflows/deploy-docs.yml_, _.github/workflows/rebuild-search-index.yml_) +* Java version (_.sdkmanrc_) +* Node.js packages (_build.gradle_ and _lib/antora/templates/per-branch-antora-playbook.yml_) +* Gradle Wrapper (_gradle/wrapper/gradle-wrapper.properties_) +* Content sources in playbook (_antora-playbook.yml_ and _local-antora-playbook.yml_; ideally use patterns to minimize maintenance) +* List of registered extensions (_antora-playbook.yml_, _local-antora-playbook.yml_, and _lib/antora/templates/per-branch-antora-playbook.yml_) + +.Content branches (e.g., *6.0.x*) +* Gradle Antora Plugin (_docs/spring-security-docs.gradle_) +* GitHub Actions libraries (_.github/workflows/deploy-docs.yml_, _.github/workflows/rebuild-search-index.yml_) + +Recall that the playbook used for the local docs preview in content branches is maintained in the *docs-build* branch in _lib/antora/templates/per-branch-antora-playbook.yml_. From 8a56d49d35c7cec74e81b0213ad65eb902ccb271 Mon Sep 17 00:00:00 2001 From: Dan Allen Date: Thu, 26 Jan 2023 20:00:11 -0700 Subject: [PATCH 056/178] upgrade Gradle Antora Plugin to 1.0.0 --- build.gradle | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/build.gradle b/build.gradle index 9dcf89cba2b..1ebfe3f189b 100644 --- a/build.gradle +++ b/build.gradle @@ -1,10 +1,6 @@ plugins { id 'base' - id 'org.antora' version '1.0.0-alpha.7' -} - -node { - version = '19.4.0' + id 'org.antora' version '1.0.0' } antora { From 02587c74077e706911265a3a30f449eb3d26f708 Mon Sep 17 00:00:00 2001 From: Steve Riesenberg <5248162+sjohnr@users.noreply.github.com> Date: Mon, 30 Jan 2023 19:51:17 -0600 Subject: [PATCH 057/178] Exclude toolchains.xml from being read Issue gh-12568 Issue gh-12596 --- lib/antora/extensions/inject-collector-config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/antora/extensions/inject-collector-config.js b/lib/antora/extensions/inject-collector-config.js index 0ded65bd3cc..975bb23b25b 100644 --- a/lib/antora/extensions/inject-collector-config.js +++ b/lib/antora/extensions/inject-collector-config.js @@ -1,6 +1,6 @@ 'use strict' -const BASE_COMMAND = 'gradlew -PbuildSrc.skipTests=true --scan --stacktrace' +const BASE_COMMAND = 'gradlew -PbuildSrc.skipTests=true -Porg.gradle.java.installations.auto-detect=false --scan --stacktrace' const JVM_ARGS='-Xmx3g -XX:+HeapDumpOnOutOfMemoryError' const REPO_URL = 'https://github.com/spring-projects/spring-security' const TASK_NAME=':spring-security-docs:generateAntora' From 06d05691b906d566b2a8f7e069a4521cc9fa6dba Mon Sep 17 00:00:00 2001 From: Steve Riesenberg Date: Tue, 31 Jan 2023 15:32:39 -0600 Subject: [PATCH 058/178] Override collector config for 6.0.0-RC1 Closes gh-12607 --- lib/antora/extensions/inject-collector-config.js | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/lib/antora/extensions/inject-collector-config.js b/lib/antora/extensions/inject-collector-config.js index 975bb23b25b..1b939254ca0 100644 --- a/lib/antora/extensions/inject-collector-config.js +++ b/lib/antora/extensions/inject-collector-config.js @@ -5,6 +5,13 @@ const JVM_ARGS='-Xmx3g -XX:+HeapDumpOnOutOfMemoryError' const REPO_URL = 'https://github.com/spring-projects/spring-security' const TASK_NAME=':spring-security-docs:generateAntora' +/** + * Set of tags that contain a collector config, but the antora command fails on GitHub Actions. + */ +const VERSIONS_TO_OVERRIDE = [ + '6.0.0-RC1' +] + /** * The purpose of this extension is to inject the Antora Collector configuration into the parsed component version * descriptor in tags created before Antora Collector was introduced. Antora Collector runs a command to generate a @@ -15,7 +22,13 @@ module.exports.register = function () { this.once('contentAggregated', ({ contentAggregate }) => { for (const { origins } of contentAggregate) { for (const origin of origins) { - if (!(origin.url === REPO_URL && origin.descriptor.ext?.collector === undefined)) continue + if (origin.url !== REPO_URL) { + continue + } + // Ignore tags with their own collector config unless the antora command fails on GitHub Actions + if (!(origin.descriptor.ext?.collector === undefined || VERSIONS_TO_OVERRIDE.includes(origin.tag))) { + continue + } origin.descriptor.ext = { collector: { run: { command: `${BASE_COMMAND} "-Dorg.gradle.jvmargs=${JVM_ARGS}" ${TASK_NAME}`, local: true }, From cca087f04f9e832355d5f8e3dd3ce29c20b39e3a Mon Sep 17 00:00:00 2001 From: Dan Allen Date: Mon, 30 Jan 2023 18:52:43 -0700 Subject: [PATCH 059/178] upgrade docs extensions - upgrade to Asciidoctor Tabs 1.0.0-beta.3 - upgrade to Antora Release Line Extension 1.0.0 - upgrade to Spring.io Antora Extensions 1.0.0 - fix require path of tabs migration extension in local playbook - add reminder to update dependency versions in playbook template for branches --- build.gradle | 7 ++++--- lib/antora/templates/per-branch-antora-playbook.yml | 2 +- local-antora-playbook.yml | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/build.gradle b/build.gradle index 1ebfe3f189b..24b44fd3a28 100644 --- a/build.gradle +++ b/build.gradle @@ -11,12 +11,13 @@ antora { 'ALGOLIA_APP_ID': '244V8V9FGG', 'ALGOLIA_INDEX_NAME': 'spring-security-docs', ] + // NOTE remember to update the versions in lib/antora/templates/per-branch-antora-playbook.yml as well dependencies = [ '@antora/atlas-extension': '1.0.0-alpha.1', '@antora/collector-extension': '1.0.0-alpha.3', - '@asciidoctor/tabs': '1.0.0-alpha.12', - '@opendevise/antora-release-line-extension': '1.0.0-alpha.2', - '@springio/antora-extensions': '1.0.0-alpha.2', + '@asciidoctor/tabs': '1.0.0-beta.3', + '@opendevise/antora-release-line-extension': '1.0.0', + '@springio/antora-extensions': '1.0.0', '@springio/asciidoctor-extensions': '1.0.0-alpha.8', ] } diff --git a/lib/antora/templates/per-branch-antora-playbook.yml b/lib/antora/templates/per-branch-antora-playbook.yml index a8d5cbd6d76..e3d3b401e13 100644 --- a/lib/antora/templates/per-branch-antora-playbook.yml +++ b/lib/antora/templates/per-branch-antora-playbook.yml @@ -1,4 +1,4 @@ -# 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-alpha.2 @asciidoctor/tabs@1.0.0-alpha.12 @opendevise/antora-release-line-extension@1.0.0-alpha.2 +# 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: diff --git a/local-antora-playbook.yml b/local-antora-playbook.yml index b1a8df19ff6..b06e91335bd 100644 --- a/local-antora-playbook.yml +++ b/local-antora-playbook.yml @@ -4,7 +4,7 @@ antora: - '@antora/collector-extension' - ./lib/antora/extensions/version-fix.js - '@opendevise/antora-release-line-extension' - - require: '@springio/asciidoctor-extensions/tabs-migration-antora-extension' + - require: '@springio/antora-extensions/tabs-migration-extension' # uncomment this option to save the migrated content to the worktree #save_result: true unwrap_example_block: always From 26827157f93e0177ad7f74d4c9cf0d97fc748fd4 Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Mon, 27 Feb 2023 16:05:39 -0600 Subject: [PATCH 060/178] Use publish-docsearch-config-extension Closes gh-12794 --- .github/actions/docsearch-config.json.hbs | 65 ------------------- antora-playbook.yml | 5 +- build.gradle | 2 +- .../extensions/publish-docsearch-config.js | 37 ----------- .../templates/per-branch-antora-playbook.yml | 2 +- 5 files changed, 5 insertions(+), 106 deletions(-) delete mode 100644 .github/actions/docsearch-config.json.hbs delete mode 100644 lib/antora/extensions/publish-docsearch-config.js diff --git a/.github/actions/docsearch-config.json.hbs b/.github/actions/docsearch-config.json.hbs deleted file mode 100644 index 94f73dd8314..00000000000 --- a/.github/actions/docsearch-config.json.hbs +++ /dev/null @@ -1,65 +0,0 @@ -{ - "index_name": "spring-security-docs", - "start_urls": [ - {{#each latestVersions}} - { - "url": "{{{@root.site.url}}}/{{#if (eq ./activeVersionSegment '')}}(?:$|index.html$|[a-z].*){{else}}{{{./activeVersionSegment}}}/{{/if}}", - "extra_attributes": { - "component": "{{#if (eq ./name 'ROOT')}}security{{else}}{{{./name}}}{{/if}}", - "version": "{{{./version}}}", - "version_rank": {{#if (eq ./activeVersionSegment '')}}1{{else}}2{{/if}} - } - }{{#unless @last}},{{/unless}} - {{/each}} - ], - "sitemap_urls": [ - "{{{site.url}}}/sitemap.xml" - ], - "scrape_start_urls": true, - "stop_urls": [ - {{#each stopPages}} - "{{{@root.site.url}}}{{{./pub.url}}}"{{#unless @last}},{{/unless}} - {{/each}} - ], - "selectors": { - "default": { - "lvl0": { - "global": true, - "selector": ".nav-panel-explore .context .title, .nav-panel-explore .context .version" - }, - "lvl1": ".doc > h1.page", - "lvl2": ".doc .sect1 > h2:first-child", - "lvl3": ".doc .sect2 > h3:first-child", - "lvl4": ".doc .sect3 > h4:first-child", - "text": ".doc p, .doc dt, .doc td.content, .doc th.tableblock" - } - }, - "selectors_exclude": [ - "#section-summary" - ], - "min_indexed_level": 1, - "custom_settings": { - "advancedSyntax": true, - "attributesForFaceting": [ - "component", - "version" - ], - "attributesToRetrieve": [ - "anchor", - "content", - "hierarchy", - "url", - "component", - "version" - ], - "attributesToSnippet": [ - "content:25" - ], - "customRanking": [ - "desc(weight.page_rank)", - "asc(version_rank)", - "desc(weight.level)", - "asc(weight.position)" - ] - } -} diff --git a/antora-playbook.yml b/antora-playbook.yml index a03da3b8dd9..31a164079c5 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -10,8 +10,9 @@ antora: # uncomment this option to save the migrated content to the worktree #save_result: true unwrap_example_block: always - - require: ./lib/antora/extensions/publish-docsearch-config - template_path: ./.github/actions/docsearch-config.json.hbs + - require: '@springio/antora-extensions/publish-docsearch-config-extension' + index_name: 'spring-security-docs' + root_component_name: 'security' site: title: Spring Security url: https://docs.spring.io/spring-security/reference diff --git a/build.gradle b/build.gradle index 24b44fd3a28..11861561dd9 100644 --- a/build.gradle +++ b/build.gradle @@ -17,7 +17,7 @@ antora { '@antora/collector-extension': '1.0.0-alpha.3', '@asciidoctor/tabs': '1.0.0-beta.3', '@opendevise/antora-release-line-extension': '1.0.0', - '@springio/antora-extensions': '1.0.0', + '@springio/antora-extensions': '1.1.0', '@springio/asciidoctor-extensions': '1.0.0-alpha.8', ] } diff --git a/lib/antora/extensions/publish-docsearch-config.js b/lib/antora/extensions/publish-docsearch-config.js deleted file mode 100644 index a40213e9b53..00000000000 --- a/lib/antora/extensions/publish-docsearch-config.js +++ /dev/null @@ -1,37 +0,0 @@ -'use strict' - -const fsp = require('node:fs/promises') -const ospath = require('node:path') - -/** - * An Antora extension that generates a config file that controls the behavior of the docsearch scraper. - * - * This extension generates a docsearch config file by evaluating a Handlebars template (e.g., - * .github/actions/docsearch-config.json.hbs). It then publishes the output file to the root of the site - * (docsearch-config.json). The docsearch scraper will retrieve for the config file from the published site. - * - * This extension will only add entries for the latest version in each release line. Additionally, if the page-archived - * or page-noindex attribute is defined in the document header of the page, that page will be excluded from the index. - */ -module.exports.register = function ({ config: { templatePath = './docsearch/config.json.hbs' } }) { - const expandPath = this.require('@antora/expand-path-helper') - const handlebars = this.require('handlebars').create() - handlebars.registerHelper('eq', (a, b) => a === b) - handlebars.registerHelper('and', (a, b) => a && b) - - this.on('beforePublish', async ({ playbook, contentCatalog, siteCatalog }) => { - templatePath = expandPath(templatePath, { dot: playbook.dir }) - const templateSrc = await fsp.readFile(templatePath, 'utf8') - const templateBasename = ospath.basename(templatePath) - const template = handlebars.compile(templateSrc, { noEscape: true, preventIndent: true, srcName: templateBasename }) - const latestVersions = contentCatalog.getComponentsSortedBy('name').reduce((accum, component) => { - component.versions.forEach((version) => version.versionSegment !== undefined && accum.push(version)) - return accum - }, []) - const stopPages = contentCatalog.getPages((page) => { - return page.out && ('page-archived' in page.asciidoc.attributes || 'page-noindex' in page.asciidoc.attributes) - }) - const compiled = template({ latestVersions, site: playbook.site, stopPages }) - siteCatalog.addFile({ contents: Buffer.from(compiled), out: { path: 'docsearch-config.json' } }) - }) -} diff --git a/lib/antora/templates/per-branch-antora-playbook.yml b/lib/antora/templates/per-branch-antora-playbook.yml index e3d3b401e13..b305a835b53 100644 --- a/lib/antora/templates/per-branch-antora-playbook.yml +++ b/lib/antora/templates/per-branch-antora-playbook.yml @@ -1,4 +1,4 @@ -# 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 +# 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.1.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: From b5ff77339b54663e598d4752ddeed55b13b89843 Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Thu, 9 Mar 2023 12:23:34 -0600 Subject: [PATCH 061/178] Use ui-bundle v0.1.1 --- antora-playbook.yml | 2 +- lib/antora/templates/per-branch-antora-playbook.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/antora-playbook.yml b/antora-playbook.yml index 31a164079c5..bf241f7f5a0 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -39,5 +39,5 @@ urls: redirect_facility: httpd ui: bundle: - url: https://github.com/spring-io/antora-ui-spring/releases/download/latest/ui-bundle.zip + url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.1.1/ui-bundle.zip snapshot: true diff --git a/lib/antora/templates/per-branch-antora-playbook.yml b/lib/antora/templates/per-branch-antora-playbook.yml index b305a835b53..67d264b3acb 100644 --- a/lib/antora/templates/per-branch-antora-playbook.yml +++ b/lib/antora/templates/per-branch-antora-playbook.yml @@ -31,5 +31,5 @@ urls: latest_version_segment: '' ui: bundle: - url: https://github.com/spring-io/antora-ui-spring/releases/download/latest/ui-bundle.zip + url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.1.1/ui-bundle.zip snapshot: true From 02c9df137127355a409a3e501f80f65b20324c97 Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Thu, 27 Apr 2023 20:01:33 -0500 Subject: [PATCH 062/178] Update to docsearch --- antora-playbook.yml | 2 +- build.gradle | 9 ++++----- lib/antora/templates/per-branch-antora-playbook.yml | 2 +- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/antora-playbook.yml b/antora-playbook.yml index bf241f7f5a0..8ff631af26f 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -39,5 +39,5 @@ urls: redirect_facility: httpd ui: bundle: - url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.1.1/ui-bundle.zip + url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.2.2/ui-bundle.zip snapshot: true diff --git a/build.gradle b/build.gradle index 11861561dd9..4f3795b0dfd 100644 --- a/build.gradle +++ b/build.gradle @@ -7,17 +7,16 @@ antora { version = '3.2.0-alpha.2' options = [clean: true, fetch: true, stacktrace: true] environment = [ - 'ALGOLIA_API_KEY': '82c7ead946afbac3cf98c32446154691', - 'ALGOLIA_APP_ID': '244V8V9FGG', - 'ALGOLIA_INDEX_NAME': 'spring-security-docs', + 'ALGOLIA_API_KEY': '9d489079e5ec46dbb238909fee5c9c29', + 'ALGOLIA_APP_ID': 'WB1FQYI187', + 'ALGOLIA_INDEX_NAME': 'springsecurity', ] // NOTE remember to update the versions in lib/antora/templates/per-branch-antora-playbook.yml as well dependencies = [ '@antora/atlas-extension': '1.0.0-alpha.1', '@antora/collector-extension': '1.0.0-alpha.3', '@asciidoctor/tabs': '1.0.0-beta.3', - '@opendevise/antora-release-line-extension': '1.0.0', - '@springio/antora-extensions': '1.1.0', + '@springio/antora-extensions': '1.3.0', '@springio/asciidoctor-extensions': '1.0.0-alpha.8', ] } diff --git a/lib/antora/templates/per-branch-antora-playbook.yml b/lib/antora/templates/per-branch-antora-playbook.yml index 67d264b3acb..ed9dfad5c1d 100644 --- a/lib/antora/templates/per-branch-antora-playbook.yml +++ b/lib/antora/templates/per-branch-antora-playbook.yml @@ -31,5 +31,5 @@ urls: latest_version_segment: '' ui: bundle: - url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.1.1/ui-bundle.zip + url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.2.2/ui-bundle.zip snapshot: true From 060a8f6cdb898aeb08abe5f3d8e98bc249135a5c Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Thu, 27 Apr 2023 20:01:57 -0500 Subject: [PATCH 063/178] Use latest-version-extension --- antora-playbook.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/antora-playbook.yml b/antora-playbook.yml index 8ff631af26f..016694a0bde 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -2,10 +2,10 @@ antora: extensions: - '@springio/antora-extensions/partial-build-extension' - ./lib/antora/extensions/inject-collector-config.js - - '@antora/collector-extension' - ./lib/antora/extensions/version-fix.js + - require: '@springio/antora-extensions/latest-version-extension' + - '@antora/collector-extension' - '@antora/atlas-extension' - - '@opendevise/antora-release-line-extension' - require: '@springio/antora-extensions/tabs-migration-extension' # uncomment this option to save the migrated content to the worktree #save_result: true From 739641966fa180a0716053d66b14b3451ea700b6 Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Tue, 2 May 2023 09:15:46 -0500 Subject: [PATCH 064/178] Use rsync-antora-reference@v0.0.1 --- .github/actions/publish-docs.sh | 43 ------------------------------- .github/workflows/deploy-docs.yml | 7 ++++- 2 files changed, 6 insertions(+), 44 deletions(-) delete mode 100755 .github/actions/publish-docs.sh diff --git a/.github/actions/publish-docs.sh b/.github/actions/publish-docs.sh deleted file mode 100755 index 0d133daca53..00000000000 --- a/.github/actions/publish-docs.sh +++ /dev/null @@ -1,43 +0,0 @@ -#!/bin/bash - -FROM=build/site -HOST="$1" -HOST_PATH="$2" -SSH_PRIVATE_KEY="$3" -SSH_KNOWN_HOST="$4" -CLOUDFLARE_ZONE_ID="$5" -CLOUDFLARE_CACHE_TOKEN="$6" -SSH_PRIVATE_KEY_PATH="$HOME/.ssh/${GITHUB_REPOSITORY:-publish-docs}" - -if [ "$#" -ne 6 ]; then - echo -e "not enough arguments USAGE:\n\n$0 \$HOST \$HOST_PATH \$SSH_PRIVATE_KEY \$SSH_KNOWN_HOST \$CLOUDFLARE_ZONE_ID \$CLOUDFLARE_CACHE_TOKEN\n\n" >&2 - exit 1 -fi - -( - set -e - set -f - 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_OPTS='-avz --delete' - if [ -f .full-build ]; then - unlink .full-build - BUILD_REFNAME= - fi - if [ -n "$BUILD_REFNAME" ]; then - RSYNC_OPTS="-c $RSYNC_OPTS$(find $FROM -mindepth 1 -maxdepth 1 \! -name 404.html \! -name '.*' -type f -printf ' --include /%P')" - RSYNC_OPTS="$RSYNC_OPTS$(find $FROM -mindepth 1 -maxdepth 1 -type d \! -name _ -printf ' --include /%P --include /%P/**') --exclude **" - fi - rsync $RSYNC_OPTS -e "ssh -i $SSH_PRIVATE_KEY_PATH" $FROM/ "$HOST:$HOST_PATH" - if [ -z "$BUILD_REFNAME" ]; then - curl -X POST "https://api.cloudflare.com/client/v4/zones/$CLOUDFLARE_ZONE_ID/purge_cache" \ - -H "Content-Type:application/json" -H "Authorization: Bearer $CLOUDFLARE_CACHE_TOKEN" \ - --data '{"files":["https://docs.spring.io/spring-security"]}' - fi -) -exit_code=$? - -rm -f "$SSH_PRIVATE_KEY_PATH" - -exit $exit_code diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index 65fa942acd9..183ebc8eb1c 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -34,4 +34,9 @@ jobs: - name: Run Antora run: ./gradlew antora - name: Publish Docs - run: $GITHUB_WORKSPACE/.github/actions/publish-docs.sh "${{ secrets.DOCS_USERNAME }}@${{ secrets.DOCS_HOST }}" /opt/www/domains/spring.io/docs/htdocs/spring-security/reference/ "${{ secrets.DOCS_SSH_KEY }}" "${{ secrets.DOCS_SSH_HOST_KEY }}" "${{ secrets.CLOUDFLARE_ZONE_ID }}" "${{ secrets.CLOUDFLARE_CACHE_TOKEN }}" + uses: spring-io/spring-doc-actions/rsync-antora-reference@v0.0.1 + with: + docs-username: ${{ secrets.DOCS_USERNAME }} + docs-host: ${{ secrets.DOCS_HOST }} + docs-ssh-key: ${{ secrets.DOCS_SSH_KEY }} + docs-ssh-host-key: ${{ secrets.DOCS_SSH_HOST_KEY }} From 61f33d2d298cc3ea4cd334a2012c3668fb37c04e Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Tue, 2 May 2023 09:27:50 -0500 Subject: [PATCH 065/178] Use rsync-antora-reference@v0.0.2 --- .github/workflows/deploy-docs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index 183ebc8eb1c..dd27f804761 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -34,7 +34,7 @@ jobs: - name: Run Antora run: ./gradlew antora - name: Publish Docs - uses: spring-io/spring-doc-actions/rsync-antora-reference@v0.0.1 + uses: spring-io/spring-doc-actions/rsync-antora-reference@v0.0.2 with: docs-username: ${{ secrets.DOCS_USERNAME }} docs-host: ${{ secrets.DOCS_HOST }} From 99afa32fae87e6f01566f7320cff3c7702d5d8bb Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Tue, 2 May 2023 09:56:42 -0500 Subject: [PATCH 066/178] Use rsync-antora-reference@v0.0.3 --- .github/workflows/deploy-docs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index dd27f804761..fcfff08768e 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -34,7 +34,7 @@ jobs: - name: Run Antora run: ./gradlew antora - name: Publish Docs - uses: spring-io/spring-doc-actions/rsync-antora-reference@v0.0.2 + uses: spring-io/spring-doc-actions/rsync-antora-reference@v0.0.3 with: docs-username: ${{ secrets.DOCS_USERNAME }} docs-host: ${{ secrets.DOCS_HOST }} From 058a49ad3d7388f7b02d3b1299ef25e67b7f3877 Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Tue, 2 May 2023 10:15:34 -0500 Subject: [PATCH 067/178] Use rsync-antora-reference@v0.0.4 --- .github/workflows/deploy-docs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index fcfff08768e..033543a25b0 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -34,7 +34,7 @@ jobs: - name: Run Antora run: ./gradlew antora - name: Publish Docs - uses: spring-io/spring-doc-actions/rsync-antora-reference@v0.0.3 + uses: spring-io/spring-doc-actions/rsync-antora-reference@v0.0.4 with: docs-username: ${{ secrets.DOCS_USERNAME }} docs-host: ${{ secrets.DOCS_HOST }} From 8aa641410ae63e015186b132f9d3cb0d2ea65dc2 Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Tue, 2 May 2023 10:36:53 -0500 Subject: [PATCH 068/178] Use rsync-antora-reference@v0.0.5 --- .github/workflows/deploy-docs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index 033543a25b0..91b1eb39fb1 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -34,7 +34,7 @@ jobs: - name: Run Antora run: ./gradlew antora - name: Publish Docs - uses: spring-io/spring-doc-actions/rsync-antora-reference@v0.0.4 + uses: spring-io/spring-doc-actions/rsync-antora-reference@v0.0.5 with: docs-username: ${{ secrets.DOCS_USERNAME }} docs-host: ${{ secrets.DOCS_HOST }} From fce9d893f9357e5a4dc10f17d2a7989eeacf6c1a Mon Sep 17 00:00:00 2001 From: Steve Riesenberg Date: Wed, 7 Jun 2023 17:05:18 -0500 Subject: [PATCH 069/178] Add .github/actions/.gitkeep --- .github/actions/.gitkeep | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 .github/actions/.gitkeep diff --git a/.github/actions/.gitkeep b/.github/actions/.gitkeep new file mode 100644 index 00000000000..e69de29bb2d From 1b954f1383282be4e0ad21304156bf8bb4fc69f0 Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Thu, 8 Jun 2023 13:46:10 -0500 Subject: [PATCH 070/178] cralwer.algolia.com performs indexing --- .github/workflows/rebuild-search-index.yml | 26 ---------------------- 1 file changed, 26 deletions(-) delete mode 100644 .github/workflows/rebuild-search-index.yml diff --git a/.github/workflows/rebuild-search-index.yml b/.github/workflows/rebuild-search-index.yml deleted file mode 100644 index 4f969e84d5a..00000000000 --- a/.github/workflows/rebuild-search-index.yml +++ /dev/null @@ -1,26 +0,0 @@ -name: Rebuild Search Index -on: - workflow_dispatch: -permissions: read-all -jobs: - build: - if: github.repository_owner == 'spring-projects' - runs-on: ubuntu-latest - env: - CONFIG_FILE: .github/actions/docsearch-config.json - steps: - - name: Checkout - uses: actions/checkout@v3 - with: - fetch-depth: 5 - - name: Configure Indexer - run: | - curl -sL -o $CONFIG_FILE $(node -p "require('fs').readFileSync('antora-playbook.yml', 'utf8').match(/^ url: (.*)/m)[1]")/docsearch-config.json - INDEX_NAME=$(node -p "JSON.parse(require('fs').readFileSync('$CONFIG_FILE')).index_name") - echo "INDEX_NAME_TMP=${INDEX_NAME}-${GITHUB_RUN_ID}" >> $GITHUB_ENV - - name: Run Indexer - uses: darrenjennings/algolia-docsearch-action@master - with: - algolia_application_id: ${{ secrets.ALGOLIA_APPLICATION_ID }} - algolia_api_key: ${{ secrets.ALGOLIA_WRITE_KEY }} - file: ${{ env.CONFIG_FILE }} From bdbeffc9018ebe6fbe082836885a8327acefab62 Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Thu, 8 Jun 2023 17:25:09 -0500 Subject: [PATCH 071/178] Fail Branches on Warning Issue gh-13210 --- lib/antora/templates/per-branch-antora-playbook.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/antora/templates/per-branch-antora-playbook.yml b/lib/antora/templates/per-branch-antora-playbook.yml index ed9dfad5c1d..1dede4a918c 100644 --- a/lib/antora/templates/per-branch-antora-playbook.yml +++ b/lib/antora/templates/per-branch-antora-playbook.yml @@ -29,6 +29,9 @@ asciidoc: sourcemap: true urls: latest_version_segment: '' +runtime: + log: + failure_level: warn ui: bundle: url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.2.2/ui-bundle.zip From 48d5488185c91cbd2b56607a2a69135ced968056 Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Sun, 11 Jun 2023 23:43:31 -0500 Subject: [PATCH 072/178] Cache collector output for tags --- .github/workflows/deploy-docs.yml | 4 +++- antora-playbook.yml | 1 + build.gradle | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index 91b1eb39fb1..3cf414fc32b 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -33,8 +33,10 @@ jobs: echo BUILD_VERSION=$(git cat-file --textconv FETCH_HEAD:gradle.properties | sed -n '/^version=/ { s/^version=//;p }') >> $GITHUB_ENV - name: Run Antora run: ./gradlew antora + - name: Copy the cache to be included in the site + run: cp -rf build/antora/inject-collector-cache-config-extension/.cache build/site/ - name: Publish Docs - uses: spring-io/spring-doc-actions/rsync-antora-reference@v0.0.5 + uses: spring-io/spring-doc-actions/rsync-antora-reference@v0.0.6 with: docs-username: ${{ secrets.DOCS_USERNAME }} docs-host: ${{ secrets.DOCS_HOST }} diff --git a/antora-playbook.yml b/antora-playbook.yml index 016694a0bde..c44cdf3c7f4 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -4,6 +4,7 @@ antora: - ./lib/antora/extensions/inject-collector-config.js - ./lib/antora/extensions/version-fix.js - require: '@springio/antora-extensions/latest-version-extension' + - require: '@springio/antora-extensions/inject-collector-cache-config-extension' - '@antora/collector-extension' - '@antora/atlas-extension' - require: '@springio/antora-extensions/tabs-migration-extension' diff --git a/build.gradle b/build.gradle index 4f3795b0dfd..9dba02848a3 100644 --- a/build.gradle +++ b/build.gradle @@ -16,7 +16,7 @@ antora { '@antora/atlas-extension': '1.0.0-alpha.1', '@antora/collector-extension': '1.0.0-alpha.3', '@asciidoctor/tabs': '1.0.0-beta.3', - '@springio/antora-extensions': '1.3.0', + '@springio/antora-extensions': '1.4.0', '@springio/asciidoctor-extensions': '1.0.0-alpha.8', ] } From 6f2d43e03d0dc22cd961061e0185ac79850a506c Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Wed, 14 Jun 2023 10:25:29 -0500 Subject: [PATCH 073/178] Update to spring-antora-ui v0.3.0 --- antora-playbook.yml | 2 +- lib/antora/templates/per-branch-antora-playbook.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/antora-playbook.yml b/antora-playbook.yml index c44cdf3c7f4..76f1d865fd6 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -40,5 +40,5 @@ urls: redirect_facility: httpd ui: bundle: - url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.2.2/ui-bundle.zip + url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.3.0/ui-bundle.zip snapshot: true diff --git a/lib/antora/templates/per-branch-antora-playbook.yml b/lib/antora/templates/per-branch-antora-playbook.yml index 1dede4a918c..cf38bac8b35 100644 --- a/lib/antora/templates/per-branch-antora-playbook.yml +++ b/lib/antora/templates/per-branch-antora-playbook.yml @@ -34,5 +34,5 @@ runtime: failure_level: warn ui: bundle: - url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.2.2/ui-bundle.zip + url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.3.0/ui-bundle.zip snapshot: true From 7c562e2c888b8af351375ab3fddb7a56dba97388 Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Wed, 14 Jun 2023 11:33:45 -0500 Subject: [PATCH 074/178] Use bust-cloudflare-antora-cache --- .github/workflows/deploy-docs.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index 3cf414fc32b..7bfed141224 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -42,3 +42,9 @@ jobs: docs-host: ${{ secrets.DOCS_HOST }} docs-ssh-key: ${{ secrets.DOCS_SSH_KEY }} docs-ssh-host-key: ${{ secrets.DOCS_SSH_HOST_KEY }} + - name: Bust Clouflare Cache + uses: spring-io/spring-doc-actions/bust-cloudflare-antora-cache@main + with: + context-root: spring-security + cloudflare-zone-id: ${{ secrets.CLOUDFLARE_ZONE_ID }} + cloudflare-cache-token: ${{ secrets.CLOUDFLARE_CACHE_TOKEN }} From 0df1dea1f8dfe129c9ab4e8f07778838a0a7de01 Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Wed, 14 Jun 2023 13:44:29 -0500 Subject: [PATCH 075/178] Use spring-doc-actions v0.0.7 --- .github/workflows/deploy-docs.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index 7bfed141224..bd1975be975 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -36,14 +36,14 @@ jobs: - name: Copy the cache to be included in the site run: cp -rf build/antora/inject-collector-cache-config-extension/.cache build/site/ - name: Publish Docs - uses: spring-io/spring-doc-actions/rsync-antora-reference@v0.0.6 + uses: spring-io/spring-doc-actions/rsync-antora-reference@v0.0.7 with: docs-username: ${{ secrets.DOCS_USERNAME }} docs-host: ${{ secrets.DOCS_HOST }} docs-ssh-key: ${{ secrets.DOCS_SSH_KEY }} docs-ssh-host-key: ${{ secrets.DOCS_SSH_HOST_KEY }} - name: Bust Clouflare Cache - uses: spring-io/spring-doc-actions/bust-cloudflare-antora-cache@main + uses: spring-io/spring-doc-actions/bust-cloudflare-antora-cache@v0.0.7 with: context-root: spring-security cloudflare-zone-id: ${{ secrets.CLOUDFLARE_ZONE_ID }} From bda6e79e7c6ffcfcfff77c90510b1add66e69249 Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Wed, 14 Jun 2023 15:16:30 -0500 Subject: [PATCH 076/178] spring-doc-actions v0.0.8 --- .github/workflows/deploy-docs.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index bd1975be975..f03f3adb2a0 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -36,14 +36,14 @@ jobs: - name: Copy the cache to be included in the site run: cp -rf build/antora/inject-collector-cache-config-extension/.cache build/site/ - name: Publish Docs - uses: spring-io/spring-doc-actions/rsync-antora-reference@v0.0.7 + uses: spring-io/spring-doc-actions/rsync-antora-reference@v0.0.8 with: docs-username: ${{ secrets.DOCS_USERNAME }} docs-host: ${{ secrets.DOCS_HOST }} docs-ssh-key: ${{ secrets.DOCS_SSH_KEY }} docs-ssh-host-key: ${{ secrets.DOCS_SSH_HOST_KEY }} - name: Bust Clouflare Cache - uses: spring-io/spring-doc-actions/bust-cloudflare-antora-cache@v0.0.7 + uses: spring-io/spring-doc-actions/bust-cloudflare-antora-cache@v0.0.8 with: context-root: spring-security cloudflare-zone-id: ${{ secrets.CLOUDFLARE_ZONE_ID }} From 17444d56a87087e48e4d62eb692479ef9a87a84b Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Fri, 16 Jun 2023 11:03:22 -0500 Subject: [PATCH 077/178] Update to spring-doc-actions 0.0.9 --- .github/workflows/deploy-docs.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index f03f3adb2a0..f4c102197fb 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -36,14 +36,14 @@ jobs: - name: Copy the cache to be included in the site run: cp -rf build/antora/inject-collector-cache-config-extension/.cache build/site/ - name: Publish Docs - uses: spring-io/spring-doc-actions/rsync-antora-reference@v0.0.8 + uses: spring-io/spring-doc-actions/rsync-antora-reference@v0.0.9 with: docs-username: ${{ secrets.DOCS_USERNAME }} docs-host: ${{ secrets.DOCS_HOST }} docs-ssh-key: ${{ secrets.DOCS_SSH_KEY }} docs-ssh-host-key: ${{ secrets.DOCS_SSH_HOST_KEY }} - name: Bust Clouflare Cache - uses: spring-io/spring-doc-actions/bust-cloudflare-antora-cache@v0.0.8 + uses: spring-io/spring-doc-actions/bust-cloudflare-antora-cache@v0.0.9 with: context-root: spring-security cloudflare-zone-id: ${{ secrets.CLOUDFLARE_ZONE_ID }} From a69cd7d5d9ea70c954234daeec3b7e6b926518e1 Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Fri, 16 Jun 2023 21:58:41 -0500 Subject: [PATCH 078/178] Use Antora name of security Issue gh-13327 --- antora-playbook.yml | 3 +++ .../extensions/fix-component-name-display.js | 23 +++++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 lib/antora/extensions/fix-component-name-display.js diff --git a/antora-playbook.yml b/antora-playbook.yml index 76f1d865fd6..0bb57f46064 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -6,6 +6,7 @@ antora: - require: '@springio/antora-extensions/latest-version-extension' - require: '@springio/antora-extensions/inject-collector-cache-config-extension' - '@antora/collector-extension' + - ./lib/antora/extensions/fix-component-name-display.js - '@antora/atlas-extension' - require: '@springio/antora-extensions/tabs-migration-extension' # uncomment this option to save the migrated content to the worktree @@ -14,6 +15,8 @@ antora: - require: '@springio/antora-extensions/publish-docsearch-config-extension' index_name: 'spring-security-docs' root_component_name: 'security' + - require: '@springio/antora-extensions/root-component-extension' + root_component_name: 'security' site: title: Spring Security url: https://docs.spring.io/spring-security/reference diff --git a/lib/antora/extensions/fix-component-name-display.js b/lib/antora/extensions/fix-component-name-display.js new file mode 100644 index 00000000000..42dac119761 --- /dev/null +++ b/lib/antora/extensions/fix-component-name-display.js @@ -0,0 +1,23 @@ +'use strict' + +/** + * The purpose of this extension is to fix invalid metadata saved to either antora.yml or gradle.properties in certain + * tags. This invalid metadata prevents Antora from classifying the component versions properly. + * + * This extension addresses with the following cases: + * + * . the boolean value on the prerelease key is incorrectly quoted + * . the prerelease tag is set to true for a GA version + * . the value of the name key is empty + * . the value of the displayVersion key doesn't match the actual version + * . the -SNAPSHOT suffix is appended to the value of the version key instead of the value of the prerelease key + * + * This extension should be listed directly after @antora/collector-extension. + */ +module.exports.register = function () { + this.once('contentAggregated', ({ contentAggregate }) => { + contentAggregate.forEach((componentVersionBucket) => { + Object.assign(componentVersionBucket, { name: 'security', display: 'Spring Security' }) + }) + }) +} From a5c8d737bde92714d32f9853667f51cd34944d65 Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Tue, 20 Jun 2023 11:03:39 -0500 Subject: [PATCH 079/178] Exclude versions with name = ROOT --- antora-playbook.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/antora-playbook.yml b/antora-playbook.yml index 0bb57f46064..bd4b4919776 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -27,7 +27,7 @@ content: sources: - url: https://github.com/spring-projects/spring-security branches: [main, '5.{{6..9},{1..9}+({0..9})}.x', '6.+({0..9}).x'] - tags: ['5.{{6..9},{1..9}+({0..9})}.+({0..9})?(-RC+({0..9}))', '6.+({0..9}).+({0..9})?(-{RC,M}*)'] + tags: ['5.{{6..9},{1..9}+({0..9})}.+({0..9})?(-RC+({0..9}))', '6.+({0..9}).+({0..9})?(-{RC,M}*)','!(5.6.{0..10}*)', '!(5.7.{0..8}*)', '!(5.8.{0..3}*)','!(6.0.{0..3}*)','!(6.1.0*)'] start_path: docs asciidoc: attributes: From 0a5f56e0dec07cdd9da6eefd823d173ffe6cf77a Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Tue, 20 Jun 2023 11:04:16 -0500 Subject: [PATCH 080/178] Remove fix-component-name-display.js We no longer bring in tags that were broken --- antora-playbook.yml | 1 - .../extensions/fix-component-name-display.js | 23 ------------------- 2 files changed, 24 deletions(-) delete mode 100644 lib/antora/extensions/fix-component-name-display.js diff --git a/antora-playbook.yml b/antora-playbook.yml index bd4b4919776..3459317ea56 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -6,7 +6,6 @@ antora: - require: '@springio/antora-extensions/latest-version-extension' - require: '@springio/antora-extensions/inject-collector-cache-config-extension' - '@antora/collector-extension' - - ./lib/antora/extensions/fix-component-name-display.js - '@antora/atlas-extension' - require: '@springio/antora-extensions/tabs-migration-extension' # uncomment this option to save the migrated content to the worktree diff --git a/lib/antora/extensions/fix-component-name-display.js b/lib/antora/extensions/fix-component-name-display.js deleted file mode 100644 index 42dac119761..00000000000 --- a/lib/antora/extensions/fix-component-name-display.js +++ /dev/null @@ -1,23 +0,0 @@ -'use strict' - -/** - * The purpose of this extension is to fix invalid metadata saved to either antora.yml or gradle.properties in certain - * tags. This invalid metadata prevents Antora from classifying the component versions properly. - * - * This extension addresses with the following cases: - * - * . the boolean value on the prerelease key is incorrectly quoted - * . the prerelease tag is set to true for a GA version - * . the value of the name key is empty - * . the value of the displayVersion key doesn't match the actual version - * . the -SNAPSHOT suffix is appended to the value of the version key instead of the value of the prerelease key - * - * This extension should be listed directly after @antora/collector-extension. - */ -module.exports.register = function () { - this.once('contentAggregated', ({ contentAggregate }) => { - contentAggregate.forEach((componentVersionBucket) => { - Object.assign(componentVersionBucket, { name: 'security', display: 'Spring Security' }) - }) - }) -} From eb66d1ba4183b47a57933bfe523f5689c7d5529e Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Tue, 20 Jun 2023 11:05:00 -0500 Subject: [PATCH 081/178] Remove version-fix.js The playbook no longer brings in versions that were broken. --- antora-playbook.yml | 1 - lib/antora/extensions/version-fix.js | 36 ---------------------------- 2 files changed, 37 deletions(-) delete mode 100644 lib/antora/extensions/version-fix.js diff --git a/antora-playbook.yml b/antora-playbook.yml index 3459317ea56..c60d204deef 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -2,7 +2,6 @@ antora: extensions: - '@springio/antora-extensions/partial-build-extension' - ./lib/antora/extensions/inject-collector-config.js - - ./lib/antora/extensions/version-fix.js - require: '@springio/antora-extensions/latest-version-extension' - require: '@springio/antora-extensions/inject-collector-cache-config-extension' - '@antora/collector-extension' diff --git a/lib/antora/extensions/version-fix.js b/lib/antora/extensions/version-fix.js deleted file mode 100644 index 70518455323..00000000000 --- a/lib/antora/extensions/version-fix.js +++ /dev/null @@ -1,36 +0,0 @@ -'use strict' - -/** - * The purpose of this extension is to fix invalid metadata saved to either antora.yml or gradle.properties in certain - * tags. This invalid metadata prevents Antora from classifying the component versions properly. - * - * This extension addresses with the following cases: - * - * . the boolean value on the prerelease key is incorrectly quoted - * . the prerelease tag is set to true for a GA version - * . the value of the name key is empty - * . the value of the displayVersion key doesn't match the actual version - * . the -SNAPSHOT suffix is appended to the value of the version key instead of the value of the prerelease key - * - * This extension should be listed directly after @antora/collector-extension. - */ -module.exports.register = function () { - this.once('contentAggregated', ({ contentAggregate }) => { - contentAggregate.forEach((componentVersionBucket) => { - if (componentVersionBucket.prerelease === 'true') componentVersionBucket.prerelease = true - if (!componentVersionBucket.name && componentVersionBucket.displayVersion === 5.6) { - componentVersionBucket.name = 'ROOT' - componentVersionBucket.version = '5.6.0-RC1' - delete componentVersionBucket.displayVersion - componentVersionBucket.prerelease = true - } - else if (componentVersionBucket.version === '5.6.1') { - delete componentVersionBucket.prerelease - } - else if (typeof componentVersionBucket.prerelease === 'string' && componentVersionBucket.prerelease !== '-SNAPSHOT') { - componentVersionBucket.version += componentVersionBucket.prerelease - componentVersionBucket.prerelease = true - } - }) - }) -} From 4414d76720f0b1f53ee707e9cde5081d864b0626 Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Tue, 20 Jun 2023 11:05:33 -0500 Subject: [PATCH 082/178] Antora fails if warnings are output --- antora-playbook.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/antora-playbook.yml b/antora-playbook.yml index c60d204deef..f64f661c262 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -43,3 +43,6 @@ ui: bundle: url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.3.0/ui-bundle.zip snapshot: true +runtime: + log: + failure_level: warn From 75a280b68dae1dc19f6a263e92a1e9cdc53ffc96 Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Tue, 20 Jun 2023 11:10:49 -0500 Subject: [PATCH 083/178] Remove tabs-migration-extension All versions brought in by the playbook now use asciidoctor tabs --- antora-playbook.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/antora-playbook.yml b/antora-playbook.yml index f64f661c262..8efd57dbc2e 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -6,10 +6,6 @@ antora: - require: '@springio/antora-extensions/inject-collector-cache-config-extension' - '@antora/collector-extension' - '@antora/atlas-extension' - - require: '@springio/antora-extensions/tabs-migration-extension' - # uncomment this option to save the migrated content to the worktree - #save_result: true - unwrap_example_block: always - require: '@springio/antora-extensions/publish-docsearch-config-extension' index_name: 'spring-security-docs' root_component_name: 'security' From 1e9893122b1070feac43fcba6f3e45b71fefea07 Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Tue, 20 Jun 2023 11:13:11 -0500 Subject: [PATCH 084/178] Remove publish-docsearch-config-extension Algolia docsearch does the indexing on its side now --- antora-playbook.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/antora-playbook.yml b/antora-playbook.yml index 8efd57dbc2e..acfa60eb6d7 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -6,9 +6,6 @@ antora: - require: '@springio/antora-extensions/inject-collector-cache-config-extension' - '@antora/collector-extension' - '@antora/atlas-extension' - - require: '@springio/antora-extensions/publish-docsearch-config-extension' - index_name: 'spring-security-docs' - root_component_name: 'security' - require: '@springio/antora-extensions/root-component-extension' root_component_name: 'security' site: From f7363052debf77262945104f943d6ef4258496d0 Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Tue, 20 Jun 2023 11:13:55 -0500 Subject: [PATCH 085/178] Remove inject-collector-config All refs from the playbook now have the collector configured --- antora-playbook.yml | 1 - .../extensions/inject-collector-config.js | 41 ------------------- 2 files changed, 42 deletions(-) delete mode 100644 lib/antora/extensions/inject-collector-config.js diff --git a/antora-playbook.yml b/antora-playbook.yml index acfa60eb6d7..cd9fa5c9e48 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -1,7 +1,6 @@ antora: extensions: - '@springio/antora-extensions/partial-build-extension' - - ./lib/antora/extensions/inject-collector-config.js - require: '@springio/antora-extensions/latest-version-extension' - require: '@springio/antora-extensions/inject-collector-cache-config-extension' - '@antora/collector-extension' diff --git a/lib/antora/extensions/inject-collector-config.js b/lib/antora/extensions/inject-collector-config.js deleted file mode 100644 index 1b939254ca0..00000000000 --- a/lib/antora/extensions/inject-collector-config.js +++ /dev/null @@ -1,41 +0,0 @@ -'use strict' - -const BASE_COMMAND = 'gradlew -PbuildSrc.skipTests=true -Porg.gradle.java.installations.auto-detect=false --scan --stacktrace' -const JVM_ARGS='-Xmx3g -XX:+HeapDumpOnOutOfMemoryError' -const REPO_URL = 'https://github.com/spring-projects/spring-security' -const TASK_NAME=':spring-security-docs:generateAntora' - -/** - * Set of tags that contain a collector config, but the antora command fails on GitHub Actions. - */ -const VERSIONS_TO_OVERRIDE = [ - '6.0.0-RC1' -] - -/** - * The purpose of this extension is to inject the Antora Collector configuration into the parsed component version - * descriptor in tags created before Antora Collector was introduced. Antora Collector runs a command to generate a - * replacement antora.yml that a) sets the version from the value of the version property in gradle.properties and b) - * populates AsciiDoc attributes with information from the Gradle build, such as software versions and resource URLs. - */ -module.exports.register = function () { - this.once('contentAggregated', ({ contentAggregate }) => { - for (const { origins } of contentAggregate) { - for (const origin of origins) { - if (origin.url !== REPO_URL) { - continue - } - // Ignore tags with their own collector config unless the antora command fails on GitHub Actions - if (!(origin.descriptor.ext?.collector === undefined || VERSIONS_TO_OVERRIDE.includes(origin.tag))) { - continue - } - origin.descriptor.ext = { - collector: { - run: { command: `${BASE_COMMAND} "-Dorg.gradle.jvmargs=${JVM_ARGS}" ${TASK_NAME}`, local: true }, - scan: { dir: './build/generateAntora' }, - } - } - } - } - }) -} From 991939af066603c477cd7160133c72c4ac8ef68f Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Thu, 22 Jun 2023 17:45:34 -0500 Subject: [PATCH 086/178] Update spring-doc-actions 0.0.11 --- .github/workflows/deploy-docs.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index f4c102197fb..b1aa755f18f 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -36,14 +36,14 @@ jobs: - name: Copy the cache to be included in the site run: cp -rf build/antora/inject-collector-cache-config-extension/.cache build/site/ - name: Publish Docs - uses: spring-io/spring-doc-actions/rsync-antora-reference@v0.0.9 + uses: spring-io/spring-doc-actions/rsync-antora-reference@v0.0.11 with: docs-username: ${{ secrets.DOCS_USERNAME }} docs-host: ${{ secrets.DOCS_HOST }} docs-ssh-key: ${{ secrets.DOCS_SSH_KEY }} docs-ssh-host-key: ${{ secrets.DOCS_SSH_HOST_KEY }} - name: Bust Clouflare Cache - uses: spring-io/spring-doc-actions/bust-cloudflare-antora-cache@v0.0.9 + uses: spring-io/spring-doc-actions/bust-cloudflare-antora-cache@v0.0.11 with: context-root: spring-security cloudflare-zone-id: ${{ secrets.CLOUDFLARE_ZONE_ID }} From ed6205da5e203c90a35a8ac5c5f9caf895ec2fb2 Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Fri, 23 Jun 2023 16:51:45 -0500 Subject: [PATCH 087/178] Update to antora-extensions 1.4.1 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 9dba02848a3..c7587236bf1 100644 --- a/build.gradle +++ b/build.gradle @@ -16,7 +16,7 @@ antora { '@antora/atlas-extension': '1.0.0-alpha.1', '@antora/collector-extension': '1.0.0-alpha.3', '@asciidoctor/tabs': '1.0.0-beta.3', - '@springio/antora-extensions': '1.4.0', + '@springio/antora-extensions': '1.4.1', '@springio/asciidoctor-extensions': '1.0.0-alpha.8', ] } From bcdd981578ca428fbd3538dd55b1d76d6ca48cf4 Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Fri, 23 Jun 2023 17:38:45 -0500 Subject: [PATCH 088/178] Update to antora-extensions 1.4.2 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index c7587236bf1..2026d49c8f9 100644 --- a/build.gradle +++ b/build.gradle @@ -16,7 +16,7 @@ antora { '@antora/atlas-extension': '1.0.0-alpha.1', '@antora/collector-extension': '1.0.0-alpha.3', '@asciidoctor/tabs': '1.0.0-beta.3', - '@springio/antora-extensions': '1.4.1', + '@springio/antora-extensions': '1.4.2', '@springio/asciidoctor-extensions': '1.0.0-alpha.8', ] } From 1485ad69511639870c8efc8acc6335d3b0512b79 Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Wed, 12 Jul 2023 10:47:38 -0500 Subject: [PATCH 089/178] Update to antora-ui-spring v0.3.1 - Adds GitHub Project Link - Adds Stackoverflow Link - Adds Related Documentation links --- antora-playbook.yml | 3 ++- lib/antora/templates/per-branch-antora-playbook.yml | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/antora-playbook.yml b/antora-playbook.yml index cd9fa5c9e48..5ff2db8fc2f 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -21,6 +21,7 @@ content: start_path: docs asciidoc: attributes: + page-stackoverflow-url: https://stackoverflow.com/tags/spring-security page-pagination: '' hide-uri-scheme: '@' tabs-sync-option: '@' @@ -33,7 +34,7 @@ urls: redirect_facility: httpd ui: bundle: - url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.3.0/ui-bundle.zip + url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.3.1/ui-bundle.zip snapshot: true runtime: log: diff --git a/lib/antora/templates/per-branch-antora-playbook.yml b/lib/antora/templates/per-branch-antora-playbook.yml index cf38bac8b35..171c892871c 100644 --- a/lib/antora/templates/per-branch-antora-playbook.yml +++ b/lib/antora/templates/per-branch-antora-playbook.yml @@ -20,6 +20,7 @@ content: worktrees: true asciidoc: attributes: + page-stackoverflow-url: https://stackoverflow.com/tags/spring-security hide-uri-scheme: '@' page-pagination: '' primary-site-url: https://docs.spring.io/spring-security/reference @@ -34,5 +35,5 @@ runtime: failure_level: warn ui: bundle: - url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.3.0/ui-bundle.zip + url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.3.1/ui-bundle.zip snapshot: true From 8ba2c34175a17658b38c107a464bd1db1873fce3 Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Wed, 12 Jul 2023 11:28:19 -0500 Subject: [PATCH 090/178] Update to spring-antora-ui v0.3.2 --- antora-playbook.yml | 2 +- lib/antora/templates/per-branch-antora-playbook.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/antora-playbook.yml b/antora-playbook.yml index 5ff2db8fc2f..7ffe7bad4d0 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -34,7 +34,7 @@ urls: redirect_facility: httpd ui: bundle: - url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.3.1/ui-bundle.zip + url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.3.2/ui-bundle.zip snapshot: true runtime: log: diff --git a/lib/antora/templates/per-branch-antora-playbook.yml b/lib/antora/templates/per-branch-antora-playbook.yml index 171c892871c..9db74623d79 100644 --- a/lib/antora/templates/per-branch-antora-playbook.yml +++ b/lib/antora/templates/per-branch-antora-playbook.yml @@ -35,5 +35,5 @@ runtime: failure_level: warn ui: bundle: - url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.3.1/ui-bundle.zip + url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.3.2/ui-bundle.zip snapshot: true From 85ccc201219f8943f22461cd4edd5ef3fde89515 Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Tue, 18 Jul 2023 11:11:30 -0500 Subject: [PATCH 091/178] Update to antora-ui-spring 0.3.3 --- antora-playbook.yml | 2 +- lib/antora/templates/per-branch-antora-playbook.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/antora-playbook.yml b/antora-playbook.yml index 7ffe7bad4d0..1904ec44aad 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -34,7 +34,7 @@ urls: redirect_facility: httpd ui: bundle: - url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.3.2/ui-bundle.zip + url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.3.3/ui-bundle.zip snapshot: true runtime: log: diff --git a/lib/antora/templates/per-branch-antora-playbook.yml b/lib/antora/templates/per-branch-antora-playbook.yml index 9db74623d79..2cc2d8a98ab 100644 --- a/lib/antora/templates/per-branch-antora-playbook.yml +++ b/lib/antora/templates/per-branch-antora-playbook.yml @@ -35,5 +35,5 @@ runtime: failure_level: warn ui: bundle: - url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.3.2/ui-bundle.zip + url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.3.3/ui-bundle.zip snapshot: true From ed73d77e335692fca17397cf4ea16bdf151166c1 Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Mon, 28 Aug 2023 13:28:05 -0500 Subject: [PATCH 092/178] Update to antora-ui-spring 0.3.5 --- antora-playbook.yml | 2 +- lib/antora/templates/per-branch-antora-playbook.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/antora-playbook.yml b/antora-playbook.yml index 1904ec44aad..7f461509a4f 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -34,7 +34,7 @@ urls: redirect_facility: httpd ui: bundle: - url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.3.3/ui-bundle.zip + url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.3.5/ui-bundle.zip snapshot: true runtime: log: diff --git a/lib/antora/templates/per-branch-antora-playbook.yml b/lib/antora/templates/per-branch-antora-playbook.yml index 2cc2d8a98ab..e2696bb826d 100644 --- a/lib/antora/templates/per-branch-antora-playbook.yml +++ b/lib/antora/templates/per-branch-antora-playbook.yml @@ -35,5 +35,5 @@ runtime: failure_level: warn ui: bundle: - url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.3.3/ui-bundle.zip + url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.3.5/ui-bundle.zip snapshot: true From a469b2e229bd4627634c141b46b5e07a8ddec635 Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Thu, 7 Sep 2023 12:19:53 -0500 Subject: [PATCH 093/178] Update to antora-ui-spring 0.3.6 --- antora-playbook.yml | 2 +- lib/antora/templates/per-branch-antora-playbook.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/antora-playbook.yml b/antora-playbook.yml index 7f461509a4f..972677529bd 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -34,7 +34,7 @@ urls: redirect_facility: httpd ui: bundle: - url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.3.5/ui-bundle.zip + url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.3.6/ui-bundle.zip snapshot: true runtime: log: diff --git a/lib/antora/templates/per-branch-antora-playbook.yml b/lib/antora/templates/per-branch-antora-playbook.yml index e2696bb826d..56bb4af8caf 100644 --- a/lib/antora/templates/per-branch-antora-playbook.yml +++ b/lib/antora/templates/per-branch-antora-playbook.yml @@ -35,5 +35,5 @@ runtime: failure_level: warn ui: bundle: - url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.3.5/ui-bundle.zip + url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.3.6/ui-bundle.zip snapshot: true From 593049604956285da8036ec2c32a182f30f216dc Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Wed, 13 Sep 2023 10:15:56 -0500 Subject: [PATCH 094/178] Update to antora-ui-spring v0.3.7 --- antora-playbook.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/antora-playbook.yml b/antora-playbook.yml index 972677529bd..9f2898665d7 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -34,7 +34,7 @@ urls: redirect_facility: httpd ui: bundle: - url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.3.6/ui-bundle.zip + url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.3.7/ui-bundle.zip snapshot: true runtime: log: From 71c9c8223335e0864b556dc7214689611b2b41ae Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Wed, 20 Sep 2023 14:22:57 -0500 Subject: [PATCH 095/178] Search in all Spring Docs --- antora-playbook.yml | 3 ++- build.gradle | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/antora-playbook.yml b/antora-playbook.yml index 9f2898665d7..989d5554d24 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -7,6 +7,7 @@ antora: - '@antora/atlas-extension' - require: '@springio/antora-extensions/root-component-extension' root_component_name: 'security' + - '@springio/antora-extensions/static-page-extension' site: title: Spring Security url: https://docs.spring.io/spring-security/reference @@ -34,7 +35,7 @@ urls: redirect_facility: httpd ui: bundle: - url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.3.7/ui-bundle.zip + url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.4.1/ui-bundle.zip snapshot: true runtime: log: diff --git a/build.gradle b/build.gradle index 2026d49c8f9..90f9f611ccc 100644 --- a/build.gradle +++ b/build.gradle @@ -9,14 +9,14 @@ antora { environment = [ 'ALGOLIA_API_KEY': '9d489079e5ec46dbb238909fee5c9c29', 'ALGOLIA_APP_ID': 'WB1FQYI187', - 'ALGOLIA_INDEX_NAME': 'springsecurity', + 'ALGOLIA_INDEX_NAME': 'springdocs', ] // NOTE remember to update the versions in lib/antora/templates/per-branch-antora-playbook.yml as well dependencies = [ '@antora/atlas-extension': '1.0.0-alpha.1', '@antora/collector-extension': '1.0.0-alpha.3', '@asciidoctor/tabs': '1.0.0-beta.3', - '@springio/antora-extensions': '1.4.2', + '@springio/antora-extensions': '1.6.0', '@springio/asciidoctor-extensions': '1.0.0-alpha.8', ] } From dcc044a65464a4c2d05456f1ea3dc8780f5b0541 Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Thu, 21 Sep 2023 11:14:51 -0500 Subject: [PATCH 096/178] Update to antora-ui-spring v0.4.2 --- antora-playbook.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/antora-playbook.yml b/antora-playbook.yml index 989d5554d24..f91b7795dad 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -35,7 +35,7 @@ urls: redirect_facility: httpd ui: bundle: - url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.4.1/ui-bundle.zip + url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.4.2/ui-bundle.zip snapshot: true runtime: log: From ac3935da09c0832b47564a0b38ab7906372f5110 Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Tue, 10 Oct 2023 15:02:22 -0500 Subject: [PATCH 097/178] Use Related Docs Static Page - Update antora-ui-spring - Update antora-extensions - Configure related pages --- antora-playbook.yml | 5 +++-- build.gradle | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/antora-playbook.yml b/antora-playbook.yml index f91b7795dad..d79380f3cd3 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -23,7 +23,8 @@ content: asciidoc: attributes: page-stackoverflow-url: https://stackoverflow.com/tags/spring-security - page-pagination: '' + page-related-doc-categories: security + page-related-doc-projects: framework,graphql hide-uri-scheme: '@' tabs-sync-option: '@' extensions: @@ -35,7 +36,7 @@ urls: redirect_facility: httpd ui: bundle: - url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.4.2/ui-bundle.zip + url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.4.3/ui-bundle.zip snapshot: true runtime: log: diff --git a/build.gradle b/build.gradle index 90f9f611ccc..255445f9f26 100644 --- a/build.gradle +++ b/build.gradle @@ -16,7 +16,7 @@ antora { '@antora/atlas-extension': '1.0.0-alpha.1', '@antora/collector-extension': '1.0.0-alpha.3', '@asciidoctor/tabs': '1.0.0-beta.3', - '@springio/antora-extensions': '1.6.0', + '@springio/antora-extensions': '1.7.0', '@springio/asciidoctor-extensions': '1.0.0-alpha.8', ] } From 46d52e8fee8642f1731bf3d178f5832909bee369 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 14 Dec 2023 11:47:05 +0000 Subject: [PATCH 098/178] Bump actions/checkout from 3 to 4 Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/deploy-docs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index b1aa755f18f..38e423815c3 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -17,7 +17,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 5 - name: Set Up Gradle From c27dcf03b5a20d4517913eeb1f2fab77fd5fe501 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 14 Dec 2023 11:47:01 +0000 Subject: [PATCH 099/178] Bump spring-io/spring-doc-actions from 0.0.11 to 0.0.13 Bumps [spring-io/spring-doc-actions](https://github.com/spring-io/spring-doc-actions) from 0.0.11 to 0.0.13. - [Commits](https://github.com/spring-io/spring-doc-actions/compare/v0.0.11...v0.0.13) --- updated-dependencies: - dependency-name: spring-io/spring-doc-actions dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/deploy-docs.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index 38e423815c3..9d6558dd099 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -36,14 +36,14 @@ jobs: - name: Copy the cache to be included in the site run: cp -rf build/antora/inject-collector-cache-config-extension/.cache build/site/ - name: Publish Docs - uses: spring-io/spring-doc-actions/rsync-antora-reference@v0.0.11 + uses: spring-io/spring-doc-actions/rsync-antora-reference@v0.0.13 with: docs-username: ${{ secrets.DOCS_USERNAME }} docs-host: ${{ secrets.DOCS_HOST }} docs-ssh-key: ${{ secrets.DOCS_SSH_KEY }} docs-ssh-host-key: ${{ secrets.DOCS_SSH_HOST_KEY }} - name: Bust Clouflare Cache - uses: spring-io/spring-doc-actions/bust-cloudflare-antora-cache@v0.0.11 + uses: spring-io/spring-doc-actions/bust-cloudflare-antora-cache@v0.0.13 with: context-root: spring-security cloudflare-zone-id: ${{ secrets.CLOUDFLARE_ZONE_ID }} From 7285fc8b52da6fcd135b4d8d9bea9513dda306f8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Jan 2024 00:19:04 +0000 Subject: [PATCH 100/178] Bump spring-io/spring-doc-actions from 0.0.13 to 0.0.14 Bumps [spring-io/spring-doc-actions](https://github.com/spring-io/spring-doc-actions) from 0.0.13 to 0.0.14. - [Commits](https://github.com/spring-io/spring-doc-actions/compare/v0.0.13...v0.0.14) --- updated-dependencies: - dependency-name: spring-io/spring-doc-actions dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/deploy-docs.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index 9d6558dd099..19c57bad417 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -36,14 +36,14 @@ jobs: - name: Copy the cache to be included in the site run: cp -rf build/antora/inject-collector-cache-config-extension/.cache build/site/ - name: Publish Docs - uses: spring-io/spring-doc-actions/rsync-antora-reference@v0.0.13 + uses: spring-io/spring-doc-actions/rsync-antora-reference@v0.0.14 with: docs-username: ${{ secrets.DOCS_USERNAME }} docs-host: ${{ secrets.DOCS_HOST }} docs-ssh-key: ${{ secrets.DOCS_SSH_KEY }} docs-ssh-host-key: ${{ secrets.DOCS_SSH_HOST_KEY }} - name: Bust Clouflare Cache - uses: spring-io/spring-doc-actions/bust-cloudflare-antora-cache@v0.0.13 + uses: spring-io/spring-doc-actions/bust-cloudflare-antora-cache@v0.0.14 with: context-root: spring-security cloudflare-zone-id: ${{ secrets.CLOUDFLARE_ZONE_ID }} From cfd02619cffc7ee10a4306def8a5dcd768979967 Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Mon, 18 Mar 2024 11:11:38 -0500 Subject: [PATCH 101/178] Update antora-ui-spring v0.4.11 --- antora-playbook.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/antora-playbook.yml b/antora-playbook.yml index d79380f3cd3..8529b7c2fcb 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -36,7 +36,7 @@ urls: redirect_facility: httpd ui: bundle: - url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.4.3/ui-bundle.zip + url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.4.11/ui-bundle.zip snapshot: true runtime: log: From 06961caba7c73af1a967164b00b1ac312fba57c2 Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Mon, 18 Mar 2024 17:01:25 -0500 Subject: [PATCH 102/178] Update to spring-doc-actions v0.0.15 --- .github/workflows/deploy-docs.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index 19c57bad417..4d931658784 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -36,14 +36,14 @@ jobs: - name: Copy the cache to be included in the site run: cp -rf build/antora/inject-collector-cache-config-extension/.cache build/site/ - name: Publish Docs - uses: spring-io/spring-doc-actions/rsync-antora-reference@v0.0.14 + uses: spring-io/spring-doc-actions/rsync-antora-reference@v0.0.15 with: docs-username: ${{ secrets.DOCS_USERNAME }} docs-host: ${{ secrets.DOCS_HOST }} docs-ssh-key: ${{ secrets.DOCS_SSH_KEY }} docs-ssh-host-key: ${{ secrets.DOCS_SSH_HOST_KEY }} - name: Bust Clouflare Cache - uses: spring-io/spring-doc-actions/bust-cloudflare-antora-cache@v0.0.14 + uses: spring-io/spring-doc-actions/bust-cloudflare-antora-cache@v0.0.15 with: context-root: spring-security cloudflare-zone-id: ${{ secrets.CLOUDFLARE_ZONE_ID }} From 5536e216905e589c3a4a4a346a56bf91b1f4611b Mon Sep 17 00:00:00 2001 From: Marcus Hert Da Coregio Date: Tue, 26 Mar 2024 15:33:39 -0300 Subject: [PATCH 103/178] Update tags 5.8.x where x > 10 tags were not being deployed --- antora-playbook.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/antora-playbook.yml b/antora-playbook.yml index 8529b7c2fcb..3a5b9487af3 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -18,7 +18,7 @@ content: sources: - url: https://github.com/spring-projects/spring-security branches: [main, '5.{{6..9},{1..9}+({0..9})}.x', '6.+({0..9}).x'] - tags: ['5.{{6..9},{1..9}+({0..9})}.+({0..9})?(-RC+({0..9}))', '6.+({0..9}).+({0..9})?(-{RC,M}*)','!(5.6.{0..10}*)', '!(5.7.{0..8}*)', '!(5.8.{0..3}*)','!(6.0.{0..3}*)','!(6.1.0*)'] + tags: ['5.{{6..9},{1..9}+({0..9})}.+({0..9})?(-RC+({0..9}))', '6.+({0..9}).+({0..9})?(-{RC,M}*)','!(5.6.{0..10}*)', '!(5.7.{0..8}*)', '!(5.8.{0..3})','!(6.0.{0..3}*)','!(6.1.0*)'] start_path: docs asciidoc: attributes: From baed66278048a2889ceb49f50946f9b9e6ea0142 Mon Sep 17 00:00:00 2001 From: Marcus Hert Da Coregio Date: Wed, 27 Mar 2024 09:22:25 -0300 Subject: [PATCH 104/178] Ignore milestones from 5.8.3 Issue gh-14810 --- antora-playbook.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/antora-playbook.yml b/antora-playbook.yml index 3a5b9487af3..947ee09f5ac 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -18,7 +18,7 @@ content: sources: - url: https://github.com/spring-projects/spring-security branches: [main, '5.{{6..9},{1..9}+({0..9})}.x', '6.+({0..9}).x'] - tags: ['5.{{6..9},{1..9}+({0..9})}.+({0..9})?(-RC+({0..9}))', '6.+({0..9}).+({0..9})?(-{RC,M}*)','!(5.6.{0..10}*)', '!(5.7.{0..8}*)', '!(5.8.{0..3})','!(6.0.{0..3}*)','!(6.1.0*)'] + tags: ['5.{{6..9},{1..9}+({0..9})}.+({0..9})?(-RC+({0..9}))', '6.+({0..9}).+({0..9})?(-{RC,M}*)','!(5.6.{0..10}*)', '!(5.7.{0..8}*)', '!(5.8.{0..3}-*)','!(6.0.{0..3}*)','!(6.1.0*)'] start_path: docs asciidoc: attributes: From 629e2ea1101bfcc79113c81716e160a35fa0f377 Mon Sep 17 00:00:00 2001 From: Marcus Hert Da Coregio Date: Wed, 27 Mar 2024 10:22:06 -0300 Subject: [PATCH 105/178] Update tags Issue gh-14810 --- antora-playbook.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/antora-playbook.yml b/antora-playbook.yml index 947ee09f5ac..5c427b7a60d 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -18,7 +18,7 @@ content: sources: - url: https://github.com/spring-projects/spring-security branches: [main, '5.{{6..9},{1..9}+({0..9})}.x', '6.+({0..9}).x'] - tags: ['5.{{6..9},{1..9}+({0..9})}.+({0..9})?(-RC+({0..9}))', '6.+({0..9}).+({0..9})?(-{RC,M}*)','!(5.6.{0..10}*)', '!(5.7.{0..8}*)', '!(5.8.{0..3}-*)','!(6.0.{0..3}*)','!(6.1.0*)'] + tags: ['5.{{6..9},{1..9}+({0..9})}.+({0..9})?(-RC+({0..9}))', '6.+({0..9}).+({0..9})?(-{RC,M}*)','!(5.6.{0..10}*)', '!(5.7.{0..8}*)', '!(5.8.{0..3}?({-RC,-M}+({0..9})))','!(6.0.{0..3}*)','!(6.1.0*)'] start_path: docs asciidoc: attributes: From f11a669dc76f8142a8840a21186b6fdbe095bbab Mon Sep 17 00:00:00 2001 From: Marcus Hert Da Coregio Date: Wed, 27 Mar 2024 11:42:39 -0300 Subject: [PATCH 106/178] Update tags Issue gh-14810 --- antora-playbook.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/antora-playbook.yml b/antora-playbook.yml index 5c427b7a60d..9759b868fa2 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -18,7 +18,7 @@ content: sources: - url: https://github.com/spring-projects/spring-security branches: [main, '5.{{6..9},{1..9}+({0..9})}.x', '6.+({0..9}).x'] - tags: ['5.{{6..9},{1..9}+({0..9})}.+({0..9})?(-RC+({0..9}))', '6.+({0..9}).+({0..9})?(-{RC,M}*)','!(5.6.{0..10}*)', '!(5.7.{0..8}*)', '!(5.8.{0..3}?({-RC,-M}+({0..9})))','!(6.0.{0..3}*)','!(6.1.0*)'] + tags: ['5.{{6..9},{1..9}+({0..9})}.+({0..9}{,2})?(-RC+({0..9}))', '6.+({0..9}).+({0..9})?(-{RC,M}*)','!(5.6.{0..10}*)', '!(5.7.{0..8}*)', '!(5.8.{0..3}?({-RC,-M}+({0..9})))','!(6.0.{0..3}*)','!(6.1.0*)'] start_path: docs asciidoc: attributes: From e7468571ae9f308f2b7866230bdabbf60a52ec04 Mon Sep 17 00:00:00 2001 From: Marcus Hert Da Coregio Date: Wed, 27 Mar 2024 14:46:51 -0300 Subject: [PATCH 107/178] Try range 0..99 for patch versions Issue gh-14810 --- antora-playbook.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/antora-playbook.yml b/antora-playbook.yml index 9759b868fa2..b246f30e580 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -18,7 +18,7 @@ content: sources: - url: https://github.com/spring-projects/spring-security branches: [main, '5.{{6..9},{1..9}+({0..9})}.x', '6.+({0..9}).x'] - tags: ['5.{{6..9},{1..9}+({0..9})}.+({0..9}{,2})?(-RC+({0..9}))', '6.+({0..9}).+({0..9})?(-{RC,M}*)','!(5.6.{0..10}*)', '!(5.7.{0..8}*)', '!(5.8.{0..3}?({-RC,-M}+({0..9})))','!(6.0.{0..3}*)','!(6.1.0*)'] + tags: ['5.{{6..9},{1..9}+({0..9})}.{0..99}?(-RC+({0..9}))', '6.+({0..9}).+({0..9})?(-{RC,M}*)','!(5.6.{0..10}*)', '!(5.7.{0..8}*)', '!(5.8.{0..3}?({-RC,-M}+({0..9})))','!(6.0.{0..3}*)','!(6.1.0*)'] start_path: docs asciidoc: attributes: From 3bf79cc70cec20cdde34da9e9b95570cc5f6d12c Mon Sep 17 00:00:00 2001 From: Marcus Hert Da Coregio Date: Mon, 1 Apr 2024 13:21:00 -0300 Subject: [PATCH 108/178] Use package.json for package management Issue gh-14819 --- build.gradle | 8 -------- package.json | 10 ++++++++++ 2 files changed, 10 insertions(+), 8 deletions(-) create mode 100644 package.json diff --git a/build.gradle b/build.gradle index 255445f9f26..0841a849316 100644 --- a/build.gradle +++ b/build.gradle @@ -11,12 +11,4 @@ antora { 'ALGOLIA_APP_ID': 'WB1FQYI187', 'ALGOLIA_INDEX_NAME': 'springdocs', ] - // NOTE remember to update the versions in lib/antora/templates/per-branch-antora-playbook.yml as well - dependencies = [ - '@antora/atlas-extension': '1.0.0-alpha.1', - '@antora/collector-extension': '1.0.0-alpha.3', - '@asciidoctor/tabs': '1.0.0-beta.3', - '@springio/antora-extensions': '1.7.0', - '@springio/asciidoctor-extensions': '1.0.0-alpha.8', - ] } diff --git a/package.json b/package.json new file mode 100644 index 00000000000..ab2b7c70683 --- /dev/null +++ b/package.json @@ -0,0 +1,10 @@ +{ + "dependencies": { + "antora": "latest", + "@antora/atlas-extension": "1.0.0-alpha.1", + "@antora/collector-extension": "1.0.0-alpha.3", + "@asciidoctor/tabs": "1.0.0-beta.3", + "@springio/antora-extensions": "1.7.0", + "@springio/asciidoctor-extensions": "1.0.0-alpha.8" + } +} From e001a53454b47b321e4a4154292bde7d9af408eb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Apr 2024 16:31:46 +0000 Subject: [PATCH 109/178] Bump @springio/asciidoctor-extensions Bumps [@springio/asciidoctor-extensions](https://github.com/spring-io/asciidoctor-extensions) from 1.0.0-alpha.8 to 1.0.0-alpha.10. - [Changelog](https://github.com/spring-io/asciidoctor-extensions/blob/main/CHANGELOG.adoc) - [Commits](https://github.com/spring-io/asciidoctor-extensions/compare/v1.0.0-alpha.8...v1.0.0-alpha.10) --- updated-dependencies: - dependency-name: "@springio/asciidoctor-extensions" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ab2b7c70683..47b73080687 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,6 @@ "@antora/collector-extension": "1.0.0-alpha.3", "@asciidoctor/tabs": "1.0.0-beta.3", "@springio/antora-extensions": "1.7.0", - "@springio/asciidoctor-extensions": "1.0.0-alpha.8" + "@springio/asciidoctor-extensions": "1.0.0-alpha.10" } } From e5c05bc746c5e059da172074cebcc87aad90ef4e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Apr 2024 16:31:52 +0000 Subject: [PATCH 110/178] Bump @asciidoctor/tabs from 1.0.0-beta.3 to 1.0.0-beta.6 Bumps [@asciidoctor/tabs](https://github.com/asciidoctor/asciidoctor-tabs) from 1.0.0-beta.3 to 1.0.0-beta.6. - [Changelog](https://github.com/asciidoctor/asciidoctor-tabs/blob/main/CHANGELOG.adoc) - [Commits](https://github.com/asciidoctor/asciidoctor-tabs/compare/v1.0.0-beta.3...v1.0.0-beta.6) --- updated-dependencies: - dependency-name: "@asciidoctor/tabs" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 47b73080687..828ec1eb72c 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "antora": "latest", "@antora/atlas-extension": "1.0.0-alpha.1", "@antora/collector-extension": "1.0.0-alpha.3", - "@asciidoctor/tabs": "1.0.0-beta.3", + "@asciidoctor/tabs": "1.0.0-beta.6", "@springio/antora-extensions": "1.7.0", "@springio/asciidoctor-extensions": "1.0.0-alpha.10" } From b156b256021bb5f0d87db6cde8619ff4a89bb21d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Apr 2024 16:32:06 +0000 Subject: [PATCH 111/178] Bump @antora/atlas-extension from 1.0.0-alpha.1 to 1.0.0-alpha.2 --- updated-dependencies: - dependency-name: "@antora/atlas-extension" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 828ec1eb72c..348c42a6ac4 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "dependencies": { "antora": "latest", - "@antora/atlas-extension": "1.0.0-alpha.1", + "@antora/atlas-extension": "1.0.0-alpha.2", "@antora/collector-extension": "1.0.0-alpha.3", "@asciidoctor/tabs": "1.0.0-beta.6", "@springio/antora-extensions": "1.7.0", From 20814c6aa6a48b29879c31d1325348b017b9919c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Apr 2024 16:36:38 +0000 Subject: [PATCH 112/178] Bump @springio/antora-extensions from 1.7.0 to 1.8.2 Bumps [@springio/antora-extensions](https://github.com/spring-io/antora-extensions) from 1.7.0 to 1.8.2. - [Changelog](https://github.com/spring-io/antora-extensions/blob/main/CHANGELOG.adoc) - [Commits](https://github.com/spring-io/antora-extensions/compare/v1.7.0...v1.8.2) --- updated-dependencies: - dependency-name: "@springio/antora-extensions" dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 348c42a6ac4..a5d2b7dd8c4 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "@antora/atlas-extension": "1.0.0-alpha.2", "@antora/collector-extension": "1.0.0-alpha.3", "@asciidoctor/tabs": "1.0.0-beta.6", - "@springio/antora-extensions": "1.7.0", + "@springio/antora-extensions": "1.8.2", "@springio/asciidoctor-extensions": "1.0.0-alpha.10" } } From 3104bdb90d19dd65cb5b0a5b555bc160a3e77ec0 Mon Sep 17 00:00:00 2001 From: Marcus Hert Da Coregio Date: Tue, 2 Apr 2024 09:11:35 -0300 Subject: [PATCH 113/178] Revert "Use package.json for package management" This reverts commit 3bf79cc7 --- build.gradle | 8 ++++++++ package.json | 10 ---------- 2 files changed, 8 insertions(+), 10 deletions(-) delete mode 100644 package.json diff --git a/build.gradle b/build.gradle index 0841a849316..255445f9f26 100644 --- a/build.gradle +++ b/build.gradle @@ -11,4 +11,12 @@ antora { 'ALGOLIA_APP_ID': 'WB1FQYI187', 'ALGOLIA_INDEX_NAME': 'springdocs', ] + // NOTE remember to update the versions in lib/antora/templates/per-branch-antora-playbook.yml as well + dependencies = [ + '@antora/atlas-extension': '1.0.0-alpha.1', + '@antora/collector-extension': '1.0.0-alpha.3', + '@asciidoctor/tabs': '1.0.0-beta.3', + '@springio/antora-extensions': '1.7.0', + '@springio/asciidoctor-extensions': '1.0.0-alpha.8', + ] } diff --git a/package.json b/package.json deleted file mode 100644 index a5d2b7dd8c4..00000000000 --- a/package.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "dependencies": { - "antora": "latest", - "@antora/atlas-extension": "1.0.0-alpha.2", - "@antora/collector-extension": "1.0.0-alpha.3", - "@asciidoctor/tabs": "1.0.0-beta.6", - "@springio/antora-extensions": "1.8.2", - "@springio/asciidoctor-extensions": "1.0.0-alpha.10" - } -} From 477276b52e83a6c2b89bf6e4cae05ddd0af313ac Mon Sep 17 00:00:00 2001 From: Marcus Hert Da Coregio Date: Wed, 3 Apr 2024 09:44:15 -0300 Subject: [PATCH 114/178] Use package.json for antora package management Issue gh-14819 --- build.gradle | 9 --------- lib/antora/templates/per-branch-antora-playbook.yml | 2 -- package.json | 10 ++++++++++ 3 files changed, 10 insertions(+), 11 deletions(-) create mode 100644 package.json diff --git a/build.gradle b/build.gradle index 255445f9f26..e73e30fc753 100644 --- a/build.gradle +++ b/build.gradle @@ -4,19 +4,10 @@ plugins { } antora { - version = '3.2.0-alpha.2' options = [clean: true, fetch: true, stacktrace: true] environment = [ 'ALGOLIA_API_KEY': '9d489079e5ec46dbb238909fee5c9c29', 'ALGOLIA_APP_ID': 'WB1FQYI187', 'ALGOLIA_INDEX_NAME': 'springdocs', ] - // NOTE remember to update the versions in lib/antora/templates/per-branch-antora-playbook.yml as well - dependencies = [ - '@antora/atlas-extension': '1.0.0-alpha.1', - '@antora/collector-extension': '1.0.0-alpha.3', - '@asciidoctor/tabs': '1.0.0-beta.3', - '@springio/antora-extensions': '1.7.0', - '@springio/asciidoctor-extensions': '1.0.0-alpha.8', - ] } diff --git a/lib/antora/templates/per-branch-antora-playbook.yml b/lib/antora/templates/per-branch-antora-playbook.yml index 56bb4af8caf..e7f0500dea9 100644 --- a/lib/antora/templates/per-branch-antora-playbook.yml +++ b/lib/antora/templates/per-branch-antora-playbook.yml @@ -1,5 +1,3 @@ -# 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.1.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: diff --git a/package.json b/package.json new file mode 100644 index 00000000000..bcf8513b888 --- /dev/null +++ b/package.json @@ -0,0 +1,10 @@ +{ + "dependencies": { + "antora": "3.2.0-alpha.2", + "@antora/atlas-extension": "1.0.0-alpha.2", + "@antora/collector-extension": "1.0.0-alpha.3", + "@asciidoctor/tabs": "1.0.0-beta.6", + "@springio/antora-extensions": "1.8.2", + "@springio/asciidoctor-extensions": "1.0.0-alpha.10" + } +} From cf339d682b30000f1f38461751f464cbd55f0159 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 5 Apr 2024 14:42:00 +0000 Subject: [PATCH 115/178] Bump antora from 3.2.0-alpha.2 to 3.2.0-alpha.4 Bumps [antora](https://gitlab.com/antora/antora) from 3.2.0-alpha.2 to 3.2.0-alpha.4. - [Changelog](https://gitlab.com/antora/antora/blob/main/CHANGELOG.adoc) - [Commits](https://gitlab.com/antora/antora/compare/v3.2.0-alpha.2...v3.2.0-alpha.4) --- updated-dependencies: - dependency-name: antora dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index bcf8513b888..69f4bd63648 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "dependencies": { - "antora": "3.2.0-alpha.2", + "antora": "3.2.0-alpha.4", "@antora/atlas-extension": "1.0.0-alpha.2", "@antora/collector-extension": "1.0.0-alpha.3", "@asciidoctor/tabs": "1.0.0-beta.6", From 7d398dce6bbb2d1ee6002d65359bb08b4efa8f2c Mon Sep 17 00:00:00 2001 From: Marcus Hert Da Coregio Date: Tue, 9 Apr 2024 10:38:03 -0300 Subject: [PATCH 116/178] Add merge-dependabot-pr.yml Closes gh-14858 --- .github/workflows/merge-dependabot-pr.yml | 28 +++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 .github/workflows/merge-dependabot-pr.yml diff --git a/.github/workflows/merge-dependabot-pr.yml b/.github/workflows/merge-dependabot-pr.yml new file mode 100644 index 00000000000..2911c4644cd --- /dev/null +++ b/.github/workflows/merge-dependabot-pr.yml @@ -0,0 +1,28 @@ +name: Merge Dependabot PR + +on: pull_request_target + +run-name: Merge Dependabot PR ${{ github.ref_name }} + +permissions: write-all + +jobs: + merge-dependabot-pr: + runs-on: ubuntu-latest + if: github.actor == 'dependabot[bot]' + steps: + + - uses: actions/checkout@v4 + with: + show-progress: false + ref: ${{ github.event.pull_request.head.sha }} + + - uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: 17 + + - name: Merge Dependabot pull request + run: gh pr merge ${{ github.event.pull_request.number }} --auto --rebase + env: + GH_TOKEN: ${{ secrets.GH_ACTIONS_REPO_TOKEN }} From ce6ba7fb9dbe463bd97af5c6a2f04834315099ab Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 17 Apr 2024 23:52:34 +0000 Subject: [PATCH 117/178] Bump @springio/antora-extensions from 1.8.2 to 1.10.0 Bumps [@springio/antora-extensions](https://github.com/spring-io/antora-extensions) from 1.8.2 to 1.10.0. - [Changelog](https://github.com/spring-io/antora-extensions/blob/main/CHANGELOG.adoc) - [Commits](https://github.com/spring-io/antora-extensions/compare/v1.8.2...v1.10.0) --- updated-dependencies: - dependency-name: "@springio/antora-extensions" dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 69f4bd63648..c82c8c22f6e 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "@antora/atlas-extension": "1.0.0-alpha.2", "@antora/collector-extension": "1.0.0-alpha.3", "@asciidoctor/tabs": "1.0.0-beta.6", - "@springio/antora-extensions": "1.8.2", + "@springio/antora-extensions": "1.10.0", "@springio/asciidoctor-extensions": "1.0.0-alpha.10" } } From cd04ea3675b69b4c67bbf212b9d3c8dc3ca7c069 Mon Sep 17 00:00:00 2001 From: Steve Riesenberg <5248162+sjohnr@users.noreply.github.com> Date: Fri, 19 Apr 2024 09:58:28 -0500 Subject: [PATCH 118/178] Fix atlas-extension order Fixes the following error from latest-version-extension: FATAL (antora): The latest-version-extension must be registered after the atlas-extension --- antora-playbook.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/antora-playbook.yml b/antora-playbook.yml index b246f30e580..b58d2dd5035 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -1,10 +1,10 @@ antora: extensions: - '@springio/antora-extensions/partial-build-extension' + - '@antora/atlas-extension' - require: '@springio/antora-extensions/latest-version-extension' - require: '@springio/antora-extensions/inject-collector-cache-config-extension' - '@antora/collector-extension' - - '@antora/atlas-extension' - require: '@springio/antora-extensions/root-component-extension' root_component_name: 'security' - '@springio/antora-extensions/static-page-extension' From ed1ef9b8897a15469579de47449595956bc0e254 Mon Sep 17 00:00:00 2001 From: marcusdacoregio <13255302+marcusdacoregio@users.noreply.github.com> Date: Fri, 3 May 2024 14:58:20 +0000 Subject: [PATCH 119/178] Update Antora UI Spring to v0.4.12 --- antora-playbook.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/antora-playbook.yml b/antora-playbook.yml index b58d2dd5035..22fc07e410d 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -36,7 +36,7 @@ urls: redirect_facility: httpd ui: bundle: - url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.4.11/ui-bundle.zip + url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.4.12/ui-bundle.zip snapshot: true runtime: log: From d44606f3627e9b533e15c6260fb0cbdf027807ed Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 May 2024 00:13:41 +0000 Subject: [PATCH 120/178] Bump @springio/antora-extensions from 1.10.0 to 1.11.0 Bumps [@springio/antora-extensions](https://github.com/spring-io/antora-extensions) from 1.10.0 to 1.11.0. - [Changelog](https://github.com/spring-io/antora-extensions/blob/main/CHANGELOG.adoc) - [Commits](https://github.com/spring-io/antora-extensions/compare/v1.10.0...v1.11.0) --- updated-dependencies: - dependency-name: "@springio/antora-extensions" dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c82c8c22f6e..eebfb2c2fa8 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "@antora/atlas-extension": "1.0.0-alpha.2", "@antora/collector-extension": "1.0.0-alpha.3", "@asciidoctor/tabs": "1.0.0-beta.6", - "@springio/antora-extensions": "1.10.0", + "@springio/antora-extensions": "1.11.0", "@springio/asciidoctor-extensions": "1.0.0-alpha.10" } } From e4eeeb95c2a58fc65f22e85bb07d77abcee4fc1d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 20 May 2024 16:34:34 +0000 Subject: [PATCH 121/178] Update Antora Spring UI to v0.4.15 --- antora-playbook.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/antora-playbook.yml b/antora-playbook.yml index 22fc07e410d..0d4249a2e4d 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -36,7 +36,7 @@ urls: redirect_facility: httpd ui: bundle: - url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.4.12/ui-bundle.zip + url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.4.15/ui-bundle.zip snapshot: true runtime: log: From ace979014f21caaa2fba0ac3ff12c8218188fc29 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 May 2024 17:25:23 +0000 Subject: [PATCH 122/178] --- updated-dependencies: - dependency-name: spring-io/spring-doc-actions dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/deploy-docs.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index 4d931658784..5bace0156cc 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -36,14 +36,14 @@ jobs: - name: Copy the cache to be included in the site run: cp -rf build/antora/inject-collector-cache-config-extension/.cache build/site/ - name: Publish Docs - uses: spring-io/spring-doc-actions/rsync-antora-reference@v0.0.15 + uses: spring-io/spring-doc-actions/rsync-antora-reference@v0.0.17 with: docs-username: ${{ secrets.DOCS_USERNAME }} docs-host: ${{ secrets.DOCS_HOST }} docs-ssh-key: ${{ secrets.DOCS_SSH_KEY }} docs-ssh-host-key: ${{ secrets.DOCS_SSH_HOST_KEY }} - name: Bust Clouflare Cache - uses: spring-io/spring-doc-actions/bust-cloudflare-antora-cache@v0.0.15 + uses: spring-io/spring-doc-actions/bust-cloudflare-antora-cache@v0.0.17 with: context-root: spring-security cloudflare-zone-id: ${{ secrets.CLOUDFLARE_ZONE_ID }} From 845a4231358e687a797d48ff0ebbcc66748cf0c3 Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Tue, 21 May 2024 16:12:04 -0500 Subject: [PATCH 123/178] Update to antora-extensions 1.11.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index eebfb2c2fa8..c3570e2f8a6 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "@antora/atlas-extension": "1.0.0-alpha.2", "@antora/collector-extension": "1.0.0-alpha.3", "@asciidoctor/tabs": "1.0.0-beta.6", - "@springio/antora-extensions": "1.11.0", + "@springio/antora-extensions": "1.11.1", "@springio/asciidoctor-extensions": "1.0.0-alpha.10" } } From b7888bc6d105cebe8f8df4c8fe055eaaa5c9ac6a Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Tue, 21 May 2024 16:32:15 -0500 Subject: [PATCH 124/178] Use Algolia from extensions --- build.gradle | 5 ----- 1 file changed, 5 deletions(-) diff --git a/build.gradle b/build.gradle index e73e30fc753..e7d2bc510d4 100644 --- a/build.gradle +++ b/build.gradle @@ -5,9 +5,4 @@ plugins { antora { options = [clean: true, fetch: true, stacktrace: true] - environment = [ - 'ALGOLIA_API_KEY': '9d489079e5ec46dbb238909fee5c9c29', - 'ALGOLIA_APP_ID': 'WB1FQYI187', - 'ALGOLIA_INDEX_NAME': 'springdocs', - ] } From 12c03dd5a3b5b88e55a9283886ae4ca366e5deec Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Tue, 21 May 2024 16:41:49 -0500 Subject: [PATCH 125/178] Use composite extension --- antora-playbook.yml | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/antora-playbook.yml b/antora-playbook.yml index 0d4249a2e4d..be3dfe080bd 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -1,13 +1,7 @@ antora: extensions: - - '@springio/antora-extensions/partial-build-extension' - - '@antora/atlas-extension' - - require: '@springio/antora-extensions/latest-version-extension' - - require: '@springio/antora-extensions/inject-collector-cache-config-extension' - - '@antora/collector-extension' - - require: '@springio/antora-extensions/root-component-extension' + - require: '@springio/antora-extensions' root_component_name: 'security' - - '@springio/antora-extensions/static-page-extension' site: title: Spring Security url: https://docs.spring.io/spring-security/reference From 16d9a90e2cd9577c39d01db9fbb7fb025b323705 Mon Sep 17 00:00:00 2001 From: Marcus Hert Da Coregio Date: Wed, 22 May 2024 10:49:58 -0300 Subject: [PATCH 126/178] Upgrade to Gradle 8.7 --- gradle/wrapper/gradle-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ae04661ee73..48c0a02ca41 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists From 78eca084f1e17fbec755a05e926ea275e48bbbf5 Mon Sep 17 00:00:00 2001 From: Marcus Hert Da Coregio Date: Fri, 24 May 2024 09:36:16 -0300 Subject: [PATCH 127/178] Add update-antora-ui-spring.yml Issue gh-15106 --- .github/workflows/update-antora-ui-spring.yml | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 .github/workflows/update-antora-ui-spring.yml diff --git a/.github/workflows/update-antora-ui-spring.yml b/.github/workflows/update-antora-ui-spring.yml new file mode 100644 index 00000000000..570a4fbf68f --- /dev/null +++ b/.github/workflows/update-antora-ui-spring.yml @@ -0,0 +1,35 @@ +name: Update Antora UI Spring + +on: + schedule: + - cron: '0 10 * * *' # Once per day at 10am UTC + workflow_dispatch: + +permissions: + pull-requests: write + issues: write + contents: write + +jobs: + update-antora-ui-spring: + runs-on: ubuntu-latest + name: Update on Supported Branches + strategy: + matrix: + branch: [ '5.8.x', '6.1.x', '6.2.x', 'main' ] + steps: + - uses: spring-io/spring-doc-actions/update-antora-spring-ui@5a57bcc6a0da2a1474136cf29571b277850432bc + name: Update + with: + docs-branch: ${{ matrix.branch }} + token: ${{ secrets.GITHUB_TOKEN }} + antora-file-path: 'docs/antora-playbook.yml' + update-antora-ui-spring-docs-build: + runs-on: ubuntu-latest + name: Update on docs-build + steps: + - uses: spring-io/spring-doc-actions/update-antora-spring-ui@5a57bcc6a0da2a1474136cf29571b277850432bc + name: Update + with: + docs-branch: 'docs-build' + token: ${{ secrets.GITHUB_TOKEN }} From 4a4410c40e8ae6e6c08e88b4d4f2ef8d57f37fa1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 24 May 2024 14:42:39 +0000 Subject: [PATCH 128/178] Bump @antora/collector-extension from 1.0.0-alpha.3 to 1.0.0-alpha.4 --- updated-dependencies: - dependency-name: "@antora/collector-extension" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c3570e2f8a6..d4fa935fa78 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "dependencies": { "antora": "3.2.0-alpha.4", "@antora/atlas-extension": "1.0.0-alpha.2", - "@antora/collector-extension": "1.0.0-alpha.3", + "@antora/collector-extension": "1.0.0-alpha.4", "@asciidoctor/tabs": "1.0.0-beta.6", "@springio/antora-extensions": "1.11.1", "@springio/asciidoctor-extensions": "1.0.0-alpha.10" From 816736d0dbc3dfc418c364dcd703f6ff54d8a69b Mon Sep 17 00:00:00 2001 From: Marcus Hert Da Coregio Date: Thu, 20 Jun 2024 15:46:03 -0300 Subject: [PATCH 129/178] Delete update-antora-ui-spring.yml Scheduled workflows must be placed in default branches otherwise they won't be triggered --- .github/workflows/update-antora-ui-spring.yml | 35 ------------------- 1 file changed, 35 deletions(-) delete mode 100644 .github/workflows/update-antora-ui-spring.yml diff --git a/.github/workflows/update-antora-ui-spring.yml b/.github/workflows/update-antora-ui-spring.yml deleted file mode 100644 index 570a4fbf68f..00000000000 --- a/.github/workflows/update-antora-ui-spring.yml +++ /dev/null @@ -1,35 +0,0 @@ -name: Update Antora UI Spring - -on: - schedule: - - cron: '0 10 * * *' # Once per day at 10am UTC - workflow_dispatch: - -permissions: - pull-requests: write - issues: write - contents: write - -jobs: - update-antora-ui-spring: - runs-on: ubuntu-latest - name: Update on Supported Branches - strategy: - matrix: - branch: [ '5.8.x', '6.1.x', '6.2.x', 'main' ] - steps: - - uses: spring-io/spring-doc-actions/update-antora-spring-ui@5a57bcc6a0da2a1474136cf29571b277850432bc - name: Update - with: - docs-branch: ${{ matrix.branch }} - token: ${{ secrets.GITHUB_TOKEN }} - antora-file-path: 'docs/antora-playbook.yml' - update-antora-ui-spring-docs-build: - runs-on: ubuntu-latest - name: Update on docs-build - steps: - - uses: spring-io/spring-doc-actions/update-antora-spring-ui@5a57bcc6a0da2a1474136cf29571b277850432bc - name: Update - with: - docs-branch: 'docs-build' - token: ${{ secrets.GITHUB_TOKEN }} From e56bcb3cfdfdcaaf4e2167c1b550225a8c26a619 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 20 Jun 2024 18:46:35 +0000 Subject: [PATCH 130/178] Update Antora Spring UI to v0.4.16 --- antora-playbook.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/antora-playbook.yml b/antora-playbook.yml index be3dfe080bd..e4aa4842b92 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -30,7 +30,7 @@ urls: redirect_facility: httpd ui: bundle: - url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.4.15/ui-bundle.zip + url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.4.16/ui-bundle.zip snapshot: true runtime: log: From 7dca6269bba8631e11cded3e350f290e9dd1d272 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Jun 2024 01:14:50 +0000 Subject: [PATCH 131/178] Bump spring-io/spring-doc-actions from 0.0.17 to 0.0.18 Bumps [spring-io/spring-doc-actions](https://github.com/spring-io/spring-doc-actions) from 0.0.17 to 0.0.18. - [Commits](https://github.com/spring-io/spring-doc-actions/compare/v0.0.17...v0.0.18) --- updated-dependencies: - dependency-name: spring-io/spring-doc-actions dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/deploy-docs.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index 5bace0156cc..4eec479e34e 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -36,14 +36,14 @@ jobs: - name: Copy the cache to be included in the site run: cp -rf build/antora/inject-collector-cache-config-extension/.cache build/site/ - name: Publish Docs - uses: spring-io/spring-doc-actions/rsync-antora-reference@v0.0.17 + uses: spring-io/spring-doc-actions/rsync-antora-reference@v0.0.18 with: docs-username: ${{ secrets.DOCS_USERNAME }} docs-host: ${{ secrets.DOCS_HOST }} docs-ssh-key: ${{ secrets.DOCS_SSH_KEY }} docs-ssh-host-key: ${{ secrets.DOCS_SSH_HOST_KEY }} - name: Bust Clouflare Cache - uses: spring-io/spring-doc-actions/bust-cloudflare-antora-cache@v0.0.17 + uses: spring-io/spring-doc-actions/bust-cloudflare-antora-cache@v0.0.18 with: context-root: spring-security cloudflare-zone-id: ${{ secrets.CLOUDFLARE_ZONE_ID }} From abc06ea10ceec2e89ead94b6819281b99be03086 Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Thu, 27 Jun 2024 16:35:50 -0400 Subject: [PATCH 132/178] Remove unused playbooks We no longer use the local or per branch playbooks. Instead we can flex the build using the same env variables that the partial build leverages & fixed playbooks in each branch. --- .../templates/per-branch-antora-playbook.yml | 37 ------------------- local-antora-playbook.yml | 34 ----------------- 2 files changed, 71 deletions(-) delete mode 100644 lib/antora/templates/per-branch-antora-playbook.yml delete mode 100644 local-antora-playbook.yml diff --git a/lib/antora/templates/per-branch-antora-playbook.yml b/lib/antora/templates/per-branch-antora-playbook.yml deleted file mode 100644 index e7f0500dea9..00000000000 --- a/lib/antora/templates/per-branch-antora-playbook.yml +++ /dev/null @@ -1,37 +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 Security Reference -content: - sources: - - url: ./.. - branches: HEAD - start_path: docs - worktrees: true -asciidoc: - attributes: - page-stackoverflow-url: https://stackoverflow.com/tags/spring-security - hide-uri-scheme: '@' - page-pagination: '' - primary-site-url: https://docs.spring.io/spring-security/reference - tabs-sync-option: '@' - extensions: - - '@asciidoctor/tabs' - sourcemap: true -urls: - latest_version_segment: '' -runtime: - log: - failure_level: warn -ui: - bundle: - url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.3.6/ui-bundle.zip - snapshot: true diff --git a/local-antora-playbook.yml b/local-antora-playbook.yml deleted file mode 100644 index b06e91335bd..00000000000 --- a/local-antora-playbook.yml +++ /dev/null @@ -1,34 +0,0 @@ -antora: - extensions: - - ./lib/antora/extensions/inject-collector-config.js - - '@antora/collector-extension' - - ./lib/antora/extensions/version-fix.js - - '@opendevise/antora-release-line-extension' - - require: '@springio/antora-extensions/tabs-migration-extension' - # uncomment this option to save the migrated content to the worktree - #save_result: true - unwrap_example_block: always -site: - title: Spring Security - url: https://docs.spring.io/spring-security/reference -content: - sources: - - url: . - branches: [main, '5.{{6..9},{1..9}+({0..9})}.x', '6.+({0..9}).x'] - worktrees: true # automatically discovers worktrees, if present; otherwise, will use git tree - tags: ['5.{{6..9},{1..9}+({0..9})}.+({0..9})?(-RC+({0..9}))', '6.+({0..9}).+({0..9})?(-{RC,M}*)'] - start_path: docs -asciidoc: - attributes: - page-pagination: '' - hide-uri-scheme: '@' - tabs-sync-option: '@' - extensions: - - '@asciidoctor/tabs' - - '@springio/asciidoctor-extensions' -urls: - latest_version_segment: '' -ui: - bundle: - url: https://github.com/spring-io/antora-ui-spring/releases/download/latest/ui-bundle.zip - snapshot: true From 2e72c2a174172cb5e5bf21364b8e1da98d455f2c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Jul 2024 01:09:41 +0000 Subject: [PATCH 133/178] Bump antora from 3.2.0-alpha.4 to 3.2.0-alpha.5 Bumps [antora](https://gitlab.com/antora/antora) from 3.2.0-alpha.4 to 3.2.0-alpha.5. - [Changelog](https://gitlab.com/antora/antora/blob/main/CHANGELOG.adoc) - [Commits](https://gitlab.com/antora/antora/compare/v3.2.0-alpha.4...v3.2.0-alpha.5) --- updated-dependencies: - dependency-name: antora dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d4fa935fa78..0e1b0a600e8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "dependencies": { - "antora": "3.2.0-alpha.4", + "antora": "3.2.0-alpha.5", "@antora/atlas-extension": "1.0.0-alpha.2", "@antora/collector-extension": "1.0.0-alpha.4", "@asciidoctor/tabs": "1.0.0-beta.6", From 536c12703e2ae415bef82ed545d93802d8ce4875 Mon Sep 17 00:00:00 2001 From: Rob Winch <362503+rwinch@users.noreply.github.com> Date: Tue, 9 Jul 2024 22:37:48 -0500 Subject: [PATCH 134/178] Update to asciidoctor-extensions 1.0.0-alpha.11 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0e1b0a600e8..843e97b8e3b 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,6 @@ "@antora/collector-extension": "1.0.0-alpha.4", "@asciidoctor/tabs": "1.0.0-beta.6", "@springio/antora-extensions": "1.11.1", - "@springio/asciidoctor-extensions": "1.0.0-alpha.10" + "@springio/asciidoctor-extensions": "1.0.0-alpha.11" } } From 891adb60f97d722d04b8613f06238e37cf5d923d Mon Sep 17 00:00:00 2001 From: Rob Winch <362503+rwinch@users.noreply.github.com> Date: Tue, 9 Jul 2024 22:38:03 -0500 Subject: [PATCH 135/178] Update to antora-extensions 1.12.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 843e97b8e3b..24797cedba8 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "@antora/atlas-extension": "1.0.0-alpha.2", "@antora/collector-extension": "1.0.0-alpha.4", "@asciidoctor/tabs": "1.0.0-beta.6", - "@springio/antora-extensions": "1.11.1", + "@springio/antora-extensions": "1.12.0", "@springio/asciidoctor-extensions": "1.0.0-alpha.11" } } From 3d48b7060fbd9058b8f2e63480e22c723e03d1be Mon Sep 17 00:00:00 2001 From: Rob Winch <362503+rwinch@users.noreply.github.com> Date: Tue, 9 Jul 2024 22:53:00 -0500 Subject: [PATCH 136/178] Add javadoc-extension --- antora-playbook.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/antora-playbook.yml b/antora-playbook.yml index e4aa4842b92..937827be2d3 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -24,6 +24,7 @@ asciidoc: extensions: - '@asciidoctor/tabs' - '@springio/asciidoctor-extensions' + - '@springio/asciidoctor-extensions/javadoc-extension' urls: latest_version_segment_strategy: redirect:to latest_version_segment: '' From 43edfccc25e4f8dbaa9291aee045b7facf0f90e4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Jul 2024 00:18:52 +0000 Subject: [PATCH 137/178] Bump @antora/collector-extension from 1.0.0-alpha.4 to 1.0.0-alpha.6 --- updated-dependencies: - dependency-name: "@antora/collector-extension" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 24797cedba8..54b3b6ce72f 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "dependencies": { "antora": "3.2.0-alpha.5", "@antora/atlas-extension": "1.0.0-alpha.2", - "@antora/collector-extension": "1.0.0-alpha.4", + "@antora/collector-extension": "1.0.0-alpha.6", "@asciidoctor/tabs": "1.0.0-beta.6", "@springio/antora-extensions": "1.12.0", "@springio/asciidoctor-extensions": "1.0.0-alpha.11" From ad14fed8d82f368899cfbc6f86e8dcb605781857 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 Jul 2024 00:23:47 +0000 Subject: [PATCH 138/178] Bump @antora/collector-extension from 1.0.0-alpha.6 to 1.0.0-alpha.7 --- updated-dependencies: - dependency-name: "@antora/collector-extension" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 54b3b6ce72f..ca5aa1188b5 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "dependencies": { "antora": "3.2.0-alpha.5", "@antora/atlas-extension": "1.0.0-alpha.2", - "@antora/collector-extension": "1.0.0-alpha.6", + "@antora/collector-extension": "1.0.0-alpha.7", "@asciidoctor/tabs": "1.0.0-beta.6", "@springio/antora-extensions": "1.12.0", "@springio/asciidoctor-extensions": "1.0.0-alpha.11" From a5cae32a72427a6bf9d4cacece5c9a34ebb6066d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 Jul 2024 00:24:51 +0000 Subject: [PATCH 139/178] Bump antora from 3.2.0-alpha.5 to 3.2.0-alpha.6 Bumps [antora](https://gitlab.com/antora/antora) from 3.2.0-alpha.5 to 3.2.0-alpha.6. - [Changelog](https://gitlab.com/antora/antora/blob/main/CHANGELOG.adoc) - [Commits](https://gitlab.com/antora/antora/compare/v3.2.0-alpha.5...v3.2.0-alpha.6) --- updated-dependencies: - dependency-name: antora dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ca5aa1188b5..1394c9d9f48 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "dependencies": { - "antora": "3.2.0-alpha.5", + "antora": "3.2.0-alpha.6", "@antora/atlas-extension": "1.0.0-alpha.2", "@antora/collector-extension": "1.0.0-alpha.7", "@asciidoctor/tabs": "1.0.0-beta.6", From 9fb2ceceb853d78418b9d4f1198a5980f788274c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 5 Aug 2024 00:51:32 +0000 Subject: [PATCH 140/178] Bump @springio/antora-extensions from 1.12.0 to 1.13.0 Bumps [@springio/antora-extensions](https://github.com/spring-io/antora-extensions) from 1.12.0 to 1.13.0. - [Changelog](https://github.com/spring-io/antora-extensions/blob/main/CHANGELOG.adoc) - [Commits](https://github.com/spring-io/antora-extensions/compare/v1.12.0...v1.13.0) --- updated-dependencies: - dependency-name: "@springio/antora-extensions" dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1394c9d9f48..057a40fe8b0 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "@antora/atlas-extension": "1.0.0-alpha.2", "@antora/collector-extension": "1.0.0-alpha.7", "@asciidoctor/tabs": "1.0.0-beta.6", - "@springio/antora-extensions": "1.12.0", + "@springio/antora-extensions": "1.13.0", "@springio/asciidoctor-extensions": "1.0.0-alpha.11" } } From ac2dd3863d7abb2da6ddd66cb1ff83f06cdc4d76 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 5 Aug 2024 00:52:27 +0000 Subject: [PATCH 141/178] Bump @springio/asciidoctor-extensions Bumps [@springio/asciidoctor-extensions](https://github.com/spring-io/asciidoctor-extensions) from 1.0.0-alpha.11 to 1.0.0-alpha.12. - [Changelog](https://github.com/spring-io/asciidoctor-extensions/blob/main/CHANGELOG.adoc) - [Commits](https://github.com/spring-io/asciidoctor-extensions/compare/v1.0.0-alpha.11...v1.0.0-alpha.12) --- updated-dependencies: - dependency-name: "@springio/asciidoctor-extensions" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 057a40fe8b0..60694d7480c 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,6 @@ "@antora/collector-extension": "1.0.0-alpha.7", "@asciidoctor/tabs": "1.0.0-beta.6", "@springio/antora-extensions": "1.13.0", - "@springio/asciidoctor-extensions": "1.0.0-alpha.11" + "@springio/asciidoctor-extensions": "1.0.0-alpha.12" } } From 5885bd6f95db67f829f877e608aa166ca484778f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Aug 2024 00:07:39 +0000 Subject: [PATCH 142/178] Bump @antora/collector-extension from 1.0.0-alpha.7 to 1.0.0-beta.1 --- updated-dependencies: - dependency-name: "@antora/collector-extension" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 60694d7480c..9a7205a6c87 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "dependencies": { "antora": "3.2.0-alpha.6", "@antora/atlas-extension": "1.0.0-alpha.2", - "@antora/collector-extension": "1.0.0-alpha.7", + "@antora/collector-extension": "1.0.0-beta.1", "@asciidoctor/tabs": "1.0.0-beta.6", "@springio/antora-extensions": "1.13.0", "@springio/asciidoctor-extensions": "1.0.0-alpha.12" From 342f7f89a163858f2789370df4321d1c889f50a7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Aug 2024 00:07:51 +0000 Subject: [PATCH 143/178] Bump @springio/antora-extensions from 1.13.0 to 1.13.1 Bumps [@springio/antora-extensions](https://github.com/spring-io/antora-extensions) from 1.13.0 to 1.13.1. - [Changelog](https://github.com/spring-io/antora-extensions/blob/main/CHANGELOG.adoc) - [Commits](https://github.com/spring-io/antora-extensions/compare/v1.13.0...v1.13.1) --- updated-dependencies: - dependency-name: "@springio/antora-extensions" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 9a7205a6c87..ec5c698821a 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "@antora/atlas-extension": "1.0.0-alpha.2", "@antora/collector-extension": "1.0.0-beta.1", "@asciidoctor/tabs": "1.0.0-beta.6", - "@springio/antora-extensions": "1.13.0", + "@springio/antora-extensions": "1.13.1", "@springio/asciidoctor-extensions": "1.0.0-alpha.12" } } From 8f681accb7b84f06c1fddb14747ae161403e4421 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Aug 2024 00:16:37 +0000 Subject: [PATCH 144/178] Bump @springio/antora-extensions from 1.13.1 to 1.14.2 Bumps [@springio/antora-extensions](https://github.com/spring-io/antora-extensions) from 1.13.1 to 1.14.2. - [Changelog](https://github.com/spring-io/antora-extensions/blob/main/CHANGELOG.adoc) - [Commits](https://github.com/spring-io/antora-extensions/compare/v1.13.1...v1.14.2) --- updated-dependencies: - dependency-name: "@springio/antora-extensions" dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ec5c698821a..405a8f0c954 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "@antora/atlas-extension": "1.0.0-alpha.2", "@antora/collector-extension": "1.0.0-beta.1", "@asciidoctor/tabs": "1.0.0-beta.6", - "@springio/antora-extensions": "1.13.1", + "@springio/antora-extensions": "1.14.2", "@springio/asciidoctor-extensions": "1.0.0-alpha.12" } } From 7a7aed07afc5b228f926038c6133934abd644fee Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Aug 2024 00:22:02 +0000 Subject: [PATCH 145/178] Bump @antora/collector-extension from 1.0.0-beta.1 to 1.0.0-beta.2 --- updated-dependencies: - dependency-name: "@antora/collector-extension" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 405a8f0c954..0e7ff00dd8e 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "dependencies": { "antora": "3.2.0-alpha.6", "@antora/atlas-extension": "1.0.0-alpha.2", - "@antora/collector-extension": "1.0.0-beta.1", + "@antora/collector-extension": "1.0.0-beta.2", "@asciidoctor/tabs": "1.0.0-beta.6", "@springio/antora-extensions": "1.14.2", "@springio/asciidoctor-extensions": "1.0.0-alpha.12" From 3fae3e72b74f8b0ee33169479ded712c9a032fd3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 Sep 2024 00:38:36 +0000 Subject: [PATCH 146/178] Bump @springio/asciidoctor-extensions Bumps [@springio/asciidoctor-extensions](https://github.com/spring-io/asciidoctor-extensions) from 1.0.0-alpha.12 to 1.0.0-alpha.13. - [Changelog](https://github.com/spring-io/asciidoctor-extensions/blob/main/CHANGELOG.adoc) - [Commits](https://github.com/spring-io/asciidoctor-extensions/compare/v1.0.0-alpha.12...v1.0.0-alpha.13) --- updated-dependencies: - dependency-name: "@springio/asciidoctor-extensions" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0e7ff00dd8e..1b6f7bbf568 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,6 @@ "@antora/collector-extension": "1.0.0-beta.2", "@asciidoctor/tabs": "1.0.0-beta.6", "@springio/antora-extensions": "1.14.2", - "@springio/asciidoctor-extensions": "1.0.0-alpha.12" + "@springio/asciidoctor-extensions": "1.0.0-alpha.13" } } From 928b4147a4c2d29fff7ec1908762aa7979908f77 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Sep 2024 00:31:57 +0000 Subject: [PATCH 147/178] Bump @springio/asciidoctor-extensions Bumps [@springio/asciidoctor-extensions](https://github.com/spring-io/asciidoctor-extensions) from 1.0.0-alpha.13 to 1.0.0-alpha.14. - [Changelog](https://github.com/spring-io/asciidoctor-extensions/blob/main/CHANGELOG.adoc) - [Commits](https://github.com/spring-io/asciidoctor-extensions/compare/v1.0.0-alpha.13...v1.0.0-alpha.14) --- updated-dependencies: - dependency-name: "@springio/asciidoctor-extensions" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1b6f7bbf568..78c6f3c48ab 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,6 @@ "@antora/collector-extension": "1.0.0-beta.2", "@asciidoctor/tabs": "1.0.0-beta.6", "@springio/antora-extensions": "1.14.2", - "@springio/asciidoctor-extensions": "1.0.0-alpha.13" + "@springio/asciidoctor-extensions": "1.0.0-alpha.14" } } From be4fafde5d009df36ea2128b89d9d3a6ad8e668f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 14 Oct 2024 00:59:43 +0000 Subject: [PATCH 148/178] Bump @antora/collector-extension from 1.0.0-beta.2 to 1.0.0-beta.3 --- updated-dependencies: - dependency-name: "@antora/collector-extension" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 78c6f3c48ab..1c8155de05e 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "dependencies": { "antora": "3.2.0-alpha.6", "@antora/atlas-extension": "1.0.0-alpha.2", - "@antora/collector-extension": "1.0.0-beta.2", + "@antora/collector-extension": "1.0.0-beta.3", "@asciidoctor/tabs": "1.0.0-beta.6", "@springio/antora-extensions": "1.14.2", "@springio/asciidoctor-extensions": "1.0.0-alpha.14" From 72f0f4eb74b2b6c13e3b01dbe38ecfe1547f2d77 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 16 Oct 2024 10:06:43 +0000 Subject: [PATCH 149/178] Update Antora Spring UI to v0.4.17 --- antora-playbook.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/antora-playbook.yml b/antora-playbook.yml index 937827be2d3..c2402173d3d 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -31,7 +31,7 @@ urls: redirect_facility: httpd ui: bundle: - url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.4.16/ui-bundle.zip + url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.4.17/ui-bundle.zip snapshot: true runtime: log: From 0701464480407ad3dc2641a341aedadf70f12ab7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Nov 2024 00:47:59 +0000 Subject: [PATCH 150/178] Bump @antora/collector-extension from 1.0.0-beta.3 to 1.0.0-beta.4 --- updated-dependencies: - dependency-name: "@antora/collector-extension" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1c8155de05e..cff679751ec 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "dependencies": { "antora": "3.2.0-alpha.6", "@antora/atlas-extension": "1.0.0-alpha.2", - "@antora/collector-extension": "1.0.0-beta.3", + "@antora/collector-extension": "1.0.0-beta.4", "@asciidoctor/tabs": "1.0.0-beta.6", "@springio/antora-extensions": "1.14.2", "@springio/asciidoctor-extensions": "1.0.0-alpha.14" From ed3fffcf48d4e65460b78231a590e3f95a0facdb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Nov 2024 00:49:04 +0000 Subject: [PATCH 151/178] Bump @antora/collector-extension from 1.0.0-beta.4 to 1.0.0-beta.5 --- updated-dependencies: - dependency-name: "@antora/collector-extension" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index cff679751ec..2054ec1c593 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "dependencies": { "antora": "3.2.0-alpha.6", "@antora/atlas-extension": "1.0.0-alpha.2", - "@antora/collector-extension": "1.0.0-beta.4", + "@antora/collector-extension": "1.0.0-beta.5", "@asciidoctor/tabs": "1.0.0-beta.6", "@springio/antora-extensions": "1.14.2", "@springio/asciidoctor-extensions": "1.0.0-alpha.14" From 5bbb75923c56af9527ad1fc5294d3eb5290c8b1a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 16 Nov 2024 10:06:10 +0000 Subject: [PATCH 152/178] Update Antora Spring UI to v0.4.18 --- antora-playbook.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/antora-playbook.yml b/antora-playbook.yml index c2402173d3d..e8977e2019a 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -31,7 +31,7 @@ urls: redirect_facility: httpd ui: bundle: - url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.4.17/ui-bundle.zip + url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.4.18/ui-bundle.zip snapshot: true runtime: log: From 5c7651012a0d684bb3e668683a893a920bd02612 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 25 Nov 2024 00:42:36 +0000 Subject: [PATCH 153/178] Bump @antora/collector-extension from 1.0.0-beta.5 to 1.0.0-rc.1 --- updated-dependencies: - dependency-name: "@antora/collector-extension" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2054ec1c593..e63fe5321de 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "dependencies": { "antora": "3.2.0-alpha.6", "@antora/atlas-extension": "1.0.0-alpha.2", - "@antora/collector-extension": "1.0.0-beta.5", + "@antora/collector-extension": "1.0.0-rc.1", "@asciidoctor/tabs": "1.0.0-beta.6", "@springio/antora-extensions": "1.14.2", "@springio/asciidoctor-extensions": "1.0.0-alpha.14" From 009bfd3c4486ca5c2de8d62bcd3d044ea1cedee8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Dec 2024 00:53:30 +0000 Subject: [PATCH 154/178] Bump @antora/collector-extension from 1.0.0-rc.1 to 1.0.0 --- updated-dependencies: - dependency-name: "@antora/collector-extension" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e63fe5321de..a41cc3cb8cb 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "dependencies": { "antora": "3.2.0-alpha.6", "@antora/atlas-extension": "1.0.0-alpha.2", - "@antora/collector-extension": "1.0.0-rc.1", + "@antora/collector-extension": "1.0.0", "@asciidoctor/tabs": "1.0.0-beta.6", "@springio/antora-extensions": "1.14.2", "@springio/asciidoctor-extensions": "1.0.0-alpha.14" From 4f929d1a8f2393d03fc20a6134888af14c1e8a17 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 Dec 2024 00:12:31 +0000 Subject: [PATCH 155/178] Bump @antora/collector-extension from 1.0.0 to 1.0.1 --- updated-dependencies: - dependency-name: "@antora/collector-extension" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a41cc3cb8cb..b7f45b0e92a 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "dependencies": { "antora": "3.2.0-alpha.6", "@antora/atlas-extension": "1.0.0-alpha.2", - "@antora/collector-extension": "1.0.0", + "@antora/collector-extension": "1.0.1", "@asciidoctor/tabs": "1.0.0-beta.6", "@springio/antora-extensions": "1.14.2", "@springio/asciidoctor-extensions": "1.0.0-alpha.14" From 5e0aa3e29f79cd2f11c2a13027366a540f15d6bd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 Dec 2024 00:12:41 +0000 Subject: [PATCH 156/178] Bump antora from 3.2.0-alpha.6 to 3.2.0-alpha.8 Bumps [antora](https://gitlab.com/antora/antora) from 3.2.0-alpha.6 to 3.2.0-alpha.8. - [Changelog](https://gitlab.com/antora/antora/blob/main/CHANGELOG.adoc) - [Commits](https://gitlab.com/antora/antora/compare/v3.2.0-alpha.6...v3.2.0-alpha.8) --- updated-dependencies: - dependency-name: antora dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b7f45b0e92a..567c1f3a680 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "dependencies": { - "antora": "3.2.0-alpha.6", + "antora": "3.2.0-alpha.8", "@antora/atlas-extension": "1.0.0-alpha.2", "@antora/collector-extension": "1.0.1", "@asciidoctor/tabs": "1.0.0-beta.6", From 301f447680a695e7e7de34caaf807c7b112b3e31 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Feb 2025 01:00:09 +0000 Subject: [PATCH 157/178] Bump @springio/asciidoctor-extensions Bumps [@springio/asciidoctor-extensions](https://github.com/spring-io/asciidoctor-extensions) from 1.0.0-alpha.14 to 1.0.0-alpha.16. - [Changelog](https://github.com/spring-io/asciidoctor-extensions/blob/main/CHANGELOG.adoc) - [Commits](https://github.com/spring-io/asciidoctor-extensions/compare/v1.0.0-alpha.14...v1.0.0-alpha.16) --- updated-dependencies: - dependency-name: "@springio/asciidoctor-extensions" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 567c1f3a680..1e55982d930 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,6 @@ "@antora/collector-extension": "1.0.1", "@asciidoctor/tabs": "1.0.0-beta.6", "@springio/antora-extensions": "1.14.2", - "@springio/asciidoctor-extensions": "1.0.0-alpha.14" + "@springio/asciidoctor-extensions": "1.0.0-alpha.16" } } From 42a6b9f57ee036e4bfa6e9569545c93853679b79 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Feb 2025 01:26:37 +0000 Subject: [PATCH 158/178] Bump @springio/antora-extensions from 1.14.2 to 1.14.4 Bumps [@springio/antora-extensions](https://github.com/spring-io/antora-extensions) from 1.14.2 to 1.14.4. - [Changelog](https://github.com/spring-io/antora-extensions/blob/main/CHANGELOG.adoc) - [Commits](https://github.com/spring-io/antora-extensions/compare/v1.14.2...v1.14.4) --- updated-dependencies: - dependency-name: "@springio/antora-extensions" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1e55982d930..6c97a4ccb9c 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "@antora/atlas-extension": "1.0.0-alpha.2", "@antora/collector-extension": "1.0.1", "@asciidoctor/tabs": "1.0.0-beta.6", - "@springio/antora-extensions": "1.14.2", + "@springio/antora-extensions": "1.14.4", "@springio/asciidoctor-extensions": "1.0.0-alpha.16" } } From 6e540b20b70171262529c42a6ee0dea44cad7ff0 Mon Sep 17 00:00:00 2001 From: Rob Winch <362503+rwinch@users.noreply.github.com> Date: Fri, 21 Mar 2025 14:30:57 -0500 Subject: [PATCH 159/178] Update to spring-doc-actions v0.0.19 Closes gh-16797 --- .github/workflows/deploy-docs.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index 4eec479e34e..2e5d60a02c1 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -36,14 +36,14 @@ jobs: - name: Copy the cache to be included in the site run: cp -rf build/antora/inject-collector-cache-config-extension/.cache build/site/ - name: Publish Docs - uses: spring-io/spring-doc-actions/rsync-antora-reference@v0.0.18 + uses: spring-io/spring-doc-actions/rsync-antora-reference@v0.0.19 with: docs-username: ${{ secrets.DOCS_USERNAME }} docs-host: ${{ secrets.DOCS_HOST }} docs-ssh-key: ${{ secrets.DOCS_SSH_KEY }} docs-ssh-host-key: ${{ secrets.DOCS_SSH_HOST_KEY }} - name: Bust Clouflare Cache - uses: spring-io/spring-doc-actions/bust-cloudflare-antora-cache@v0.0.18 + uses: spring-io/spring-doc-actions/bust-cloudflare-antora-cache@v0.0.19 with: context-root: spring-security cloudflare-zone-id: ${{ secrets.CLOUDFLARE_ZONE_ID }} From 93f7296492242989849ee09a531a30af7f1071c0 Mon Sep 17 00:00:00 2001 From: Rob Winch <362503+rwinch@users.noreply.github.com> Date: Fri, 21 Mar 2025 14:42:37 -0500 Subject: [PATCH 160/178] rm Unsupported Branches from Antora --- antora-playbook.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/antora-playbook.yml b/antora-playbook.yml index e8977e2019a..6fb5b323dbd 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -11,7 +11,7 @@ git: content: sources: - url: https://github.com/spring-projects/spring-security - branches: [main, '5.{{6..9},{1..9}+({0..9})}.x', '6.+({0..9}).x'] + branches: [main, '6.+({3..9}).x'] tags: ['5.{{6..9},{1..9}+({0..9})}.{0..99}?(-RC+({0..9}))', '6.+({0..9}).+({0..9})?(-{RC,M}*)','!(5.6.{0..10}*)', '!(5.7.{0..8}*)', '!(5.8.{0..3}?({-RC,-M}+({0..9})))','!(6.0.{0..3}*)','!(6.1.0*)'] start_path: docs asciidoc: From 8f83df832160a7fee0fd5193d10fb2126e604eb9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Mar 2025 01:34:59 +0000 Subject: [PATCH 161/178] Bump @springio/asciidoctor-extensions Bumps [@springio/asciidoctor-extensions](https://github.com/spring-io/asciidoctor-extensions) from 1.0.0-alpha.16 to 1.0.0-alpha.17. - [Changelog](https://github.com/spring-io/asciidoctor-extensions/blob/main/CHANGELOG.adoc) - [Commits](https://github.com/spring-io/asciidoctor-extensions/compare/v1.0.0-alpha.16...v1.0.0-alpha.17) --- updated-dependencies: - dependency-name: "@springio/asciidoctor-extensions" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6c97a4ccb9c..1e4c440b6c5 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,6 @@ "@antora/collector-extension": "1.0.1", "@asciidoctor/tabs": "1.0.0-beta.6", "@springio/antora-extensions": "1.14.4", - "@springio/asciidoctor-extensions": "1.0.0-alpha.16" + "@springio/asciidoctor-extensions": "1.0.0-alpha.17" } } From 92225c8b8d126729d331096ba5299c58e3bcca34 Mon Sep 17 00:00:00 2001 From: Rob Winch <362503+rwinch@users.noreply.github.com> Date: Thu, 3 Apr 2025 12:56:42 -0500 Subject: [PATCH 162/178] Update to spring-doc-actions 0.0.20 Signed-off-by: Rob Winch <362503+rwinch@users.noreply.github.com> --- .github/workflows/deploy-docs.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index 2e5d60a02c1..449e0870003 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -36,14 +36,14 @@ jobs: - name: Copy the cache to be included in the site run: cp -rf build/antora/inject-collector-cache-config-extension/.cache build/site/ - name: Publish Docs - uses: spring-io/spring-doc-actions/rsync-antora-reference@v0.0.19 + uses: spring-io/spring-doc-actions/rsync-antora-reference@v0.0.20 with: docs-username: ${{ secrets.DOCS_USERNAME }} docs-host: ${{ secrets.DOCS_HOST }} docs-ssh-key: ${{ secrets.DOCS_SSH_KEY }} docs-ssh-host-key: ${{ secrets.DOCS_SSH_HOST_KEY }} - name: Bust Clouflare Cache - uses: spring-io/spring-doc-actions/bust-cloudflare-antora-cache@v0.0.19 + uses: spring-io/spring-doc-actions/bust-cloudflare-antora-cache@v0.0.20 with: context-root: spring-security cloudflare-zone-id: ${{ secrets.CLOUDFLARE_ZONE_ID }} From ec3df2ed66b42498aaf10c0d6d21c052171dcd7f Mon Sep 17 00:00:00 2001 From: Rob Winch <362503+rwinch@users.noreply.github.com> Date: Fri, 25 Apr 2025 12:45:45 -0500 Subject: [PATCH 163/178] Change Skip Condition Signed-off-by: Rob Winch <362503+rwinch@users.noreply.github.com> --- .github/workflows/merge-dependabot-pr.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/merge-dependabot-pr.yml b/.github/workflows/merge-dependabot-pr.yml index 2911c4644cd..af02cf9b54d 100644 --- a/.github/workflows/merge-dependabot-pr.yml +++ b/.github/workflows/merge-dependabot-pr.yml @@ -9,7 +9,7 @@ permissions: write-all jobs: merge-dependabot-pr: runs-on: ubuntu-latest - if: github.actor == 'dependabot[bot]' + if: github.event.pull_request.user.login == 'dependabot[bot]' steps: - uses: actions/checkout@v4 From 23008b97d4d78fddb333ede6f6673c845413229e Mon Sep 17 00:00:00 2001 From: Rob Winch <362503+rwinch@users.noreply.github.com> Date: Fri, 25 Apr 2025 13:02:25 -0500 Subject: [PATCH 164/178] Refine scopes Signed-off-by: Rob Winch <362503+rwinch@users.noreply.github.com> --- .github/workflows/merge-dependabot-pr.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/merge-dependabot-pr.yml b/.github/workflows/merge-dependabot-pr.yml index af02cf9b54d..491baff3293 100644 --- a/.github/workflows/merge-dependabot-pr.yml +++ b/.github/workflows/merge-dependabot-pr.yml @@ -4,7 +4,9 @@ on: pull_request_target run-name: Merge Dependabot PR ${{ github.ref_name }} -permissions: write-all +permissions: + pull-requests: write + contents: write jobs: merge-dependabot-pr: From f5d53c31b0cce06aed86fd3338f3ee28750088c4 Mon Sep 17 00:00:00 2001 From: Rob Winch <362503+rwinch@users.noreply.github.com> Date: Fri, 2 May 2025 11:56:25 -0500 Subject: [PATCH 165/178] Add codeql.yml --- .github/workflows/codeql.yml | 80 ++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 .github/workflows/codeql.yml diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml new file mode 100644 index 00000000000..4c98186dd3d --- /dev/null +++ b/.github/workflows/codeql.yml @@ -0,0 +1,80 @@ +# For most projects, this workflow file will not need changing; you simply need +# to commit it to your repository. +# +# You may wish to alter this file to override the set of languages analyzed, +# or to provide custom queries or build logic. +# +# ******** NOTE ******** +# We have attempted to detect the languages in your repository. Please check +# the `language` matrix defined below to confirm you have the correct set of +# supported CodeQL languages. +# +name: "CodeQL Advanced" + +on: + push: # run if we update the workflow + workflow_dispatch: + schedule: + - cron: '39 13 * * 4' + +jobs: + analyze: + name: Analyze (${{ matrix.language }}) + # Runner size impacts CodeQL analysis time. To learn more, please see: + # - https://gh.io/recommended-hardware-resources-for-running-codeql + # - https://gh.io/supported-runners-and-hardware-resources + # - https://gh.io/using-larger-runners (GitHub.com only) + # Consider using larger runners or machines with greater resources for possible analysis time improvements. + runs-on: ubuntu-latest + permissions: + # required for all workflows + security-events: write + + # required to fetch internal or private CodeQL packs + packages: read + + # only required for workflows in private repositories + actions: read + contents: read + + strategy: + fail-fast: false + matrix: + include: + - language: actions + build-mode: none + # CodeQL supports the following values keywords for 'language': 'actions', 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'swift' + # Use `c-cpp` to analyze code written in C, C++ or both + # Use 'java-kotlin' to analyze code written in Java, Kotlin or both + # Use 'javascript-typescript' to analyze code written in JavaScript, TypeScript or both + # To learn more about changing the languages that are analyzed or customizing the build mode for your analysis, + # see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning. + # If you are analyzing a compiled language, you can modify the 'build-mode' for that language to customize how + # your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + # Add any setup steps before running the `github/codeql-action/init` action. + # This includes steps like installing compilers or runtimes (`actions/setup-node` + # or others). This is typically only required for manual builds. + # - name: Setup runtime (example) + # uses: actions/setup-example@v1 + + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@v3 + with: + languages: ${{ matrix.language }} + build-mode: ${{ matrix.build-mode }} + # If you wish to specify custom queries, you can do so here or in a config file. + # By default, queries listed here will override any specified in a config file. + # Prefix the list here with "+" to use these queries and those in the config file. + + # For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs + queries: security-extended,security-and-quality + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v3 + with: + category: "/language:${{matrix.language}}" From 90258a5a85940f6657f3d26916eb40c328253f4b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 14 Jul 2025 00:25:50 +0000 Subject: [PATCH 166/178] Bump @springio/antora-extensions from 1.14.4 to 1.14.6 Bumps [@springio/antora-extensions](https://github.com/spring-io/antora-extensions) from 1.14.4 to 1.14.6. - [Changelog](https://github.com/spring-io/antora-extensions/blob/main/CHANGELOG.adoc) - [Commits](https://github.com/spring-io/antora-extensions/compare/v1.14.4...v1.14.6) --- updated-dependencies: - dependency-name: "@springio/antora-extensions" dependency-version: 1.14.6 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1e4c440b6c5..0458fda7c3b 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "@antora/atlas-extension": "1.0.0-alpha.2", "@antora/collector-extension": "1.0.1", "@asciidoctor/tabs": "1.0.0-beta.6", - "@springio/antora-extensions": "1.14.4", + "@springio/antora-extensions": "1.14.6", "@springio/asciidoctor-extensions": "1.0.0-alpha.17" } } From 38549ca60a872b731c3a1d648681324b376a4a67 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 21 Jul 2025 00:29:26 +0000 Subject: [PATCH 167/178] Bump @springio/antora-extensions from 1.14.6 to 1.14.7 Bumps [@springio/antora-extensions](https://github.com/spring-io/antora-extensions) from 1.14.6 to 1.14.7. - [Changelog](https://github.com/spring-io/antora-extensions/blob/main/CHANGELOG.adoc) - [Commits](https://github.com/spring-io/antora-extensions/compare/v1.14.6...v1.14.7) --- updated-dependencies: - dependency-name: "@springio/antora-extensions" dependency-version: 1.14.7 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0458fda7c3b..188de70f1ee 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "@antora/atlas-extension": "1.0.0-alpha.2", "@antora/collector-extension": "1.0.1", "@asciidoctor/tabs": "1.0.0-beta.6", - "@springio/antora-extensions": "1.14.6", + "@springio/antora-extensions": "1.14.7", "@springio/asciidoctor-extensions": "1.0.0-alpha.17" } } From 9aa28236cd6e07efadd9e130a97e9c3df691a343 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 14 Aug 2025 22:08:39 +0000 Subject: [PATCH 168/178] Bump actions/checkout from 4 to 5 Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 5. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v4...v5) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: '5' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/codeql.yml | 2 +- .github/workflows/deploy-docs.yml | 2 +- .github/workflows/merge-dependabot-pr.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 4c98186dd3d..cdbafcc88a2 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -53,7 +53,7 @@ jobs: # your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 # Add any setup steps before running the `github/codeql-action/init` action. # This includes steps like installing compilers or runtimes (`actions/setup-node` diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index 449e0870003..fc047c8f8a1 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -17,7 +17,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: fetch-depth: 5 - name: Set Up Gradle diff --git a/.github/workflows/merge-dependabot-pr.yml b/.github/workflows/merge-dependabot-pr.yml index 491baff3293..b62c8167683 100644 --- a/.github/workflows/merge-dependabot-pr.yml +++ b/.github/workflows/merge-dependabot-pr.yml @@ -14,7 +14,7 @@ jobs: if: github.event.pull_request.user.login == 'dependabot[bot]' steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: show-progress: false ref: ${{ github.event.pull_request.head.sha }} From d3e0e197e8cabbdc438f4fc5ea012805410075b9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 14 Aug 2025 22:08:56 +0000 Subject: [PATCH 169/178] Bump antora from 3.2.0-alpha.8 to 3.2.0-alpha.9 Bumps [antora](https://gitlab.com/antora/antora) from 3.2.0-alpha.8 to 3.2.0-alpha.9. - [Changelog](https://gitlab.com/antora/antora/blob/main/CHANGELOG.adoc) - [Commits](https://gitlab.com/antora/antora/compare/v3.2.0-alpha.8...v3.2.0-alpha.9) --- updated-dependencies: - dependency-name: antora dependency-version: 3.2.0-alpha.9 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 188de70f1ee..322ab9447b5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "dependencies": { - "antora": "3.2.0-alpha.8", + "antora": "3.2.0-alpha.9", "@antora/atlas-extension": "1.0.0-alpha.2", "@antora/collector-extension": "1.0.1", "@asciidoctor/tabs": "1.0.0-beta.6", From cdcc9130a1a9d379e2cbe08133ca8d5e8e68878c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 14 Aug 2025 22:10:14 +0000 Subject: [PATCH 170/178] Bump @antora/collector-extension from 1.0.1 to 1.0.2 --- updated-dependencies: - dependency-name: "@antora/collector-extension" dependency-version: 1.0.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 322ab9447b5..3ec0e6c7cdd 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "dependencies": { "antora": "3.2.0-alpha.9", "@antora/atlas-extension": "1.0.0-alpha.2", - "@antora/collector-extension": "1.0.1", + "@antora/collector-extension": "1.0.2", "@asciidoctor/tabs": "1.0.0-beta.6", "@springio/antora-extensions": "1.14.7", "@springio/asciidoctor-extensions": "1.0.0-alpha.17" From 57dacd975f896d911eed1a73a4b0065fefc9743a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Sep 2025 00:10:36 +0000 Subject: [PATCH 171/178] Bump @antora/atlas-extension from 1.0.0-alpha.2 to 1.0.0-alpha.5 --- updated-dependencies: - dependency-name: "@antora/atlas-extension" dependency-version: 1.0.0-alpha.5 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3ec0e6c7cdd..778edda0f75 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "dependencies": { "antora": "3.2.0-alpha.9", - "@antora/atlas-extension": "1.0.0-alpha.2", + "@antora/atlas-extension": "1.0.0-alpha.5", "@antora/collector-extension": "1.0.2", "@asciidoctor/tabs": "1.0.0-beta.6", "@springio/antora-extensions": "1.14.7", From 1a96ec4539b6c95f95bb67f0505a37bcb0f88e70 Mon Sep 17 00:00:00 2001 From: Rob Winch <362503+rwinch@users.noreply.github.com> Date: Mon, 22 Sep 2025 10:32:34 -0500 Subject: [PATCH 172/178] Update branches/tags for 7.x --- antora-playbook.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/antora-playbook.yml b/antora-playbook.yml index 6fb5b323dbd..5983b97a51f 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -11,8 +11,8 @@ git: content: sources: - url: https://github.com/spring-projects/spring-security - branches: [main, '6.+({3..9}).x'] - tags: ['5.{{6..9},{1..9}+({0..9})}.{0..99}?(-RC+({0..9}))', '6.+({0..9}).+({0..9})?(-{RC,M}*)','!(5.6.{0..10}*)', '!(5.7.{0..8}*)', '!(5.8.{0..3}?({-RC,-M}+({0..9})))','!(6.0.{0..3}*)','!(6.1.0*)'] + branches: [main, '6.{4..5}.x', '{7..99}.*.x'] + tags: ['6.{4..5}.*','{7..99}.*'] start_path: docs asciidoc: attributes: From 8316c38b1e4505ba8684b2363f986c5623ea5574 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Oct 2025 00:12:50 +0000 Subject: [PATCH 173/178] Bump antora from 3.2.0-alpha.9 to 3.2.0-alpha.10 Bumps [antora](https://gitlab.com/antora/antora) from 3.2.0-alpha.9 to 3.2.0-alpha.10. - [Changelog](https://gitlab.com/antora/antora/blob/main/CHANGELOG.adoc) - [Commits](https://gitlab.com/antora/antora/compare/v3.2.0-alpha.9...v3.2.0-alpha.10) --- updated-dependencies: - dependency-name: antora dependency-version: 3.2.0-alpha.10 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 778edda0f75..f74946f205b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "dependencies": { - "antora": "3.2.0-alpha.9", + "antora": "3.2.0-alpha.10", "@antora/atlas-extension": "1.0.0-alpha.5", "@antora/collector-extension": "1.0.2", "@asciidoctor/tabs": "1.0.0-beta.6", From 0a540d2cb0042ac88494a5902ca2be3d042834ba Mon Sep 17 00:00:00 2001 From: Rob Winch <362503+rwinch@users.noreply.github.com> Date: Tue, 11 Nov 2025 11:05:36 -0600 Subject: [PATCH 174/178] Update to antora-ui-spring v0.4.19 --- antora-playbook.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/antora-playbook.yml b/antora-playbook.yml index 5983b97a51f..91b4c2e56b9 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -31,7 +31,7 @@ urls: redirect_facility: httpd ui: bundle: - url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.4.18/ui-bundle.zip + url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.4.19/ui-bundle.zip snapshot: true runtime: log: From cc6f1d65b2057e204a53e95c92808fd039d40f56 Mon Sep 17 00:00:00 2001 From: Rob Winch <362503+rwinch@users.noreply.github.com> Date: Wed, 12 Nov 2025 08:08:14 -0600 Subject: [PATCH 175/178] Update to antora-ui-spring 0.4.20 --- antora-playbook.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/antora-playbook.yml b/antora-playbook.yml index 91b4c2e56b9..0a6f0cfcad8 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -31,7 +31,7 @@ urls: redirect_facility: httpd ui: bundle: - url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.4.19/ui-bundle.zip + url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.4.20/ui-bundle.zip snapshot: true runtime: log: From 9f214978a4e49b2cf5b263e2078b5f47cc170ac7 Mon Sep 17 00:00:00 2001 From: Rob Winch <362503+rwinch@users.noreply.github.com> Date: Thu, 13 Nov 2025 14:19:24 -0600 Subject: [PATCH 176/178] Update to spring-doc-actions 0.0.21 --- .github/workflows/deploy-docs.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index fc047c8f8a1..41e746344ba 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -36,14 +36,14 @@ jobs: - name: Copy the cache to be included in the site run: cp -rf build/antora/inject-collector-cache-config-extension/.cache build/site/ - name: Publish Docs - uses: spring-io/spring-doc-actions/rsync-antora-reference@v0.0.20 + uses: spring-io/spring-doc-actions/rsync-antora-reference@v0.0.21 with: docs-username: ${{ secrets.DOCS_USERNAME }} docs-host: ${{ secrets.DOCS_HOST }} docs-ssh-key: ${{ secrets.DOCS_SSH_KEY }} docs-ssh-host-key: ${{ secrets.DOCS_SSH_HOST_KEY }} - name: Bust Clouflare Cache - uses: spring-io/spring-doc-actions/bust-cloudflare-antora-cache@v0.0.20 + uses: spring-io/spring-doc-actions/bust-cloudflare-antora-cache@v0.0.21 with: context-root: spring-security cloudflare-zone-id: ${{ secrets.CLOUDFLARE_ZONE_ID }} From 38702d4eb9c65714aa85d76ab273b4d0a8d9f0ed Mon Sep 17 00:00:00 2001 From: Rob Winch <362503+rwinch@users.noreply.github.com> Date: Wed, 19 Nov 2025 11:19:43 -0600 Subject: [PATCH 177/178] Update to antora-ui 0.4.21 --- antora-playbook.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/antora-playbook.yml b/antora-playbook.yml index 0a6f0cfcad8..f349c25639b 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -31,7 +31,7 @@ urls: redirect_facility: httpd ui: bundle: - url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.4.20/ui-bundle.zip + url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.4.21/ui-bundle.zip snapshot: true runtime: log: From 29bf045c6578f87ab82bc143b3da71d2f67391a0 Mon Sep 17 00:00:00 2001 From: Rob Winch <362503+rwinch@users.noreply.github.com> Date: Wed, 19 Nov 2025 17:22:07 -0600 Subject: [PATCH 178/178] Update to antora-ui-spring 0.4.22 --- antora-playbook.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/antora-playbook.yml b/antora-playbook.yml index f349c25639b..67a4dde1c7d 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -31,7 +31,7 @@ urls: redirect_facility: httpd ui: bundle: - url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.4.21/ui-bundle.zip + url: https://github.com/spring-io/antora-ui-spring/releases/download/v0.4.22/ui-bundle.zip snapshot: true runtime: log: