| #!/usr/bin/env python3 |
| # Copyright 2019 The ChromiumOS Authors |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| """Update our node_modules bundle.""" |
| |
| import logging |
| import os |
| import sys |
| |
| import libdot |
| |
| |
| def get_parser(): |
| """Get a command line parser.""" |
| parser = libdot.ArgumentParser(description=__doc__) |
| parser.add_argument( |
| "--skip-archive", |
| dest="run_archive", |
| action="store_false", |
| default=True, |
| help="Skip creating node_modules archive.", |
| ) |
| return parser |
| |
| |
| def main(argv): |
| """The main func!""" |
| parser = get_parser() |
| opts = parser.parse_args(argv) |
| libdot.node_and_npm_setup() |
| |
| tar = libdot.LIBAPPS_DIR / "node_modules.tar.xz" |
| os.chdir(libdot.LIBAPPS_DIR) |
| |
| libdot.unlink("package-lock.json") |
| |
| logging.info("Removing modules not listed in package.json") |
| libdot.npm.run(["prune"]) |
| |
| logging.info("Updating modules from package.json") |
| libdot.npm.run(["upgrade", "--no-save"]) |
| |
| if not opts.run_archive: |
| logging.info("Skipping archive creation") |
| return |
| |
| libdot.pack( |
| tar, |
| ["node_modules"], |
| exclude=[ |
| "node_modules/.hash", |
| "node_modules/.node/*", |
| "node_modules/.bin/node", |
| "node_modules/puppeteer/.local-chromium", |
| ], |
| ) |
| |
| new_hash = libdot.sha256(tar) |
| final_tar = f"node_modules-{new_hash}.tar.xz" |
| tar.rename(final_tar) |
| |
| logging.info( |
| "To update the hash, run:\n" |
| 'sed -i \'/^NODE_MODULES_HASH *=/,+1{/"/s:".*":"%s":}\' \'%s/node\'', |
| new_hash, |
| libdot.BIN_DIR, |
| ) |
| logging.info( |
| "To upload the new modules:\ngsutil cp -a public-read %s %s/", |
| final_tar, |
| libdot.node.NODE_MODULES_GS_URI, |
| ) |
| |
| |
| if __name__ == "__main__": |
| sys.exit(main(sys.argv[1:])) |