Skip to content

Add a root action for GitHub Marketplace, and publish the docs with GitHub Pages - #31

Merged
aywrite merged 2 commits into
mainfrom
claude/stoic-ramanujan-xqxekr
Sep 30, 2026
Merged

aywrite merged 2 commits into
mainfrom
claude/stoic-ramanujan-xqxekr

Conversation

@aywrite

@aywrite aywrite commented Sep 30, 2026

Copy link
Copy Markdown
Owner

Two commits.

An action at the root

GitHub Marketplace lists the action whose action.yml is at a repository's root, and there was none. The new one reads fastchess pgns that are already on the runner and pools them into one estimate or one sequential test:

- uses: aywrite/mache@v0.6.0
  with:
    pgn: shards/**/games.pgn
    candidate: new
    baseline: old
    sprt: true
  • Inputs:
    • pgn takes paths or glob patterns, and each file it matches is one shard.
    • The test inputs match strength.yml's: sprt, elo0, elo1, sprt_model, alpha, beta and prior_pairs.
  • Results: the report goes to the job summary. line, trailer, verdict and carried come back as outputs.
  • Who it's for: a repository that plays its own matches and only wants them read. summarise-match expects the shard layout the workflows download, so it doesn't serve that case alone.
  • No pin inside: it runs the package from its own checkout. The version a caller names is the version that reads the games.
  • Where the work is: bin/estimate.sh, so that shellcheck sees it and the tests run it. It writes nothing in the caller's working directory.

Metadata: the name is Chess engine elo and SPRT (mache), and the badge is bar-chart-2 on blue. The description fits the 125-character limit.

The README's example pins v0.6.0, the current release, like the other pins. That release has no root action, so the example only works from the next release. The release's pin commit moves it, and tests/test_examples.py holds it to that.

A GitHub Pages site

  • Build: docs/ is built by GitHub Pages with Jekyll and the just-the-docs theme (pinned at v0.12.0). There is no workflow.

  • No front matter: each page's address and place in the menu are set in docs/_config.yml. Front matter would show as a table at the top of each file on GitHub.

  • New pages: the long README sections move into their own pages:

    • tools.md
    • without-ci.md
    • limits.md
    • how-it-works.md
    • statistics.md

    Their text is unchanged apart from heading levels. The quickstart and BUILDING-A-REF.md join them, and there is a short index.md.

  • README: keeps the overview, why it exists and what is here. It gains a section on the root action and a list of the pages. It links to the site where it used to link to its own anchors.

  • Links: links out of docs/ are now full GitHub URLs, since the site has nothing above it. PyPI's Documentation link points at the site.

The site needs turning on once after this merges: Settings → Pages → Deploy from a branch → main, /docs. It is served at https://aywrite.github.io/mache/. Until then, the README's links to it return 404.

How it was checked

  • Local site build: I built the site with the github-pages gem, which is what Pages runs. Every page lands at its own address. Every internal link and anchor in the built HTML resolves to a page and a heading that exist.
  • New tests:
    • tests/test_root_action.py runs the script on a fixture pgn with the real estimator. It covers globs, several patterns, a sequential test with other rates, a pattern that matches nothing, the untouched working directory, the summary and the outputs file. It also checks the metadata against what the Marketplace accepts.
    • tests/test_docs.py checks that no link leaves docs/, that links between pages find their page and heading, and that every page has an address and a menu place. It also checks that the README and pyproject.toml link to addresses the site has. Adding a ../ link, a bad anchor, or dropping a menu entry each fails it.
  • Action run by hand: I ran the action's run: block by hand on two shards found by a ** pattern. It read 52 games, judged the test and wrote the four outputs. A new job in the Action workflow does the same with uses: ./.
  • Suites: python3 -m pytest tests passes (470 tests), and so does the first commit alone (440). pre-commit run --all-files is clean.

After merging

  • Turn on Pages as above.
  • Listing on the Marketplace happens when a release is published with the "Publish this Action to the GitHub Marketplace" box ticked. Doing that means accepting the Marketplace developer agreement, which needs two-factor authentication. The first release to carry the root action is the one to list.

🤖 Generated with Claude Code

https://claude.ai/code/session_018ccJFsmZ4jAKYmFNgNBh9u


Generated by Claude Code

…he runner

GitHub Marketplace lists the action whose metadata is at a repository's
root, and there was none. action.yml there now reads fastchess pgns
found by paths or glob patterns and pools them into one estimate or one
sequential test. The report goes to the job summary, and line, trailer,
verdict and carried come back as outputs.

It suits a repository that plays its own matches and only wants them
read, which the actions under actions/ do not serve on their own:
summarise-match expects the shard layout the workflows download. It runs
the package from its own checkout, so the version a caller names is the
version that reads the games and there is no pin inside it to move.

The work is in bin/estimate.sh, so that shellcheck sees it and the tests
run it. It writes nothing in the caller's working directory. The tests
run it on a fixture pgn with the real estimator, and check the metadata
against what the Marketplace accepts. A job in the Action workflow calls
it with `uses: ./` on two shards found by a `**` pattern.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018ccJFsmZ4jAKYmFNgNBh9u
docs/ is now a site that GitHub Pages builds with Jekyll and the
just-the-docs theme, pinned at v0.12.0, with no workflow. Each page's
address and place in the menu are set in docs/_config.yml rather than
in front matter, which GitHub would show as a table when a page is read
in the repository.

The long sections of the README move into pages of their own: using the
tools, running a match without CI, what hosted runners can measure, how
it works, and the statistics. Their text is unchanged apart from the
heading levels. The README keeps the overview, gains a section on the
root action and a list of the pages, and links to the site where it
linked to its own anchors. Links out of docs/ are full URLs, since the
site has nothing above it.

tests/test_docs.py checks that no link climbs out of docs/, that links
between pages find their page and heading, that every page has an
address and a place in the menu, and that the README and pyproject.toml
link to addresses the site has. The README's call of the root action is
held to the current release like the other pins. PyPI's Documentation
link now points at the site.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018ccJFsmZ4jAKYmFNgNBh9u
@aywrite
aywrite merged commit ec1f3b5 into main Sep 30, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants