Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
60 commits
Select commit Hold shift + click to select a range
565c7a5
Convert Markdown and ODT documents to AsciiDoc
736-c41-2c1-e464fc974 Sep 14, 2026
b321927
Add devenv for local docs rendering via open-govpress
736-c41-2c1-e464fc974 Sep 14, 2026
9e5192d
Add CI workflow to render docs and publish to GitHub Pages
736-c41-2c1-e464fc974 Sep 14, 2026
1321ff4
Make checklist checkboxes interactive
736-c41-2c1-e464fc974 Sep 14, 2026
af405bb
Fix footnotes embedded in heading text and a stray escape
736-c41-2c1-e464fc974 Sep 14, 2026
2a6ddf0
Flatten docs/en/ to docs/ ahead of localisation
736-c41-2c1-e464fc974 Sep 15, 2026
3e36c98
Carry all five languages in em002-5.adoc
736-c41-2c1-e464fc974 Sep 15, 2026
2366419
Build the five languages in parallel and publish one site
736-c41-2c1-e464fc974 Sep 15, 2026
0e08d91
Translate README.adoc and docs/index.adoc into all five languages
736-c41-2c1-e464fc974 Sep 15, 2026
f2eecdd
Translate the three Em002-2 checklists into all five languages
736-c41-2c1-e464fc974 Sep 15, 2026
1945202
Translate the community checklist and README template
736-c41-2c1-e464fc974 Sep 15, 2026
b81c563
Translate Em002 Strategic Guidelines into all five languages
736-c41-2c1-e464fc974 Sep 15, 2026
a4316e7
Translate Em002-1 Practical Guidelines into all five languages
736-c41-2c1-e464fc974 Sep 15, 2026
76da388
Translate Em002-2 Instructions for Publishing OSS into all five langu…
736-c41-2c1-e464fc974 Sep 15, 2026
069ee06
Translate Em002-7 Procurement and OSS into all five languages
736-c41-2c1-e464fc974 Sep 15, 2026
79e85b7
Translate Em002-3 OSS Licensing Guidelines into all five languages
736-c41-2c1-e464fc974 Sep 15, 2026
94b4dcf
Translate Em002-4 OSS Community Guidelines into all five languages
736-c41-2c1-e464fc974 Sep 15, 2026
a632e47
Translate Em002-6 FAQ on OSS and Art. 9 EMOTA into all five languages
736-c41-2c1-e464fc974 Sep 15, 2026
47eb8b7
Use EMBAG as the act abbreviation in the Romansh Em002-6
736-c41-2c1-e464fc974 Sep 15, 2026
d83480e
Restore the title-logo attributes and localise the Kennzeichnung
736-c41-2c1-e464fc974 Sep 15, 2026
4d1056c
Convert three non-diagram graphics to localised AsciiDoc tables
736-c41-2c1-e464fc974 Sep 15, 2026
15f9539
Replace the remaining diagram bitmaps with localised Mermaid and SVG
736-c41-2c1-e464fc974 Sep 15, 2026
72d960a
Keep every main build and release tag on the published site
736-c41-2c1-e464fc974 Sep 16, 2026
b059a07
Make the links on the generated pages look like links
736-c41-2c1-e464fc974 Sep 16, 2026
2d0742b
Adopt the git hooks from loom, adapted to a documentation repo
736-c41-2c1-e464fc974 Sep 16, 2026
8cd7350
Merge main into feature/localise-diagrams
736-c41-2c1-e464fc974 Sep 16, 2026
00e1d01
Bump the document revision to 2.0
736-c41-2c1-e464fc974 Sep 16, 2026
21a368d
Give each ref its own Pages deployment version
736-c41-2c1-e464fc974 Sep 16, 2026
862c700
Merge pull request #1 from 736-c41-2c1-e464fc974/feature/localise-dia…
736-c41-2c1-e464fc974 Sep 16, 2026
dbc69d7
Move the workflows off the Node 20 actions
736-c41-2c1-e464fc974 Sep 16, 2026
9a8e2e0
Point the open-govpress comment at its actual home
736-c41-2c1-e464fc974 Sep 16, 2026
ff889a8
Bump the bundled open-govpress to 0.0.12
736-c41-2c1-e464fc974 Sep 16, 2026
0692f87
Replace the six non-tabular tables in Em002 with lists
736-c41-2c1-e464fc974 Sep 16, 2026
37aed7b
Replace the nine non-tabular tables in Em002-1 with description lists
736-c41-2c1-e464fc974 Sep 17, 2026
e7ebc1d
Replace the ten project fact-sheets in Em002-3 with description lists
736-c41-2c1-e464fc974 Sep 17, 2026
dccbe19
Replace the eight community-concept tables in Em002-4 with descriptio…
736-c41-2c1-e464fc974 Sep 17, 2026
8c819dd
Replace the FAQ and abbreviation tables in Em002-6 with lists
736-c41-2c1-e464fc974 Sep 17, 2026
5272066
Replace the three non-tabular tables in Em002-7 with a sidebar and tw…
736-c41-2c1-e464fc974 Sep 17, 2026
78d5d42
Record why Em002-5's table keeps its block title
736-c41-2c1-e464fc974 Sep 17, 2026
490df5b
Give the four OSS checklists write-in fields instead of black bars
736-c41-2c1-e464fc974 Sep 17, 2026
c4ff949
Bump the bundled open-govpress to 0.0.13
736-c41-2c1-e464fc974 Sep 17, 2026
ebe7a61
Repair three misspelled source keys in Em002-1
736-c41-2c1-e464fc974 Sep 17, 2026
c385b0a
Make the digital-sovereignty grid fillable and its two key tables lists
736-c41-2c1-e464fc974 Sep 17, 2026
bc124ab
Make the AsciiDoc gate reach conversion, and check citations against …
736-c41-2c1-e464fc974 Sep 17, 2026
6dec878
Extract the shared abbreviation, glossary and reference lists into pa…
736-c41-2c1-e464fc974 Sep 17, 2026
b32c6f2
Point the two unresolved citations at the entries they meant
736-c41-2c1-e464fc974 Sep 17, 2026
985c6be
Replace the three documents' inline lists with tagged partial includes
736-c41-2c1-e464fc974 Sep 17, 2026
116584b
Follow the KKB-MB fold into Em002-2's escaped references
736-c41-2c1-e464fc974 Sep 17, 2026
bc071f4
Drop the seven header attributes open-govpress already sets
736-c41-2c1-e464fc974 Sep 17, 2026
26ba926
Write the repository URL once per document and reference it
736-c41-2c1-e464fc974 Sep 17, 2026
7091275
Bump the bundled open-govpress to 0.0.14
736-c41-2c1-e464fc974 Sep 17, 2026
5ccbaee
Give Em002-5's target-group matrix a turned page
736-c41-2c1-e464fc974 Sep 17, 2026
8397e57
Bump the bundled open-govpress to 0.0.15
736-c41-2c1-e464fc974 Sep 17, 2026
e4a562f
Convert TRANSLATING.md to AsciiDoc
736-c41-2c1-e464fc974 Sep 18, 2026
4d06a97
Document the development environment setup
736-c41-2c1-e464fc974 Sep 18, 2026
6361387
Correct the stale and invented claims in TRANSLATING
736-c41-2c1-e464fc974 Sep 18, 2026
19011a7
Give the single-file render example the trailing slash it needs
736-c41-2c1-e464fc974 Sep 18, 2026
648d9b0
Clean up the "See:" footnotes and unbreak the bracketed citations
736-c41-2c1-e464fc974 Sep 18, 2026
87f07b2
Print the Confederation logo in colour
736-c41-2c1-e464fc974 Sep 18, 2026
d732c1c
Keep the black mark on what is not a guideline
736-c41-2c1-e464fc974 Sep 18, 2026
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
35 changes: 35 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# http://editorconfig.org

# A special property that should be specified at the top of the file outside of
# any sections. Set to true to stop .editor config file search on current file
root = true

[*]
# Indentation style
# Possible values - tab, space
indent_style = space

# Indentation size in single-spaced characters
# Possible values - an integer, tab
indent_size = 2

# Line ending file format
# Possible values - lf, crlf, cr
end_of_line = lf

# File character encoding
# Possible values - latin1, utf-8, utf-16be, utf-16le
charset = utf-8

# Denotes whether to trim whitespace at the end of lines
# Possible values - true, false
trim_trailing_whitespace = true

# Denotes whether file should end with a newline
# Possible values - true, false
insert_final_newline = true

# Verbatim legal text, reproduced exactly as published. Its roman-numeral
# hanging indents are not ours to normalise.
[LICENSE]
indent_size = unset
8 changes: 8 additions & 0 deletions .envrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#!/usr/bin/env bash
# shellcheck disable=all # https://devenv.sh/integrations/direnv/#configure-shell-activation

eval "$(devenv direnvrc)"

# You can pass flags to the devenv command
# For example: use devenv --impure --option services.postgres.enable:bool true
use devenv
56 changes: 56 additions & 0 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
name: Lint

on:
push:
branches: [main]
pull_request:

permissions:
contents: read

# Deliberately not the `pages` group that render-docs.yml uses: linting does not
# touch the deployment, and sharing that group would queue every lint run behind
# a publish.
concurrency:
group: lint-${{ github.ref }}
cancel-in-progress: true

jobs:
git-hooks:
runs-on: ubuntu-latest
steps:
# The hooks read the index, not just the work tree -- check-asciidoc and
# site-index.sh both call `git ls-files` -- so this needs a real checkout.
# Full history is not needed: every hook looks at the tree as it stands.
- uses: actions/checkout@v7

- name: Install Nix
uses: cachix/install-nix-action@v31

# Pulls the prebuilt devenv closure instead of compiling it on the runner.
- name: Use the devenv binary cache
uses: cachix/cachix-action@v17
with:
name: devenv

- name: Install devenv
run: nix profile install nixpkgs#devenv

# `prek run --all-files` rather than `devenv test`: devenv reports only
# that the git-hooks task failed, without saying which hook or why, even
# with tasks."devenv:git-hooks:run".showOutput set. Running prek directly
# prints the per-hook result and the offending lines, which is the whole
# point of having this job.
#
# --show-diff-on-failure matters because several of these hooks fix the
# file rather than just complaining (end-of-file-fixer, dos2unix,
# trim-trailing-whitespace, nixfmt). Without the diff, CI would report
# "files were modified by this hook" and show nothing else.
#
# `--option env.cicd:bool true` drops the interactive-only packages, most
# of which is VS Code. Without it this job would download the whole
# editor closure on every push just to run the hooks.
- name: Run every git hook over every file
run: |
devenv --option env.cicd:bool true \
shell -- prek run --all-files --show-diff-on-failure
183 changes: 183 additions & 0 deletions .github/workflows/render-docs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,183 @@
name: Render docs

on:
push:
branches: [main]
# Docs releases only. `open-govpress-v*` tags the renderer binary released
# from this repo (see GOVPRESS_URL below), and must not publish a docs
# archive of its own -- `v*` excludes it by construction.
tags: ['v*']
pull_request:

permissions:
contents: read

concurrency:
group: pages
cancel-in-progress: false

env:
# Keep in sync with devenv.nix's govpressVersion/govpressUrl/govpressSha256.
# Fetched from a GitHub Release rather than committed to the repo: at
# ~112MiB it clears GitHub's 100MB hard limit on regular git objects, and
# this repo is a fork, which GitHub's LFS policy blocks from uploading
# *new* LFS objects at all -- release assets hit neither limit.
GOVPRESS_VERSION: "0.0.15"
GOVPRESS_URL: https://github.com/736-c41-2c1-e464fc974/opensource-guidelines/releases/download/open-govpress-v0.0.15/open-govpress-0.0.15-linux-x64.tar.gz
GOVPRESS_SHA256: e676d20f57c7376b24e448e01d9783bd31c9b45ee4126e0865b46890d4171ff5

jobs:
# One job per language. Every document carries all five languages in one
# file, so the same sources are rendered five times, each pinned with
# `--lang`, into a directory of its own -- `-o <dir>` names outputs
# `<basename>.pdf` with no language in the filename, so the directory is
# what keeps them apart.
render:
runs-on: ubuntu-latest
strategy:
# One broken language should report itself rather than cancel the other
# four and hide whether they were fine.
fail-fast: false
matrix:
lang: [en, de, fr, it, rm]
steps:
- uses: actions/checkout@v7

- name: Cache open-govpress download
uses: actions/cache@v6
with:
path: /tmp/open-govpress.tar.gz
key: open-govpress-${{ env.GOVPRESS_SHA256 }}

- name: Install Xvfb
run: sudo apt-get update && sudo apt-get install -y xvfb

- name: Download and extract open-govpress
run: |
if [ ! -f /tmp/open-govpress.tar.gz ]; then
curl -fL --retry 3 -o /tmp/open-govpress.tar.gz "$GOVPRESS_URL"
fi
echo "$GOVPRESS_SHA256 /tmp/open-govpress.tar.gz" | sha256sum -c -
mkdir -p /tmp/open-govpress
tar xzf /tmp/open-govpress.tar.gz -C /tmp/open-govpress
bin=$(find /tmp/open-govpress -maxdepth 2 -name open-govpress -type f)
echo "OGP_BIN=$bin" >> "$GITHUB_ENV"

- name: Render all documents in ${{ matrix.lang }}
env:
LANG_ID: ${{ matrix.lang }}
run: |
mkdir -p "out/$LANG_ID"

# A document may opt out of a language with `:l10n-languages:` in its
# header. Absent means all five. Skipping it here is what makes an
# untranslated document *absent* from that language rather than
# rendered as a blank PDF -- no ifeval:: branch matches, so the body
# would be empty.
#
# `docs/partials/` is excluded: it holds fragments that are
# `include::`d into the documents, and a fragment is not a document.
docs=()
while IFS= read -r doc; do
langs=$(sed -n 's/^:l10n-languages:[[:space:]]*//p' "$doc" | head -1)
if [ -z "$langs" ] || grep -qw "$LANG_ID" <<<"$langs"; then
docs+=("$doc")
else
echo "skipping $doc (no $LANG_ID translation)"
fi
done < <(git ls-files '*.adoc' ':!docs/partials/*')

xvfb-run -a "$OGP_BIN" render --no-sandbox \
--lang "$LANG_ID" -o "out/$LANG_ID" "${docs[@]}"

- name: Generate language index page
run: tools/site-index.sh "${{ matrix.lang }}" "out/${{ matrix.lang }}"

- name: Upload build artifact
uses: actions/upload-artifact@v7
with:
# `path: out/` so the archive's root is `<lang>/`, which is what lets
# the collect job merge all five into one tree.
name: pdfs-${{ matrix.lang }}
path: out/

collect:
needs: render
runs-on: ubuntu-latest
permissions:
# `contents: write` is for pushing the accumulated site to the
# `site-history` branch. Job-level permissions replace the top-level block
# outright rather than adding to it, so the read scopes have to be
# restated here.
contents: write
actions: read
steps:
- uses: actions/checkout@v7

- name: Download every language
uses: actions/download-artifact@v8
with:
pattern: pdfs-*
# Without this each archive lands under its own `pdfs-<lang>/`
# directory instead of merging into `site/<lang>/`.
merge-multiple: true
path: site

- name: Generate language chooser
run: tools/site-root.sh site

- name: Upload site artifact
uses: actions/upload-artifact@v7
with:
name: site
path: site/

# A Pages deployment always replaces the whole site, so publishing an
# older build alongside the current one means uploading both -- which
# means remembering the older one somewhere between runs. That somewhere
# is the `site-history` branch.
- name: Overlay this build onto the published site
if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/v'))
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
KEEP_COMMITS: "10"
run: tools/site-publish.sh site .site-history

# upload-pages-artifact excludes `.git` from its tar since v4, but the
# site is re-published from a fresh clone each run and the object store
# has no business being in the artifact -- dropping it here keeps that
# guarantee ours rather than the action's.
- name: Strip the git metadata
if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/v'))
run: rm -rf .site-history/.git

- name: Upload Pages artifact
if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/v'))
uses: actions/upload-pages-artifact@v5
with:
path: .site-history/

deploy:
if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/v'))
needs: collect
runs-on: ubuntu-latest
permissions:
pages: write
id-token: write
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- name: Deploy to GitHub Pages
id: deployment
env:
# actions/deploy-pages keys the deployment on GITHUB_SHA alone, and
# Pages treats a repeat of an already-published version as a no-op --
# reporting success while continuing to serve the earlier build. A
# release tag normally points at the commit main has just published,
# so the tag's archive would never reach the site. Qualifying the
# version with the ref name makes each ref its own deployment.
# Undocumented but stable: the runner layers step `env` over the
# default variables, and pages_build_version is a free-form string.
GITHUB_SHA: ${{ github.sha }}-${{ github.ref_name }}
uses: actions/deploy-pages@v5
20 changes: 20 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# devenv / direnv
.devenv*
.direnv/

# Generated by devenv from the git-hooks.hooks block in devenv.nix, as a
# symlink into the nix store. Committing it would pin hook versions to one
# machine's store paths.
/.pre-commit-config.yaml

# open-govpress: downloaded from a GitHub Release and extracted on demand,
# see devenv.nix
/open-govpress/.cache/
/open-govpress/.extracted/

# rendered output (build artifacts, not source)
*.pdf

# the per-language site built by `render-docs` locally and by CI
/build/
/site/
Loading