forked from elastic/kibana
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
chore(NA): introduce new yarn kbn reset command to support bazel work…
…flow (elastic#89597) * chore(NA): introduce new yarn kbn destroy command to support bazel workflow * chore(NA): update wording for new kbn pm changes * chore(NA): update .bazelrc.common Co-authored-by: Tyler Smalley <tylersmalley@me.com> * chore(NA): update .bazelrc Co-authored-by: Tyler Smalley <tylersmalley@me.com> * chore(NA): update packages/kbn-pm/src/commands/clean.ts Co-authored-by: Tyler Smalley <tylersmalley@me.com> * chore(NA): update packages/kbn-pm/src/commands/destroy.ts Co-authored-by: Tyler Smalley <tylersmalley@me.com> * chore(NA): update packages/kbn-pm/src/commands/clean.ts Co-authored-by: Tyler Smalley <tylersmalley@me.com> * chore(NA): update packages/kbn-pm/src/commands/destroy.ts Co-authored-by: Tyler Smalley <tylersmalley@me.com> * chore(NA): rename destroy command into reset * chore(NA): update packages/kbn-pm/src/commands/clean.ts Co-authored-by: Tyler Smalley <tylersmalley@me.com> * chore(NA): restore old behaviour on kbn clean * chore(NA): update reset command to delete bazel caches on disk * chore(NA): update packages/kbn-pm/src/commands/clean.ts Co-authored-by: Tyler Smalley <tylersmalley@me.com> * chore(NA): update prefix to match bazel defined one for cache settings * chore(NA): update kbn pm dist file * chore(NA): update kbn pm dist * chore(NA): update gitignore * chore(NA): add new ignore files after changed bazel aggregated folder Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Tyler Smalley <tylersmalley@me.com> # Conflicts: # packages/kbn-pm/dist/index.js
- Loading branch information
Showing
14 changed files
with
10,422 additions
and
9,937 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -8,8 +8,7 @@ | |
.idea | ||
.teamcity | ||
.yarn-local-mirror | ||
bazel-cache | ||
bazel-dist | ||
/bazel | ||
build | ||
node_modules | ||
target |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -46,4 +46,4 @@ snapshots.js | |
/packages/kbn-monaco/src/painless/antlr | ||
|
||
# Bazel | ||
/bazel-* | ||
/bazel |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -81,5 +81,5 @@ report.asciidoc | |
.yarn-local-mirror | ||
|
||
# Bazel | ||
/bazel-* | ||
/bazel | ||
/.bazelrc.user |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
{ | ||
"main": "../target/stdio" | ||
} |
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,94 @@ | ||
/* | ||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one | ||
* or more contributor license agreements. Licensed under the Elastic License | ||
* and the Server Side Public License, v 1; you may not use this file except in | ||
* compliance with, at your election, the Elastic License or the Server Side | ||
* Public License, v 1. | ||
*/ | ||
|
||
import dedent from 'dedent'; | ||
import del from 'del'; | ||
import ora from 'ora'; | ||
import { join, relative } from 'path'; | ||
|
||
import { getBazelDiskCacheFolder, getBazelRepositoryCacheFolder, runBazel } from '../utils/bazel'; | ||
import { isDirectory } from '../utils/fs'; | ||
import { log } from '../utils/log'; | ||
import { ICommand } from './'; | ||
|
||
export const ResetCommand: ICommand = { | ||
description: | ||
'Deletes node_modules and output directories, resets internal and disk caches, and stops Bazel server', | ||
name: 'reset', | ||
|
||
async run(projects) { | ||
log.warning(dedent` | ||
In most cases, 'yarn kbn clean' is all that should be needed to recover a consistent state when | ||
problems arise. If you need to use this command, please let us know, as it should not be necessary. | ||
`); | ||
|
||
const toDelete = []; | ||
for (const project of projects.values()) { | ||
if (await isDirectory(project.nodeModulesLocation)) { | ||
toDelete.push({ | ||
cwd: project.path, | ||
pattern: relative(project.path, project.nodeModulesLocation), | ||
}); | ||
} | ||
|
||
if (await isDirectory(project.targetLocation)) { | ||
toDelete.push({ | ||
cwd: project.path, | ||
pattern: relative(project.path, project.targetLocation), | ||
}); | ||
} | ||
|
||
const { extraPatterns } = project.getCleanConfig(); | ||
if (extraPatterns) { | ||
toDelete.push({ | ||
cwd: project.path, | ||
pattern: extraPatterns, | ||
}); | ||
} | ||
} | ||
|
||
// Runs Bazel hard clean | ||
await runBazel(['clean', '--expunge']); | ||
log.success('Hard cleaned bazel'); | ||
|
||
// Deletes Bazel Cache Folders | ||
await del([await getBazelDiskCacheFolder(), await getBazelRepositoryCacheFolder()], { | ||
force: true, | ||
}); | ||
log.success('Removed disk caches'); | ||
|
||
if (toDelete.length === 0) { | ||
return; | ||
} | ||
|
||
/** | ||
* In order to avoid patterns like `/build` in packages from accidentally | ||
* impacting files outside the package we use `process.chdir()` to change | ||
* the cwd to the package and execute `del()` without the `force` option | ||
* so it will check that each file being deleted is within the package. | ||
* | ||
* `del()` does support a `cwd` option, but it's only for resolving the | ||
* patterns and does not impact the cwd check. | ||
*/ | ||
const originalCwd = process.cwd(); | ||
try { | ||
for (const { pattern, cwd } of toDelete) { | ||
process.chdir(cwd); | ||
const promise = del(pattern); | ||
|
||
if (log.wouldLogLevel('info')) { | ||
ora.promise(promise, relative(originalCwd, join(cwd, String(pattern)))); | ||
} | ||
|
||
await promise; | ||
} | ||
} finally { | ||
process.chdir(originalCwd); | ||
} | ||
}, | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
/* | ||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one | ||
* or more contributor license agreements. Licensed under the Elastic License | ||
* and the Server Side Public License, v 1; you may not use this file except in | ||
* compliance with, at your election, the Elastic License or the Server Side | ||
* Public License, v 1. | ||
*/ | ||
|
||
import { dirname, resolve } from 'path'; | ||
import { spawn } from '../child_process'; | ||
|
||
async function rawRunBazelInfoRepoCache() { | ||
const { stdout: bazelRepositoryCachePath } = await spawn('bazel', ['info', 'repository_cache'], { | ||
stdio: 'pipe', | ||
}); | ||
return bazelRepositoryCachePath; | ||
} | ||
|
||
export async function getBazelDiskCacheFolder() { | ||
return resolve(dirname(await rawRunBazelInfoRepoCache()), 'disk-cache'); | ||
} | ||
|
||
export async function getBazelRepositoryCacheFolder() { | ||
return await rawRunBazelInfoRepoCache(); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
/* | ||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one | ||
* or more contributor license agreements. Licensed under the Elastic License | ||
* and the Server Side Public License, v 1; you may not use this file except in | ||
* compliance with, at your election, the Elastic License or the Server Side | ||
* Public License, v 1. | ||
*/ | ||
|
||
import chalk from 'chalk'; | ||
import execa from 'execa'; | ||
import * as Rx from 'rxjs'; | ||
import { tap } from 'rxjs/operators'; | ||
import { observeLines } from '@kbn/dev-utils/stdio'; | ||
import { spawn } from '../child_process'; | ||
import { log } from '../log'; | ||
|
||
export async function runBazel(bazelArgs: string[], runOpts: execa.Options = {}) { | ||
// Force logs to pipe in order to control the output of them | ||
const bazelOpts: execa.Options = { | ||
...runOpts, | ||
stdio: 'pipe', | ||
}; | ||
|
||
const bazelProc = spawn('bazel', bazelArgs, bazelOpts); | ||
|
||
const bazelLogs$ = new Rx.Subject<string>(); | ||
|
||
// Bazel outputs machine readable output into stdout and human readable output goes to stderr. | ||
// Therefore we need to get both. In order to get errors we need to parse the actual text line | ||
const bazelLogSubscription = Rx.merge( | ||
observeLines(bazelProc.stdout!).pipe( | ||
tap((line) => log.info(`${chalk.cyan('[bazel]')} ${line}`)) | ||
), | ||
observeLines(bazelProc.stderr!).pipe( | ||
tap((line) => log.info(`${chalk.cyan('[bazel]')} ${line}`)) | ||
) | ||
).subscribe(bazelLogs$); | ||
|
||
// Wait for process and logs to finish, unsubscribing in the end | ||
await bazelProc; | ||
await bazelLogs$.toPromise(); | ||
await bazelLogSubscription.unsubscribe(); | ||
} |
Oops, something went wrong.