From 743e37e481fadba930c313b9e279f2b81328a73b Mon Sep 17 00:00:00 2001
From: Rob Winch <rwinch@users.noreply.github.com>
Date: Tue, 6 Sep 2022 14:57:12 -0500
Subject: [PATCH 001/167] Initial docs build branch


From c993da749c92e5fea194d61cdb0dd2db922c7b2b Mon Sep 17 00:00:00 2001
From: Dan Allen <dan@opendevise.com>
Date: Tue, 30 Aug 2022 15:58:27 -0600
Subject: [PATCH 002/167] 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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="CheckStyle-IDEA">
+    <option name="configuration">
+      <map>
+        <entry key="checkstyle-version" value="8.14" />
+        <entry key="copy-libs" value="false" />
+        <entry key="location-0" value="BUNDLED:(bundled):Sun Checks" />
+        <entry key="location-1" value="BUNDLED:(bundled):Google Checks" />
+        <entry key="scan-before-checkin" value="false" />
+        <entry key="scanscope" value="JavaOnlyWithTests" />
+        <entry key="suppress-errors" value="false" />
+      </map>
+    </option>
+  </component>
+</project>
\ 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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ExternalDependencies">
+    <plugin id="CheckStyle-IDEA" />
+    <plugin id="org.jetbrains.plugins.gradle" />
+  </component>
+</project>
\ 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
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 <dan@opendevise.com>
Date: Thu, 1 Sep 2022 14:03:36 -0600
Subject: [PATCH 003/167] 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 <dan@opendevise.com>
Date: Thu, 1 Sep 2022 17:51:37 -0600
Subject: [PATCH 004/167] 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 <dan@opendevise.com>
Date: Wed, 31 Aug 2022 02:51:42 -0600
Subject: [PATCH 005/167] 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 <dan@opendevise.com>
+ */
+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 <dan@opendevise.com>
Date: Tue, 6 Sep 2022 15:16:34 -0600
Subject: [PATCH 006/167] 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 <dan@opendevise.com>
Date: Thu, 8 Sep 2022 14:19:58 -0600
Subject: [PATCH 007/167] 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 <rwinch@users.noreply.github.com>
Date: Fri, 9 Sep 2022 13:05:25 -0500
Subject: [PATCH 008/167] 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 <rwinch@users.noreply.github.com>
Date: Fri, 9 Sep 2022 15:06:40 -0500
Subject: [PATCH 009/167] 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 <rwinch@users.noreply.github.com>
Date: Fri, 9 Sep 2022 15:09:40 -0500
Subject: [PATCH 010/167] 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 <rwinch@users.noreply.github.com>
Date: Fri, 9 Sep 2022 15:10:05 -0500
Subject: [PATCH 011/167] 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 <rwinch@users.noreply.github.com>
Date: Fri, 9 Sep 2022 15:12:40 -0500
Subject: [PATCH 012/167] 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 <dan@opendevise.com>
Date: Fri, 9 Sep 2022 14:24:51 -0600
Subject: [PATCH 013/167] 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 <dan@opendevise.com>
Date: Fri, 9 Sep 2022 16:06:36 -0600
Subject: [PATCH 014/167] 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 <dan@opendevise.com>
Date: Wed, 7 Sep 2022 18:34:22 -0600
Subject: [PATCH 015/167] 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 <sarah@opendevise.com>
Date: Fri, 16 Sep 2022 14:23:02 -0600
Subject: [PATCH 016/167] 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, <<prerequisites,install the prerequisites>> and then <<build-main,create your workspace and build the main branch documentation>>.
+Once you've completed those steps, follow the instructions in <<build-branch,Build the 5.8.x branch documentation>> 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 <<prerequisites,Prerequisites>>, <<build-main,Build the main branch documentation>>, and then <<build-production,Build the production documentation site>>.
+
+.Branch checkout instead of worktrees
+[NOTE]
+====
+If you prefer to set up your workspace without worktrees, complete the steps in <<prerequisites,Prerequisites>> 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,create your workspace>>.
+
+[#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 <<build-main,previous section>>.
+
+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 <<build-main,prepared your workspace and created the worktree for the main branch>>.
+
+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 <dan@opendevise.com>
Date: Mon, 26 Sep 2022 14:28:34 -0600
Subject: [PATCH 017/167] 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
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 <dan@opendevise.com>
Date: Fri, 30 Sep 2022 23:58:20 -0600
Subject: [PATCH 018/167] 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 <rwinch@users.noreply.github.com>
Date: Tue, 18 Oct 2022 13:29:52 -0500
Subject: [PATCH 019/167] 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 <rwinch@users.noreply.github.com>
Date: Tue, 18 Oct 2022 13:30:55 -0500
Subject: [PATCH 020/167] 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 <rwinch@users.noreply.github.com>
Date: Tue, 18 Oct 2022 13:31:54 -0500
Subject: [PATCH 021/167] 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 <dan@opendevise.com>
Date: Thu, 20 Oct 2022 16:27:08 -0600
Subject: [PATCH 022/167] 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 <dan@opendevise.com>
- */
-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 <dan@opendevise.com>
Date: Mon, 24 Oct 2022 18:26:56 -0600
Subject: [PATCH 023/167] 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 <dan@opendevise.com>
Date: Mon, 24 Oct 2022 18:07:29 -0600
Subject: [PATCH 024/167] 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 <dan@opendevise.com>
Date: Tue, 25 Oct 2022 17:45:52 -0600
Subject: [PATCH 025/167] 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 <dan@opendevise.com>
Date: Wed, 2 Nov 2022 17:29:58 -0600
Subject: [PATCH 026/167] 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 <dan@opendevise.com>
Date: Tue, 8 Nov 2022 16:12:04 -0700
Subject: [PATCH 027/167] 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 <dan@opendevise.com>
Date: Thu, 10 Nov 2022 16:24:57 -0700
Subject: [PATCH 028/167] 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 <dan@opendevise.com>
Date: Tue, 22 Nov 2022 08:06:56 -0700
Subject: [PATCH 029/167] 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 <dan@opendevise.com>
Date: Wed, 23 Nov 2022 17:43:16 -0700
Subject: [PATCH 030/167] 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 <dan@opendevise.com>
Date: Tue, 6 Dec 2022 14:17:36 -0700
Subject: [PATCH 031/167] 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 <dan@opendevise.com>
Date: Tue, 6 Dec 2022 15:12:33 -0700
Subject: [PATCH 032/167] 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 <dan@opendevise.com>
Date: Thu, 8 Dec 2022 17:14:28 -0700
Subject: [PATCH 033/167] 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 <dan@opendevise.com>
Date: Sun, 18 Dec 2022 17:44:34 -0700
Subject: [PATCH 034/167] 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 <dan@opendevise.com>
Date: Wed, 21 Dec 2022 12:57:51 -0700
Subject: [PATCH 035/167] 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 <dan@opendevise.com>
Date: Fri, 23 Dec 2022 04:48:33 -0700
Subject: [PATCH 036/167] 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 <dan@opendevise.com>
Date: Fri, 23 Dec 2022 04:57:23 -0700
Subject: [PATCH 037/167] 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 <dan@opendevise.com>
Date: Fri, 23 Dec 2022 13:47:45 -0700
Subject: [PATCH 038/167] 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 <dan@opendevise.com>
Date: Fri, 23 Dec 2022 15:57:35 -0700
Subject: [PATCH 039/167] 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 <dan@opendevise.com>
Date: Fri, 6 Jan 2023 14:12:37 -0700
Subject: [PATCH 040/167] 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 <dan@opendevise.com>
Date: Fri, 6 Jan 2023 16:12:06 -0700
Subject: [PATCH 041/167] 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 <dan@opendevise.com>
Date: Mon, 9 Jan 2023 17:44:01 -0700
Subject: [PATCH 042/167] 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 <dan@opendevise.com>
Date: Wed, 11 Jan 2023 00:52:03 -0700
Subject: [PATCH 043/167] 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 <dan@opendevise.com>
Date: Wed, 11 Jan 2023 03:04:03 -0700
Subject: [PATCH 044/167] 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 <dan@opendevise.com>
Date: Sat, 14 Jan 2023 02:13:21 -0700
Subject: [PATCH 045/167] 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 <dan@opendevise.com>
Date: Fri, 13 Jan 2023 16:29:12 -0700
Subject: [PATCH 046/167] 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 <rwinch@users.noreply.github.com>
Date: Wed, 18 Jan 2023 16:27:33 -0600
Subject: [PATCH 047/167] 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 <dan@opendevise.com>
Date: Tue, 17 Jan 2023 11:00:25 -0700
Subject: [PATCH 048/167] 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 <rwinch@users.noreply.github.com>
Date: Thu, 19 Jan 2023 22:07:45 -0600
Subject: [PATCH 049/167] 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 <rwinch@users.noreply.github.com>
Date: Fri, 20 Jan 2023 08:50:46 -0600
Subject: [PATCH 050/167] 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 <rwinch@users.noreply.github.com>
Date: Thu, 19 Jan 2023 23:11:29 -0600
Subject: [PATCH 051/167] --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 <rwinch@users.noreply.github.com>
Date: Fri, 20 Jan 2023 08:35:28 -0600
Subject: [PATCH 052/167] 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 <rwinch@users.noreply.github.com>
Date: Fri, 20 Jan 2023 13:17:37 -0600
Subject: [PATCH 053/167] 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 <dan@opendevise.com>
Date: Fri, 20 Jan 2023 18:50:05 -0700
Subject: [PATCH 054/167] 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 <dan@opendevise.com>
Date: Tue, 24 Jan 2023 12:52:44 -0700
Subject: [PATCH 055/167] 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, <<prerequisites,install the prerequisites>> and then <<build-main,create your workspace and build the main branch documentation>>.
-Once you've completed those steps, follow the instructions in <<build-branch,Build the 5.8.x branch documentation>> 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 <<prerequisites,Prerequisites>>, <<build-main,Build the main branch documentation>>, and then <<build-production,Build the production documentation site>>.
+To prepare your system for building the documentation, <<prerequisites,install the prerequisites>>, then <<prepare-workspace,prepare your workspace>>.
+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 <<prerequisites,Prerequisites>> 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 <<build-main,create your workspace>>.
+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 <<prepare-workspace>>.
+
+. 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 <<build-main,previous section>>.
+. 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 <<prepare-workspace>>.
 
- $ 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 <<prepare-workspace>>.
 
-[#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 <<build-main,prepared your workspace and created the worktree for the main branch>>.
+. 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 <<usage>> 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 <<trigger>> 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 <<partial-builds>> 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 <<partial-builds>> 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 <<tabs-migration>> 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 <<search>> for details.
+
+=== Asciidoctor extensions
+
+@asciidoctor/tabs:: Enables the tabs block in AsciiDoc.
+See <<tabs-migration>> 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 <dan@opendevise.com>
Date: Thu, 26 Jan 2023 20:00:11 -0700
Subject: [PATCH 056/167] 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/167] 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 <sriesenberg@vmware.com>
Date: Tue, 31 Jan 2023 15:32:39 -0600
Subject: [PATCH 058/167] 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 <dan@opendevise.com>
Date: Mon, 30 Jan 2023 18:52:43 -0700
Subject: [PATCH 059/167] 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 <rwinch@users.noreply.github.com>
Date: Mon, 27 Feb 2023 16:05:39 -0600
Subject: [PATCH 060/167] 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 <rwinch@users.noreply.github.com>
Date: Thu, 9 Mar 2023 12:23:34 -0600
Subject: [PATCH 061/167] 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 <rwinch@users.noreply.github.com>
Date: Thu, 27 Apr 2023 20:01:33 -0500
Subject: [PATCH 062/167] 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 <rwinch@users.noreply.github.com>
Date: Thu, 27 Apr 2023 20:01:57 -0500
Subject: [PATCH 063/167] 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 <rwinch@users.noreply.github.com>
Date: Tue, 2 May 2023 09:15:46 -0500
Subject: [PATCH 064/167] 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 <rwinch@users.noreply.github.com>
Date: Tue, 2 May 2023 09:27:50 -0500
Subject: [PATCH 065/167] 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 <rwinch@users.noreply.github.com>
Date: Tue, 2 May 2023 09:56:42 -0500
Subject: [PATCH 066/167] 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 <rwinch@users.noreply.github.com>
Date: Tue, 2 May 2023 10:15:34 -0500
Subject: [PATCH 067/167] 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 <rwinch@users.noreply.github.com>
Date: Tue, 2 May 2023 10:36:53 -0500
Subject: [PATCH 068/167] 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 <sriesenberg@vmware.com>
Date: Wed, 7 Jun 2023 17:05:18 -0500
Subject: [PATCH 069/167] 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 <rwinch@users.noreply.github.com>
Date: Thu, 8 Jun 2023 13:46:10 -0500
Subject: [PATCH 070/167] 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 <rwinch@users.noreply.github.com>
Date: Thu, 8 Jun 2023 17:25:09 -0500
Subject: [PATCH 071/167] 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 <rwinch@users.noreply.github.com>
Date: Sun, 11 Jun 2023 23:43:31 -0500
Subject: [PATCH 072/167] 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 <rwinch@users.noreply.github.com>
Date: Wed, 14 Jun 2023 10:25:29 -0500
Subject: [PATCH 073/167] 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 <rwinch@users.noreply.github.com>
Date: Wed, 14 Jun 2023 11:33:45 -0500
Subject: [PATCH 074/167] 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 <rwinch@users.noreply.github.com>
Date: Wed, 14 Jun 2023 13:44:29 -0500
Subject: [PATCH 075/167] 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 <rwinch@users.noreply.github.com>
Date: Wed, 14 Jun 2023 15:16:30 -0500
Subject: [PATCH 076/167] 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 <rwinch@users.noreply.github.com>
Date: Fri, 16 Jun 2023 11:03:22 -0500
Subject: [PATCH 077/167] 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 <rwinch@users.noreply.github.com>
Date: Fri, 16 Jun 2023 21:58:41 -0500
Subject: [PATCH 078/167] 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 <rwinch@users.noreply.github.com>
Date: Tue, 20 Jun 2023 11:03:39 -0500
Subject: [PATCH 079/167] 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 <rwinch@users.noreply.github.com>
Date: Tue, 20 Jun 2023 11:04:16 -0500
Subject: [PATCH 080/167] 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 <rwinch@users.noreply.github.com>
Date: Tue, 20 Jun 2023 11:05:00 -0500
Subject: [PATCH 081/167] 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 <rwinch@users.noreply.github.com>
Date: Tue, 20 Jun 2023 11:05:33 -0500
Subject: [PATCH 082/167] 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 <rwinch@users.noreply.github.com>
Date: Tue, 20 Jun 2023 11:10:49 -0500
Subject: [PATCH 083/167] 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 <rwinch@users.noreply.github.com>
Date: Tue, 20 Jun 2023 11:13:11 -0500
Subject: [PATCH 084/167] 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 <rwinch@users.noreply.github.com>
Date: Tue, 20 Jun 2023 11:13:55 -0500
Subject: [PATCH 085/167] 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 <rwinch@users.noreply.github.com>
Date: Thu, 22 Jun 2023 17:45:34 -0500
Subject: [PATCH 086/167] 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 <rwinch@users.noreply.github.com>
Date: Fri, 23 Jun 2023 16:51:45 -0500
Subject: [PATCH 087/167] 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 <rwinch@users.noreply.github.com>
Date: Fri, 23 Jun 2023 17:38:45 -0500
Subject: [PATCH 088/167] 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 <rwinch@users.noreply.github.com>
Date: Wed, 12 Jul 2023 10:47:38 -0500
Subject: [PATCH 089/167] 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 <rwinch@users.noreply.github.com>
Date: Wed, 12 Jul 2023 11:28:19 -0500
Subject: [PATCH 090/167] 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 <rwinch@users.noreply.github.com>
Date: Tue, 18 Jul 2023 11:11:30 -0500
Subject: [PATCH 091/167] 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 <rwinch@users.noreply.github.com>
Date: Mon, 28 Aug 2023 13:28:05 -0500
Subject: [PATCH 092/167] 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 <rwinch@users.noreply.github.com>
Date: Thu, 7 Sep 2023 12:19:53 -0500
Subject: [PATCH 093/167] 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 <rwinch@users.noreply.github.com>
Date: Wed, 13 Sep 2023 10:15:56 -0500
Subject: [PATCH 094/167] 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 <rwinch@users.noreply.github.com>
Date: Wed, 20 Sep 2023 14:22:57 -0500
Subject: [PATCH 095/167] 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 <rwinch@users.noreply.github.com>
Date: Thu, 21 Sep 2023 11:14:51 -0500
Subject: [PATCH 096/167] 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 <rwinch@users.noreply.github.com>
Date: Tue, 10 Oct 2023 15:02:22 -0500
Subject: [PATCH 097/167] 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/167] 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] <support@github.com>
---
 .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/167] 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] <support@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 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/167] 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] <support@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 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 <rwinch@users.noreply.github.com>
Date: Mon, 18 Mar 2024 11:11:38 -0500
Subject: [PATCH 101/167] 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 <rwinch@users.noreply.github.com>
Date: Mon, 18 Mar 2024 17:01:25 -0500
Subject: [PATCH 102/167] 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 <marcusdacoregio@gmail.com>
Date: Tue, 26 Mar 2024 15:33:39 -0300
Subject: [PATCH 103/167] 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 <marcusdacoregio@gmail.com>
Date: Wed, 27 Mar 2024 09:22:25 -0300
Subject: [PATCH 104/167] 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 <marcusdacoregio@gmail.com>
Date: Wed, 27 Mar 2024 10:22:06 -0300
Subject: [PATCH 105/167] 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 <marcusdacoregio@gmail.com>
Date: Wed, 27 Mar 2024 11:42:39 -0300
Subject: [PATCH 106/167] 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 <marcusdacoregio@gmail.com>
Date: Wed, 27 Mar 2024 14:46:51 -0300
Subject: [PATCH 107/167] 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 <marcusdacoregio@gmail.com>
Date: Mon, 1 Apr 2024 13:21:00 -0300
Subject: [PATCH 108/167] 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/167] 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] <support@github.com>
---
 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/167] 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] <support@github.com>
---
 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/167] 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] <support@github.com>
---
 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/167] 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] <support@github.com>
---
 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 <marcusdacoregio@gmail.com>
Date: Tue, 2 Apr 2024 09:11:35 -0300
Subject: [PATCH 113/167] 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 <marcusdacoregio@gmail.com>
Date: Wed, 3 Apr 2024 09:44:15 -0300
Subject: [PATCH 114/167] 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/167] 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] <support@github.com>
---
 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 <marcusdacoregio@gmail.com>
Date: Tue, 9 Apr 2024 10:38:03 -0300
Subject: [PATCH 116/167] 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/167] 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] <support@github.com>
---
 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/167] 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/167] 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/167] 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] <support@github.com>
---
 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]" <github-actions[bot]@users.noreply.github.com>
Date: Mon, 20 May 2024 16:34:34 +0000
Subject: [PATCH 121/167] 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/167] --- updated-dependencies: - dependency-name:
 spring-io/spring-doc-actions   dependency-type: direct:production  
 update-type: version-update:semver-patch ...

Signed-off-by: dependabot[bot] <support@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 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 <rwinch@users.noreply.github.com>
Date: Tue, 21 May 2024 16:12:04 -0500
Subject: [PATCH 123/167] 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 <rwinch@users.noreply.github.com>
Date: Tue, 21 May 2024 16:32:15 -0500
Subject: [PATCH 124/167] 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 <rwinch@users.noreply.github.com>
Date: Tue, 21 May 2024 16:41:49 -0500
Subject: [PATCH 125/167] 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 <marcusdacoregio@gmail.com>
Date: Wed, 22 May 2024 10:49:58 -0300
Subject: [PATCH 126/167] 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 <marcusdacoregio@gmail.com>
Date: Fri, 24 May 2024 09:36:16 -0300
Subject: [PATCH 127/167] 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/167] 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] <support@github.com>
---
 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 <marcusdacoregio@gmail.com>
Date: Thu, 20 Jun 2024 15:46:03 -0300
Subject: [PATCH 129/167] 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]" <github-actions[bot]@users.noreply.github.com>
Date: Thu, 20 Jun 2024 18:46:35 +0000
Subject: [PATCH 130/167] 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/167] 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] <support@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 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 <rwinch@users.noreply.github.com>
Date: Thu, 27 Jun 2024 16:35:50 -0400
Subject: [PATCH 132/167] 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/167] 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] <support@github.com>
---
 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/167] 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/167] 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/167] 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/167] 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] <support@github.com>
---
 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/167] 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] <support@github.com>
---
 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/167] 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] <support@github.com>
---
 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/167] 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] <support@github.com>
---
 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/167] 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] <support@github.com>
---
 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/167] 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] <support@github.com>
---
 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/167] 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] <support@github.com>
---
 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/167] 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] <support@github.com>
---
 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/167] 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] <support@github.com>
---
 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/167] 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] <support@github.com>
---
 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/167] 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] <support@github.com>
---
 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/167] 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] <support@github.com>
---
 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]" <github-actions[bot]@users.noreply.github.com>
Date: Wed, 16 Oct 2024 10:06:43 +0000
Subject: [PATCH 149/167] 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/167] 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] <support@github.com>
---
 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/167] 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] <support@github.com>
---
 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]" <github-actions[bot]@users.noreply.github.com>
Date: Sat, 16 Nov 2024 10:06:10 +0000
Subject: [PATCH 152/167] 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/167] 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] <support@github.com>
---
 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/167] 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] <support@github.com>
---
 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/167] 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] <support@github.com>
---
 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/167] 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] <support@github.com>
---
 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/167] 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] <support@github.com>
---
 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/167] 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] <support@github.com>
---
 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/167] 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/167] 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/167] 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] <support@github.com>
---
 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/167] 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/167] 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/167] 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/167] 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/167] 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] <support@github.com>
---
 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/167] 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] <support@github.com>
---
 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"
   }
 }
