|
| 1 | +#!/usr/bin/env python3 |
| 2 | + |
| 3 | +# Front-end Python script for managing docker image builds. |
| 4 | +# |
| 5 | +# Images are |
| 6 | +# .. defined as ci/docker/Dockerfile.<image-name> |
| 7 | +# .. built via `docker-build.py -i <image-name>`. |
| 8 | +# .. published using `-p` flag. |
| 9 | +# |
| 10 | + |
| 11 | +from os import system, listdir |
| 12 | +from fnmatch import fnmatch |
| 13 | +from os.path import realpath, dirname, abspath, relpath |
| 14 | +from datetime import date |
| 15 | +import glob |
| 16 | +import argparse |
| 17 | + |
| 18 | +topdir=relpath(dirname(realpath(__file__))+"/..") |
| 19 | +docker_dir=topdir+"/ci/docker" |
| 20 | + |
| 21 | +# Constants: |
| 22 | +group="buildenv-generator" |
| 23 | + |
| 24 | +# Defaults: |
| 25 | +version=date.today() |
| 26 | +image="ubuntu" |
| 27 | + |
| 28 | +# CLI: |
| 29 | +parser = argparse.ArgumentParser( |
| 30 | + prog='docker-build', |
| 31 | + description='Docker build shell', |
| 32 | + epilog=f'See {docker_dir}') |
| 33 | +parser.add_argument('-n','--dry-run', help='do not run', action='store_true') |
| 34 | +parser.add_argument('-p','--push', help='push to repository', action='store_true') |
| 35 | +parser.add_argument('--version', help=f"specify version (default: {version})", default=version) |
| 36 | +parser.add_argument('-l','--list', help='list available docker images', action='store_true') |
| 37 | +parser.add_argument('-i','--image', help=f"select image (default: {image})", default=image) |
| 38 | +args = parser.parse_args() |
| 39 | + |
| 40 | +# Dry-run helper: |
| 41 | +def exec(cmd): |
| 42 | + if args.dry_run: |
| 43 | + print("DRY: "+cmd) |
| 44 | + else: |
| 45 | + system(cmd) |
| 46 | + |
| 47 | +# Action: List |
| 48 | +if args.list: |
| 49 | + images = [file[11:] for file in listdir(docker_dir) if fnmatch(file, 'Dockerfile.*')] |
| 50 | + print(f"Available images: {','.join(images)}") |
| 51 | + exit(0) |
| 52 | + |
| 53 | +# Evaluate full image |
| 54 | +full=f"objectboxio/{group}-{args.image}" |
| 55 | + |
| 56 | +print(f"Building image: {full}") |
| 57 | + |
| 58 | +# Build |
| 59 | +exec(f"docker build -f {docker_dir}/Dockerfile.{args.image} -t {full}:{version} -t {full}:latest {topdir}") |
| 60 | + |
| 61 | +# Push |
| 62 | +if args.push: |
| 63 | + exec(f"docker push {full}:{version}") |
| 64 | + exec(f"docker push {full}:latest") |
0 commit comments