An open API service indexing awesome lists of open source software.

https://github.com/bazel-contrib/setup-bazel

GitHub Action to configure Bazel
https://github.com/bazel-contrib/setup-bazel

Last synced: 6 months ago
JSON representation

GitHub Action to configure Bazel

Awesome Lists containing this project

README

          

# setup-bazel

This action allows to properly configure Bazelisk and Bazel on all operating systems
and provides an advanced fine-grained caching to improve workflows performance.

## Usage

```yaml
- uses: bazel-contrib/setup-bazel@0.15.0
with:
# Avoid downloading Bazel every time.
bazelisk-cache: true
# Store build cache per workflow.
disk-cache: ${{ github.workflow }}
# Share repository cache between workflows.
repository-cache: true
```

## Inputs

### `bazelisk-cache`

Cache [`bazelisk`][1] downloads based on contents of a `.bazelversion` file.

Default `false`.

### `bazelisk-version`

[`bazelisk`][1] version to download and use.

Supports semver specification and ranges.
Leave empty to use [pre-installed Bazelisk][8].

Default `""`.

Examples

#### Install Bazelisk 1.x

```yaml
- uses: bazel-contrib/setup-bazel@0.15.0
with:
bazelisk-version: 1.x
```

#### Install exact Bazelisk version

```yaml
- uses: bazel-contrib/setup-bazel@0.15.0
with:
bazelisk-version: 1.19.0
```

### `bazelrc`

Extra contents to write to a user's [`bazelrc`][4] file.

You can use multiline YAML strings.

Default `""`.

Examples

#### Enable Bzlmod

```yaml
- uses: bazel-contrib/setup-bazel@0.15.0
with:
bazelrc: common --enable_bzlmod
```

#### Add colors and timestamps

```yaml
- uses: bazel-contrib/setup-bazel@0.15.0
with:
bazelrc: |
build --color=yes
build --show_timestamps
```

### `disk-cache`

Enable [`disk_cache`][2] and store it on GitHub based on contents of `BUILD` files.

You can also pass a string to use as a cache key to separate caches from different workflows.

Default `false`.

Examples

#### Share a single disk cache

```yaml
- uses: bazel-contrib/setup-bazel@0.15.0
with:
disk-cache: true
```

#### Separate disk caches between workflows

```yaml
- uses: bazel-contrib/setup-bazel@0.15.0
with:
disk-cache: ${{ github.workflow }}}
```

### `external-cache`

Cache `external/` repositories based on contents of `MODULE.bazel` and `WORKSPACE` files.
Only repositories exceeding 10MB are being cached.
Each repository is stored in a separate cache.

You can also pass a `manifest` object where key is the name of the external repository
and value is a file (or list of files) which contents are used to calculate cache key.
If the value is `false`, the external repository won't be cached.

Default `false`.

Examples

#### Enable external repositories caches

```yaml
- uses: bazel-contrib/setup-bazel@0.15.0
with:
external-cache: true
```

#### Cache NPM repositories based on `package-lock.json` contents

```yaml
- uses: bazel-contrib/setup-bazel@0.15.0
with:
external-cache: |
manifest:
npm: package-lock.json
```

#### Do not cache Ruby on Windows

```yaml
- uses: bazel-contrib/setup-bazel@0.15.0
with:
external-cache: |
manifest:
ruby: ${{ runner.os == 'Windows' && 'false' || 'true' }}
```

### `google-credentials`

Google Cloud account key to use for [remote caching authentication][9].

Default `""`.

Examples

#### Authenticate via key

```yaml
- uses: bazel-contrib/setup-bazel@0.15.0
with:
google-credentials: ${{ secrets.GOOGLE_CLOUD_KEY }}
```

### `module-root`

Bazel module root directory, where `MODULE.bazel` and `WORKSPACE` is found.

Change this value to the module root if it's not the repository root.

Default `"."`.

### `output-base`

Change Bazel output base directory.

You might want to change it when running on self-hosted runners with a custom directory layout.

Default is one of the following:

- `$HOME/.bazel` on Linux and macOS
- `D:/_bazel` on Windows

Examples

#### Use `C` drive letter

```yaml
- uses: bazel-contrib/setup-bazel@0.15.0
with:
output-base: C:/_bazel
```

### `repository-cache`

Enable [`repository_cache`][3] and store it on GitHub based on contents of `MODULE.bazel` and `WORKSPACE` files.

You can also pass a file (or list of files) which contents are used to calculate cache key.

Default `false`.

Examples

#### Store a single repository cache

```yaml
- uses: bazel-contrib/setup-bazel@0.15.0
with:
repository-cache: true
```

#### Store a repository cache from a custom location

```yaml
- uses: bazel-contrib/setup-bazel@0.15.0
with:
repository-cache: examples/gem/WORKSPACE
```

## Migrating from [`bazelbuild/setup-bazelisk`][6]

You can simply replace `bazelbuild/setup-bazelisk` action with `bazel-contrib/setup-bazel`.
However, if you used a `bazel-version` input before, you will need to remove it in favor
[other ways to specify Bazel version][7].

## Development

To build action, run the following command:

```sh
$ npm run build
```

## Release

Use [Release][10] workflow to cut a new release.

[1]: https://github.com/bazelbuild/bazelisk
[2]: https://bazel.build/remote/caching#disk-cache
[3]: https://docs-staging.bazel.build/2338/versions/main/guide.html#the-repository-cache
[4]: https://bazel.build/run/bazelrc
[5]: https://docs.github.com/en/actions/learn-github-actions/contexts#github-context
[6]: https://github.com/bazelbuild/setup-bazelisk
[7]: https://github.com/bazelbuild/bazelisk/blob/master/README.md#how-does-bazelisk-know-which-bazel-version-to-run
[8]: https://github.com/actions/runner-images/pull/490
[9]: https://bazel.build/reference/command-line-reference#flag--google_credentials
[10]: https://github.com/bazel-contrib/setup-bazel/actions/workflows/release.yml