Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Human-specific metadata guidelines (templates/human/README.adoc)
- MS data file metadata (in ms-proteomics template)
- SDRF terms reference (sdrf-terms.tsv)
- **Template Builder page** (site/sdrf-builder.html): dedicated interactive wizard for building customized SDRF templates by selecting technology, organism, and experiment type.
- **Metaproteomics examples**: PXD005969 (human gut, extraction methods), PXD003572 (soil, Mediterranean dryland), PXD009712 (ocean, Pacific depth profiles).
- **Website infrastructure** (site/): homepage, SDRF explorer, terms reference, search functionality, CSS styling.
- **PDF generation workflow** with custom theme for specification documents.
- File-level metadata support using dedicated columns (`comment[sdrf version]`, `comment[sdrf template]`, `comment[sdrf annotation tool]`) for capturing SDRF version, template, and provenance information.
Expand All @@ -53,6 +55,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- **Affinity proteomics**: version set to 1.0.0. `comment[instrument]` renamed to `comment[platform]` (REQUIRED); new `comment[instrument]` added as OPTIONAL for actual sequencer/reader. Sample type values normalized to use spaces (`sample control`, `negative control`, etc.).
- **Cell-lines**: added PATO ontology to disease field for `normal` (PATO:0000461). Added `characteristics[culture medium]` (RECOMMENDED) and `characteristics[storage temperature]` (RECOMMENDED).
- **MS-proteomics/DDA**: mass tolerance patterns updated to accept `not available`/`not applicable` when those flags are set. DDA mass tolerance kept as RECOMMENDED.
- **Quick Start page** refactored as an educational concepts guide (column types, ontology usage, common patterns, validation) with CTA linking to the new Template Builder.
- **Navigation** updated across all pages to include Template Builder link.
- **CI/CD link checker** optimized with concurrency limits, retries, and GITHUB_TOKEN to avoid 429 rate-limit failures. Fixed stale repository URLs (proteomics-sample-metadata → proteomics-metadata-standard).
- **Dev/Stable version links** now use a placeholder system in inject-headers.py, resolved at build time based on `--dev` flag.
- **Specification restructured** with clearer organization: Quick Start → Validation → Specification Structure → Notational Conventions → Sample Metadata → Data File Metadata → Templates → Factor Values.
- **Column naming**: `fileformat` changed to `file_format` for consistency with underscore convention.
- **Ontology recommendations**: added NCIT and PRIDE to general purpose; added PATO for healthy samples (`normal` = PATO:0000461).
Expand Down
9 changes: 9 additions & 0 deletions llms.txt
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,15 @@ Machine-readable YAML definitions used by sdrf-pipelines for validation. Each te
- sdrf-proteomics/sdrf-templates/somascan/1.0.0/somascan.yaml - SomaScan (experiment layer): aptamer-based proteomics
- sdrf-proteomics/sdrf-templates/somascan/1.0.0/somascan.sdrf.tsv - SomaScan example

## Website Pages

- site/index.html - Homepage: overview, quick links, templates table, tools, examples, contributors
- site/quickstart.html - Quick Start Guide: SDRF concepts, column types, ontology usage, common patterns, validation
- site/sdrf-builder.html - Template Builder: interactive wizard to select technology, organism, and experiment type and generate a customized SDRF template
- site/sdrf-explorer.html - SDRF Explorer: browse and filter 298+ annotated proteomics datasets
- site/sdrf-editor.html - SDRF Editor: browser-based editor with ontology autocomplete
- site/sdrf-terms.html - SDRF Terms Reference: browsable table of all column terms with ontology mappings

## Tools

- sdrf-proteomics/tool-support.adoc - Tool Support Overview: annotators, validators, analysis tools
Expand Down
Binary file modified psi-document/sdrf-proteomics-specification-v1.1.0-dev.pdf
Binary file not shown.
35 changes: 27 additions & 8 deletions scripts/add-dev-banner.sh
Original file line number Diff line number Diff line change
@@ -1,19 +1,37 @@
#!/bin/bash
# Add development version banner to documentation
# Add development version banner to all documentation pages
# Usage: ./add-dev-banner.sh <output_dir>

set -e

OUTPUT_DIR="${1:-docs}"

echo "Adding dev banner to: $OUTPUT_DIR"
echo "Adding dev banner to all HTML pages in: $OUTPUT_DIR"

# Add banner HTML to index.html
sed -i.bak 's/<body>/<body><div class="dev-banner">⚠️ Development Version - This documentation is from the dev branch and may contain unreleased changes. <a href="\/">View stable version<\/a><\/div>/' "$OUTPUT_DIR/index.html"
rm -f "$OUTPUT_DIR/index.html.bak"
# Use Python for reliable cross-platform HTML injection
python3 -c "
import os, re

# Append dev banner CSS to stylesheet
cat >> "$OUTPUT_DIR/css/style.css" << 'EOF'
output_dir = '$OUTPUT_DIR'
banner = '<div class=\"dev-banner\">&#9888;&#65039; Development Version - This documentation is from the dev branch and may contain unreleased changes. <a href=\"/\">View stable version</a></div>'
Comment on lines +12 to +16
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Don't splice OUTPUT_DIR into executable Python.

Line 15 turns the shell argument into part of the Python source. A valid path containing ' will break the script, and it also makes the injection step harder to reason about. Pass the directory via sys.argv or the environment instead.

Suggested change
-python3 -c "
-import os, re
+python3 - "$OUTPUT_DIR" <<'PY'
+import os, re, sys
 
-output_dir = '$OUTPUT_DIR'
+output_dir = sys.argv[1]
 banner = '<div class=\"dev-banner\">&#9888;&#65039; Development Version - This documentation is from the dev branch and may contain unreleased changes. <a href=\"/\">View stable version</a></div>'
@@
-"
+PY
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
python3 -c "
import os, re
# Append dev banner CSS to stylesheet
cat >> "$OUTPUT_DIR/css/style.css" << 'EOF'
output_dir = '$OUTPUT_DIR'
banner = '<div class=\"dev-banner\">&#9888;&#65039; Development Version - This documentation is from the dev branch and may contain unreleased changes. <a href=\"/\">View stable version</a></div>'
python3 - "$OUTPUT_DIR" <<'PY'
import os, re, sys
output_dir = sys.argv[1]
banner = '<div class=\"dev-banner\">&#9888;&#65039; Development Version - This documentation is from the dev branch and may contain unreleased changes. <a href=\"/\">View stable version</a></div>'
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@scripts/add-dev-banner.sh` around lines 12 - 16, The script currently injects
the shell variable OUTPUT_DIR directly into the inline Python source (the
python3 -c invocation) by assigning it to the Python variable output_dir, which
is unsafe; instead pass the path via sys.argv or the environment: change the
python3 -c invocation so the Python code reads output_dir = sys.argv[1] (or
os.environ['OUTPUT_DIR']) and call python3 -c with the OUTPUT_DIR as a separate
argument (or export OUTPUT_DIR in the shell prior to invoking python), updating
any uses of output_dir and keeping the banner variable as-is (refer to
output_dir, banner, and the python3 -c invocation in the script).


for root, dirs, files in os.walk(output_dir):
for f in files:
if not f.endswith('.html'):
continue
path = os.path.join(root, f)
with open(path, 'r') as fh:
content = fh.read()
if 'dev-banner' in content:
continue
content = re.sub(r'(<body[^>]*>)', r'\1' + banner, content)
with open(path, 'w') as fh:
fh.write(content)
"

# Append dev banner CSS to stylesheet (only once)
if ! grep -q "dev-banner" "$OUTPUT_DIR/css/style.css" 2>/dev/null; then
cat >> "$OUTPUT_DIR/css/style.css" << 'EOF'

/* Dev banner */
.dev-banner {
Expand All @@ -29,5 +47,6 @@ cat >> "$OUTPUT_DIR/css/style.css" << 'EOF'
font-weight: 600;
}
EOF
fi

echo "Dev banner added successfully!"
echo "Dev banner added to all pages successfully!"
7 changes: 6 additions & 1 deletion scripts/build-docs.sh
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,7 @@ cp site/sdrf-terms.html "$OUTPUT_DIR/"
cp site/quickstart.html "$OUTPUT_DIR/"
cp site/sdrf-explorer.html "$OUTPUT_DIR/"
cp site/sdrf-editor.html "$OUTPUT_DIR/"
cp site/sdrf-builder.html "$OUTPUT_DIR/"

# Copy SDRF terms TSV (if present) — also create TERMS.tsv alias for AsciiDoc links
cp sdrf-proteomics/metadata-guidelines/sdrf-terms.tsv "$OUTPUT_DIR/" 2>/dev/null || true
Expand All @@ -190,7 +191,11 @@ cp site/sdrf-data.json "$OUTPUT_DIR/"

# Inject navigation headers
echo "Adding navigation headers..."
python3 scripts/inject-headers.py "$OUTPUT_DIR"
if [ "$IS_DEV" = true ]; then
python3 scripts/inject-headers.py "$OUTPUT_DIR" --dev
else
python3 scripts/inject-headers.py "$OUTPUT_DIR"
fi

# Transform links (SDRF Explorer links and .adoc to .html)
echo "Transforming links..."
Expand Down
69 changes: 53 additions & 16 deletions scripts/inject-headers.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,82 +14,119 @@
from pathlib import Path


# Navigation header templates
# Version link placeholder — replaced at build time based on --dev flag
VERSION_LINK_PLACEHOLDER = '{{VERSION_LINK}}'

# Navigation header templates (use placeholder for version link)
HEADERS = {
'root': '''<header class="doc-header"><div class="doc-header-brand"><a href="./index.html">SDRF-Proteomics</a></div><nav class="doc-header-nav"><a href="./index.html">Home</a><a href="./specification.html" class="nav-current">Specification</a><a href="./index.html#metadata-guidelines">Metadata Guidelines</a><a href="./index.html#templates">Templates</a><a href="./index.html#tools">Tools</a><a href="./sdrf-explorer.html">Explorer</a><a href="./sdrf-editor.html">Editor</a><a href="./index.html#contributors">Contributors</a><a href="/dev/" class="version-link">Dev Version</a><a href="https://github.com/bigbio/proteomics-metadata-standard" target="_blank">GitHub</a></nav></header>''',
'root': f'''<header class="doc-header"><div class="doc-header-brand"><a href="./index.html">SDRF-Proteomics</a></div><nav class="doc-header-nav"><a href="./index.html">Home</a><a href="./specification.html" class="nav-current">Specification</a><a href="./index.html#metadata-guidelines">Metadata Guidelines</a><a href="./index.html#templates">Templates</a><a href="./index.html#tools">Tools</a><a href="./sdrf-explorer.html">Explorer</a><a href="./sdrf-editor.html">Editor</a><a href="./sdrf-builder.html">Template Builder</a><a href="./index.html#contributors">Contributors</a>{VERSION_LINK_PLACEHOLDER}<a href="https://github.com/bigbio/proteomics-metadata-standard" target="_blank">GitHub</a></nav></header>''',

'tools': '''<header class="doc-header"><div class="doc-header-brand"><a href="./index.html">SDRF-Proteomics</a></div><nav class="doc-header-nav"><a href="./index.html">Home</a><a href="./specification.html">Specification</a><a href="./index.html#metadata-guidelines">Metadata Guidelines</a><a href="./index.html#templates">Templates</a><a href="./index.html#tools" class="nav-current">Tools</a><a href="./sdrf-explorer.html">Explorer</a><a href="./sdrf-editor.html">Editor</a><a href="./index.html#contributors">Contributors</a><a href="/dev/" class="version-link">Dev Version</a><a href="https://github.com/bigbio/proteomics-metadata-standard" target="_blank">GitHub</a></nav></header>''',
'tools': f'''<header class="doc-header"><div class="doc-header-brand"><a href="./index.html">SDRF-Proteomics</a></div><nav class="doc-header-nav"><a href="./index.html">Home</a><a href="./specification.html">Specification</a><a href="./index.html#metadata-guidelines">Metadata Guidelines</a><a href="./index.html#templates">Templates</a><a href="./index.html#tools" class="nav-current">Tools</a><a href="./sdrf-explorer.html">Explorer</a><a href="./sdrf-editor.html">Editor</a><a href="./sdrf-builder.html">Template Builder</a><a href="./index.html#contributors">Contributors</a>{VERSION_LINK_PLACEHOLDER}<a href="https://github.com/bigbio/proteomics-metadata-standard" target="_blank">GitHub</a></nav></header>''',

'guidelines': '''<header class="doc-header"><div class="doc-header-brand"><a href="../index.html">SDRF-Proteomics</a></div><nav class="doc-header-nav"><a href="../index.html">Home</a><a href="../specification.html">Specification</a><a href="../index.html#metadata-guidelines" class="nav-current">Metadata Guidelines</a><a href="../index.html#templates">Templates</a><a href="../index.html#tools">Tools</a><a href="../sdrf-explorer.html">Explorer</a><a href="../sdrf-editor.html">Editor</a><a href="../index.html#contributors">Contributors</a><a href="/dev/" class="version-link">Dev Version</a><a href="https://github.com/bigbio/proteomics-metadata-standard" target="_blank">GitHub</a></nav></header>''',
'guidelines': f'''<header class="doc-header"><div class="doc-header-brand"><a href="../index.html">SDRF-Proteomics</a></div><nav class="doc-header-nav"><a href="../index.html">Home</a><a href="../specification.html">Specification</a><a href="../index.html#metadata-guidelines" class="nav-current">Metadata Guidelines</a><a href="../index.html#templates">Templates</a><a href="../index.html#tools">Tools</a><a href="../sdrf-explorer.html">Explorer</a><a href="../sdrf-editor.html">Editor</a><a href="../sdrf-builder.html">Template Builder</a><a href="../index.html#contributors">Contributors</a>{VERSION_LINK_PLACEHOLDER}<a href="https://github.com/bigbio/proteomics-metadata-standard" target="_blank">GitHub</a></nav></header>''',

'templates': '''<header class="doc-header"><div class="doc-header-brand"><a href="../index.html">SDRF-Proteomics</a></div><nav class="doc-header-nav"><a href="../index.html">Home</a><a href="../specification.html">Specification</a><a href="../index.html#metadata-guidelines">Metadata Guidelines</a><a href="../index.html#templates" class="nav-current">Templates</a><a href="../index.html#tools">Tools</a><a href="../sdrf-explorer.html">Explorer</a><a href="../sdrf-editor.html">Editor</a><a href="../index.html#contributors">Contributors</a><a href="/dev/" class="version-link">Dev Version</a><a href="https://github.com/bigbio/proteomics-metadata-standard" target="_blank">GitHub</a></nav></header>''',
'templates': f'''<header class="doc-header"><div class="doc-header-brand"><a href="../index.html">SDRF-Proteomics</a></div><nav class="doc-header-nav"><a href="../index.html">Home</a><a href="../specification.html">Specification</a><a href="../index.html#metadata-guidelines">Metadata Guidelines</a><a href="../index.html#templates" class="nav-current">Templates</a><a href="../index.html#tools">Tools</a><a href="../sdrf-explorer.html">Explorer</a><a href="../sdrf-editor.html">Editor</a><a href="../sdrf-builder.html">Template Builder</a><a href="../index.html#contributors">Contributors</a>{VERSION_LINK_PLACEHOLDER}<a href="https://github.com/bigbio/proteomics-metadata-standard" target="_blank">GitHub</a></nav></header>''',

'sample_guidelines': '''<header class="doc-header"><div class="doc-header-brand"><a href="./index.html">SDRF-Proteomics</a></div><nav class="doc-header-nav"><a href="./index.html">Home</a><a href="./specification.html">Specification</a><a href="./index.html#metadata-guidelines" class="nav-current">Metadata Guidelines</a><a href="./index.html#templates">Templates</a><a href="./index.html#tools">Tools</a><a href="./sdrf-explorer.html">Explorer</a><a href="./sdrf-editor.html">Editor</a><a href="./index.html#contributors">Contributors</a><a href="/dev/" class="version-link">Dev Version</a><a href="https://github.com/bigbio/proteomics-metadata-standard" target="_blank">GitHub</a></nav></header>''',
'sample_guidelines': f'''<header class="doc-header"><div class="doc-header-brand"><a href="./index.html">SDRF-Proteomics</a></div><nav class="doc-header-nav"><a href="./index.html">Home</a><a href="./specification.html">Specification</a><a href="./index.html#metadata-guidelines" class="nav-current">Metadata Guidelines</a><a href="./index.html#templates">Templates</a><a href="./index.html#tools">Tools</a><a href="./sdrf-explorer.html">Explorer</a><a href="./sdrf-editor.html">Editor</a><a href="./sdrf-builder.html">Template Builder</a><a href="./index.html#contributors">Contributors</a>{VERSION_LINK_PLACEHOLDER}<a href="https://github.com/bigbio/proteomics-metadata-standard" target="_blank">GitHub</a></nav></header>''',

'templates_guide': '''<header class="doc-header"><div class="doc-header-brand"><a href="./index.html">SDRF-Proteomics</a></div><nav class="doc-header-nav"><a href="./index.html">Home</a><a href="./specification.html">Specification</a><a href="./index.html#metadata-guidelines">Metadata Guidelines</a><a href="./index.html#templates" class="nav-current">Templates</a><a href="./index.html#tools">Tools</a><a href="./sdrf-explorer.html">Explorer</a><a href="./sdrf-editor.html">Editor</a><a href="./index.html#contributors">Contributors</a><a href="/dev/" class="version-link">Dev Version</a><a href="https://github.com/bigbio/proteomics-metadata-standard" target="_blank">GitHub</a></nav></header>'''
'templates_guide': f'''<header class="doc-header"><div class="doc-header-brand"><a href="./index.html">SDRF-Proteomics</a></div><nav class="doc-header-nav"><a href="./index.html">Home</a><a href="./specification.html">Specification</a><a href="./index.html#metadata-guidelines">Metadata Guidelines</a><a href="./index.html#templates" class="nav-current">Templates</a><a href="./index.html#tools">Tools</a><a href="./sdrf-explorer.html">Explorer</a><a href="./sdrf-editor.html">Editor</a><a href="./sdrf-builder.html">Template Builder</a><a href="./index.html#contributors">Contributors</a>{VERSION_LINK_PLACEHOLDER}<a href="https://github.com/bigbio/proteomics-metadata-standard" target="_blank">GitHub</a></nav></header>'''
}


def inject_header(filepath: str, header_html: str) -> None:
def inject_header(filepath: str, header_html: str, is_dev: bool = False) -> None:
"""Inject navigation header into an HTML file."""
with open(filepath, 'r', encoding='utf-8') as f:
content = f.read()

# Resolve version link based on dev/stable mode
if is_dev:
version_link = '<a href="/" class="version-link">Stable Version</a>'
else:
version_link = '<a href="/dev/" class="version-link">Dev Version</a>'
resolved_header = header_html.replace(VERSION_LINK_PLACEHOLDER, version_link)

# Add has-doc-header class to body
content = re.sub(r'<body class="([^"]*)"', r'<body class="has-doc-header \1"', content)
content = re.sub(r'<body>', '<body class="has-doc-header">', content)

# Insert header after opening body tag
content = re.sub(r'(<body[^>]*>)', r'\1\n' + header_html, content)
content = re.sub(r'(<body[^>]*>)', r'\1\n' + resolved_header, content)

with open(filepath, 'w', encoding='utf-8') as f:
f.write(content)


def rewrite_version_links(filepath: str, is_dev: bool) -> None:
"""Rewrite version links in static HTML pages (index.html, quickstart.html, etc.)."""
with open(filepath, 'r', encoding='utf-8') as f:
content = f.read()

if is_dev:
content = content.replace(
'<a href="/dev/" class="version-link">Dev Version</a>',
'<a href="/" class="version-link">Stable Version</a>'
)
# No change needed for stable — the source files already have /dev/ links

with open(filepath, 'w', encoding='utf-8') as f:
f.write(content)


def main():
if len(sys.argv) < 2:
print("Usage: python3 inject-headers.py <output_dir>")
print("Usage: python3 inject-headers.py <output_dir> [--dev]")
sys.exit(1)

is_dev = '--dev' in sys.argv
output_dir = Path(sys.argv[1])
Comment on lines 75 to 81
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

--dev is order-sensitive right now.

Line 81 always treats sys.argv[1] as the output directory, so python3 scripts/inject-headers.py --dev docs will try to operate on a directory literally named --dev. Please parse the CLI instead of relying on positional order.

Suggested change
+import argparse
 import sys
@@
 def main():
-    if len(sys.argv) < 2:
-        print("Usage: python3 inject-headers.py <output_dir> [--dev]")
-        sys.exit(1)
-
-    is_dev = '--dev' in sys.argv
-    output_dir = Path(sys.argv[1])
+    parser = argparse.ArgumentParser()
+    parser.add_argument("output_dir")
+    parser.add_argument("--dev", action="store_true")
+    args = parser.parse_args()
+
+    is_dev = args.dev
+    output_dir = Path(args.output_dir)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@scripts/inject-headers.py` around lines 75 - 81, The CLI currently assumes
sys.argv[1] is always the output directory which makes --dev order-sensitive;
update main() to robustly parse arguments by either using argparse or manually
scanning sys.argv to set is_dev (presence of '--dev') and assign output_dir to
the first non-flag argument instead of sys.argv[1]; modify the references to
is_dev and output_dir accordingly so commands like "inject-headers.py --dev
docs" and "inject-headers.py docs --dev" both work (refer to main, is_dev,
output_dir, and sys.argv in the diff).


print(f"Dev mode: {is_dev}")

# Inject header into specification.html
spec_file = output_dir / "specification.html"
if spec_file.exists():
print(f"Injecting header into: {spec_file}")
inject_header(str(spec_file), HEADERS['root'])
inject_header(str(spec_file), HEADERS['root'], is_dev)

# Inject header into tools.html
tools_file = output_dir / "tools.html"
if tools_file.exists():
print(f"Injecting header into: {tools_file}")
inject_header(str(tools_file), HEADERS['tools'])
inject_header(str(tools_file), HEADERS['tools'], is_dev)

# Inject header into sample-guidelines.html
sg_file = output_dir / "sample-guidelines.html"
if sg_file.exists():
print(f"Injecting header into: {sg_file}")
inject_header(str(sg_file), HEADERS['sample_guidelines'])
inject_header(str(sg_file), HEADERS['sample_guidelines'], is_dev)

# Inject header into templates.html (templates guide)
tpl_guide = output_dir / "templates.html"
if tpl_guide.exists():
print(f"Injecting header into: {tpl_guide}")
inject_header(str(tpl_guide), HEADERS['templates_guide'])
inject_header(str(tpl_guide), HEADERS['templates_guide'], is_dev)

# Inject headers into metadata-guidelines pages
guidelines_dir = output_dir / "metadata-guidelines"
if guidelines_dir.exists():
for html_file in guidelines_dir.glob("*.html"):
print(f"Injecting header into: {html_file}")
inject_header(str(html_file), HEADERS['guidelines'])
inject_header(str(html_file), HEADERS['guidelines'], is_dev)

# Inject headers into template pages
templates_dir = output_dir / "templates"
if templates_dir.exists():
for html_file in templates_dir.glob("*.html"):
print(f"Injecting header into: {html_file}")
inject_header(str(html_file), HEADERS['templates'])
inject_header(str(html_file), HEADERS['templates'], is_dev)

# Rewrite version links in static HTML pages (index.html, quickstart.html, etc.)
for static_page in ["index.html", "quickstart.html", "sdrf-terms.html",
"sdrf-explorer.html", "sdrf-editor.html", "sdrf-builder.html"]:
static_file = output_dir / static_page
if static_file.exists():
print(f"Rewriting version links in: {static_file}")
rewrite_version_links(str(static_file), is_dev)

print("Header injection complete!")

Expand Down
Loading