mirror of
https://github.com/angular/angular.git
synced 2026-09-14 13:54:52 +08:00
10cd71a0ed
In order to be able to take advantage of Google's official bazel docker images, we no longer can use a NodeJS script for setting up the snapshot builds because NodeJS is not installed in the image. Rather we need to convert the script to a python script in order to be able to perform the package.json modification. Since this script is not intended to be executed locally, we are free to use Python for this.
71 lines
2.8 KiB
Python
71 lines
2.8 KiB
Python
"""
|
|
Script that sets up the Angular snapshot github builds. We set up the snapshot builds by
|
|
overwriting the versions in the "package.json" and taking advantage of Yarn's resolutions
|
|
feature. Yarn resolutions will be used to flatten nested Angular packages because by default
|
|
Yarn does not flatten any dependency. See:
|
|
|
|
node_modules/compiler@snapshot
|
|
node_modules/compiler-cli@snapshot
|
|
node_modules/compiler@7.0.1
|
|
|
|
Note that we cannot just use Yarn's `--flat` option because that would mean that it tries
|
|
to flatten **all** dependencies and could cause unexpected results. We **only** want to
|
|
explicitly flatten out all `@angular/*` dependencies. This can be achieved with resolutions.
|
|
Read more here: https://yarnpkg.com/lang/en/docs/package-json/#toc-resolutions
|
|
"""
|
|
|
|
import json
|
|
import os
|
|
import argparse
|
|
|
|
def collect_angular_deps(obj, result):
|
|
for item in obj:
|
|
if (item.startswith('@angular/')):
|
|
result.append(item)
|
|
|
|
project_dir = os.path.realpath(os.path.join(os.path.dirname(__file__), '../../'))
|
|
package_json_path = os.path.join(project_dir, 'package.json')
|
|
|
|
parser = argparse.ArgumentParser(description='Setup Angular snapshot packages')
|
|
parser.add_argument('--tag', required = True)
|
|
parsed_args = parser.parse_args()
|
|
|
|
with open(package_json_path, 'r') as package_json:
|
|
data = json.load(package_json)
|
|
angular_pkgs = []
|
|
|
|
collect_angular_deps(data['dependencies'], angular_pkgs)
|
|
collect_angular_deps(data['devDependencies'], angular_pkgs)
|
|
|
|
if not 'resolutions' in data:
|
|
data['resolutions'] = {}
|
|
|
|
print('Setting up snapshot builds for:')
|
|
|
|
for pkg in angular_pkgs:
|
|
new_url = "github:angular/%s-builds#%s" % (pkg.split('/')[1], parsed_args.tag)
|
|
|
|
print(" %s -> %s" % (pkg, new_url))
|
|
|
|
# Add resolutions for each package in the format "**/{PACKAGE}" so that all
|
|
# nested versions of that specific Angular package will have the same version.
|
|
data['resolutions']['**/%s' % pkg] = new_url
|
|
|
|
# Since the resolutions only cover the version of all nested installs, we also need
|
|
# to explicitly set the version for the package listed in the project "package.json".
|
|
data['dependencies'][pkg] = new_url
|
|
|
|
# In case this dependency was previously a dev dependency, just remove it because we
|
|
# re-added it as a normal dependency for simplicity.
|
|
if pkg in data['devDependencies']:
|
|
del data['devDependencies'][pkg]
|
|
|
|
new_package_json = json.dumps(data, indent = 2)
|
|
|
|
with open(package_json_path, 'w') as package_json_out:
|
|
package_json_out.write(new_package_json)
|
|
|
|
print('')
|
|
print('Successfully added the "resolutions" to the "package.json".')
|
|
print('Please run "yarn install" in the project to update the lock file.')
|