# How to Contribute

## Setup

Install bazelisk following https://bazel.build/install/bazelisk
or run `npm i -g @bazel/bazelisk`.

## Formatting

Starlark files should be formatted by buildifier.
We suggest using a pre-commit hook to automate this.
First [install pre-commit](https://pre-commit.com/#installation),
then run

```shell
pre-commit install
```

Otherwise later tooling on CI will yell at you about formatting/linting violations.

## Using this as a development dependency of other rules

You'll commonly find that you develop in another WORKSPACE, such as
some other ruleset that depends on `@aspect_rules_js`, or in a nested
WORKSPACE in the integration_tests folder.

To always tell Bazel to use this directory rather than some release
artifact or a version fetched from the internet, run this from this
directory:

```sh
OVERRIDE="--override_repository=aspect_rules_js=$(pwd)/rules_js"
echo "common:override $OVERRIDE" >> ~/.bazelrc
```

This means that any usage of `@aspect_rules_js` on your system will point to this folder, if you
pass the `--config=override` flag to Bazel.
(We don't want to enable this for all builds, since you'll later forget this was done and wonder
why you don't reproduce the same behavior as others.)

## Running tests

Simply run `bazel test //...`

## Releasing

1. Push a tag to the repo, or create one on the GH UI
1. Watch the automation run on GitHub actions
