From cb44686e3ef0994b4e8b61b474af357542de3f54 Mon Sep 17 00:00:00 2001 From: Andre Anjos <andre.dos.anjos@gmail.com> Date: Fri, 18 Jan 2019 10:59:08 +0100 Subject: [PATCH] [build] Small clean-up - save conda packages on the root conda installation --- bob/devtools/bootstrap.py | 6 +----- bob/devtools/build.py | 3 +++ bob/devtools/scripts/build.py | 9 ++++++--- bob/devtools/scripts/ci.py | 33 ++++++++++++++++++++++++++------- 4 files changed, 36 insertions(+), 15 deletions(-) diff --git a/bob/devtools/bootstrap.py b/bob/devtools/bootstrap.py index 5e332f59..b6256c5f 100644 --- a/bob/devtools/bootstrap.py +++ b/bob/devtools/bootstrap.py @@ -348,17 +348,13 @@ if __name__ == '__main__': if sys.argv[1] == 'test': # sets up local variables for testing - set_environment('CI_PROJECT_DIR', os.path.realpath(os.curdir), verbose=True) set_environment('CI_PROJECT_NAME', 'bob.devtools', verbose=True) - set_environment('CONDA_ROOT', os.path.join(os.environ['CI_PROJECT_DIR'], + set_environment('CONDA_ROOT', os.path.join(os.path.realpath(os.curdir), 'miniconda'), verbose=True) prefix = os.environ['CONDA_ROOT'] logger.info('os.environ["%s"] = %s', 'CONDA_ROOT', prefix) - workdir = os.environ['CI_PROJECT_DIR'] - logger.info('os.environ["%s"] = %s', 'CI_PROJECT_DIR', workdir) - install_miniconda(prefix) conda_bin = os.path.join(prefix, 'bin', 'conda') diff --git a/bob/devtools/build.py b/bob/devtools/build.py index 9bc4b250..191a0227 100644 --- a/bob/devtools/build.py +++ b/bob/devtools/build.py @@ -436,6 +436,9 @@ if __name__ == '__main__': '\n - '.join(channels + ['defaults'])) condarc_options['channels'] = channels + ['defaults'] + # dump packages at conda_root + condarc_options['croot'] = os.path.join(prefix, 'conda-bld') + logger.info('Merging conda configuration files...') conda_config = make_conda_config(conda_build_config, pyver, recipe_append, condarc_options) diff --git a/bob/devtools/scripts/build.py b/bob/devtools/scripts/build.py index 79de7662..acf51023 100644 --- a/bob/devtools/scripts/build.py +++ b/bob/devtools/scripts/build.py @@ -15,7 +15,7 @@ from . import bdt from ..log import verbosity_option from ..build import next_build_number, conda_arch, should_skip_build, \ get_rendered_metadata, get_parsed_recipe, make_conda_config, \ - get_docserver_setup + get_docserver_setup, get_env_directory from ..constants import CONDA_BUILD_CONFIG, CONDA_RECIPE_APPEND, \ SERVER, MATPLOTLIB_RCDIR, BASE_CONDARC from ..bootstrap import set_environment, get_channels @@ -43,8 +43,7 @@ Examples: @click.argument('recipe-dir', required=False, type=click.Path(file_okay=False, dir_okay=True, exists=True), nargs=-1) @click.option('-p', '--python', default=('%d.%d' % sys.version_info[:2]), - show_default=True, help='Version of python to build the ' \ - 'environment for [default: %(default)s]') + show_default=True, help='Version of python to build the environment for') @click.option('-r', '--condarc', help='Use custom conda configuration file instead of our own',) @click.option('-m', '--config', '--variant-config-files', show_default=True, @@ -106,6 +105,10 @@ def build(recipe_dir, python, condarc, config, no_test, append_file, '\n - '.join(channels + ['defaults'])) condarc_options['channels'] = channels + ['defaults'] + # dump packages at base environment + prefix = get_env_directory(os.environ['CONDA_EXE'], 'base') + condarc_options['croot'] = os.path.join(prefix, 'conda-bld') + conda_config = make_conda_config(config, python, append_file, condarc_options) set_environment('MATPLOTLIBRC', MATPLOTLIB_RCDIR, verbose=True) diff --git a/bob/devtools/scripts/ci.py b/bob/devtools/scripts/ci.py index aa98dbef..4bb7a5ab 100644 --- a/bob/devtools/scripts/ci.py +++ b/bob/devtools/scripts/ci.py @@ -243,9 +243,6 @@ def build(dry_run): workdir = os.environ['CI_PROJECT_DIR'] logger.info('os.environ["%s"] = %s', 'CI_PROJECT_DIR', workdir) - name = os.environ['CI_PROJECT_NAME'] - logger.info('os.environ["%s"] = %s', 'CI_PROJECT_NAME', name) - pyver = os.environ['PYTHON_VERSION'] logger.info('os.environ["%s"] = %s', 'PYTHON_VERSION', pyver) @@ -277,21 +274,43 @@ def build(dry_run): '\n - '.join(channels + ['defaults'])) condarc_options['channels'] = channels + ['defaults'] + # dump packages at conda_root + condarc_options['croot'] = os.path.join(prefix, 'conda-bld') + # create the build configuration logger.info('Merging conda configuration files...') conda_config = make_conda_config(CONDA_BUILD_CONFIG, pyver, CONDA_RECIPE_APPEND, condarc_options) + recipe_dir = os.path.join(workdir, 'conda') + if not os.path.exists(recipe_dir): + raise RuntimeError("The directory %s does not exist" % recipe_dir) + + # pre-renders the recipe - figures out package name and version + metadata = get_rendered_metadata(recipe_dir, conda_config) + + arch = conda_arch() + if should_skip_build(metadata): + logger.warn('Skipping UNSUPPORTED build of "%s" for py%s on %s', + d, python.replace('.',''), arch) + return 0 + + # converts the metadata output into parsed yaml and continues the process + rendered_recipe = get_parsed_recipe(metadata) + # retrieve the current build number for this build - build_number, _ = next_build_number(channels[0], name, version, pyver) + build_number, _ = next_build_number(channels[0], + rendered_recipe['package']['name'], + rendered_recipe['package']['version'], python) set_environment('BOB_BUILD_NUMBER', str(build_number), verbose=True) # runs the build using the conda-build API - arch = conda_arch() logger.info('Building %s-%s-py%s (build: %d) for %s', - name, version, pyver.replace('.',''), build_number, arch) + rendered_recipe['package']['name'], + rendered_recipe['package']['version'], python.replace('.',''), + build_number, arch) if not dry_run: - conda_build.api.build(os.path.join(workdir, 'conda'), config=conda_config) + conda_build.api.build(recipe_dir, config=conda_config) git_clean_build(run_cmdline, arch) -- GitLab