diff --git a/.github/workflows/book-gh-pages.yml b/.github/workflows/book-gh-pages.yml
index 18564ae4..bef9695e 100644
--- a/.github/workflows/book-gh-pages.yml
+++ b/.github/workflows/book-gh-pages.yml
@@ -4,7 +4,9 @@ on:
# Allows running this workflow manually
workflow_dispatch:
push:
- branches: [master]
+ branches:
+ - master
+ - nixos-24.05
permissions:
contents: read
@@ -17,22 +19,38 @@ concurrency:
jobs:
deploy:
if: "github.repository_owner == 'epics-extensions'"
+
permissions:
pages: write
id-token: write
+
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
+
runs-on: ubuntu-latest
+
steps:
+
+ # Checkout all documentation versions
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
+ ref: main
+ path: dev
persist-credentials: false
+ - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+ with:
+ ref: nixos-24.05
+ path: nixos-24.05
+ persist-credentials: false
+
- uses: cachix/install-nix-action@3715ab1a11cac9e991980d7b4a28d80c7ebdd8f9 # v27
- - name: "Build documentation book"
+ - uses: DeterminateSystems/magic-nix-cache-action@87b14cf437d03d37989d87f0fa5ce4f5dc1a330b # v8
+
+ - name: "Build documentation books"
run: |
- nix build '.#docs' --print-build-logs
- cp -Lr --no-preserve=mode,ownership ./result/share/doc/epnix/html ./book
+ nix run --print-build-logs './dev#ci-scripts/build-docs-multiversion'
+
- name: Setup Pages
uses: actions/configure-pages@983d7736d9b0ae728b81ab479565c72886d7745b # v5.0.0
- name: Upload artifact
diff --git a/pkgs/ci-scripts/build-docs-multiversion.nix b/pkgs/ci-scripts/build-docs-multiversion.nix
new file mode 100644
index 00000000..51013dda
--- /dev/null
+++ b/pkgs/ci-scripts/build-docs-multiversion.nix
@@ -0,0 +1,47 @@
+{
+ writeShellApplication,
+ writeText,
+ writers,
+ epnixLib,
+}: let
+ stable = "nixos-24.05";
+ versions = [
+ "dev"
+ "nixos-24.05"
+ ];
+ baseurl = "https://epics-extensions.github.io/EPNix";
+ # Make a redirection using the tag,
+ # with a delay of 1 second, because Google considers them not permanent
+ #
+ # We need non-permanent redirections, because the redirection will change
+ # when a new stable version is released
+ redirect = writeText "stable-redirect.html" ''
+
+ '';
+
+ versionInfo = ver: {
+ name = ver;
+ url = "${baseurl}/${ver}/";
+ };
+ versions_json = writers.writeJSON "versions.json" (map versionInfo versions);
+in
+ writeShellApplication {
+ name = "build-docs-multiversion";
+
+ text = ''
+ for version in ${toString versions}; do
+ mkdir -p "./book/$version"
+ cp ${versions_json} "./$version/docs/versions.json"
+ git -C "$version" add docs/versions.json
+ nix build "./$version#docs" --print-build-logs
+ cp -LrT --no-preserve=mode,ownership ./result/share/doc/epnix/html "./book/$version"
+ done
+ cp ${redirect} ./book/index.html
+ '';
+
+ meta = {
+ description = "Build ";
+ maintainers = with epnixLib.maintainers; [minijackson];
+ hidden = true;
+ };
+ }
diff --git a/pkgs/default.nix b/pkgs/default.nix
index 295b3041..94ee79e8 100644
--- a/pkgs/default.nix
+++ b/pkgs/default.nix
@@ -106,5 +106,9 @@ in
# Documentation support packages
psu-simulator = callPackage ./doc-support/psu-simulator {};
+
+ ci-scripts = recurseExtensible (_self: {
+ build-docs-multiversion = callPackage ./ci-scripts/build-docs-multiversion.nix {};
+ });
});
}