blob: 36257ee83889bc7a694e6295b03d10da111a47b2 [file] [log] [blame]
#!/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:]))