mirror of
https://github.com/ryanvolz/radioconda.git
synced 2024-12-25 20:32:45 -05:00
155 lines
4.3 KiB
Python
Executable File
155 lines
4.3 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
import pathlib
|
|
from typing import List
|
|
|
|
import yaml
|
|
|
|
|
|
def read_env_file(
|
|
env_file: pathlib.Path,
|
|
fallback_name: str,
|
|
fallback_version: str,
|
|
fallback_platform: str,
|
|
fallback_channels: List[str],
|
|
) -> dict:
|
|
with env_file.open("r") as f:
|
|
env_dict = yaml.safe_load(f)
|
|
|
|
env_dict.setdefault("name", fallback_name)
|
|
env_dict.setdefault("version", fallback_version)
|
|
env_dict.setdefault("platform", fallback_platform)
|
|
env_dict.setdefault("channels", fallback_channels)
|
|
|
|
return env_dict
|
|
|
|
|
|
def get_conda_metapackage_cmdline(
|
|
env_dict: dict, home: str, license_id: str, summary: str
|
|
):
|
|
cmdline = [
|
|
"conda",
|
|
"metapackage",
|
|
env_dict["name"],
|
|
env_dict["version"],
|
|
"--no-anaconda-upload",
|
|
"--home",
|
|
home,
|
|
"--license",
|
|
license_id,
|
|
"--summary",
|
|
summary,
|
|
]
|
|
for channel in env_dict["channels"]:
|
|
cmdline.extend(["--channel", channel])
|
|
cmdline.extend(["--dependencies"] + env_dict["dependencies"])
|
|
|
|
return cmdline
|
|
|
|
|
|
if __name__ == "__main__":
|
|
import argparse
|
|
import os
|
|
import subprocess
|
|
import shutil
|
|
import sys
|
|
|
|
import conda_build.config
|
|
|
|
conda_build_config = conda_build.config.Config()
|
|
|
|
cwd = pathlib.Path(".").absolute()
|
|
here = pathlib.Path(__file__).parent.absolute().relative_to(cwd)
|
|
distname = os.getenv("DISTNAME", "radioconda")
|
|
platform = os.getenv("PLATFORM", conda_build_config.subdir)
|
|
source = "/".join(
|
|
(
|
|
os.getenv("GITHUB_SERVER_URL", "https://github.com"),
|
|
os.getenv("GITHUB_REPOSITORY", "ryanvolz/radioconda"),
|
|
)
|
|
)
|
|
license_id = os.getenv("LICENSE_ID", "BSD-3-Clause")
|
|
summary = os.getenv("METAPACKAGE_SUMMARY", f"Metapackage for {distname}.")
|
|
|
|
parser = argparse.ArgumentParser(
|
|
description=(
|
|
"Build environment metapackage using conda-build."
|
|
" Additional command-line options following '--' will be passed to conda"
|
|
" metapackage."
|
|
)
|
|
)
|
|
parser.add_argument(
|
|
"env_file",
|
|
type=pathlib.Path,
|
|
nargs="?",
|
|
default=here / "installer_specs" / f"{distname}-{platform}.yml",
|
|
help=(
|
|
"Environment yaml file for a particular platform"
|
|
" (name ends in the platform identifier)."
|
|
" (default: %(default)s)"
|
|
),
|
|
)
|
|
parser.add_argument(
|
|
"-o",
|
|
"--output_dir",
|
|
type=pathlib.Path,
|
|
default=here / "dist" / "conda-bld",
|
|
help=(
|
|
"Output directory in which the metapackage will be placed."
|
|
" (default: %(default)s)"
|
|
),
|
|
)
|
|
parser.add_argument(
|
|
"--home",
|
|
default=source,
|
|
help="The homepage for the metapackage. (default: %(default)s)",
|
|
)
|
|
parser.add_argument(
|
|
"--license",
|
|
default=license_id,
|
|
help="The SPDX license identifier for the metapackage. (default: %(default)s)",
|
|
)
|
|
parser.add_argument(
|
|
"--summary",
|
|
default=summary,
|
|
help="Summary of the package. (default: %(default)s)",
|
|
)
|
|
|
|
# allow a delimiter to separate metapackage arguments
|
|
argv = sys.argv[1:]
|
|
if "--" in argv:
|
|
i = argv.index("--")
|
|
args, metapackage_args = parser.parse_args(argv[:i]), argv[i + 1 :]
|
|
else:
|
|
args, metapackage_args = parser.parse_args(argv), []
|
|
|
|
env_dict = read_env_file(
|
|
args.env_file,
|
|
fallback_name=distname,
|
|
fallback_version="0",
|
|
fallback_platform=platform,
|
|
fallback_channels=["conda-forge"],
|
|
)
|
|
|
|
cmdline = get_conda_metapackage_cmdline(
|
|
env_dict=env_dict, home=args.home, license_id=args.license, summary=args.summary
|
|
)
|
|
cmdline.extend(metapackage_args)
|
|
|
|
env = os.environ.copy()
|
|
env["CONDA_SUBDIR"] = env_dict["platform"]
|
|
|
|
proc = subprocess.run(cmdline, env=env)
|
|
|
|
try:
|
|
proc.check_returncode()
|
|
except subprocess.CalledProcessError:
|
|
sys.exit(1)
|
|
|
|
bldpkgs_dir = pathlib.Path(conda_build_config.croot) / env_dict["platform"]
|
|
pkg_paths = list(bldpkgs_dir.glob(f"{env_dict['name']}-{env_dict['version']}*.bz2"))
|
|
pkg_out_dir = args.output_dir / env_dict["platform"]
|
|
pkg_out_dir.mkdir(parents=True, exist_ok=True)
|
|
|
|
for pkg in pkg_paths:
|
|
shutil.copy(pkg, pkg_out_dir)
|