build: correctly publish `angular-in-memory-web-api` as CI build artifact (#41429)
Previously, the `angular-in-memory-web-api` package was built in `dist/packages-dist/misc/angular-in-memory-web-api/`. This was different from other Angular packages, which were placed directly in `dist/packages-dist/`. This caused the `create-package-archives.sh` script to create an invalid `misc.tgz` archive (i.e. treating the `misc/` subdirectory as a package). See, for example, the artifacts [here][1]. This commit changes the build scripts to have the `angular-in-memory-web-api` package built in `dist/angular-in-memory-web-api-dist/`, similar to how the `zone.js` package is handled. It also updates the CircleCI config to correctly publish the `angular-in-memory-web-api` package to CI build artifacts. [1]: https://circleci.com/gh/angular/angular/951491 PR Close #41429
This commit is contained in:
parent
e7179893f9
commit
4ae57cabd8
|
@ -501,6 +501,7 @@ jobs:
|
||||||
root: *workspace_location
|
root: *workspace_location
|
||||||
paths:
|
paths:
|
||||||
- ng/dist/packages-dist
|
- ng/dist/packages-dist
|
||||||
|
- ng/dist/angular-in-memory-web-api-dist
|
||||||
- ng/dist/zone.js-dist
|
- ng/dist/zone.js-dist
|
||||||
|
|
||||||
# Save dependencies and bazel repository cache to use on subsequent runs.
|
# Save dependencies and bazel repository cache to use on subsequent runs.
|
||||||
|
@ -527,6 +528,7 @@ jobs:
|
||||||
root: *workspace_location
|
root: *workspace_location
|
||||||
paths:
|
paths:
|
||||||
- ng/dist/packages-dist-ivy-aot
|
- ng/dist/packages-dist-ivy-aot
|
||||||
|
- ng/dist/angular-in-memory-web-api-dist-ivy-aot
|
||||||
- ng/dist/zone.js-dist-ivy-aot
|
- ng/dist/zone.js-dist-ivy-aot
|
||||||
|
|
||||||
# This job creates compressed tarballs (`.tgz` files) for all Angular packages and stores them as
|
# This job creates compressed tarballs (`.tgz` files) for all Angular packages and stores them as
|
||||||
|
@ -537,6 +539,8 @@ jobs:
|
||||||
publish_packages_as_artifacts:
|
publish_packages_as_artifacts:
|
||||||
executor: default-executor
|
executor: default-executor
|
||||||
environment:
|
environment:
|
||||||
|
AIMWA_PACKAGES_DIR: &aimwa_packages_dir 'dist/angular-in-memory-web-api-dist'
|
||||||
|
AIMWA_PACKAGES_ARCHIVES_DIR: &aimwa_packages_archives_dir 'dist/angular-in-memory-web-api-dist-archives'
|
||||||
NG_PACKAGES_DIR: &ng_packages_dir 'dist/packages-dist'
|
NG_PACKAGES_DIR: &ng_packages_dir 'dist/packages-dist'
|
||||||
NG_PACKAGES_ARCHIVES_DIR: &ng_packages_archives_dir 'dist/packages-dist-archives'
|
NG_PACKAGES_ARCHIVES_DIR: &ng_packages_archives_dir 'dist/packages-dist-archives'
|
||||||
ZONEJS_PACKAGES_DIR: &zonejs_packages_dir 'dist/zone.js-dist'
|
ZONEJS_PACKAGES_DIR: &zonejs_packages_dir 'dist/zone.js-dist'
|
||||||
|
@ -551,9 +555,17 @@ jobs:
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
path: *ng_packages_archives_dir
|
path: *ng_packages_archives_dir
|
||||||
destination: angular
|
destination: angular
|
||||||
# Publish `zone.js` package.
|
# Publish the `angular-in-memory-web-api` package.
|
||||||
- run:
|
- run:
|
||||||
name: Create artifacts for zone.js package
|
name: Create artifacts for the `angular-in-memory-web-api` package
|
||||||
|
# Need to remove the zone.js.tgz before archive
|
||||||
|
command: ./scripts/ci/create-package-archives.sh $CI_BRANCH $CI_COMMIT $AIMWA_PACKAGES_DIR $AIMWA_PACKAGES_ARCHIVES_DIR
|
||||||
|
- store_artifacts:
|
||||||
|
path: *aimwa_packages_archives_dir
|
||||||
|
destination: angular-in-memory-web-api
|
||||||
|
# Publish the `zone.js` package.
|
||||||
|
- run:
|
||||||
|
name: Create artifacts for the `zone.js` package
|
||||||
# Need to remove the zone.js.tgz before archive
|
# Need to remove the zone.js.tgz before archive
|
||||||
command: rm -rf $ZONEJS_PACKAGES_DIR/archive && ./scripts/ci/create-package-archives.sh $CI_BRANCH $CI_COMMIT $ZONEJS_PACKAGES_DIR $ZONEJS_PACKAGES_ARCHIVES_DIR
|
command: rm -rf $ZONEJS_PACKAGES_DIR/archive && ./scripts/ci/create-package-archives.sh $CI_BRANCH $CI_COMMIT $ZONEJS_PACKAGES_DIR $ZONEJS_PACKAGES_ARCHIVES_DIR
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
|
|
@ -14,8 +14,8 @@ const LOCAL_MARKER_PATH = 'node_modules/_local_.json';
|
||||||
|
|
||||||
const ANGULAR_ROOT_DIR = path.resolve(__dirname, '../../..');
|
const ANGULAR_ROOT_DIR = path.resolve(__dirname, '../../..');
|
||||||
const ANGULAR_DIST_PACKAGES_DIR = path.join(ANGULAR_ROOT_DIR, 'dist/packages-dist');
|
const ANGULAR_DIST_PACKAGES_DIR = path.join(ANGULAR_ROOT_DIR, 'dist/packages-dist');
|
||||||
|
const AIMWA_DIST_PACKAGES_DIR = path.join(ANGULAR_ROOT_DIR, 'dist/angular-in-memory-web-api-dist');
|
||||||
const ZONEJS_DIST_PACKAGES_DIR = path.join(ANGULAR_ROOT_DIR, 'dist/zone.js-dist');
|
const ZONEJS_DIST_PACKAGES_DIR = path.join(ANGULAR_ROOT_DIR, 'dist/zone.js-dist');
|
||||||
const ANGULAR_MISC_DIST_PACKAGES = path.join(ANGULAR_ROOT_DIR, 'dist/packages-dist/misc');
|
|
||||||
const DIST_PACKAGES_BUILD_SCRIPT = path.join(ANGULAR_ROOT_DIR, 'scripts/build/build-packages-dist.js');
|
const DIST_PACKAGES_BUILD_SCRIPT = path.join(ANGULAR_ROOT_DIR, 'scripts/build/build-packages-dist.js');
|
||||||
const DIST_PACKAGES_BUILD_CMD = `"${process.execPath}" "${DIST_PACKAGES_BUILD_SCRIPT}"`;
|
const DIST_PACKAGES_BUILD_CMD = `"${process.execPath}" "${DIST_PACKAGES_BUILD_SCRIPT}"`;
|
||||||
|
|
||||||
|
@ -187,8 +187,8 @@ class NgPackagesInstaller {
|
||||||
this._warn([
|
this._warn([
|
||||||
'Automatically building the local Angular/angular-in-memory-web-api/zone.js packages is currently not ' +
|
'Automatically building the local Angular/angular-in-memory-web-api/zone.js packages is currently not ' +
|
||||||
'supported on Windows.',
|
'supported on Windows.',
|
||||||
`Please, ensure '${ANGULAR_DIST_PACKAGES_DIR}', '${ZONEJS_DIST_PACKAGES_DIR}' and ` +
|
`Please, ensure '${ANGULAR_DIST_PACKAGES_DIR}', '${AIMWA_DIST_PACKAGES_DIR}' and ` +
|
||||||
`'${ANGULAR_MISC_DIST_PACKAGES}' exist and are up-to-date (e.g. by running '${DIST_PACKAGES_BUILD_SCRIPT}' ` +
|
`'${ZONEJS_DIST_PACKAGES_DIR}' exist and are up-to-date (e.g. by running '${DIST_PACKAGES_BUILD_SCRIPT}' ` +
|
||||||
'in Git Bash for Windows, Windows Subsystem for Linux or a Linux docker container or VM).',
|
'in Git Bash for Windows, Windows Subsystem for Linux or a Linux docker container or VM).',
|
||||||
'',
|
'',
|
||||||
'Proceeding anyway...',
|
'Proceeding anyway...',
|
||||||
|
@ -224,9 +224,9 @@ class NgPackagesInstaller {
|
||||||
* 'package.json' file.)
|
* 'package.json' file.)
|
||||||
*/
|
*/
|
||||||
_getDistPackages() {
|
_getDistPackages() {
|
||||||
this._log(`Angular distributable directory: ${ANGULAR_DIST_PACKAGES_DIR}.`);
|
this._log(`Distributable directory for Angular framework: ${ANGULAR_DIST_PACKAGES_DIR}`);
|
||||||
this._log(`Zone.js distributable directory: ${ZONEJS_DIST_PACKAGES_DIR}.`);
|
this._log(`Distributable directory for angular-in-memory-web-api: ${AIMWA_DIST_PACKAGES_DIR}`);
|
||||||
this._log(`angular-in-memory-web-api distributable directory: ${ANGULAR_MISC_DIST_PACKAGES}.`);
|
this._log(`Distributable directory for zone.js: ${ZONEJS_DIST_PACKAGES_DIR}`);
|
||||||
|
|
||||||
if (this.buildPackages) {
|
if (this.buildPackages) {
|
||||||
this._buildDistPackages();
|
this._buildDistPackages();
|
||||||
|
@ -264,8 +264,8 @@ class NgPackagesInstaller {
|
||||||
|
|
||||||
const packageConfigs = {
|
const packageConfigs = {
|
||||||
...collectPackages(ANGULAR_DIST_PACKAGES_DIR),
|
...collectPackages(ANGULAR_DIST_PACKAGES_DIR),
|
||||||
|
...collectPackages(AIMWA_DIST_PACKAGES_DIR),
|
||||||
...collectPackages(ZONEJS_DIST_PACKAGES_DIR),
|
...collectPackages(ZONEJS_DIST_PACKAGES_DIR),
|
||||||
...collectPackages(ANGULAR_MISC_DIST_PACKAGES),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
this._log('Found the following Angular distributables:', ...Object.keys(packageConfigs).map(key => `\n - ${key}`));
|
this._log('Found the following Angular distributables:', ...Object.keys(packageConfigs).map(key => `\n - ${key}`));
|
||||||
|
|
|
@ -15,6 +15,7 @@ describe('NgPackagesInstaller', () => {
|
||||||
const yarnLockPath = path.resolve(absoluteProjectDir, 'yarn.lock');
|
const yarnLockPath = path.resolve(absoluteProjectDir, 'yarn.lock');
|
||||||
const ngRootDir = path.resolve(__dirname, '../../..');
|
const ngRootDir = path.resolve(__dirname, '../../..');
|
||||||
const packagesDir = path.join(ngRootDir, 'dist/packages-dist');
|
const packagesDir = path.join(ngRootDir, 'dist/packages-dist');
|
||||||
|
const aimwaDir = path.join(ngRootDir, 'dist/angular-in-memory-web-api-dist');
|
||||||
const zoneJsDir = path.join(ngRootDir, 'dist/zone.js-dist');
|
const zoneJsDir = path.join(ngRootDir, 'dist/zone.js-dist');
|
||||||
const toolsDir = path.join(ngRootDir, 'dist/tools/@angular');
|
const toolsDir = path.join(ngRootDir, 'dist/tools/@angular');
|
||||||
let installer;
|
let installer;
|
||||||
|
@ -104,6 +105,13 @@ describe('NgPackagesInstaller', () => {
|
||||||
peerDependencies: { tsickle: '^1.4.0' }
|
peerDependencies: { tsickle: '^1.4.0' }
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
'angular-in-memory-web-api': {
|
||||||
|
packageDir: `${aimwaDir}/angular-in-memory-web-api`,
|
||||||
|
packageJsonPath: `${aimwaDir}/angular-in-memory-web-api/package.json`,
|
||||||
|
config: {
|
||||||
|
dependencies: { rxjs: '^6.3.0' }
|
||||||
|
}
|
||||||
|
},
|
||||||
'zone.js': {
|
'zone.js': {
|
||||||
packageDir: `${zoneJsDir}/zone.js`,
|
packageDir: `${zoneJsDir}/zone.js`,
|
||||||
packageJsonPath: `${zoneJsDir}/zone.js/package.json`,
|
packageJsonPath: `${zoneJsDir}/zone.js/package.json`,
|
||||||
|
@ -124,6 +132,7 @@ describe('NgPackagesInstaller', () => {
|
||||||
},
|
},
|
||||||
devDependencies: {
|
devDependencies: {
|
||||||
'@angular/compiler-cli': '4.4.1',
|
'@angular/compiler-cli': '4.4.1',
|
||||||
|
'angular-in-memory-web-api': '^0.11.0',
|
||||||
'rxjs-dev': '^6.3.0'
|
'rxjs-dev': '^6.3.0'
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -149,6 +158,7 @@ describe('NgPackagesInstaller', () => {
|
||||||
},
|
},
|
||||||
devDependencies: {
|
devDependencies: {
|
||||||
'@angular/compiler-cli': `file:${toolsDir}/compiler-cli`,
|
'@angular/compiler-cli': `file:${toolsDir}/compiler-cli`,
|
||||||
|
'angular-in-memory-web-api': `file:${aimwaDir}/angular-in-memory-web-api`,
|
||||||
'rxjs-dev': '^6.3.0',
|
'rxjs-dev': '^6.3.0',
|
||||||
'some-package': '5.0.1',
|
'some-package': '5.0.1',
|
||||||
typescript: '^2.4.2'
|
typescript: '^2.4.2'
|
||||||
|
@ -200,10 +210,10 @@ describe('NgPackagesInstaller', () => {
|
||||||
const stringifyConfig = config => JSON.stringify(config, null, 2);
|
const stringifyConfig = config => JSON.stringify(config, null, 2);
|
||||||
|
|
||||||
const allArgs = fs.writeFileSync.calls.allArgs();
|
const allArgs = fs.writeFileSync.calls.allArgs();
|
||||||
const firstSixArgs = allArgs.slice(0, 6);
|
const firstSevenArgs = allArgs.slice(0, 7);
|
||||||
const lastSixArgs = allArgs.slice(-6);
|
const lastSevenArgs = allArgs.slice(-7);
|
||||||
|
|
||||||
expect(firstSixArgs).toEqual([
|
expect(firstSevenArgs).toEqual([
|
||||||
[
|
[
|
||||||
pkgJsonPathFor('@angular/core'),
|
pkgJsonPathFor('@angular/core'),
|
||||||
stringifyConfig(overwriteConfigFor('@angular/core', {private: true})),
|
stringifyConfig(overwriteConfigFor('@angular/core', {private: true})),
|
||||||
|
@ -230,18 +240,23 @@ describe('NgPackagesInstaller', () => {
|
||||||
devDependencies: { '@angular/common': `file:${packagesDir}/common` },
|
devDependencies: { '@angular/common': `file:${packagesDir}/common` },
|
||||||
})),
|
})),
|
||||||
],
|
],
|
||||||
|
[
|
||||||
|
pkgJsonPathFor('angular-in-memory-web-api'),
|
||||||
|
stringifyConfig(overwriteConfigFor('angular-in-memory-web-api', {private: true})),
|
||||||
|
],
|
||||||
[
|
[
|
||||||
pkgJsonPathFor('zone.js'),
|
pkgJsonPathFor('zone.js'),
|
||||||
stringifyConfig(overwriteConfigFor('zone.js', {private: true})),
|
stringifyConfig(overwriteConfigFor('zone.js', {private: true})),
|
||||||
],
|
],
|
||||||
]);
|
]);
|
||||||
|
|
||||||
expect(lastSixArgs).toEqual([
|
expect(lastSevenArgs).toEqual([
|
||||||
'@angular/core',
|
'@angular/core',
|
||||||
'@angular/common',
|
'@angular/common',
|
||||||
'@angular/compiler',
|
'@angular/compiler',
|
||||||
'@angular/compiler-cli',
|
'@angular/compiler-cli',
|
||||||
'@angular/tsc-wrapped',
|
'@angular/tsc-wrapped',
|
||||||
|
'angular-in-memory-web-api',
|
||||||
'zone.js',
|
'zone.js',
|
||||||
].map(pkgName => [pkgJsonPathFor(pkgName), stringifyConfig(pkgConfigFor(pkgName))]));
|
].map(pkgName => [pkgJsonPathFor(pkgName), stringifyConfig(pkgConfigFor(pkgName))]));
|
||||||
});
|
});
|
||||||
|
|
|
@ -21,6 +21,11 @@ module.exports = {
|
||||||
* Build the `angular-in-memory-web-api` npm package and copy it to `destDir` for other
|
* Build the `angular-in-memory-web-api` npm package and copy it to `destDir` for other
|
||||||
* scripts/tests to use.
|
* scripts/tests to use.
|
||||||
*
|
*
|
||||||
|
* NOTE: The `angular-in-memory-web-api` package is not built as part of `package-builder`'s
|
||||||
|
* `buildTargetPackages()` nor is it copied into the same directory as the Angular packages
|
||||||
|
* (e.g. `dist/packages-dist/`) despite its source's being inside `packages/`, because it is
|
||||||
|
* not published to npm under the `@angular` scope (as happens for the rest of the packages).
|
||||||
|
*
|
||||||
* @param {string} destDir Path to the output directory into which we copy the npm package.
|
* @param {string} destDir Path to the output directory into which we copy the npm package.
|
||||||
* This path should either be absolute or relative to the project root.
|
* This path should either be absolute or relative to the project root.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -17,14 +17,15 @@ const {buildZoneJsPackage} = require('./zone-js-builder');
|
||||||
// Build the ivy packages into `dist/packages-dist-ivy-aot/`.
|
// Build the ivy packages into `dist/packages-dist-ivy-aot/`.
|
||||||
buildTargetPackages('dist/packages-dist-ivy-aot', true, 'Ivy AOT');
|
buildTargetPackages('dist/packages-dist-ivy-aot', true, 'Ivy AOT');
|
||||||
|
|
||||||
// Build the `angular-in-memory-web-api` npm package into `dist/packages-dist-ivy-aot/misc/`,
|
// Build the `angular-in-memory-web-api` npm package into
|
||||||
// because it might be needed by other scripts/targets.
|
// `dist/angular-in-memory-web-api-dist-ivy-aot/`, because it might be needed by other
|
||||||
|
// scripts/targets.
|
||||||
//
|
//
|
||||||
// NOTE:
|
// NOTE:
|
||||||
// The `-ivy-aot` suffix is only used to differentiate from the packages built by the
|
// The `-ivy-aot` suffix is only used to differentiate from the packages built by the
|
||||||
// `build-packages-dist.js` script, so that there is no conflict when persisting them to the
|
// `build-packages-dist.js` script, so that there is no conflict when persisting them to the
|
||||||
// workspace on CI.
|
// workspace on CI.
|
||||||
buildAngularInMemoryWebApiPackage('dist/packages-dist-ivy-aot/misc');
|
buildAngularInMemoryWebApiPackage('dist/angular-in-memory-web-api-dist-ivy-aot');
|
||||||
|
|
||||||
// Build the `zone.js` npm package into `dist/zone.js-dist-ivy-aot/`, because it might be needed by
|
// Build the `zone.js` npm package into `dist/zone.js-dist-ivy-aot/`, because it might be needed by
|
||||||
// other scripts/tests.
|
// other scripts/tests.
|
||||||
|
|
|
@ -21,9 +21,9 @@ buildTargetPackages('dist/packages-dist', false, 'Production');
|
||||||
// Build the `angular-dev-infra` npm package into `dist/packages-dist/`.
|
// Build the `angular-dev-infra` npm package into `dist/packages-dist/`.
|
||||||
buildDevInfraPackage('dist/packages-dist');
|
buildDevInfraPackage('dist/packages-dist');
|
||||||
|
|
||||||
// Build the `angular-in-memory-web-api` npm package into `dist/packages-dist/misc/`, because it
|
// Build the `angular-in-memory-web-api` npm package into `dist/angular-in-memory-web-api-dist/`,
|
||||||
// might be needed by other scripts/targets.
|
// because it might be needed by other scripts/targets.
|
||||||
buildAngularInMemoryWebApiPackage('dist/packages-dist/misc');
|
buildAngularInMemoryWebApiPackage('dist/angular-in-memory-web-api-dist');
|
||||||
|
|
||||||
// Build the `zone.js` npm package into `dist/zone.js-dist/`, because it might be needed by other
|
// Build the `zone.js` npm package into `dist/zone.js-dist/`, because it might be needed by other
|
||||||
// scripts/tests.
|
// scripts/tests.
|
||||||
|
|
Loading…
Reference in New Issue