diff --git a/scripts/deploy.py b/scripts/deploy.py index e7ad3f78..e8fd9aa4 100755 --- a/scripts/deploy.py +++ b/scripts/deploy.py @@ -14,6 +14,7 @@ import subprocess import sys import tarfile import shutil +import glob try: # python3 @@ -66,7 +67,7 @@ class Deployer: self.bundles_path = None self.should_clean = False # filename -> symlink path e.g 'config.localhost.json' => '../localhost/config.json' - self.config_locations = {} + self.symlink_paths = {} self.verify_signature = True def deploy(self, tarball, extract_path): @@ -98,11 +99,11 @@ class Deployer: print ("Extracted into: %s" % extracted_dir) - if self.config_locations: - for config_filename, config_loc in self.config_locations.iteritems(): + if self.symlink_paths: + for link_path, file_path in self.symlink_paths.iteritems(): create_relative_symlink( - target=config_loc, - linkname=os.path.join(extracted_dir, config_filename) + target=file_path, + linkname=os.path.join(extracted_dir, link_path) ) if self.bundles_path: @@ -165,9 +166,10 @@ if __name__ == "__main__": ) ) parser.add_argument( - "--config", nargs='?', default='./config.json', help=( - "Write a symlink at config.json in the extracted tarball to this \ - location. (Default: '%(default)s')" + "--include", nargs='*', default='./config*.json', help=( + "Symlink these files into the root of the deployed tarball. \ + Useful for config files and home pages. Supports glob syntax. \ + (Default: '%(default)s')" ) ) parser.add_argument( @@ -182,8 +184,8 @@ if __name__ == "__main__": deployer.packages_path = args.packages_dir deployer.bundles_path = args.bundles_dir deployer.should_clean = args.clean - deployer.config_locations = { - "config.json": args.config, - } + + for include in args.include: + deployer.symlink_paths.update({ os.path.basename(pth): pth for pth in glob.iglob(include) }) deployer.deploy(args.tarball, args.extract_path) diff --git a/scripts/redeploy.py b/scripts/redeploy.py index e10a48c0..fb550dcf 100755 --- a/scripts/redeploy.py +++ b/scripts/redeploy.py @@ -15,6 +15,7 @@ import json, requests, tarfile, argparse, os, errno import time import traceback from urlparse import urljoin +import glob from flask import Flask, jsonify, request, abort @@ -188,15 +189,12 @@ if __name__ == "__main__": ) ) - def _raise(ex): - raise ex - - # --config config.json=../../config.json --config config.localhost.json=./localhost.json + # --include ../../config.json ./localhost.json homepages/* parser.add_argument( - "--config", action="append", dest="configs", - type=lambda kv: kv.split("=", 1) if "=" in kv else _raise(Exception("Missing =")), help=( - "A list of configs to symlink into the extracted tarball. \ - For example, --config config.json=../config.json config2.json=../test/config.json" + "--include", nargs='*', default='./config*.json', help=( + "Symlink these files into the root of the deployed tarball. \ + Useful for config files and home pages. Supports glob syntax. \ + (Default: '%(default)s')" ) ) parser.add_argument( @@ -220,7 +218,9 @@ if __name__ == "__main__": deployer = Deployer() deployer.bundles_path = args.bundles_dir deployer.should_clean = args.clean - deployer.config_locations = dict(args.configs) if args.configs else {} + + for include in args.include: + deployer.symlink_paths.update({ os.path.basename(pth): pth for pth in glob.iglob(include) }) # we don't pgp-sign jenkins artifacts; instead we rely on HTTPS access to @@ -234,13 +234,13 @@ if __name__ == "__main__": deploy_tarball(args.tarball_uri, build_dir) else: print( - "Listening on port %s. Extracting to %s%s. Symlinking to %s. Jenkins URL: %s. Config locations: %s" % + "Listening on port %s. Extracting to %s%s. Symlinking to %s. Jenkins URL: %s. Include patterns: %s" % (args.port, arg_extract_path, " (clean after)" if deployer.should_clean else "", arg_symlink, arg_jenkins_url, - deployer.config_locations, + deployer.symlink_paths, ) ) app.run(host="0.0.0.0", port=args.port, debug=True)