rsnext/.github/actions/next-stats-action
Jan Kaifer 22e28ff9c6
Make shebangs portable used in the repo portable (#46028)
Not all systems have `/bin/bash` (for example NixOS).

`/usr/bin/env bash` reads the location of bash from `PATH`

<!--
Thanks for opening a PR! Your contribution is much appreciated.
To make sure your PR is handled as smoothly as possible we request that
you follow the checklist sections below.
Choose the right checklist for the change(s) that you're making:
-->

## Bug

- [ ] Related issues linked using `fixes #number`
- [ ] Integration tests added
- [ ] Errors have a helpful link attached, see
[`contributing.md`](https://github.com/vercel/next.js/blob/canary/contributing.md)

## Feature

- [ ] Implements an existing feature request or RFC. Make sure the
feature request has been accepted for implementation before opening a
PR.
- [ ] Related issues linked using `fixes #number`
- [ ]
[e2e](https://github.com/vercel/next.js/blob/canary/contributing/core/testing.md#writing-tests-for-nextjs)
tests added
- [ ] Documentation added
- [ ] Telemetry added. In case of a feature if it's used or not.
- [ ] Errors have a helpful link attached, see
[`contributing.md`](https://github.com/vercel/next.js/blob/canary/contributing.md)

## Documentation / Examples

- [ ] Make sure the linting passes by running `pnpm build && pnpm lint`
- [ ] The "examples guidelines" are followed from [our contributing
doc](https://github.com/vercel/next.js/blob/canary/contributing/examples/adding-examples.md)
2023-02-17 09:45:42 +00:00
..
src migrate from yarn to pnpm (#45652) 2023-02-07 15:29:49 +00:00
.gitignore Migrate PR stats action into Next.js repo (#13177) 2020-05-21 14:07:27 +02:00
Dockerfile Update to latest version of pnpm (#44791) 2023-01-11 17:36:52 -08:00
entrypoint.sh Make shebangs portable used in the repo portable (#46028) 2023-02-17 09:45:42 +00:00
package.json Fix turbo usage in tests (#44715) 2023-01-18 20:35:28 +01:00
README.md Update references to zeit/next.js (#13463) 2020-05-27 17:51:11 -04:00

Next.js Stats GitHub Action

Downloads and runs project with provided configs gathering stats to compare branches

See it in action at Next.js https://github.com/vercel/next.js

Getting Started

  1. Add a .stats-app folder to your project with a stats-config.js and any files to run against for example a test app that is to be built
  2. Add the action to your workflow
  3. Enjoy the stats

Stats Config

const StatsConfig = {
  // the Heading to show at the top of stats comments
  commentHeading: 'Stats from current PR' | undefined,
  commentReleaseHeading: 'Stats from current release' | undefined,
  // the command to build your project if not done on post install
  initialBuildCommand: undefined | string,
  skipInitialInstall: undefined | boolean,
  // the command to build the app (app source should be in `.stats-app`)
  appBuildCommand: string,
  appStartCommand: string | undefined,
  // the main branch to compare against (what PRs will be merging into)
  mainBranch: 'canary',
  // the main repository path (relative to https://github.com/)
  mainRepo: 'vercel/next.js',
  // whether to attempt auto merging the main branch into PR before running stats
  autoMergeMain: boolean | undefined,
  // an array of configs for each run
  configs: [
    { // first run's config
      // title of the run
      title: 'fastMode stats',
      // whether to diff the outputted files (default: onOutputChange)
      diff: 'onOutputChange' | false | undefined,
      // config files to add before running diff (if `undefined` uses `configFiles`)
      diffConfigFiles: [] | undefined,
      // renames to apply to make file names deterministic
      renames: [
        {
          srcGlob: 'main-*.js',
          dest: 'main.js'
        }
      ],
      // config files to add before running (removed before successive runs)
      configFiles: [
        {
          path: './next.config.js',
          content: 'module.exports = { fastMode: true }'
        }
      ],
      // an array of file groups to diff/track
      filesToTrack: [
        {
          name: 'Pages',
          globs: [
            'build/pages/**/*.js'
          ]
        }
      ],
      // an array of URLs to fetch while `appStartCommand` is running
      // will be output to fetched-pages/${pathname}.html
      pagesToFetch: [
        'https://localhost:$PORT/page-1'
      ]
    },
    { // second run's config
      title: 'slowMode stats',
      diff: false,
      configFiles: [
        {
          path: './next.config.js',
          content: 'module.exports = { slowMode: true }'
        }
      ],
      filesToTrack: [
        {
          name: 'Main Bundles',
          globs: [
            'build/runtime/webpack-*.js',
            'build/runtime/main-*.js',
          ]
        }
      ]
    },
  ]
}

module.exports = StatsConfig