#!/usr/bin/env python from glob import glob import subprocess as sp import sys import time REGISTRY_URL = 'docker.km3net.de' IS_TEST_BRANCH = '-t' in sys.argv def get_changed_dockerfiles(vs_master=False): """Checks the last Git commit and returns a list of changed Dockefiles""" if vs_master: diff_cmd = "git --no-pager diff --name-only origin/master" else: diff_cmd = "git diff-tree --no-commit-id --name-only -r HEAD" child = sp.Popen(diff_cmd, shell=True, stdout=sp.PIPE, stderr=sp.PIPE) out, _ = child.communicate() changed_files = [l.decode().rstrip() for l in out.split(b'\n')] changed_dockerfiles = [f for f in changed_files if f.startswith("base/")] return changed_dockerfiles def main(): changed_dockerfiles = get_changed_dockerfiles(vs_master=IS_TEST_BRANCH) n_files = len(changed_dockerfiles) if n_files == 0: print("Nothing to do!") exit(0) print("Processing {} dockerfile{}...".format(n_files, 's' if n_files > 1 else '')) for idx, fname in enumerate(changed_dockerfiles): progress = "({}/{})".format(idx + 1, n_files) steps = [("Building", "docker build --pull -t {0}/{1} -f {1} . ".format( REGISTRY_URL, fname))] if not IS_TEST_BRANCH: steps.append( ("Pushing", "docker push {0}/{1}".format(REGISTRY_URL, fname))) else: print("Skiping push...") print('-' * 79) for step, cmd in steps: print("{} {} '{}'".format(progress, step, fname)) child = sp.Popen(cmd, shell=True, stdout=sys.stdout, stderr=sys.stderr) child.communicate() if __name__ == '__main__': main()