mirror of https://github.com/docker/docs.git
Merge pull request #1519 from shin-/brew-more
Docker-brew 0.5.2 support and memory footprint reduction
This commit is contained in:
commit
12ffb522a6
|
@ -14,6 +14,7 @@ logging.basicConfig(format='%(asctime)s %(levelname)s %(message)s',
|
||||||
level='INFO')
|
level='INFO')
|
||||||
client = docker.Client()
|
client = docker.Client()
|
||||||
processed = {}
|
processed = {}
|
||||||
|
processed_folders = []
|
||||||
|
|
||||||
|
|
||||||
def build_library(repository=None, branch=None, namespace=None, push=False,
|
def build_library(repository=None, branch=None, namespace=None, push=False,
|
||||||
|
@ -31,19 +32,34 @@ def build_library(repository=None, branch=None, namespace=None, push=False,
|
||||||
logger.info('Repository provided assumed to be a local path')
|
logger.info('Repository provided assumed to be a local path')
|
||||||
dst_folder = repository
|
dst_folder = repository
|
||||||
|
|
||||||
|
try:
|
||||||
|
client.version()
|
||||||
|
except Exception as e:
|
||||||
|
logger.error('Could not reach the docker daemon. Please make sure it '
|
||||||
|
'is running.')
|
||||||
|
logger.warning('Also make sure you have access to the docker UNIX '
|
||||||
|
'socket (use sudo)')
|
||||||
|
return
|
||||||
|
|
||||||
#FIXME: set destination folder and only pull latest changes instead of
|
#FIXME: set destination folder and only pull latest changes instead of
|
||||||
# cloning the whole repo everytime
|
# cloning the whole repo everytime
|
||||||
if not dst_folder:
|
if not dst_folder:
|
||||||
logger.info('Cloning docker repo from {0}, branch: {1}'.format(
|
logger.info('Cloning docker repo from {0}, branch: {1}'.format(
|
||||||
repository, branch))
|
repository, branch))
|
||||||
try:
|
try:
|
||||||
dst_folder = git.clone_branch(repository, branch)
|
rep, dst_folder = git.clone_branch(repository, branch)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.exception(e)
|
logger.exception(e)
|
||||||
logger.error('Source repository could not be fetched. Check '
|
logger.error('Source repository could not be fetched. Check '
|
||||||
'that the address is correct and the branch exists.')
|
'that the address is correct and the branch exists.')
|
||||||
return
|
return
|
||||||
for buildfile in os.listdir(os.path.join(dst_folder, 'library')):
|
try:
|
||||||
|
dirlist = os.listdir(os.path.join(dst_folder, 'library'))
|
||||||
|
except OSError as e:
|
||||||
|
logger.error('The path provided ({0}) could not be found or didn\'t'
|
||||||
|
'contain a library/ folder.'.format(dst_folder))
|
||||||
|
return
|
||||||
|
for buildfile in dirlist:
|
||||||
if buildfile == 'MAINTAINERS':
|
if buildfile == 'MAINTAINERS':
|
||||||
continue
|
continue
|
||||||
f = open(os.path.join(dst_folder, 'library', buildfile))
|
f = open(os.path.join(dst_folder, 'library', buildfile))
|
||||||
|
@ -92,20 +108,27 @@ def build_library(repository=None, branch=None, namespace=None, push=False,
|
||||||
f.close()
|
f.close()
|
||||||
if dst_folder != repository:
|
if dst_folder != repository:
|
||||||
rmtree(dst_folder, True)
|
rmtree(dst_folder, True)
|
||||||
|
for d in processed_folders:
|
||||||
|
rmtree(d, True)
|
||||||
summary.print_summary(logger)
|
summary.print_summary(logger)
|
||||||
|
|
||||||
|
|
||||||
def build_repo(repository, ref, docker_repo, docker_tag, namespace, push, registry):
|
def build_repo(repository, ref, docker_repo, docker_tag, namespace, push, registry):
|
||||||
docker_repo = '{0}/{1}'.format(namespace or 'library', docker_repo)
|
docker_repo = '{0}/{1}'.format(namespace or 'library', docker_repo)
|
||||||
img_id = None
|
img_id = None
|
||||||
|
dst_folder = None
|
||||||
if '{0}@{1}'.format(repository, ref) not in processed.keys():
|
if '{0}@{1}'.format(repository, ref) not in processed.keys():
|
||||||
logger.info('Cloning {0} (ref: {1})'.format(repository, ref))
|
logger.info('Cloning {0} (ref: {1})'.format(repository, ref))
|
||||||
dst_folder = git.clone(repository, ref)
|
if repository not in processed:
|
||||||
|
rep, dst_folder = git.clone(repository, ref)
|
||||||
|
processed[repository] = rep
|
||||||
|
processed_folders.append(dst_folder)
|
||||||
|
else:
|
||||||
|
dst_folder = git.checkout(processed[repository], ref)
|
||||||
if not 'Dockerfile' in os.listdir(dst_folder):
|
if not 'Dockerfile' in os.listdir(dst_folder):
|
||||||
raise RuntimeError('Dockerfile not found in cloned repository')
|
raise RuntimeError('Dockerfile not found in cloned repository')
|
||||||
logger.info('Building using dockerfile...')
|
logger.info('Building using dockerfile...')
|
||||||
img_id, logs = client.build(path=dst_folder, quiet=True)
|
img_id, logs = client.build(path=dst_folder, quiet=True)
|
||||||
rmtree(dst_folder, True)
|
|
||||||
else:
|
else:
|
||||||
img_id = processed['{0}@{1}'.format(repository, ref)]
|
img_id = processed['{0}@{1}'.format(repository, ref)]
|
||||||
logger.info('Committing to {0}:{1}'.format(docker_repo,
|
logger.info('Committing to {0}:{1}'.format(docker_repo,
|
||||||
|
|
|
@ -16,6 +16,21 @@ def clone_tag(repo_url, tag, folder=None):
|
||||||
return clone(repo_url, 'refs/tags/' + tag, folder)
|
return clone(repo_url, 'refs/tags/' + tag, folder)
|
||||||
|
|
||||||
|
|
||||||
|
def checkout(rep, ref=None):
|
||||||
|
is_commit = False
|
||||||
|
if ref is None:
|
||||||
|
ref = 'refs/heads/master'
|
||||||
|
elif not ref.startswith('refs/'):
|
||||||
|
is_commit = True
|
||||||
|
if is_commit:
|
||||||
|
rep['HEAD'] = rep.commit(ref)
|
||||||
|
else:
|
||||||
|
rep['HEAD'] = rep.refs[ref]
|
||||||
|
indexfile = rep.index_path()
|
||||||
|
tree = rep["HEAD"].tree
|
||||||
|
index.build_index_from_tree(rep.path, indexfile, rep.object_store, tree)
|
||||||
|
return rep.path
|
||||||
|
|
||||||
def clone(repo_url, ref=None, folder=None):
|
def clone(repo_url, ref=None, folder=None):
|
||||||
is_commit = False
|
is_commit = False
|
||||||
if ref is None:
|
if ref is None:
|
||||||
|
@ -45,4 +60,4 @@ def clone(repo_url, ref=None, folder=None):
|
||||||
tree = rep["HEAD"].tree
|
tree = rep["HEAD"].tree
|
||||||
index.build_index_from_tree(rep.path, indexfile, rep.object_store, tree)
|
index.build_index_from_tree(rep.path, indexfile, rep.object_store, tree)
|
||||||
logger.debug("done")
|
logger.debug("done")
|
||||||
return folder
|
return rep, folder
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
dulwich==0.9.0
|
dulwich==0.9.0
|
||||||
docker-py==0.1.3
|
docker-py==0.1.4
|
Loading…
Reference in New Issue