fix(dev-infra): publish script python check not working on windows (#41943)
We recently added a sanity check that ensures that `python` is available for Bazel. The check relies on `/usr/bin/python` to check if python is available w/ the correct version. The problem is that on Windows there is no guarantee that the `/usr/bin` folder exists, so the `ng-dev release publish` command always fails. We fix this by just accessing the `env` binary that is also consulted by scripts executed within Bazel actions. The `env` binary can be assumed exist in the shell's `$PATH` and can point us to Python as if it would be executed within Bazel. PR Close #41943
This commit is contained in:
parent
21c2a06811
commit
530e45f093
@ -6772,16 +6772,16 @@ class ReleaseTool {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Verifies the current environment contains /usr/bin/python which points to the Python3
|
* Verifies that Python can be resolved within scripts and points to a compatible version. Python
|
||||||
* interpreter. python is required by our tooling in bazel as it contains scripts setting
|
* is required in Bazel actions as there can be tools (such as `skydoc`) that rely on it.
|
||||||
* `#! /usr/bin/env python`.
|
|
||||||
*
|
|
||||||
* @returns a boolean indicating success or failure.
|
* @returns a boolean indicating success or failure.
|
||||||
*/
|
*/
|
||||||
_verifyEnvironmentHasPython3Symlink() {
|
_verifyEnvironmentHasPython3Symlink() {
|
||||||
return tslib.__awaiter(this, void 0, void 0, function* () {
|
return tslib.__awaiter(this, void 0, void 0, function* () {
|
||||||
try {
|
try {
|
||||||
const pyVersion = yield spawnWithDebugOutput('/usr/bin/python', ['--version'], { mode: 'silent' });
|
// Note: We do not rely on `/usr/bin/env` but rather access the `env` binary directly as it
|
||||||
|
// should be part of the shell's `$PATH`. This is necessary for compatibility with Windows.
|
||||||
|
const pyVersion = yield spawnWithDebugOutput('env', ['python', '--version'], { mode: 'silent' });
|
||||||
const version = pyVersion.stdout.trim() || pyVersion.stderr.trim();
|
const version = pyVersion.stdout.trim() || pyVersion.stderr.trim();
|
||||||
if (version.startsWith('Python 3.')) {
|
if (version.startsWith('Python 3.')) {
|
||||||
debug(`Local python version: ${version}`);
|
debug(`Local python version: ${version}`);
|
||||||
|
@ -130,16 +130,16 @@ export class ReleaseTool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Verifies the current environment contains /usr/bin/python which points to the Python3
|
* Verifies that Python can be resolved within scripts and points to a compatible version. Python
|
||||||
* interpreter. python is required by our tooling in bazel as it contains scripts setting
|
* is required in Bazel actions as there can be tools (such as `skydoc`) that rely on it.
|
||||||
* `#! /usr/bin/env python`.
|
|
||||||
*
|
|
||||||
* @returns a boolean indicating success or failure.
|
* @returns a boolean indicating success or failure.
|
||||||
*/
|
*/
|
||||||
private async _verifyEnvironmentHasPython3Symlink(): Promise<boolean> {
|
private async _verifyEnvironmentHasPython3Symlink(): Promise<boolean> {
|
||||||
try {
|
try {
|
||||||
|
// Note: We do not rely on `/usr/bin/env` but rather access the `env` binary directly as it
|
||||||
|
// should be part of the shell's `$PATH`. This is necessary for compatibility with Windows.
|
||||||
const pyVersion =
|
const pyVersion =
|
||||||
await spawnWithDebugOutput('/usr/bin/python', ['--version'], {mode: 'silent'});
|
await spawnWithDebugOutput('env', ['python', '--version'], {mode: 'silent'});
|
||||||
const version = pyVersion.stdout.trim() || pyVersion.stderr.trim();
|
const version = pyVersion.stdout.trim() || pyVersion.stderr.trim();
|
||||||
if (version.startsWith('Python 3.')) {
|
if (version.startsWith('Python 3.')) {
|
||||||
debug(`Local python version: ${version}`);
|
debug(`Local python version: ${version}`);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user