Skip to content

feat: a theme that passes the install lint, with a release workflow - #1

Merged
neeo merged 1 commit into
mainfrom
APT-5635-example-theme
Oct 20, 2026
Merged

neeo merged 1 commit into
mainfrom
APT-5635-example-theme

Conversation

@neeo

@neeo neeo commented Oct 19, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • Fills the repository with the reference theme: a manifest that extends the default theme with a green trust accent (light and dark) and a rounder control corner, and bundles Spline Sans Mono with its licence. Version 0.1.0, licensed MIT-0 as ADR 0020 says.
  • scripts/pack.mjs packs the theme into dist/example-theme-<version>.tgz deterministically; scripts/lint.mjs runs lintThemePackage from the published @openbrf/theme-tools on that tarball, the check an instance runs at install.
  • CI runs the lint and the tests. The release workflow starts on a pushed v<version> tag only, as the catalog requires: it refuses a tag that is off main or that differs from the manifest's version, lints and tests, packs the tarball once, attests it, attaches it to a draft release and then publishes it, so the immutable release carries the asset.

Implementation notes

  • The package holds theme.json, fonts/ and LICENSE.txt (a bare LICENSE is not a file type a package may carry). Packing twice gives the same bytes, so the sha512 a catalog entry states stays meaningful; a test holds that.
  • fonts/OFL.txt is the upstream licence text of Spline Sans Mono, not only a notice, since the font requires the licence to travel with it.
  • A test builds a copy of the theme with an unreadable accent and checks the lint refuses it, so the passing tests cannot pass because the lint stopped looking.
  • Releasing is two steps after this merges: tag the merged commit v0.1.0 and push the tag. The tag has to follow the merge because the workflow refuses a commit that is not on main. The repository already has immutable releases enabled.

Verification

  • npm ci && npm run lint && npm test locally: the packed theme passes the install lint with no finding, 5 tests pass.
  • prettier --check . is clean.
  • Not run yet: the release workflow itself, which can only run on a tag.

Risk and rollback

Only new files, except the README. Nothing is published until a v* tag is pushed.

Summary by CodeRabbit

  • New Features

    • Added the Example Theme with light and dark accent colors, rounded controls, monospace data typography, Spline Sans Mono font support, and a table layout for member registers.
    • Added deterministic theme packaging and validation, including metadata, required files, accessibility checks, and integrity reporting.
  • Documentation

    • Added comprehensive setup, customization, validation, release, and licensing documentation.
    • Added MIT No Attribution and SIL Open Font License notices.
  • Chores

    • Added automated checks for linting, tests, packaging, and tagged releases.

Fills the repository with the reference theme: a manifest extending the
default theme with a green trust accent and a rounder control corner, in
light and dark, and the Spline Sans Mono face bundled with its licence.

scripts/pack.mjs packs the theme deterministically and scripts/lint.mjs
runs the install lint from @openbrf/theme-tools on the tarball, the check
an instance runs when a board installs it. The tests hold the packed theme
to that lint and check that the lint can still refuse it.

The release workflow starts on a pushed v<version> tag, which is the one
start the catalog accepts: it refuses a tag that is off main or that
differs from the manifest's version, packs the tarball once, attests it
and attaches it to the release before the release is published.
neeo added a commit to openbrf/openbrf that referenced this pull request Oct 19, 2026
…low (#396)

## Summary
- Updates the "Plugins and themes" section of ROADMAP.md:
`openbrf/example-theme` now holds a theme that passes the install lint
and a tag-triggered release workflow, so the section no longer says it
has nothing in it.
- The reference plugin's repository and the catalog's entries are still
described as empty, since they are.

The theme itself is openbrf/example-theme#1.

## Verification
- `prettier --check ROADMAP.md` is clean.
- The statement matches what openbrf/example-theme#1 contains: lint and
tests pass in its CI run.

Documentation only. The same paragraph is worded to hold whether or not
the first release has been tagged yet.

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Documentation**
* Updated the roadmap to note that the example theme passes install lint
and that tagged releases are attested and published immutably.
* Clarified that the plugin repository and catalog remain empty, so
there is currently nothing to install.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
@neeo neeo added the openbrf-pr Pull request worked by agents label Oct 19, 2026
@neeo
neeo marked this pull request as ready for review October 19, 2026 23:59
@coderabbitai

coderabbitai Bot commented Oct 19, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 4081a4dd-73db-4bc1-b065-a8d41a5c89ae
📥 Commits

Reviewing files that changed from the base of the PR and between 2a2ec38 and 483a029.

⛔ Files ignored due to path filters: 2
  • fonts/spline-sans-mono-latin.woff2 is excluded by !**/*.woff2
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing: 12
  • .github/workflows/ci.yml
  • .github/workflows/release.yml
  • .gitignore
  • .nvmrc
  • LICENSE
  • README.md
  • fonts/OFL.txt
  • package.json
  • scripts/lint.mjs
  • scripts/pack.mjs
  • test/theme.test.mjs
  • theme.json

Included review availability: This review used your included allowance. Your plan provides up to 1 included review per hour; 0 remain after this review.

📝 Walkthrough

Adds an Open BRF theme package with a manifest, bundled font, packaging and validation scripts. Adds CI checks and a tag-triggered release workflow that validates the tag and versions, attests the package archive, and publishes a GitHub release.

Changes: Theme package and delivery

Layer / File(s) Summary
Theme package definition and documentation
theme.json, package.json, .nvmrc, .gitignore, LICENSE, fonts/OFL.txt, README.md
Defines the example-theme manifest and npm package, records the bundled font license, and documents theme customization, validation, licensing, and release requirements.
Archive creation and validation
scripts/pack.mjs, scripts/lint.mjs, test/theme.test.mjs
Adds deterministic theme archive creation and a lint command. Tests check archive contents, reproducible bytes, package metadata, and contrast lint findings.
Continuous integration checks
.github/workflows/ci.yml
Runs dependency installation, linting, and tests on pushes to main and pull requests.
Tagged release workflow
.github/workflows/release.yml, README.md
Validates tag ancestry and package versions, runs lint and tests, packages and attests the theme, publishes a GitHub release, and reports the archive digest and size. The README documents this release process.

Priority: ⬇️ Low

Estimated code review effort: 3 (Moderate) | ~25 minutes

Change: Feature

Merge Risk: ⚪ Minimal · up to 483a0

No issue requiring a change before merge was established; proceed with normal checks.

Pre-merge checks: Passed 5
Check name Status Explanation
Description Check Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check Passed The title accurately identifies the main changes: adding a theme that passes installation linting and adding a release workflow. It is specific and related to the changeset.
Docstring Coverage Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 3…
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Full details: Docstring Coverage

Explanation

No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 3 files. (9 skipped: 9 unsupported.)

✨ Finishing Touches
📝 Generate docstrings
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@neeo
neeo merged commit 3806011 into main Oct 20, 2026
2 checks passed
@neeo
neeo deleted the APT-5635-example-theme branch October 20, 2026 00:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

openbrf-pr Pull request worked by agents

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant