Compare commits

..

No commits in common. "main" and "0.10.0" have entirely different histories.
main ... 0.10.0

14 changed files with 105902 additions and 103491 deletions

View file

@ -19,7 +19,7 @@ jobs:
- ubuntu - ubuntu
- windows - windows
steps: steps:
- uses: actions/checkout@v6 - uses: actions/checkout@v4
- uses: ./ - uses: ./
- if: failure() && runner.debug == '1' - if: failure() && runner.debug == '1'
uses: mxschmitt/action-tmate@v3 uses: mxschmitt/action-tmate@v3

View file

@ -15,8 +15,8 @@ jobs:
release: release:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v6 - uses: actions/checkout@v4
- uses: actions/setup-node@v6 - uses: actions/setup-node@v4
with: with:
cache: npm cache: npm
node-version-file: package.json node-version-file: package.json

View file

@ -1 +1 @@
nodejs 24.14.0 nodejs 22.12.0

View file

@ -6,7 +6,7 @@ and provides an advanced fine-grained caching to improve workflows performance.
## Usage ## Usage
```yaml ```yaml
- uses: bazel-contrib/setup-bazel@0.18.0 - uses: bazel-contrib/setup-bazel@0.10.0
with: with:
# Avoid downloading Bazel every time. # Avoid downloading Bazel every time.
bazelisk-cache: true bazelisk-cache: true
@ -39,7 +39,7 @@ Default `""`.
#### Install Bazelisk 1.x #### Install Bazelisk 1.x
```yaml ```yaml
- uses: bazel-contrib/setup-bazel@0.18.0 - uses: bazel-contrib/setup-bazel@0.10.0
with: with:
bazelisk-version: 1.x bazelisk-version: 1.x
``` ```
@ -47,7 +47,7 @@ Default `""`.
#### Install exact Bazelisk version #### Install exact Bazelisk version
```yaml ```yaml
- uses: bazel-contrib/setup-bazel@0.18.0 - uses: bazel-contrib/setup-bazel@0.10.0
with: with:
bazelisk-version: 1.19.0 bazelisk-version: 1.19.0
``` ```
@ -67,7 +67,7 @@ Default `""`.
#### Enable Bzlmod #### Enable Bzlmod
```yaml ```yaml
- uses: bazel-contrib/setup-bazel@0.18.0 - uses: bazel-contrib/setup-bazel@0.10.0
with: with:
bazelrc: common --enable_bzlmod bazelrc: common --enable_bzlmod
``` ```
@ -75,7 +75,7 @@ Default `""`.
#### Add colors and timestamps #### Add colors and timestamps
```yaml ```yaml
- uses: bazel-contrib/setup-bazel@0.18.0 - uses: bazel-contrib/setup-bazel@0.10.0
with: with:
bazelrc: | bazelrc: |
build --color=yes build --color=yes
@ -83,30 +83,6 @@ Default `""`.
``` ```
</details> </details>
### `cache-save`
Whether to save caches at the end of the workflow.
Set to `false` for pull requests to allow cache restoration without saving,
which prevents PRs from polluting the cache while still benefiting from it.
Default `true`.
<details>
<summary>Examples</summary>
#### Disable cache saving on pull requests
```yaml
- uses: bazel-contrib/setup-bazel@0.18.0
with:
bazelisk-cache: true
disk-cache: ${{ github.workflow }}
repository-cache: true
cache-save: ${{ github.event_name != 'pull_request' }}
```
</details>
### `disk-cache` ### `disk-cache`
Enable [`disk_cache`][2] and store it on GitHub based on contents of `BUILD` files. Enable [`disk_cache`][2] and store it on GitHub based on contents of `BUILD` files.
@ -121,7 +97,7 @@ Default `false`.
#### Share a single disk cache #### Share a single disk cache
```yaml ```yaml
- uses: bazel-contrib/setup-bazel@0.18.0 - uses: bazel-contrib/setup-bazel@0.10.0
with: with:
disk-cache: true disk-cache: true
``` ```
@ -129,9 +105,9 @@ Default `false`.
#### Separate disk caches between workflows #### Separate disk caches between workflows
```yaml ```yaml
- uses: bazel-contrib/setup-bazel@0.18.0 - uses: bazel-contrib/setup-bazel@0.10.0
with: with:
disk-cache: ${{ github.workflow }} disk-cache: ${{ github.workflow }}}
``` ```
</details> </details>
@ -153,7 +129,7 @@ Default `false`.
#### Enable external repositories caches #### Enable external repositories caches
```yaml ```yaml
- uses: bazel-contrib/setup-bazel@0.18.0 - uses: bazel-contrib/setup-bazel@0.10.0
with: with:
external-cache: true external-cache: true
``` ```
@ -161,7 +137,7 @@ Default `false`.
#### Cache NPM repositories based on `package-lock.json` contents #### Cache NPM repositories based on `package-lock.json` contents
```yaml ```yaml
- uses: bazel-contrib/setup-bazel@0.18.0 - uses: bazel-contrib/setup-bazel@0.10.0
with: with:
external-cache: | external-cache: |
manifest: manifest:
@ -171,7 +147,7 @@ Default `false`.
#### Do not cache Ruby on Windows #### Do not cache Ruby on Windows
```yaml ```yaml
- uses: bazel-contrib/setup-bazel@0.18.0 - uses: bazel-contrib/setup-bazel@0.10.0
with: with:
external-cache: | external-cache: |
manifest: manifest:
@ -191,20 +167,12 @@ Default `""`.
#### Authenticate via key #### Authenticate via key
```yaml ```yaml
- uses: bazel-contrib/setup-bazel@0.18.0 - uses: bazel-contrib/setup-bazel@0.10.0
with: with:
google-credentials: ${{ secrets.GOOGLE_CLOUD_KEY }} google-credentials: ${{ secrets.GOOGLE_CLOUD_KEY }}
``` ```
</details> </details>
### `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` ### `output-base`
Change Bazel output base directory. Change Bazel output base directory.
@ -222,7 +190,7 @@ Default is one of the following:
#### Use `C` drive letter #### Use `C` drive letter
```yaml ```yaml
- uses: bazel-contrib/setup-bazel@0.18.0 - uses: bazel-contrib/setup-bazel@0.10.0
with: with:
output-base: C:/_bazel output-base: C:/_bazel
``` ```
@ -242,7 +210,7 @@ Default `false`.
#### Store a single repository cache #### Store a single repository cache
```yaml ```yaml
- uses: bazel-contrib/setup-bazel@0.18.0 - uses: bazel-contrib/setup-bazel@0.10.0
with: with:
repository-cache: true repository-cache: true
``` ```
@ -250,19 +218,10 @@ Default `false`.
#### Store a repository cache from a custom location #### Store a repository cache from a custom location
```yaml ```yaml
- uses: bazel-contrib/setup-bazel@0.18.0 - uses: bazel-contrib/setup-bazel@0.10.0
with: with:
repository-cache: examples/gem/WORKSPACE repository-cache: examples/gem/WORKSPACE
``` ```
#### Store a repository cache from a list of custom locations
```yaml
- uses: bazel-contrib/setup-bazel@0.18.0
with:
repository-cache: |
- MODULE.bazel
- requirements_locked.txt
```
</details> </details>
## Migrating from [`bazelbuild/setup-bazelisk`][6] ## Migrating from [`bazelbuild/setup-bazelisk`][6]
@ -276,7 +235,6 @@ However, if you used a `bazel-version` input before, you will need to remove it
To build action, run the following command: To build action, run the following command:
```sh ```sh
$ npm install
$ npm run build $ npm run build
``` ```

View file

@ -13,10 +13,6 @@ inputs:
description: Extra contents to write to user .bazelrc description: Extra contents to write to user .bazelrc
required: false required: false
default: "" default: ""
cache-save:
description: Whether to save caches. Set to false for pull requests to allow restores but prevent saves.
required: false
default: "true"
cache-version: cache-version:
description: Version of all caches description: Version of all caches
required: false required: false
@ -33,10 +29,6 @@ inputs:
description: Google Cloud account key for remote cache description: Google Cloud account key for remote cache
required: false required: false
default: "" default: ""
module-root:
description: Bazel module root directory. Default is `.`
required: false
default: "."
output-base: output-base:
description: Bazel output base directory. Default is $HOME/.cache/bazel (POSIX) or D:/_bazel (Windows) description: Bazel output base directory. Default is $HOME/.cache/bazel (POSIX) or D:/_bazel (Windows)
required: false required: false
@ -54,4 +46,3 @@ runs:
using: node20 using: node20
main: dist/main/index.js main: dist/main/index.js
post: dist/post/index.js post: dist/post/index.js
post-if: "!cancelled()"

View file

@ -5,9 +5,8 @@ const core = require('@actions/core')
const github = require('@actions/github') const github = require('@actions/github')
const bazeliskVersion = core.getInput('bazelisk-version') const bazeliskVersion = core.getInput('bazelisk-version')
const cacheSave = core.getBooleanInput('cache-save')
const cacheVersion = core.getInput('cache-version') const cacheVersion = core.getInput('cache-version')
const moduleRoot = core.getInput('module-root') const externalCacheConfig = yaml.parse(core.getInput('external-cache'))
const homeDir = os.homedir() const homeDir = os.homedir()
const arch = os.arch() const arch = os.arch()
@ -16,12 +15,7 @@ const platform = os.platform()
let bazelOutputBase = core.getInput('output-base') let bazelOutputBase = core.getInput('output-base')
if (!bazelOutputBase) { if (!bazelOutputBase) {
if (platform === 'win32') { if (platform === 'win32') {
// check if GITHUB_WORKSPACE starts with D: bazelOutputBase = 'D:/_bazel'
if (process.env.GITHUB_WORKSPACE?.toLowerCase()?.startsWith('d:')) {
bazelOutputBase = 'D:/_bazel'
} else {
bazelOutputBase = `C:/_bazel`
}
} else { } else {
bazelOutputBase = `${homeDir}/.bazel` bazelOutputBase = `${homeDir}/.bazel`
} }
@ -46,33 +40,30 @@ switch (platform) {
break break
} }
const baseCacheKey = `setup-bazel-${cacheVersion}-${platform}-${arch}` const baseCacheKey = `setup-bazel-${cacheVersion}-${platform}`
const bazelrc = core.getMultilineInput('bazelrc') const bazelrc = core.getMultilineInput('bazelrc')
const diskCacheConfig = core.getInput('disk-cache') const diskCacheConfig = core.getInput('disk-cache')
const diskCacheEnabled = diskCacheConfig !== 'false' const diskCacheEnabled = diskCacheConfig !== 'false'
let diskCacheName = 'disk' let diskCacheName = 'disk'
if (diskCacheEnabled) { if (diskCacheEnabled) {
// Before Bazel 6.3, providing --disk_cache to common is an error,
// with Bazel 6.3 and onwards, common accepts any legal Bazel option
// https://github.com/bazelbuild/bazel/issues/3054
bazelrc.push(`build --disk_cache=${bazelDisk}`) bazelrc.push(`build --disk_cache=${bazelDisk}`)
if (diskCacheName !== 'true') { if (diskCacheName !== 'true') {
diskCacheName = `${diskCacheName}-${diskCacheConfig}` diskCacheName = `${diskCacheName}-${diskCacheConfig}`
} }
} }
const repositoryCacheConfig = yaml.parse(core.getInput('repository-cache')) const repositoryCacheConfig = core.getInput('repository-cache')
const repositoryCacheEnabled = repositoryCacheConfig !== false const repositoryCacheEnabled = repositoryCacheConfig !== 'false'
let repositoryCacheFiles = [ let repositoryCacheFiles = [
`${moduleRoot}/MODULE.bazel`, 'MODULE.bazel',
`${moduleRoot}/WORKSPACE.bazel`, 'WORKSPACE.bazel',
`${moduleRoot}/WORKSPACE.bzlmod`, 'WORKSPACE.bzlmod',
`${moduleRoot}/WORKSPACE` 'WORKSPACE'
] ]
if (repositoryCacheEnabled) { if (repositoryCacheEnabled) {
bazelrc.push(`common --repository_cache=${bazelRepository}`) bazelrc.push(`build --repository_cache=${bazelRepository}`)
if (repositoryCacheConfig !== true) { if (repositoryCacheConfig !== 'true') {
repositoryCacheFiles = Array(repositoryCacheConfig).flat() repositoryCacheFiles = Array(repositoryCacheConfig).flat()
} }
} }
@ -87,7 +78,6 @@ if (googleCredentials.length > 0 && !googleCredentialsSaved) {
core.saveState('google-credentials-path', googleCredentialsPath) core.saveState('google-credentials-path', googleCredentialsPath)
} }
const externalCacheConfig = yaml.parse(core.getInput('external-cache'))
const bazelExternal = core.toPosixPath(`${bazelOutputBase}/external`) const bazelExternal = core.toPosixPath(`${bazelOutputBase}/external`)
const externalCache = {} const externalCache = {}
if (externalCacheConfig) { if (externalCacheConfig) {
@ -100,10 +90,10 @@ if (externalCacheConfig) {
externalCache.baseCacheKey = `${baseCacheKey}-external-` externalCache.baseCacheKey = `${baseCacheKey}-external-`
externalCache.manifest = { externalCache.manifest = {
files: [ files: [
`${moduleRoot}/MODULE.bazel`, 'MODULE.bazel',
`${moduleRoot}/WORKSPACE.bazel`, 'WORKSPACE.bazel',
`${moduleRoot}/WORKSPACE.bzlmod`, 'WORKSPACE.bzlmod',
`${moduleRoot}/WORKSPACE` 'WORKSPACE'
], ],
name: `external-${manifestName}-manifest`, name: `external-${manifestName}-manifest`,
path: `${os.tmpdir()}/external-cache-manifest.txt` path: `${os.tmpdir()}/external-cache-manifest.txt`
@ -111,10 +101,10 @@ if (externalCacheConfig) {
externalCache.default = { externalCache.default = {
enabled: true, enabled: true,
files: [ files: [
`${moduleRoot}/MODULE.bazel`, 'MODULE.bazel',
`${moduleRoot}/WORKSPACE.bazel`, 'WORKSPACE.bazel',
`${moduleRoot}/WORKSPACE.bzlmod`, 'WORKSPACE.bzlmod',
`${moduleRoot}/WORKSPACE` 'WORKSPACE'
], ],
name: (name) => { return `external-${name}` }, name: (name) => { return `external-${name}` },
paths: (name) => { paths: (name) => {
@ -133,15 +123,11 @@ if (externalCacheConfig) {
} }
} }
const token = core.getInput('token')
core.exportVariable('BAZELISK_GITHUB_TOKEN', token)
module.exports = { module.exports = {
baseCacheKey, baseCacheKey,
cacheSave,
bazeliskCache: { bazeliskCache: {
enabled: core.getBooleanInput('bazelisk-cache'), enabled: core.getBooleanInput('bazelisk-cache'),
files: [`${moduleRoot}/.bazelversion`], files: ['.bazelversion'],
name: 'bazelisk', name: 'bazelisk',
paths: [core.toPosixPath(`${userCacheDir}/bazelisk`)] paths: [core.toPosixPath(`${userCacheDir}/bazelisk`)]
}, },
@ -150,9 +136,8 @@ module.exports = {
diskCache: { diskCache: {
enabled: diskCacheEnabled, enabled: diskCacheEnabled,
files: [ files: [
...repositoryCacheFiles, '**/BUILD.bazel',
`${moduleRoot}/**/BUILD.bazel`, '**/BUILD'
`${moduleRoot}/**/BUILD`
], ],
name: diskCacheName, name: diskCacheName,
paths: [bazelDisk] paths: [bazelDisk]

105220
dist/main/index.js vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

102733
dist/post/index.js vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -69,7 +69,7 @@ async function downloadBazelisk() {
filename = `${filename}.exe` filename = `${filename}.exe`
} }
const token = process.env.BAZELISK_GITHUB_TOKEN const token = core.getInput('token')
const octokit = github.getOctokit(token, { const octokit = github.getOctokit(token, {
baseUrl: 'https://api.github.com' baseUrl: 'https://api.github.com'
}) })
@ -96,11 +96,7 @@ async function downloadBazelisk() {
core.debug('Adding to the cache...'); core.debug('Adding to the cache...');
fs.chmodSync(downloadPath, '755'); fs.chmodSync(downloadPath, '755');
let bazel_name = "bazel"; const cachePath = await tc.cacheFile(downloadPath, 'bazel', 'bazelisk', version)
if (platform == 'windows') {
bazel_name = `${bazel_name}.exe`
}
const cachePath = await tc.cacheFile(downloadPath, bazel_name, 'bazelisk', version)
core.debug(`Successfully cached bazelisk to ${cachePath}`) core.debug(`Successfully cached bazelisk to ${cachePath}`)
return cachePath return cachePath
@ -133,16 +129,14 @@ async function restoreExternalCaches(cacheConfig) {
// Now restore all external caches defined in manifest // Now restore all external caches defined in manifest
if (fs.existsSync(path)) { if (fs.existsSync(path)) {
const manifest = fs.readFileSync(path, { encoding: 'utf8' }) const manifest = fs.readFileSync(path, { encoding: 'utf8' })
const restorePromises = manifest.split('\n').filter(s => s) for (const name of manifest.split('\n').filter(s => s)) {
.map(name => { await restoreCache({
return restoreCache({ enabled: cacheConfig[name]?.enabled ?? cacheConfig.default.enabled,
enabled: cacheConfig[name]?.enabled ?? cacheConfig.default.enabled, files: cacheConfig[name]?.files || cacheConfig.default.files,
files: cacheConfig[name]?.files || cacheConfig.default.files, name: cacheConfig.default.name(name),
name: cacheConfig.default.name(name), paths: cacheConfig.default.paths(name)
paths: cacheConfig.default.paths(name) })
}); }
});
await Promise.all(restorePromises);
} }
} }
@ -152,10 +146,9 @@ async function restoreCache(cacheConfig) {
} }
const delay = Math.random() * 1000 // timeout <= 1 sec to reduce 429 errors const delay = Math.random() * 1000 // timeout <= 1 sec to reduce 429 errors
await setTimeout(delay) await setTimeout(delay, async function () {
core.startGroup(`Restore cache for ${cacheConfig.name}`)
core.startGroup(`Restore cache for ${cacheConfig.name}`)
try {
const hash = await glob.hashFiles(cacheConfig.files.join('\n')) const hash = await glob.hashFiles(cacheConfig.files.join('\n'))
const name = cacheConfig.name const name = cacheConfig.name
const paths = cacheConfig.paths const paths = cacheConfig.paths
@ -178,11 +171,9 @@ async function restoreCache(cacheConfig) {
} else { } else {
core.info(`Failed to restore ${name} cache`) core.info(`Failed to restore ${name} cache`)
} }
} catch (err) {
core.warning(`Failed to restore ${name} cache with error: ${err}`)
} finally {
core.endGroup() core.endGroup()
} }())
} }
run() run()

1232
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -1,10 +1,10 @@
{ {
"name": "setup-bazel", "name": "setup-bazel",
"version": "0.18.0", "version": "0.10.0",
"description": "Install and configure Bazel for GitHub Actions", "description": "Install and configure Bazel for GitHub Actions",
"main": "index.js", "main": "index.js",
"engines": { "engines": {
"node": "24.x" "node": "22.x"
}, },
"scripts": { "scripts": {
"build": "ncc build index.js -s -o dist/main && ncc build post.js -s -o dist/post", "build": "ncc build index.js -s -o dist/main && ncc build post.js -s -o dist/post",
@ -13,11 +13,11 @@
"author": "Alex Rodionov <p0deje@gmail.com>", "author": "Alex Rodionov <p0deje@gmail.com>",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@actions/cache": "^6.0.0", "@actions/cache": "^4.0.0",
"@actions/core": "^3.0.0", "@actions/core": "^1.10.1",
"@actions/github": "^9.0.0", "@actions/github": "^6.0.0",
"@actions/glob": "^0.6.0", "@actions/glob": "^0.5.0",
"@actions/tool-cache": "^4.0.0", "@actions/tool-cache": "^2.0.1",
"@vercel/ncc": "^0.38.0", "@vercel/ncc": "^0.38.0",
"yaml": "^2.2.1" "yaml": "^2.2.1"
} }

View file

@ -13,11 +13,6 @@ async function run() {
} }
async function saveCaches() { async function saveCaches() {
if (!config.cacheSave) {
core.info('Cache saving is disabled (cache-save: false)')
return
}
await saveCache(config.bazeliskCache) await saveCache(config.bazeliskCache)
await saveCache(config.diskCache) await saveCache(config.diskCache)
await saveCache(config.repositoryCache) await saveCache(config.repositoryCache)