From pull request to release#
Open your PR against main in the repository that owns the change.
Update its guides when behavior changes.
Before merge#
Repository |
Automated checks |
What |
|---|---|---|
|
Go formatting, lint, race tests, vulnerability scan, then macOS builds for Intel and Apple Silicon |
Go checks and both native builds |
|
Nix formatting, lint, catalog validation, and NixOS configuration evaluation |
Nix checks |
|
Sphinx build of the shared pages, with warnings treated as errors |
Documentation build |
Every repository checks that the PR has at least one label.
The current check accepts any label; it does not choose the release version.
In all three repositories, labels run separately from gate.
Run client checks locally
From the client repository, with Task and Docker available:
task --yes ci/fmt ci/lint ci/test ci/vuln
The native build also needs macOS, Go, and the Xcode command-line tools:
task --yes ci/build
It builds and ad hoc signs both macOS binaries.
Run module checks locally
From the modules repository, with Task and Docker available:
task --yes ci/fmt ci/lint ci/test
The checks validate catalog metadata and evaluate NixOS configurations for both supported architectures. They cover individual modules, module combinations, and declared versions. Evaluation does not build packages or boot a VM.
Build and preview documentation locally
Run these commands from the docs repository, with Task and Docker available.
Shared pages only, matching the docs PR check:
task --yes ci/docs
Include product guides, with client and modules checked out beside docs:
task --yes ci/docs DOCS='../client ../modules'
task --yes docs/serve DOCS='../client ../modules'
Open http://127.0.0.1:8040 for the preview.
The DOCS paths point to repository roots; their docs/ directories are mounted read-only into the build.
No guide files are copied into the docs repository.
This preview includes handwritten guides. The release build also generates the CLI and configuration references for its exact client and modules versions. Client and modules PR workflows do not run this Sphinx build.
A failed, cancelled, or skipped dependency does not pass gate.
New commits rerun PR checks; changing labels reruns only the label check.
After merge#
Change |
Release trigger |
Result |
|---|---|---|
Client code |
Client tag such as |
One client release using that commit's catalog pin |
Module code or metadata |
Modules tag such as |
Catalog release, then rebuilds of up to three client base versions |
Shared documentation |
Docs tag such as |
Updated current site using the latest documented client and modules pair, plus site infrastructure |
Follow a client code release
Selection reads
modules_versionfrom the tagged commit'sTaskfile.ymland verifies that the catalog has a published stable release.Preparation checks the client tag format and verifies that its commit belongs to
main.The shared build creates both macOS binaries from that commit and catalog.
Publication creates the GitHub Release and records the client and modules tags for documentation.
The tagged commit can be an earlier commit in main.
Other client versions are not rebuilt by this path.
Tags containing + do not trigger another client code release.
Follow a module catalog release
The modules workflow verifies the
vNtag and checks that its commit is contained inmain.It publishes the catalog's GitHub Release.
It sends
limanix-modules-releasetoclient, with the modules tag inclient_payload.tag.The client verifies the catalog release and selects up to three client base versions.
Each selected client is rebuilt at its existing commit with the new catalog and the next
+Nsuffix.
For example, a v7 catalog release can produce:
Selected client |
New client release |
Included modules |
|---|---|---|
|
|
|
|
|
|
|
|
|
These builds run in parallel. The tag checks do not rerun the module PR checks.
Follow a shared documentation release
The docs workflow validates a tag such as
v1.0.0and checks that its commit belongs tomain.It selects the highest completed client documentation version and its modules tag.
Sphinx combines the tagged shared pages and theme with that pair's guides and generated references.
The workflow applies the site infrastructure and publishes the complete site at
/.
Existing client archives stay unchanged. If no product documentation has been published yet, the docs release builds shared pages only. Client events need a published docs release because they reuse its recorded docs source commit.
What happens after the client builds?#
Each published client release records its source commit and a Module catalog link. Use that link to find the included modules version.
After the builds finish, finalize marks the highest published client version as GitHub Latest.
When this run has publication records, it sends their exact client and modules pairs to docs in one limanix-client-release event.
Build completion order does not choose Latest.
See the event for two published clients
{
"event_type": "limanix-client-release",
"client_payload": {
"releases": [
{"client_tag": "v1.3.0+1", "modules_tag": "v7"},
{"client_tag": "v1.2.4+11", "modules_tag": "v7"}
]
}
}
Publication records are uploaded after each GitHub Release. Without them, finalization skips the event instead of choosing an older release marked Latest.
When does your documentation appear?#
The docs event checks out each client and catalog at the tags in the event. It generates the references and saves a complete site for each pair. Shared pages and the theme come from the deployed docs release.
The event also rebuilds / for the highest client version among completed archives and the incoming pairs.
Shared pages, product guides, and references appear together in one navigation and search.
Address |
Content |
|---|---|
|
Current complete site, updated by docs tags and client events |
|
Redirect to |
|
Saved site for that client release and its catalog |
The version switcher shows both tags, for example v1.3.0+1 · modules v7.
Its current entry opens /; older entries open their archives.
Switching to an archive changes the whole saved site, including its guides, references, and search.
A client or module guide appears after a release containing it passes the docs workflow. Existing archives stay unchanged. The three-version rebuild limit does not remove older documentation.
Which source versions does the site use?
Publication |
Shared pages and theme |
Client and modules |
|---|---|---|
Docs tag |
Tagged docs commit |
Highest completed documentation pair, if one exists |
Client event: each archive |
Deployed docs commit |
Exact pair from the event |
Client event: current site |
Deployed docs commit |
Highest client version among completed archives and incoming pairs |
The event reads docs_sha from the root release.json to find the deployed docs commit.
Merging a docs PR does not change the shared pages used by client events.
A docs release makes that change available to the current site and later archives.
Publication writes the root release.json after the site's files.
Existing archives keep the shared pages, theme, and product versions they were built with.
Why can Latest and current documentation differ?
GitHub Latest is selected from published client releases. Current documentation follows the client version recorded by the site's last completed publication. A client release can exist before its docs build finishes, or its docs build can fail.
Docs orders snapshots by major, minor, patch, then rebuild number. It keeps completed archives unchanged when the same event arrives again. An event that pairs an archived client tag with a different catalog fails publication.
Follow the result#
If your change is missing, first check whether a release includes its commit. For missing pages, also check the matching run in the docs repository. A successful notification means the event was sent; it does not prove the docs were published.
Understand a failed or partial run
What you see |
What it means |
|---|---|
Client selection fails or selects nothing |
No client build starts |
One client build fails |
Other builds continue and their published releases remain |
A release exists but its publication record is missing |
That pair cannot enter this run's docs event |
The client run is cancelled |
Finalization is skipped; already published releases can remain |
One docs build fails |
Publication of that event's documentation is skipped |
Documentation publication fails |
Earlier uploads can remain; the client releases are unaffected |
Include the repository, run link, tag, and failed job when reporting the problem.
Sending the same modules event again selects versions again and increments their rebuild counters. Retrying old client publication jobs can reuse an existing tag on the same commit without checking its recorded catalog.
Find the workflow behind a check or release
All paths below are relative to each repository's .github/workflows/ directory.
Repository |
File |
Role |
|---|---|---|
|
|
PR checks and labels |
|
|
Code tag and modules event entry points |
|
|
Select versions, run builds, and finalize |
|
|
Prepare, build, and publish each client |
|
|
PR checks and labels |
|
|
Catalog release and client notification |
|
|
Shared-page build and labels |
|
|
Docs tag and client event entry points |
|
|
Select source versions, build archives and the current site, and publish them |