Skip to content
Snippets Groups Projects
Commit d54dacb2 authored by André Anjos's avatar André Anjos :speech_balloon:
Browse files

[build,log] Move root_logger_protection() context manager to build, where it...

[build,log] Move root_logger_protection() context manager to build, where it can be used during bootstrap as well
parent bb735337
No related branches found
No related tags found
1 merge request!196Fix excessive logging after executing conda functions
Pipeline #45660 passed
......@@ -4,24 +4,38 @@
"""Tools for self-building and other utilities."""
import distutils.version
import glob
import os
import re
import sys
import json
import glob
import copy
import logging
import os
import platform
import re
import subprocess
import sys
import contextlib
import distutils.version
import conda_build.api
import yaml
from .log import root_logger_protection
import conda_build.api
logger = logging.getLogger(__name__)
@contextlib.contextmanager
def root_logger_protection():
"""Protects the root logger against spurious (conda) manipulation"""
root_logger = logging.getLogger()
level = root_logger.level
handlers = copy.copy(root_logger.handlers)
yield
root_logger.setLevel(level)
root_logger.handlers = handlers
def comment_cleanup(lines):
"""Cleans-up comments and empty lines from textual data read from files."""
......@@ -88,7 +102,9 @@ def next_build_number(channel_url, basename):
from conda.core.index import calculate_channel_urls
# get the channel index
channel_urls = calculate_channel_urls([channel_url], prepend=False, use_local=False)
channel_urls = calculate_channel_urls(
[channel_url], prepend=False, use_local=False
)
logger.debug("Downloading channel index from %s", channel_urls)
index = fetch_index(channel_urls=channel_urls)
......@@ -99,7 +115,8 @@ def next_build_number(channel_url, basename):
name, version, build = basename[:-6].rsplit("-", 2)
else:
raise RuntimeError(
"Package name %s does not end in either " ".tar.bz2 or .conda" % (basename,)
"Package name %s does not end in either "
".tar.bz2 or .conda" % (basename,)
)
# remove the build number as we're looking for the next value
......@@ -135,7 +152,11 @@ def next_build_number(channel_url, basename):
): # match!
url = index[dist].url
logger.debug(
"Found match at %s for %s-%s-%s", url, name, version, build_variant,
"Found match at %s for %s-%s-%s",
url,
name,
version,
build_variant,
)
build_number = max(build_number, dist.build_number + 1)
urls[index[dist].timestamp] = url.replace(channel_url, "")
......@@ -166,6 +187,7 @@ def make_conda_config(config, python, append_file, condarc_options):
with root_logger_protection():
from conda_build.conda_interface import url_path
retval = conda_build.api.get_or_merge_config(
None,
variant_config_files=config,
......@@ -182,7 +204,9 @@ def make_conda_config(config, python, append_file, condarc_options):
# appropriate platform-specific subdir (e.g. win-64)
if os.path.isdir(url):
if not os.path.isabs(url):
url = os.path.normpath(os.path.abspath(os.path.join(os.getcwd(), url)))
url = os.path.normpath(
os.path.abspath(os.path.join(os.getcwd(), url))
)
with root_logger_protection():
url = url_path(url)
retval.channel_urls.append(url)
......@@ -240,7 +264,8 @@ def exists_on_channel(channel_url, basename):
name, version, build = name[:-8].rsplit("-", 2)
else:
raise RuntimeError(
"Package name %s does not end in either " ".tar.bz2 or .conda" % (name,)
"Package name %s does not end in either "
".tar.bz2 or .conda" % (name,)
)
# remove the build number as we're looking for the next value
......@@ -279,11 +304,15 @@ def parse_dependencies(recipe_dir, config):
+ remove_pins(recipe["requirements"].get("host", []))
+ recipe["requirements"].get("run", [])
+ recipe.get("test", {}).get("requires", [])
+ ["bob.buildout"] #required for basic bootstrap of most recipes
+ ["ipython"] #for ipdb
+ ["bob.buildout"] # required for basic bootstrap of most recipes
+ ["ipython"] # for ipdb
# Also add anaconda compilers to make sure source installed packages are
# compiled properly
+ ["clangxx_osx-64" if platform.system() == "Darwin" else "gxx_linux-64"]
+ [
"clangxx_osx-64"
if platform.system() == "Darwin"
else "gxx_linux-64"
]
)
# by last, packages required for local dev
......@@ -418,7 +447,8 @@ def get_docserver_setup(public, stable, server, intranet, group):
if (not public) and (not intranet):
raise RuntimeError(
"You cannot request for private channels and set"
" intranet=False (server=%s) - these are conflicting options" % server
" intranet=False (server=%s) - these are conflicting options"
% server
)
entries = []
......@@ -442,7 +472,9 @@ def get_docserver_setup(public, stable, server, intranet, group):
server + prefix + "/docs/" + group + "/%(name)s/stable/",
]
else:
entries += [server + prefix + "/docs/" + group + "/%(name)s/master/"]
entries += [
server + prefix + "/docs/" + group + "/%(name)s/master/"
]
return "|".join(entries)
......@@ -479,7 +511,8 @@ def check_version(workdir, envtag):
'"version.txt" indicates version is a '
'pre-release (v%s) - but environment provided tag "%s", '
"which indicates this is a **stable** build. "
"Have you created the tag using ``bdt release``?" % (version, envtag)
"Have you created the tag using ``bdt release``?"
% (version, envtag)
)
else: # it is a stable build
if envtag is None:
......@@ -532,11 +565,20 @@ def git_clean_build(runner, verbose):
if not verbose:
flags += "q"
runner(["git", "clean", flags] + ["--exclude=%s" % k for k in exclude_from_cleanup])
runner(
["git", "clean", flags]
+ ["--exclude=%s" % k for k in exclude_from_cleanup]
)
def base_build(
bootstrap, server, intranet, group, recipe_dir, conda_build_config, condarc_options,
bootstrap,
server,
intranet,
group,
recipe_dir,
conda_build_config,
condarc_options,
):
"""Builds a non-beat/non-bob software dependence that doesn't exist on
defaults.
......@@ -583,18 +625,24 @@ def base_build(
"\n - ".join(condarc_options["channels"]),
)
logger.info("Merging conda configuration files...")
conda_config = make_conda_config(conda_build_config, None, None, condarc_options)
conda_config = make_conda_config(
conda_build_config, None, None, condarc_options
)
metadata = get_rendered_metadata(recipe_dir, conda_config)
arch = conda_arch()
# checks we should actually build this recipe
if should_skip_build(metadata):
logger.warn('Skipping UNSUPPORTED build of "%s" on %s', recipe_dir, arch)
logger.warn(
'Skipping UNSUPPORTED build of "%s" on %s', recipe_dir, arch
)
return
paths = get_output_path(metadata, conda_config)
urls = [exists_on_channel(upload_channel, os.path.basename(k)) for k in paths]
urls = [
exists_on_channel(upload_channel, os.path.basename(k)) for k in paths
]
if all(urls):
logger.info(
......@@ -623,7 +671,9 @@ if __name__ == "__main__":
import argparse
parser = argparse.ArgumentParser(description="Builds bob.devtools on the CI")
parser = argparse.ArgumentParser(
description="Builds bob.devtools on the CI"
)
parser.add_argument(
"-g",
"--group",
......@@ -642,7 +692,8 @@ if __name__ == "__main__":
default=os.environ.get(
"CONDA_ROOT", os.path.realpath(os.path.join(os.curdir, "miniconda"))
),
help="The location where we should install miniconda " "[default: %(default)s]",
help="The location where we should install miniconda "
"[default: %(default)s]",
)
parser.add_argument(
"-V",
......@@ -722,7 +773,9 @@ if __name__ == "__main__":
bootstrap.set_environment("BOB_PACKAGE_VERSION", version)
# create the build configuration
conda_build_config = os.path.join(args.work_dir, "conda", "conda_build_config.yaml")
conda_build_config = os.path.join(
args.work_dir, "conda", "conda_build_config.yaml"
)
recipe_append = os.path.join(args.work_dir, "data", "recipe_append.yaml")
condarc = os.path.join(args.conda_root, "condarc")
......@@ -786,7 +839,8 @@ if __name__ == "__main__":
"typically means this build is running on a shared builder and "
"the file ~/.conda/environments.txt is polluted with other "
"environment paths. To fix, empty that file and set its mode "
"to read-only for all." % (path, os.path.join(args.conda_root, "conda-bld"))
"to read-only for all."
% (path, os.path.join(args.conda_root, "conda-bld"))
)
# retrieve the current build number(s) for this build
......
......@@ -6,7 +6,6 @@
import os
import sys
import logging
import contextlib
import click
import termcolor
......@@ -244,19 +243,3 @@ def verbosity_option(**kwargs):
)(f)
return custom_verbosity_option
@contextlib.contextmanager
def root_logger_protection():
"""Protects the root logger against spurious (conda) manipulation"""
import copy
root_logger = logging.getLogger()
level = root_logger.level
handlers = copy.copy(root_logger.handlers)
yield
root_logger.setLevel(level)
root_logger.handlers = handlers
......@@ -19,6 +19,7 @@ from ..build import get_rendered_metadata
from ..build import make_conda_config
from ..build import next_build_number
from ..build import should_skip_build
from ..build import root_logger_protection
from ..constants import BASE_CONDARC
from ..constants import CONDA_BUILD_CONFIG
from ..constants import CONDA_RECIPE_APPEND
......@@ -26,7 +27,6 @@ from ..constants import MATPLOTLIB_RCDIR
from ..constants import SERVER
from ..log import get_logger
from ..log import verbosity_option
from ..log import root_logger_protection
from . import bdt
logger = get_logger(__name__)
......
......@@ -20,6 +20,7 @@ from ..build import get_rendered_metadata
from ..build import make_conda_config
from ..build import next_build_number
from ..build import should_skip_build
from ..build import root_logger_protection
from ..constants import BASE_CONDARC
from ..constants import CONDA_BUILD_CONFIG
from ..constants import CONDA_RECIPE_APPEND
......@@ -27,7 +28,6 @@ from ..constants import MATPLOTLIB_RCDIR
from ..constants import SERVER
from ..log import get_logger
from ..log import verbosity_option
from ..log import root_logger_protection
from . import bdt
logger = get_logger(__name__)
......
......@@ -12,6 +12,7 @@ from ..build import conda_arch
from ..build import get_docserver_setup
from ..build import get_env_directory
from ..build import make_conda_config
from ..build import root_logger_protection
from ..constants import BASE_CONDARC
from ..constants import CONDA_BUILD_CONFIG
from ..constants import CONDA_RECIPE_APPEND
......@@ -19,7 +20,6 @@ from ..constants import MATPLOTLIB_RCDIR
from ..constants import SERVER
from ..log import get_logger
from ..log import verbosity_option
from ..log import root_logger_protection
from . import bdt
logger = get_logger(__name__)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment