🤖 GitHub Action for integrating Code PushUp into your CI workflows.
- 📃 Collects a Code PushUp report on push to remote branch.
- 📉 Uploads reports to workflow artifacts and/or Code PushUp portal (optional).
- 💬 When a PR is opened/updated, compares reports for source and target
branches, and creates/updates a PR comment which summarizes the impact of the
changes.
⚠️ Also annotates changed files with new issues encountered by Code PushUp.
- 🏢 Supports monorepo setups - runs per project and summarizes comparisons in a single PR comment.
name: Code PushUp
on:
push:
branches: [main]
pull_request:
branches: [main]
permissions:
contents: read
actions: read
pull-requests: write
jobs:
code-pushup:
runs-on: ubuntu-latest
steps:
- name: Clone repository
uses: actions/checkout@v4
- name: Set up Node.js
uses: actions/setup-node@v4
- name: Install dependencies
run: npm ci
- name: Code PushUp
uses: code-pushup/github-action@v0
The action may be customized using the following optional inputs:
Name | Description | Default |
---|---|---|
monorepo |
Enables monorepo mode | false |
projects |
Custom projects configuration for monorepo mode | none |
task |
Name of command to run Code PushUp per project in monorepo mode | code-pushup |
nxProjectsFilter |
CLI arguments used to filter Nx projects in monorepo mode | --with-target={task} |
token |
GitHub token for authorizing GitHub API requests | ${{ github.token }} |
annotations |
Toggles if annotations should be created for relevant Code PushUp issues | true |
artifacts |
Toggles if artifacts will we uploaded/downloaded | true |
retention |
Artifact retention period in days | from repository settings |
directory |
Directory in which code-pushup should run |
process.cwd() |
output |
Directory where reports will be created | .code-pushup |
config |
Path to config file (--config option) |
see @code-pushup/cli docs |
silent |
Toggles if logs from Code PushUp CLI are printed | false |
bin |
Command for executing Code PushUp CLI | npx --no-install code-pushup |
For example, this will run code-pushup
commands in a non-root folder and
retain report artifacts for 30 days:
- uses: code-pushup/github-action@v0
with:
directory: website
retention: 30
Some outputs are set in case you want to add further steps to your workflow.
Name | Description |
---|---|
artifact-id |
ID of uploaded report artifact (N/A in monorepo mode) |
comment-id |
ID of created/updated PR comment |
Example of using step outputs:
- uses: code-pushup/github-action@v0
id: code-pushup
- run: |
echo "Comment ID is ${{ steps.code-pushup.outputs.comment-id }}"
echo "Artifact ID is ${{ steps.code-pushup.outputs.artifact-id }}"
By default, the GitHub Action assumes your repository is a standalone project. But it also supports monorepo setups where reports are collected and compared individually per project. All project comparisons are then combined into a single PR comment.
Use the monorepo
input to active monorepo mode:
- uses: code-pushup/github-action@v0
with:
monorepo: true
The GitHub Action will try to detect which monorepo tool you're using from the file system. The following tools are supported out of the box:
If you're using one of these tools, you can also skip auto-detection by setting
monorepo
input to nx
, turbo
, yarn
, pnpm
or npm
.
If none of these tools are detected, then the fallback is to run Code PushUp in
all folders which have a package.json
file. If that's not what you want, then
you can also configure folder patterns using the optional projects
input
(comma-separated globs):
- uses: code-pushup/github-action@v0
with:
monorepo: true
projects: 'frontend, backend/*'
Based on which monorepo tool is used, Code PushUp CLI commands will be executed
using a package.json
script, Nx target, Turbo task, or binary executable (as
fallback). By default, these are expected to be called code-pushup
, but you
can override the name using the optional task
input:
- uses: code-pushup/github-action@v0
with:
monorepo: nx
task: analyze # custom Nx target
For caching purposes, you may prefer to separate output directories per project.
The output
input supports interpolating the project name in the path using
{project}
syntax:
- uses: code-pushup/github-action@v0
with:
monorepo: true
output: .code-pushup/{project}
In Nx monorepos, projects are listed using
nx show projects --with-target=code-pushup
by default. The nxProjectsFilter
input sets the CLI arguments forwarded to
nx show projects
(default
is --with-target={task}
, with {task}
being replaced by the task
input
value). This gives a lot of flexibility in customizing which Nx projects should
be run:
- uses: code-pushup/github-action@v0
with:
monorepo: nx
nxProjectsFilter:
'--with-target=code-pushup --affected --projects=apps/* exclude=*-e2e'