Skip to content

GitHub Action for automating feedback from Code PushUp

License

Notifications You must be signed in to change notification settings

code-pushup/github-action

Use this GitHub action with your project
Add this Action to an existing workflow or create a new one
View on Marketplace

Repository files navigation

Code PushUp GitHub Action

GitHub Super-Linter CI Check dist/ CodeQL Coverage

🤖 GitHub Action for integrating Code PushUp into your CI workflows.

showcase

Features

  • 📃 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.

Workflow example

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

Action inputs

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

Action outputs

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 }}"

Monorepo mode

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'