Skip to content

Jekyll to Hugo migration - #979

Open
MuhammadAashirAslam wants to merge 35 commits into
masterfrom
hugo
Open

MuhammadAashirAslam wants to merge 35 commits into
masterfrom
hugo

Conversation

@MuhammadAashirAslam

@MuhammadAashirAslam MuhammadAashirAslam commented Aug 28, 2026

Copy link
Copy Markdown
Collaborator

This PR completes the migration of the preCICE website from Jekyll to Hugo.

Summary of Changes

1. Directory Structure & Asset Migration

  • Static Assets Relocation: Moved public static assets from legacy root folders (images/, css/, js/) into Hugo's standard static/ directory (static/images/, static/css/, static/js/, static/assets/data/).
  • Content Hierarchy: Reorganized Markdown files from into Hugo's section-aware content/ tree (content/docs/, content/community/, content/tutorials/, content/about.md).

2. Architecture & Dependency Management

  • Hugo Modules: Replaced Git submodules and custom Ruby import scripts with native Hugo Modules (config/_default/module.toml, go.mod, go.sum). Imported adapter and tutorial repositories are now fetched and pinned as Hugo modules.
  • Configuration: Structured site settings into modular TOML files (config/_default/hugo.toml, module.toml, params.toml).

3. Layouts, Partials & Shortcodes

  • Reimplemented all Jekyll Liquid templates and includes in Go HTML templates (layouts/ and layouts/partials/).
  • Ported custom Jekyll tags to native Hugo shortcodes ({{< warning >}}, {{< note >}}, {{< tip >}}, {{< pagebreak >}}, etc.).
  • Preserved all existing permalinks and historical URLs using Hugo aliases to ensure zero broken bookmarks or external links.

4. Search Integration (Algolia)

  • Migrated the search pipeline to a dedicated Node.js indexing tool (tools/algolia-index.mjs).
  • Hugo generates public/algolia.json during the production build, which the CLI validates (schema check, record size limits) and uploads using atomic index replacement.

5. Offline PDF Generation

  • Ported the Prince XML documentation build to Hugo (tools/pdf-docs.sh).
  • Configured dedicated PDF layout templates (config/pdf/, layouts/partials/pdf/) to build the consolidated offline PDF directly from the Hugo content tree.

6. GitHub Actions & Automation Workflows

  • build.yml: Streamlined CI to test both standard website generation and Algolia dry-run indexing.
  • update-submodules.yml: Modernized to update Hugo module revisions (tools/sync_hugo_modules.py), supporting both daily schedules and repository_dispatch triggers from external repositories.
  • update-discourse-data.yml: Scheduled sync for Discourse forum topics, announcements, and FAQs.
  • update-algolia.yml: Automated search index publishing on releases/pushes.

7. Documentation & Contributor Setup

  • Updated README.md with streamlined local development instructions (hugo server) and contributing checks (pre-commit).
  • Updated developer documentation (content/docs/docs-meta/) covering site architecture, adding imported repositories, search indexing, and PDF generation.

Testing & Verification

  • Local development server runs cleanly (hugo server).
  • Production build passes without errors or warnings (hugo --gc --minify --cleanDestinationDir --environment production).
  • Algolia search index dry-run validation passes (npm --prefix tools run algolia:index -- --dry-run).
  • PDF generation produces clean output (./tools/pdf-docs.sh).
  • Static assets, images, and fonts resolve correctly across all pages.
  • URL aliases, navigation sidebars, and internal links verified.

MuhammadAashirAslam and others added 24 commits August 9, 2026 18:37
Co-authored-by: Gerasimos Chourdakis <gerasimos.chourdakis@ipvs.uni-stuttgart.de>
…#973)

Co-authored-by: Gerasimos Chourdakis <gerasimos.chourdakis@ipvs.uni-stuttgart.de>
@MakisH
MakisH self-requested a review August 29, 2026 09:51
@MakisH MakisH self-assigned this Aug 29, 2026
@MakisH MakisH added the technical Technical issues on the website label Aug 29, 2026
@MakisH

MakisH commented Aug 29, 2026

Copy link
Copy Markdown
Member

Thank you for the PR and again for all the work in the previous PRs! Building everything together already looks very complete and almost indistinguishable from the previous state.

Some issues on the current state:

  1. In some pages (section overviews of imported modules with multiple pages), links to the rest of the sections appear at the bottom of the overview (section) page. Any idea why? We should remove these. Appears in (links to localhost):
  2. The system tests page needs to be updated to point to tutorials/tests/README.md (previously tutorials/tools/tests/README.md).
  3. In the About page, there is a statement about the development of the website. I can add more details there to keep the whole history in context. I would link to your GSoC report. Is that ok? I will do that after your changes.
  4. In the search, publications still show up as individual pages (example). Could we add some text around it explaining that this is a publication entry and point to the literature guide for more?
    1. In the linked example, the rendering of the card shows some entries outside the card frame.

Could you please also resolve the merge conflicts? They should mostly be trivial.

@MakisH

MakisH commented Aug 29, 2026

Copy link
Copy Markdown
Member

Also closes #342, #471, #538, #539, #590, #932.

Related to #411, #472.

It also addresses many of the points discussed in #897 (still with Prince).

# Conflicts:
#	_config.yml
#	_includes/news_banner.html
#	imported/fenicsx-adapter
#	imported/micro-manager
#	imported/openfoam-adapter
#	imported/preeco-orga
#	imported/tutorials
#	static/assets/data/news.json
@MuhammadAashirAslam

Copy link
Copy Markdown
Collaborator Author
  1. Done (9d35e46)
  2. Done (fa1bcb1)
  3. Yeah sure 😊
  4. Done (ccbdd50), added some information and link to the literature guide

Also solved the merge conflicts

@MakisH

MakisH commented Sep 11, 2026

Copy link
Copy Markdown
Member

Since a new Hugo release is available, let's see: how easy is it to update?

@MuhammadAashirAslam

MuhammadAashirAslam commented Sep 11, 2026

Copy link
Copy Markdown
Collaborator Author

Bumped the versions (also for GO while we at it ) in 95a5610 , other than that nothing interesting caught my eye in the new release.

@fsimonis fsimonis left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

First of all, this port is AMAZING, so well done @MuhammadAashirAslam!
Building this is so easy now and live editting is now actually a reality.
That said, is it possible to live edit files in the included modules? It would be a pretty big downer if this wasn't possible.

I tested the version locally and found some things which I commented on the files. Most important here is that the modules file needs some kind of autogeneration. Currently this is unmaintainable.

The sidebar still has links to the old URLs, so they trigger a redirect and thus a stutter. They should link to the new location.
The sidebar is not really needed. We should still port that to the menus. Maybe in another PR.

We have some weird links that lead to strange behaviour when navigating the website as they are located in multiple places at the same time: The quickstart and the current events.
This looks super weird, we need some solution here.

For the current events: @MakisH maybe the cleanest is to redirect to the entry. Current events could be always visible links above the sidebar, when they exist.

I think the Quickstart needs to decide if it wants to be /tutorial/quickstart/ or /quickstart/.

The community sections don't have section pages yet as they are empty.
Also the minisymposia section is called "Other events", we should maybe fix this @MakisH.

Also the README reads weird. Lines are broken at 80 chars. Could you break on sentence ends. This makes it easier to read.

Comment thread layouts/index.sitemapindex.xml Outdated

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This is now actually wrong as we don't build doxygen here anymore.
The file can simply be removed as hugo builds a sitemap

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Done 609cb03

Comment thread doxygen/patch.sh Outdated
target = "content/community/contribute/guidelines"
files = ["! guidelines-adapters.md"]

# This file is automatically generated by tools/sync_tutorials.py

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

There is no tools/sync_tutorials.py.

Without automation, I would say that this file is unmaintainable.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This was intended to be here, good catch: #945 (comment)

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

There are some problems with this workflow , lets do this after the hugo site is live (so we can discuss it properly in a separate PR)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Ah. From experience, I can tell that poking at git repos is often easiest with a local shallow clone.

You can create a temporary directory in memory: https://docs.python.org/3/library/tempfile.html#tempfile.TemporaryDirectory
And then git clone --depth=1 all directories you need there.
Then work on these local copies and they clean up automatically.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

For completeness of the review, I would suggest opening a draft PR (or issue) to start the discussion based on the current state. Until then, we should at least document a workaround, so that we can update the modules in the meantime.

Comment thread layouts/robots.txt Outdated
@MakisH MakisH mentioned this pull request Sep 14, 2026
@MuhammadAashirAslam

Copy link
Copy Markdown
Collaborator Author

First of all, this port is AMAZING, so well done @MuhammadAashirAslam!

Thankyou 🤗

That said, is it possible to live edit files in the included modules? It would be a pretty big downer if this wasn't possible.

Yes it is possible , you just have to point the modules to your local directory of the module with hugo serve . Example , if i have open foam and the precice website folder in the same directory i can do this.

HUGO_MODULE_REPLACEMENTS="github.com/precice/openfoam-adapter -> $(pwd)/../openfoam-adapter" hugo server

For more you can just add more paths with a separation of a comma

HUGO_MODULE_REPLACEMENTS="github.com/precice/openfoam-adapter -> $(pwd)/../openfoam-adapter, github.com/precice/tutorials -> $(pwd)/../tutorials" hugo server

Most important here is that the modules file needs some kind of autogeneration. Currently this is unmaintainable.

This is a problem i have tried python scripts but they have some drawbacks and occasionally i hit the github too many requests error in the workflow . I will work on this a bit more and start with the tutorials as they require the most changing (adding new tutorials ) while other modules aren't changed that much.

The sidebar still has links to the old URLs, so they trigger a redirect and thus a stutter.

Done 6750fd7

The sidebar is not really needed. We should still port that to the menus. Maybe in another PR.

Looking in to this

Also the README reads weird. Lines are broken at 80 chars. Could you break on sentence ends. This makes it easier to read.

Done 5af53c3

@fsimonis

Copy link
Copy Markdown
Member

HUGO_MODULE_REPLACEMENTS="github.com/precice/openfoam-adapter -> $(pwd)/../openfoam-adapter, github.com/precice/tutorials -&gt; $(pwd)/../tutorials" hugo server

Haha. This is not really easy to use. Could you provide a python wrapper for the modules that builds this override, sets it as an env and then runs hugo with the remaining arguments?

tools/local-hugo --tutorials=../tutorials server

That would be super helpful!

This is a problem i have tried python scripts but they have some drawbacks and occasionally i hit the github too many requests error in the workflow . I will work on this a bit more and start with the tutorials as they require the most changing (adding new tutorials ) while other modules aren't changed that much.

Ah. From experience, I can tell that poking at git repos is often easiest with a local shallow clone.

You can create a temporary directory in memory: tempfile.TemporaryDirectory
And then git clone --depth=1 (you could also --filter) all projects you need there and work on these local copies, which are then also clean up automatically.

Comment thread README.md
Comment on lines +100 to +102
The content of the preCICE webpage is licensed under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/deed.en).
Third-party licenses are collected in the `licenses` subfolder.
preCICE itself is licensed under [LGPL v3](https://www.gnu.org/licenses/lgpl-3.0.en.html).

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I updated this section in #986, which will need to be adjusted for the currently used libraries.

I would still keep some reference to documentation-theme-jekyll, as there is some continuity from that one.

@fsimonis

Copy link
Copy Markdown
Member

As far as I can tell, the only thing missing now is generating the modules file.

I see this as a hard requirement. The local hugo #987 is a nice to have.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

technical Technical issues on the website

Projects

Development

Successfully merging this pull request may close these issues.

4 participants