diff --git a/.github/workflows/sphinxbuild.yml b/.github/workflows/sphinxbuild.yml index 7b9e3da2939..7863de72597 100644 --- a/.github/workflows/sphinxbuild.yml +++ b/.github/workflows/sphinxbuild.yml @@ -271,13 +271,15 @@ jobs: - name: Compute PDF release version id: pdf_version + shell: bash run: | - branch="${GITHUB_REF#refs/heads/}" - if [[ "$branch" == stable* ]]; then - echo "release=${branch#stable}" >> $GITHUB_OUTPUT + # For PRs use the target branch; for pushes use the current branch. + # This handles both stable34 direct pushes and backport/*/stable34 PRs. + branch="${GITHUB_BASE_REF:-${GITHUB_REF#refs/heads/}}" + if [[ "$branch" =~ ^stable([0-9]+)$ ]]; then + echo "release=${BASH_REMATCH[1]}" >> $GITHUB_OUTPUT else - # For master (latest), derive the dev version from conf.py so the - # PDF cover shows a real version number rather than "latest". + # master: derive the dev version from conf.py. version_stable=$(grep -m1 '^\s*version_stable\s*=' conf.py | grep -o '[0-9]\+') echo "release=$((version_stable + 1))" >> $GITHUB_OUTPUT fi diff --git a/conf.py b/conf.py index e38f607fa53..6c5a2cb6dc1 100644 --- a/conf.py +++ b/conf.py @@ -64,7 +64,21 @@ # latest released stable — CHANGING IT MUST RESULT IN A CHANGE OF THE SYMLINK ON THE LIVE SERVER version_stable = 34 # mapped to https://docs.nextcloud.com/server/stable/ -display_version = release if release != 'latest' else str(version_stable + 1) +import re as _re +# Detect stable branch version for display purposes. +# For PRs: GITHUB_BASE_REF is the target branch (e.g. 'stable34'). +# For direct pushes: GITHUB_REF is 'refs/heads/stable34'. +_base = os.environ.get('GITHUB_BASE_REF', '') +_ref = os.environ.get('GITHUB_REF', '') +_stable_ver = ( + _re.match(r'^stable(\d+)$', _base) + or _re.match(r'^refs/heads/stable(\d+)$', _ref) +) +display_version = ( + release if release != 'latest' # PDF/ePub builds (DOCS_RELEASE set) + else _stable_ver.group(1) if _stable_ver # stableNN branches and PRs targeting them + else str(version_stable + 1) # master +) # Also search for "TODO ON RELEASE" in the rst files @@ -83,11 +97,20 @@ def setup(app): def generateVersionsDocs(current_docs): versions_doc = [] + + # If viewing an unsupported (older than version_start) branch, prepend it so it + # appears last after the template's |reverse — e.g. "26 (unsupported)" at the bottom. + if _stable_ver: + branch_ver = int(_stable_ver.group(1)) + if branch_ver < version_start: + url = 'https://docs.nextcloud.com/server/%s/%s' % (str(branch_ver), current_docs) + versions_doc.append((branch_ver, url, '%s (unsupported)' % branch_ver)) + for v in range(version_start, version_stable): url = 'https://docs.nextcloud.com/server/%s/%s' % (str(v), current_docs) versions_doc.append((v, url, str(v))) versions_doc.append(('stable', 'https://docs.nextcloud.com/server/stable/%s' % current_docs, '%s (stable)' % version_stable)) - versions_doc.append(('latest', 'https://docs.nextcloud.com/server/latest/%s' % current_docs, '%s (latest)' % display_version)) + versions_doc.append(('latest', 'https://docs.nextcloud.com/server/latest/%s' % current_docs, '%s (latest)' % str(version_stable + 1))) return versions_doc if version.isdigit(): @@ -96,7 +119,7 @@ def generateVersionsDocs(current_docs): github_branch = 'master' html_context = { - 'current_version': version, + 'current_version': int(_stable_ver.group(1)) if _stable_ver else version, 'display_version': display_version, 'READTHEDOCS': True,