#
# Galaxy sphinxcontrib-simpleversioning documentation build configuration file
# This file is appended to conf.py by the Build docs github workflow.
#
import re
from subprocess import check_output
from packaging.version import Version
# This is set in the Jenkins matrix config
TARGET_GIT_BRANCH = os.environ.get("TARGET_BRANCH", "dev") # noqa: F821
# Version message templates
OLD_BANNER = """This document is for an old release of Galaxy."""
DEV_BANNER = """This document is for an in-development version of Galaxy."""
PRE_BANNER = """This document is for a pre-release version of Galaxy."""
BANNER_APPEND = """ You can alternatively view this page in the latest release if it
exists or view the top of the latest release's documentation."""
# Minimum version for linking to docs
MIN_DOC_VERSION = Version("17.05")
# Enable simpleversioning
extensions += ["sphinxcontrib.simpleversioning"] # noqa: F821
# -- sphinxcontrib-simpleversioning Settings ---------------------------------
simpleversioning_path_template = "/en/{version}/{pagename}"
simpleversioning_stable_version = "master"
simpleversioning_current_version = TARGET_GIT_BRANCH
simpleversioning_versions = [
{"id": "latest", "name": "dev"},
{"id": "master", "name": "stable"},
# Additional versions added below
]
# Use tags to determine versions - a stable version will have a branch before it's released, but not a tag.
tags = check_output(("git", "tag")).decode().splitlines()
found_versions = []
for _tag in sorted(tags, reverse=True):
if not _tag.startswith("v"):
continue
_ver_parts = _tag[1:].split(".")
if len(_ver_parts) == 1:
# No "."
continue
# Keep only major and minor version numbers
_ver = ".".join(_ver_parts[:2])
if Version(_ver) < MIN_DOC_VERSION:
continue
if _ver in found_versions:
continue
found_versions.append(_ver)
simpleversioning_versions.append({"id": f"release_{_ver}", "name": _ver})
# The latest stable release
_stable = found_versions[0] if found_versions else None
if re.fullmatch(r"release_\d{2}\.\d{1,2}", TARGET_GIT_BRANCH):
if _stable:
# The current stable release will go here but fail the next conditional, avoiding either banner.
if TARGET_GIT_BRANCH != f"release_{_stable}":
simpleversioning_show_banner = True
_target_ver = TARGET_GIT_BRANCH[len("release_") :]
if Version(_target_ver) > Version(_stable):
# Pre-release
# Insert it between master and _stable
simpleversioning_versions.insert(2, {"id": TARGET_GIT_BRANCH, "name": _target_ver})
simpleversioning_banner_message = PRE_BANNER + BANNER_APPEND
else:
simpleversioning_banner_message = OLD_BANNER + BANNER_APPEND
elif TARGET_GIT_BRANCH != "master":
if TARGET_GIT_BRANCH != "dev":
# Feature branch
simpleversioning_versions.append({"id": TARGET_GIT_BRANCH, "name": TARGET_GIT_BRANCH})
simpleversioning_show_banner = True
simpleversioning_banner_message = DEV_BANNER + BANNER_APPEND