Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
64 commits
Select commit Hold shift + click to select a range
b6a5bac
feat: easy literate programming (#809)
david-christiansen Mar 27, 2026
bc21b8e
chore: bump requests from 2.32.5 to 2.33.0 in /browser-tests (#813)
dependabot[bot] Mar 27, 2026
4f0fa5f
chore: bump marocchino/sticky-pull-request-comment from 2 to 3 (#808)
dependabot[bot] Mar 27, 2026
be4ae49
chore: bump dawidd6/action-download-artifact from 17 to 19 (#807)
dependabot[bot] Mar 27, 2026
7ae82ac
chore: bump toolchain to v4.29.0 (#814)
Garmelon Mar 30, 2026
ece0f24
chore: bump pygments from 2.19.2 to 2.20.0 in /browser-tests (#815)
dependabot[bot] Mar 31, 2026
286953e
fix: pin TypeScript version (#818)
david-christiansen Mar 31, 2026
19adf7c
fix: #doc should create a constant ignoring the current namespace (#824)
robsimmons Apr 7, 2026
e634935
fix: don't have `null` appear in search (#822)
robsimmons Apr 7, 2026
8606fc4
chore: remove local actionlint (#826)
david-christiansen Apr 8, 2026
a7b8245
chore: bump toolchain to v4.30.0-rc1 (#827)
david-christiansen Apr 8, 2026
f8ec74f
chore: bump actions/setup-node from 4 to 6 (#821)
dependabot[bot] Apr 8, 2026
54a580a
chore: bump dawidd6/action-download-artifact from 19 to 20 (#820)
dependabot[bot] Apr 8, 2026
5eb5ac5
doc: document table directive (#828)
david-christiansen Apr 9, 2026
03cfdb9
doc: add `ref` to Manual's manual (#829)
david-christiansen Apr 9, 2026
c42beab
fix: add type annotation to metadata (#830)
david-christiansen Apr 10, 2026
2ff61a5
chore: add GitHub Action to update SubVerso (#831)
david-christiansen Apr 11, 2026
96a7696
chore: update SubVerso (#832)
david-christiansen Apr 11, 2026
0686550
chore: bump SubVerso (#833)
david-christiansen Apr 11, 2026
75d1864
chore: bump pytest from 8.4.2 to 9.0.3 in /browser-tests (#836)
dependabot[bot] Apr 14, 2026
0bce276
chore: bump toolchain to v4.30.0-rc2 (#841)
Garmelon Apr 18, 2026
5cd850b
chore: bump actions/github-script from 8 to 9 (#839)
dependabot[bot] Apr 20, 2026
73836fe
fix: linter activation (#843)
david-christiansen Apr 22, 2026
06759f8
feat: customizable search priorities (#844)
david-christiansen Apr 23, 2026
539b697
chore: add !consistent PR-comment auto-fix for lean-toolchain drift (…
kim-em Apr 23, 2026
639e4a1
chore: bump actions/github-script from 8 to 9 (#848)
dependabot[bot] Apr 24, 2026
dfd33c8
chore: format Python (#838)
david-christiansen Apr 24, 2026
459055d
fix: remove auto-format action and fix Python formatting (#850)
david-christiansen May 1, 2026
427140b
chore: bump dawidd6/action-download-artifact from 20 to 21 (#849)
dependabot[bot] May 1, 2026
ba73c23
chore: add website to README (#851)
david-christiansen May 1, 2026
66f4575
chore: bump urllib3 from 2.6.3 to 2.7.0 in /browser-tests (#855)
dependabot[bot] May 13, 2026
5801d70
feat: search page (#847)
david-christiansen May 15, 2026
c004fc5
feat: diagrams (#856)
david-christiansen May 18, 2026
e0f7f9a
chore: bump idna from 3.11 to 3.15 in /browser-tests (#857)
dependabot[bot] May 26, 2026
ca0197d
chore: bump toolchain to v4.30.0 (#860)
Garmelon May 26, 2026
ada2a77
chore: expand warning for the `verso.code.warnLineLength` linter (#858)
b-mehta May 27, 2026
8bcbd2b
fix: some search results had absolute instead of relative URLs (#861)
david-christiansen May 27, 2026
83b4c6c
refactor: handle error and warning logs consistently (#862)
david-christiansen May 29, 2026
891a59f
chore: bump toolchain to v4.31.0-rc1 (#864)
Garmelon Jun 1, 2026
2458c83
chore: adapt to SubVerso lexical(ish) tokens (#866)
david-christiansen Jun 3, 2026
d255dcb
chore: adapt to upstream SubVerso updates and fix hover bug (#868)
david-christiansen Jun 3, 2026
62e7546
chore: bump SubVerso dependency (#870)
david-christiansen Jun 4, 2026
8e3468a
feat: for HTML output, add Table of Contents resize handle (#846)
richardlford Jun 5, 2026
916bb96
chore: bump toolchain to v4.31.0-rc2 (#871)
Garmelon Jun 8, 2026
14e7bf2
chore: add test for nested tactics (#869)
david-christiansen Jun 9, 2026
151f8d8
feat: improve role resolution error diagnostics (#763)
ejgallego Jun 9, 2026
4ac6720
perf: avoid re-exporting imported doc expanders (#854)
ejgallego Jun 9, 2026
4c6b02e
fix: don't call inPart twice in tutorials (#872)
david-christiansen Jun 10, 2026
1032f75
chore: bump nwtgck/actions-netlify from 3.0 to 4.0 (#873)
dependabot[bot] Jun 12, 2026
5b9f85b
chore: adapt to SubVerso PR #219 (#874)
david-christiansen Jun 12, 2026
919f2cf
chore: expose PR preview as GitHub deployment (#765)
ejgallego Jun 12, 2026
170af40
fix: preserve Verso document ranges for LSP (#771)
ejgallego Jun 12, 2026
a9c31d5
fix: data handlers for Verso docstring extensions in literate mode (#…
david-christiansen Jun 13, 2026
b677415
chore: bump toolchain to v4.31.0 (#875)
Garmelon Jun 15, 2026
542cc09
fix: parse decoded string literals with accurate decoded positions (#…
david-christiansen Jun 16, 2026
113c54a
fix: use realistic source spans for Markdown (#878)
david-christiansen Jun 16, 2026
d6e6aee
refactor: configurable source for highlighting (#881)
robsimmons Jun 18, 2026
8cb0455
chore: bump toolchain to v4.32.0-rc1 (#885)
Garmelon Jun 19, 2026
35fcfea
chore: bump actions/checkout from 6 to 7 (#883)
dependabot[bot] Jun 20, 2026
c78e6ed
chore: bump actions/download-artifact from 7 to 8 (#882)
dependabot[bot] Jun 20, 2026
5757967
chore: merge main into nightly-testing and bump to 2026-06-22
david-christiansen Jun 22, 2026
d674e93
fix: allow editing to fix PR base
david-christiansen Jun 22, 2026
720e761
chore: make test output more legible
david-christiansen Jun 23, 2026
4ca2b42
fix: TeX and CI
david-christiansen Jun 23, 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
5 changes: 5 additions & 0 deletions .github/actions/install-texlive/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,11 @@ runs:
etoolbox
ulem
newunicodechar
svg
transparent
trimspaces
xkeyval
catchfile

- name: Check `tlmgr` version
shell: bash
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/actionlint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ jobs:
name: "Lint GitHub Actions workflows"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7

- name: Run actionlint
uses: reviewdog/action-actionlint@v1
Expand Down
16 changes: 14 additions & 2 deletions .github/workflows/check-format.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Check Formatting of JS/CSS/HTML and Markdown
name: Check Code Formatting

on:
pull_request:
Expand All @@ -9,11 +9,23 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
uses: actions/checkout@v7

- name: Check formatting with prettier
uses: creyD/prettier_action@v4.6
with:
dry: true
prettier_options: "--check ."
prettier_version: 3.7.4

check-python-formatting:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v7

- name: Install uv
uses: astral-sh/setup-uv@v7

- name: Check Python formatting with ruff
run: uvx ruff format --check .
113 changes: 69 additions & 44 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ jobs:
./elan-init -y --default-toolchain none
echo "$HOME/.elan/bin" >> "$GITHUB_PATH"

- uses: actions/checkout@v6
- uses: actions/checkout@v7

- name: List all files
run: |
Expand Down Expand Up @@ -63,49 +63,30 @@ jobs:
lake build

- name: Install PDF Dependencies
uses: zauguin/install-texlive@v4
uses: ./.github/actions/install-texlive

# Install uv and Playwright before tests, since lake test
# runs literate browser tests that need them
- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true
cache-dependency-glob: "browser-tests/pyproject.toml"

- name: Cache Playwright browsers
uses: actions/cache@v5
with:
packages: |
scheme-minimal
l3packages
tools
latex-bin
xpatch
booktabs
footmisc
environ
hyperref
titlesec
tocloft
enumitem
fmtcount
glossaries
datatool
caption
babel
fontspec
textcase
memoir
sourcecodepro
sourcesans
sourceserif
fvextra
upquote
lineno
float
tcolorbox
tikzfill
pdfcol
listings
epstopdf-pkg
pgf
environ
etoolbox
ulem
newunicodechar

- name: Check `tlmgr` version
run: tlmgr --version
path: .playwright-browsers
key: playwright-${{ runner.os }}-${{ hashFiles('browser-tests/uv.lock') }}

- name: Install Playwright browsers
run: |
uv run --project browser-tests --extra test playwright install chromium firefox --with-deps

# Inkscape is needed by the LaTeX `svg` package, which converts
# SVG files emitted by `diagram` code blocks to PDF at build time.
- name: Install Inkscape
run: sudo apt-get update && sudo apt-get install -y --no-install-recommends inkscape

# Install uv and Playwright before tests, since lake test
# runs literate browser tests that need them
Expand All @@ -125,6 +106,14 @@ jobs:
run: |
uv run --project browser-tests --extra test playwright install chromium firefox --with-deps

# The LaTeX `svg` package shells out to `inkscape --version` during
# the `--check-tex` build. Fail here with a clear message if Inkscape
# is missing or its version can't be read, rather than deep inside a
# lualatex run.
- name: Check Inkscape is available
run: |
inkscape --version

- name: Run tests
run: |
lake test -- --verbose --check-tex
Expand Down Expand Up @@ -184,6 +173,23 @@ jobs:
npx tsc --noEmit -p jsconfig.json
popd

- name: Check the ToC width storage key stays in sync
run: |
# toc-resize.js and toc-resize-preload.js must agree on the localStorage
# key, since the preload primes the value the main script later reads.
main_key=$(grep -oE 'STORAGE_KEY = "[^"]+"' static-web/toc-resize.js | grep -oE '"[^"]+"')
preload_key=$(grep -oE 'getItem\("[^"]+"\)' static-web/toc-resize-preload.js | grep -oE '"[^"]+"')
echo "toc-resize.js storage key: ${main_key:-<none>}"
echo "toc-resize-preload.js storage key: ${preload_key:-<none>}"
if [ -z "$main_key" ] || [ -z "$preload_key" ]; then
echo "::error::Could not find the ToC width storage key in one of the scripts" >&2
exit 1
fi
if [ "$main_key" != "$preload_key" ]; then
echo "::error::ToC width localStorage key differs between toc-resize.js and toc-resize-preload.js" >&2
exit 1
fi

- name: Generate the demo site and make sure page_link works
run: |
lake exe demosite --output _out/demosite
Expand Down Expand Up @@ -223,9 +229,28 @@ jobs:
run: |
uv run --project browser-tests --extra test pytest \
browser-tests/test_search.py \
browser-tests/test_search_priority.py \
browser-tests/test_search_page.py \
browser-tests/test_toc_resize.py \
browser-tests/test_redirect.py \
browser-tests/test_katex.py -v

- name: Build the VersoHtml site for browser tests
run: |
# The verso-html genre renders literate JSON into a standalone HTML site.
# We reuse the literate-config test project (already cached) as input, then
# run verso-html against its literate-JSON output.
pushd test-projects/literate-config
lake build +LitConfig:literate
popd
lake exe verso-html test-projects/literate-config/.lake/build/literate _out/verso-html

- name: Run VersoHtml browser tests
run: |
uv run --project browser-tests --extra test pytest \
browser-tests/verso-html -v \
--site-dir "$(pwd)/_out/verso-html"

- name: Upload docs to artifact storage
if: github.ref != 'refs/heads/main'
uses: actions/upload-artifact@v7
Expand Down Expand Up @@ -264,7 +289,7 @@ jobs:

- name: Deploy Verso manual
id: deploy-lang
uses: nwtgck/actions-netlify@v3.0
uses: nwtgck/actions-netlify@v4.0
if: github.event_name == 'push' && github.ref_name == 'main'
with:
publish-dir: _out/html-multi
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/commit-convention.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check PR title
uses: actions/github-script@v8
uses: actions/github-script@v9
with:
script: |
let title;
Expand Down
125 changes: 125 additions & 0 deletions .github/workflows/consistent-pr-comment.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
name: Fix toolchain consistency on PR Comment

on:
issue_comment:
types: [created]

jobs:
consistent:
# Only run on PR comments containing "!consistent"
if: >-
github.event.issue.pull_request && contains(github.event.comment.body, '!consistent')
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
steps:
- name: Check user permission
uses: actions/github-script@v9
with:
script: |
const { data: permission } = await github.rest.repos.getCollaboratorPermissionLevel({
owner: context.repo.owner,
repo: context.repo.repo,
username: context.payload.comment.user.login
});
const level = permission.permission;
if (level !== 'admin' && level !== 'write') {
core.setFailed(
`User ${context.payload.comment.user.login} does not have write access (permission: ${level})`
);
}

- name: Get PR details
id: pr-details
uses: actions/github-script@v9
with:
script: |
const { data: pr } = await github.rest.pulls.get({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: context.payload.issue.number
});
const isFork = pr.head.repo.full_name !== `${context.repo.owner}/${context.repo.repo}`;
if (isFork && !pr.maintainer_can_modify) {
core.setFailed(
'Cannot push to this fork PR. The PR author must enable "Allow edits by maintainers".'
);
}

- name: Add reaction to acknowledge
uses: actions/github-script@v9
with:
script: |
await github.rest.reactions.createForIssueComment({
owner: context.repo.owner,
repo: context.repo.repo,
comment_id: context.payload.comment.id,
content: 'eyes'
});

- name: Checkout repository
uses: actions/checkout@v7
with:
token: ${{ secrets.GITHUB_TOKEN }}

- name: Checkout PR branch
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: gh pr checkout ${{ github.event.issue.number }}

- name: Sync test-project lean-toolchains
run: |
targets=(
test-projects/literate-config/lean-toolchain
test-projects/literate-multi-root/lean-toolchain
)
for t in "${targets[@]}"; do
if [ -L "$t" ]; then
echo "Refusing to write through symlink: $t"
exit 1
fi
done
for t in "${targets[@]}"; do
cp lean-toolchain "$t"
done

- name: Commit and push
id: commit
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git add -- \
test-projects/literate-config/lean-toolchain \
test-projects/literate-multi-root/lean-toolchain
if git diff --cached --quiet; then
echo "No consistency fixes needed"
echo "changes=false" >> "$GITHUB_OUTPUT"
else
git commit -m "ci: sync test-project lean-toolchains"
git push
echo "changes=true" >> "$GITHUB_OUTPUT"
fi

- name: Add completion reaction
uses: actions/github-script@v9
with:
script: |
await github.rest.reactions.createForIssueComment({
owner: context.repo.owner,
repo: context.repo.repo,
comment_id: context.payload.comment.id,
content: '${{ steps.commit.outputs.changes == 'true' && 'rocket' || '+1' }}'
});

- name: Add failure reaction
if: failure()
uses: actions/github-script@v9
with:
script: |
await github.rest.reactions.createForIssueComment({
owner: context.repo.owner,
repo: context.repo.repo,
comment_id: context.payload.comment.id,
content: 'confused'
});
4 changes: 3 additions & 1 deletion .github/workflows/consistent-subverso-manifests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ jobs:
name: SubVerso version consistency
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7

- name: Check for consistent Subverso versions in all manifests
run: |
Expand Down Expand Up @@ -65,5 +65,7 @@ jobs:
fi
done
if [ "$FAILED" -ne 0 ]; then
echo ""
echo "To fix automatically, comment '!consistent' on the PR."
exit 1
fi
2 changes: 1 addition & 1 deletion .github/workflows/copyright-header.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ jobs:
name: "Check copyright header and Lean import size"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7

- name: Don't 'import Lean', use precise imports
run: |
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/dependabot-clean-description.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ jobs:
- run: npm install marked@latest

- name: Rewrite PR description and post original as comment
uses: actions/github-script@v8
uses: actions/github-script@v9
with:
script: |
const { marked } = require('marked');
Expand Down
Loading