Hello world
This commit is contained in:
parent
9e2ec6e427
commit
c2309d72bd
15 changed files with 130920 additions and 0 deletions
116
index.js
Normal file
116
index.js
Normal file
|
|
@ -0,0 +1,116 @@
|
|||
const fs = require('fs')
|
||||
const core = require('@actions/core')
|
||||
const cache = require('@actions/cache')
|
||||
const github = require('@actions/github')
|
||||
const glob = require('@actions/glob')
|
||||
const config = require('./config')
|
||||
|
||||
async function run () {
|
||||
try {
|
||||
await setupBazel()
|
||||
} catch (error) {
|
||||
core.setFailed(error.stack)
|
||||
}
|
||||
}
|
||||
|
||||
async function setupBazel () {
|
||||
core.startGroup('Configure Bazel')
|
||||
console.log('Configuration:')
|
||||
console.log(JSON.stringify(config, null, 2))
|
||||
|
||||
await setupBazelrc()
|
||||
core.endGroup()
|
||||
|
||||
await useGnuTarOnWindows()
|
||||
await restoreCache(config.bazeliskCache)
|
||||
await restoreCache(config.diskCache)
|
||||
await restoreCache(config.repositoryCache)
|
||||
await restoreExternalCaches(config.externalCache)
|
||||
}
|
||||
|
||||
async function setupBazelrc () {
|
||||
fs.writeFileSync(
|
||||
config.paths.bazelrc,
|
||||
`startup --output_base=${config.paths.bazelOutputBase}\n`
|
||||
)
|
||||
|
||||
for (const line of config.bazelrc) {
|
||||
fs.appendFileSync(config.paths.bazelrc, `${line}\n`)
|
||||
}
|
||||
}
|
||||
|
||||
// https://github.com/actions/cache/blob/main/tips-and-workarounds.md#improving-cache-restore-performance-on-windowsusing-cross-os-caching
|
||||
async function useGnuTarOnWindows () {
|
||||
if (config.useGnuTarOnWindows && config.platform === 'win32') {
|
||||
if (config.bazeliskCache.enabled || config.diskCache.enabled ||
|
||||
config.repositoryCache.enabled || config.externalCache.enabled) {
|
||||
core.addPath('C:\\Program Files\\Git\\usr\\bin')
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async function restoreExternalCaches (cacheConfig) {
|
||||
if (!cacheConfig.enabled) {
|
||||
return
|
||||
}
|
||||
|
||||
const repo = github.context.repo
|
||||
const octokit = github.getOctokit(config.token)
|
||||
const { data: { actions_caches: caches } } = await octokit.rest.actions.getActionsCacheList({
|
||||
owner: repo.owner,
|
||||
repo: repo.repo,
|
||||
key: cacheConfig.baseCacheKey,
|
||||
per_page: 100
|
||||
})
|
||||
|
||||
const names = new Set([])
|
||||
const regexp = new RegExp(cacheConfig.regexp)
|
||||
for (const cache of caches) {
|
||||
core.debug(`Cache key is ${cache.key}`)
|
||||
|
||||
const match = cache.key.match(regexp)
|
||||
if (match) {
|
||||
names.add(match.groups.name)
|
||||
}
|
||||
}
|
||||
|
||||
for (const name of names) {
|
||||
await restoreCache({
|
||||
enabled: true,
|
||||
files: cacheConfig[name]?.files || cacheConfig.default.files,
|
||||
name: cacheConfig.name(name),
|
||||
paths: cacheConfig.paths(name)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
async function restoreCache (cacheConfig) {
|
||||
if (!cacheConfig.enabled) {
|
||||
return
|
||||
}
|
||||
|
||||
core.startGroup(`Restore cache for ${cacheConfig.name}`)
|
||||
|
||||
const hash = await glob.hashFiles(cacheConfig.files.join('\n'))
|
||||
const name = cacheConfig.name
|
||||
const paths = cacheConfig.paths
|
||||
const restoreKey = `${config.baseCacheKey}-${name}-`
|
||||
const key = `${restoreKey}${hash}`
|
||||
|
||||
console.log(`Attempting to restore ${name} cache from ${key}`)
|
||||
|
||||
const restoredKey = await cache.restoreCache(paths, key, [restoreKey])
|
||||
if (restoredKey) {
|
||||
console.log(`Successfully restored cache from ${restoredKey}`)
|
||||
|
||||
if (restoredKey === key) {
|
||||
core.saveState(`${name}-cache-hit`, 'true')
|
||||
}
|
||||
} else {
|
||||
console.log(`Failed to restore ${name} cache`)
|
||||
}
|
||||
|
||||
core.endGroup()
|
||||
}
|
||||
|
||||
run()
|
||||
Loading…
Add table
Add a link
Reference in a new issue