One plugin line puts every vx run on GitHub: a job summary with the failure first, a check run on the commit, and a cache scope that keeps pull requests from writing what main reads.
Plugins
Plugins
A red CI job should not mean scrolling a log. @vzn/vx-ci writes each
vx run where you already look on GitHub.
vx.workspace.ts
import { defineWorkspace } from'@vzn/vx/config'
import { github } from'@vzn/vx-ci'
exportdefaultdefineWorkspace({
plugins: [github()],
})
That is the whole setup. Off GitHub Actions the plugin declines and
costs nothing, so the line stays on for laptops too.
Every run appends a block to the workflow’s summary page: the verdict,
the counts, the failures first, then every task. This is the markdown
the plugin wrote for a run where one test failed:
With GITHUB_TOKEN in the job, the plugin also posts a check run
(named vx unless you pass checkName) whose output is that same
summary, so the result sits next to the commit and the pull request.
flowchart LR
RUN["vx run"] --> SINK["github() sink"]
SINK --> SUM["job summary"]
SINK --> CHECK["check run on the commit"]
CFG["config stage"] --> SCOPE["cache scope from the ref"]
style CHECK stroke:#c6f84e,stroke-width:2px
On Actions the plugin sets the cache scope from the ref. A push to the
default branch reads and writes the trusted keys. A pull request becomes
pr-<n>: it reads its own keys, then main’s, and writes only its own. So
a branch never writes what main reads. Set cacheScope: false to opt
out, or set cacheScope in vx.workspace.ts yourself.
The summary is written by a telemetry sink. vx isolates sinks and bounds
their flush, so a slow or failing GitHub write can never fail or stall
the run.
vx prune --production leaves out the workspace packages only dev dependencies pull in, and strikes them from the copied manifests and lockfile, so the image that runs your app installs frozen without them.
vx prune copies one project and the workspace packages it needs into a clean folder, with the lockfile cut to match. Your Docker build installs only what it ships, and a change in another app no longer busts the install layer.
With @vzn/vx-schedule-history, vx starts the longest chain first and packs tasks by the memory they really used. vx history shows what it learned, task by task.
Turborepo, Nx and other product names are trademarks of their owners. vx is not affiliated with or endorsed by them.