"""Update npm dependencies using npm-check-updates
"""
import os
import subprocess
import sys
script_dir = os.path.dirname(os.path.abspath(__file__))
root_dir = os.path.dirname(os.path.dirname(script_dir))
def run(cmd, **args):
print('->', ' '.join(cmd))
return subprocess.check_output(cmd, text=True, cwd=root_dir, **args)
def main():
if run(['git', 'status', '-uno', '--porcelain']).strip():
print('tree is not clean')
return 1
output = run(['npx', 'npm-check-updates', '-u'], stderr=subprocess.STDOUT).strip()
if not run(['git', 'status', '-uno', '--porcelain']).strip():
print('no updates')
return 0
message = 'Automatic update of npm dependencies. NFC\n\n'
message += 'This change was automatically generated by tools/maint/npm_update.py\n\n'
lines = output.splitlines()
assert lines[0].startswith('Upgrading ')
assert lines[1] == ''
assert lines[-1].startswith('Run npm install to install new versions')
assert lines[-2] == ''
lines = lines[2:-2]
message += '\n'.join(lines) + '\n'
run(['npm', 'install'])
run(['git', 'checkout', '-b', 'npm_update'])
run(['git', 'add', '-u', 'package.json', 'package-lock.json'])
run(['git', 'commit', '-F', '-'], input=message)
if __name__ == '__main__':
sys.exit(main())