A Hugo-based, GitHub Pages-ready website for the Eclipse SDV Hephaestus SDV tooling project built on the official Eclipse Foundation hugo-solstice-theme.
.
├── .github/workflows/pages.yml # GitHub Pages deployment workflow
├── archetypes/default.md # Hugo content archetype
├── assets/scss/hephaestus.scss # Placeholder for future SCSS pipeline
├── content/ # Homepage and section pages
├── layouts/ # Hugo templates and partials
├── static/css/hephaestus.css # Project stylesheet
├── static/images/hephaestus/ # SVG logo and illustrations
├── themes/hugo-solstice-theme/ # Eclipse Solstice theme (git submodule)
├── hugo.toml # Hugo site configuration
└── README.md
Install Hugo Extended, then clone the repository with submodules:
git clone --recurse-submodules https://github.com/eclipse-hephaestus/hephaestus.gitIf you already cloned without --recurse-submodules, initialise the theme submodule first:
git submodule update --init --recursiveThen run:
hugo server -DOpen the local URL printed by Hugo.
hugo --gc --minifyThe generated site is written to public/. Do not commit public/; GitHub Actions builds it for deployment.
- Create a new GitHub repository.
- Copy this folder into the repository root.
- Commit and push to the
mainbranch. - In GitHub, go to Settings > Pages.
- Set Source to GitHub Actions.
- Push a commit or run the workflow manually from the Actions tab.
The workflow in .github/workflows/pages.yml builds the Hugo site and publishes the generated public/ folder using GitHub Pages artifacts.
For a project site, change baseURL in hugo.toml:
baseURL = "https://YOUR-ORG.github.io/YOUR-REPOSITORY/"For a user or organization site, use:
baseURL = "https://YOUR-ORG.github.io/"The workflow also passes GitHub Pages' detected base URL at build time, so Pages deployments should still work after repository setup.
The site uses the official Eclipse Foundation hugo-solstice-theme pinned at tag v3.0.1, included as a git submodule at themes/hugo-solstice-theme/.
Hephaestus-specific overrides are kept under layouts/partials/hephaestus/ and static/css/hephaestus.css.
To update the theme to a newer release:
cd themes/hugo-solstice-theme
git checkout <new-tag>
cd ../..
git add themes/hugo-solstice-theme
git commit -m "chore: update hugo-solstice-theme to <new-tag>"Main pages live under content/:
content/_index.mdfor the homepage metadatacontent/getting-started/_index.mdcontent/tooling/_index.mdcontent/community/_index.mdcontent/downloads/_index.mdcontent/news/_index.mdcontent/faq/_index.md
(/docs/ is no longer a Hugo content page — see below.)
Homepage sections are rendered from partials in layouts/partials/hephaestus/.
/docs/ is a single Sphinx project rather
than Hugo content, published under the same GitHub Pages deployment as the
Hugo site. It covers both general documentation and, nested under
docs/requirements/, requirements/traceability docs built with
sphinx-needs (served at
/docs/requirements/) — sphinx-needs has no Hugo equivalent, and general
docs benefit from Sphinx's toctree sidebar, search, and cross-referencing
as the document tree grows, which Hugo's flat single-page theme doesn't
give you. Keeping both in one Sphinx project (rather than two) means
requirements pages show up directly in the docs sidebar, and docs can
reference specific requirements with a plain internal {doc} role instead
of cross-project intersphinx.
pip install -r scripts/requirements.txt
hugo --gc # produces public/index.json
python scripts/hugo_json_to_objects_inv.py public/index.json hugo-objects.inv docs/_extra/nav.json
python -m sphinx -b html docs docs/_build/html -WOpen docs/_build/html/index.html. Skipping the Hugo build/conversion steps
still produces a working build — hugo: cross-references and the shared nav
bar just won't resolve.
hugo.tomldeclares a customJSONoutput format on the home page, sohugo buildadditionally writespublic/index.json— a machine-readable inventory of every page plus the main menu (seelayouts/index.json.json).scripts/hugo_json_to_objects_inv.pyturns that inventory into a real Sphinxobjects.inv(viasphobjinv), sodocs/conf.py'sintersphinx_mappingcan resolve{doc}`hugo:<path>`references into Hugo pages — the same mechanism Sphinx projects use to link into each other, just pointed at a generated (rather than Sphinx-built) inventory. It also copies the nav portion tonav.json, used below.scripts/hugo_intersphinx.pyis a small sharedconf.pyhelper (reusable by any future Sphinx project added under this repo) that wires this up, plus the shared header assets.docs/_static/shared-nav.{js,css}fetchnav.jsonat runtime and render a header matching the Hugo site's ownlayouts/partials/site-header.html(same classes, logo, CTA button), so navigation looks and behaves the same on both sites without duplicating template logic per theme.- Build order matters and is one-directional: Hugo → conversion script →
docs/build. Hugo linking into specific docs/requirements pages is intentionally not build-time validated — automating that too would require Sphinx to build before Hugo, creating a real circular dependency. Link to specific pages with plain, stable URLs instead (e.g. the "Requirements" nav entry inhugo.tomljust points at/docs/requirements/). .github/workflows/pages.ymlruns the steps above in order, building Sphinx's output straight intopublic/docs/(rather thandocs/_build/html/followed by a copy) so the Hugo and Sphinx sites land under onepublic/tree for the single combined Pages artifact upload.
- This repository intentionally avoids committing generated build output.
- The workflow uses the current GitHub Pages artifact deployment model.
- SVG assets are included so the first deployment works without external images.