aboutsummaryrefslogtreecommitdiff
path: root/delivery_merge/cli/merge.py
diff options
context:
space:
mode:
authorJoseph Hunkeler <jhunkeler@gmail.com>2019-05-06 23:19:52 -0400
committerJoseph Hunkeler <jhunkeler@gmail.com>2019-05-06 23:19:52 -0400
commit502bb16cab44aed9e36b6052f725a994b1ffab16 (patch)
tree2ba02459edf27102eb58af3c85ec2c29b41d4224 /delivery_merge/cli/merge.py
downloaddelivery_merge-502bb16cab44aed9e36b6052f725a994b1ffab16.tar.gz
Initial commit
Diffstat (limited to 'delivery_merge/cli/merge.py')
-rw-r--r--delivery_merge/cli/merge.py56
1 files changed, 56 insertions, 0 deletions
diff --git a/delivery_merge/cli/merge.py b/delivery_merge/cli/merge.py
new file mode 100644
index 0000000..b0f581d
--- /dev/null
+++ b/delivery_merge/cli/merge.py
@@ -0,0 +1,56 @@
+import os
+from ..conda import conda, conda_installer, conda_init_path
+from ..merge import env_combine, testable_packages, integration_test
+from argparse import ArgumentParser
+
+
+def main():
+ parser = ArgumentParser()
+ parser.add_argument('--env-name', default='delivery',
+ help='name of environment')
+ parser.add_argument('--installer-version', required=True,
+ help='miniconda3 installer version')
+ parser.add_argument('--run-tests', action='store_true')
+ parser.add_argument('--dmfile', required=True)
+ parser.add_argument('base_spec')
+ args = parser.parse_args()
+
+ name = args.env_name
+ base_spec = args.base_spec
+ dmfile = args.dmfile
+ channels = ['https://astroconda.org/channel/main',
+ 'defaults',
+ 'http://ssb.stsci.edu/conda-dev']
+ delivery_root = 'delivery'
+ yamlfile = os.path.join(delivery_root, name + '.yml')
+ specfile = os.path.join(delivery_root, name + '.txt')
+
+ if not os.path.exists(delivery_root):
+ os.mkdir(delivery_root, 0o755)
+
+ prefix = conda_installer(args.installer_version)
+ conda_init_path(prefix)
+
+ if not os.path.exists(os.path.join(prefix, 'envs', name)):
+ print(f"Creating environment {name}...")
+ proc = conda('create', '-q', '-y', '-n', name, '--file', base_spec)
+ if proc.stderr:
+ print(proc.stderr.decode())
+
+ print(f"Merging requested packages into environment: {name}")
+ env_combine(dmfile, name, channels)
+
+ print("Exporting yaml configuration...")
+ conda('env', 'export', '-n', name, '--file', yamlfile)
+
+ print("Exporting explicit dump...")
+ with open(specfile, 'w+') as spec:
+ proc = conda('list', '--explicit', '-n', name)
+ spec.write(proc.stdout.decode())
+
+ if args.run_tests:
+ for package in testable_packages(args.dmfile, prefix):
+ print(f"Running tests: {package}")
+ integration_test(package, name)
+
+ print("Done!")