actions/CONTRIBUTING.md

2.9 KiB

Building

The build script in the project root provides a convenient way to perform many local build tasks:

  1. ./build will lint and compile typescript sources
  2. ./build all will lint and compile typescript and run unit tests
  3. ./build init-scripts will run the init-script integration tests
  4. ./build act <act-commands> will run act after building local changes (see below)

How to merge a Dependabot PR

The "distribution" for a GitHub Action is checked into the repository itself. In the case of these actions, the transpiled sources are committed to the dist directory. Any production dependencies are inlined into the distribution. So if a Dependabot PR updates a production dependency (or a dev dependency that changes the distribution, like the Typescript compiler), then a manual step is required to rebuild the dist and commit.

The simplest process to follow is:

  1. Checkout the dependabot branch locally eg: git checkout dependabot/npm_and_yarn/actions/github-5.1.0
  2. In the sources directory, run npm install to download NPM dependencies
  3. In the sources directory, run npm run build to regenerate the distribution
  4. Push the changes to the dependabot branch
  5. If/when the checks pass, you can merge the dependabot PR

Using act to run integ-test workflows locally

It's possible to run GitHub Actions workflows locally with https://nektosact.com/. Many of the test workflows from this repository can be run in this way, making it easier to test local changes without pushing to a branch.

This feature is most useful to run a single integ-test-* workflow. Avoid running ci-quick-test or other aggregating workflows unless you want to use your local machine as a heater!

Example running a single workflow: ./build act -W .github/workflows/integ-test-caching-config.yml

Example running a single job: ./build act -W .github/workflows/integ-test-caching-config.yml -j cache-disabled-pre-existing-gradle-home

Known issues:

  • integ-test-cache-cleanup.yml fails because gradle is not installed on the runner. Should be fixed by #33.
  • integ-test-detect-java-toolchains.yml fails when running on a linux/amd64 container, since the expected pre-installed JDKs are not present. Should be fixed by #89.
  • act is not yet compatible with actions/upload-artifact@v4 (or related toolkit functions)
  • Workflows run by act cannot submit to the dependency-submission API, as no GITHUB_TOKEN is available by default.

Tips:

  • Add the following lines to ~/.actrc:
    • --container-daemon-socket - : Prevents "error while creating mount source path", and yes that's a solitary dash at the end
    • --matrix os:ubuntu-latest : Avoids a lot of logging about unsupported runners being skipped
  • Runners don't have java installed by default, so all workflows that run Gradle require a setup-java step.