fix(dev-infra): clear cached bazel outputs before building artifacts for publishing (#41000)
Clearing the cached bazel outputs before building the artifacts for publishing prevents an intermittent error found when the version is cached between publishes. PR Close #41000
This commit is contained in:
parent
fb82558d78
commit
f05715bcac
@ -5392,6 +5392,25 @@ function invokeYarnInstallCommand(projectDir) {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* Invokes the `yarn bazel clean` command in order to clean the output tree and ensure new artifacts
|
||||||
|
* are created for builds.
|
||||||
|
*/
|
||||||
|
function invokeBazelCleanCommand(projectDir) {
|
||||||
|
return tslib.__awaiter(this, void 0, void 0, function* () {
|
||||||
|
try {
|
||||||
|
// Note: No progress indicator needed as that is the responsibility of the command.
|
||||||
|
// TODO: Consider using an Ora spinner instead to ensure minimal console output.
|
||||||
|
yield spawnWithDebugOutput('yarn', ['bazel', 'clean'], { cwd: projectDir });
|
||||||
|
info(green(' ✓ Cleaned bazel output tree.'));
|
||||||
|
}
|
||||||
|
catch (e) {
|
||||||
|
error(e);
|
||||||
|
error(red(' ✘ An error occurred while cleaning the bazel output tree.'));
|
||||||
|
throw new FatalReleaseActionError();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @license
|
* @license
|
||||||
@ -5931,6 +5950,7 @@ class ReleaseAction {
|
|||||||
// created in the `next` branch. The new package would not be part of the patch branch,
|
// created in the `next` branch. The new package would not be part of the patch branch,
|
||||||
// so we cannot build and publish it.
|
// so we cannot build and publish it.
|
||||||
yield invokeYarnInstallCommand(this.projectDir);
|
yield invokeYarnInstallCommand(this.projectDir);
|
||||||
|
yield invokeBazelCleanCommand(this.projectDir);
|
||||||
const builtPackages = yield invokeReleaseBuildCommand();
|
const builtPackages = yield invokeReleaseBuildCommand();
|
||||||
// Verify the packages built are the correct version.
|
// Verify the packages built are the correct version.
|
||||||
yield this._verifyPackageVersions(newVersion, builtPackages);
|
yield this._verifyPackageVersions(newVersion, builtPackages);
|
||||||
|
@ -21,7 +21,7 @@ import {runNpmPublish} from '../versioning/npm-publish';
|
|||||||
import {FatalReleaseActionError, UserAbortedReleaseActionError} from './actions-error';
|
import {FatalReleaseActionError, UserAbortedReleaseActionError} from './actions-error';
|
||||||
import {getCommitMessageForRelease, getReleaseNoteCherryPickCommitMessage} from './commit-message';
|
import {getCommitMessageForRelease, getReleaseNoteCherryPickCommitMessage} from './commit-message';
|
||||||
import {changelogPath, packageJsonPath, waitForPullRequestInterval} from './constants';
|
import {changelogPath, packageJsonPath, waitForPullRequestInterval} from './constants';
|
||||||
import {invokeReleaseBuildCommand, invokeYarnInstallCommand} from './external-commands';
|
import {invokeBazelCleanCommand, invokeReleaseBuildCommand, invokeYarnInstallCommand} from './external-commands';
|
||||||
import {findOwnedForksOfRepoQuery} from './graphql-queries';
|
import {findOwnedForksOfRepoQuery} from './graphql-queries';
|
||||||
import {getPullRequestState} from './pull-request-state';
|
import {getPullRequestState} from './pull-request-state';
|
||||||
import {getDefaultExtractReleaseNotesPattern, getLocalChangelogFilePath} from './release-notes';
|
import {getDefaultExtractReleaseNotesPattern, getLocalChangelogFilePath} from './release-notes';
|
||||||
@ -515,6 +515,7 @@ export abstract class ReleaseAction {
|
|||||||
// created in the `next` branch. The new package would not be part of the patch branch,
|
// created in the `next` branch. The new package would not be part of the patch branch,
|
||||||
// so we cannot build and publish it.
|
// so we cannot build and publish it.
|
||||||
await invokeYarnInstallCommand(this.projectDir);
|
await invokeYarnInstallCommand(this.projectDir);
|
||||||
|
await invokeBazelCleanCommand(this.projectDir);
|
||||||
const builtPackages = await invokeReleaseBuildCommand();
|
const builtPackages = await invokeReleaseBuildCommand();
|
||||||
|
|
||||||
// Verify the packages built are the correct version.
|
// Verify the packages built are the correct version.
|
||||||
|
@ -90,3 +90,20 @@ export async function invokeYarnInstallCommand(projectDir: string): Promise<void
|
|||||||
throw new FatalReleaseActionError();
|
throw new FatalReleaseActionError();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Invokes the `yarn bazel clean` command in order to clean the output tree and ensure new artifacts
|
||||||
|
* are created for builds.
|
||||||
|
*/
|
||||||
|
export async function invokeBazelCleanCommand(projectDir: string): Promise<void> {
|
||||||
|
try {
|
||||||
|
// Note: No progress indicator needed as that is the responsibility of the command.
|
||||||
|
// TODO: Consider using an Ora spinner instead to ensure minimal console output.
|
||||||
|
await spawnWithDebugOutput('yarn', ['bazel', 'clean'], {cwd: projectDir});
|
||||||
|
info(green(' ✓ Cleaned bazel output tree.'));
|
||||||
|
} catch (e) {
|
||||||
|
error(e);
|
||||||
|
error(red(' ✘ An error occurred while cleaning the bazel output tree.'));
|
||||||
|
throw new FatalReleaseActionError();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -92,6 +92,7 @@ export function setupReleaseActionForTesting<T extends ReleaseAction>(
|
|||||||
spyOn(npm, 'runNpmPublish').and.resolveTo();
|
spyOn(npm, 'runNpmPublish').and.resolveTo();
|
||||||
spyOn(externalCommands, 'invokeSetNpmDistCommand').and.resolveTo();
|
spyOn(externalCommands, 'invokeSetNpmDistCommand').and.resolveTo();
|
||||||
spyOn(externalCommands, 'invokeYarnInstallCommand').and.resolveTo();
|
spyOn(externalCommands, 'invokeYarnInstallCommand').and.resolveTo();
|
||||||
|
spyOn(externalCommands, 'invokeBazelCleanCommand').and.resolveTo();
|
||||||
spyOn(externalCommands, 'invokeReleaseBuildCommand').and.resolveTo([
|
spyOn(externalCommands, 'invokeReleaseBuildCommand').and.resolveTo([
|
||||||
{name: '@angular/pkg1', outputPath: `${testTmpDir}/dist/pkg1`},
|
{name: '@angular/pkg1', outputPath: `${testTmpDir}/dist/pkg1`},
|
||||||
{name: '@angular/pkg2', outputPath: `${testTmpDir}/dist/pkg2`}
|
{name: '@angular/pkg2', outputPath: `${testTmpDir}/dist/pkg2`}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user