def _create_script(kmd_prefix, kmd_pyver, kmd_release, target, template): data = Data(extra_data_dirs=None) os.mkdir(kmd_release) with open("{}/{}".format(kmd_release, target), "w") as f: f.write( shell( [ "m4 {}".format(data.get("enable.m4")), "-D komodo_prefix={}".format(kmd_prefix), "-D komodo_pyver={}".format(kmd_pyver), "-D komodo_release={}".format(kmd_release), data.get(template), ] ).decode("utf-8") )
def test_write_activator_switches_for_non_matrix_build(tmpdir): tmpdir = str(tmpdir) # XXX: python2 support prefix = os.path.join(tmpdir, "prefix") release = "foobar" try: switch.create_activator_switch(Data(), prefix, release) except ValueError as e: pytest.fail("Unexpected ValueError " + e)
def test_write_activator_switches(tmpdir): tmpdir = str(tmpdir) # XXX: python2 support prefix = os.path.join(tmpdir, "prefix") release = "2020.01.01-py27-rhel6" expected_release = "2020.01.01-py27" switch.create_activator_switch(Data(), prefix, release) actual_bash_activator = os.path.join(prefix, "{}/enable".format(expected_release)) with open(actual_bash_activator) as actual: expected = """if [[ $(uname -r) == *el7* ]] ; then export KOMODO_ROOT={prefix} KOMODO_RELEASE_REAL={release} source $KOMODO_ROOT/$KOMODO_RELEASE_REAL-rhel7/enable export PS1="(${{KOMODO_RELEASE_REAL}}) ${{_PRE_KOMODO_PS1}}" export KOMODO_RELEASE=$KOMODO_RELEASE_REAL else echo -e "{migration_warning}" fi """.format( release=expected_release, prefix=prefix, migration_warning=MIGRATION_WARNING, ) assert actual.read() == expected actual_csh_activator = os.path.join( prefix, "{}/enable.csh".format(expected_release) ) with open(actual_csh_activator) as actual: expected = """if ( `uname -r` =~ *el7* ) then setenv KOMODO_ROOT {prefix} set KOMODO_RELEASE_REAL = "{release}" source $KOMODO_ROOT/$KOMODO_RELEASE_REAL-rhel7/enable.csh if ( $?_KOMODO_OLD_PROMPT ) then set prompt = "[$KOMODO_RELEASE_REAL] $_KOMODO_OLD_PROMPT" endif setenv KOMODO_RELEASE $KOMODO_RELEASE_REAL else echo -e "{migration_warning}" endif """.format( release=expected_release, prefix=prefix, migration_warning=MIGRATION_WARNING, ) assert actual.read() == expected
def test_write_activator_switches(tmpdir): tmpdir = str(tmpdir) # XXX: python2 support prefix = os.path.join(tmpdir, "prefix") release = "2020.01.01-py27-rhel6" expected_release = "2020.01.01-py27" switch.create_activator_switch(Data(), prefix, release) expected_bash_activator = os.path.join(prefix, "{}/enable".format(expected_release)) with open(expected_bash_activator) as expected: assert ( expected.read() == """export KOMODO_ROOT={prefix} KOMODO_RELEASE_REAL={release} if [[ $(uname -r) == *el7* ]] ; then source $KOMODO_ROOT/$KOMODO_RELEASE_REAL-rhel7/enable else source $KOMODO_ROOT/$KOMODO_RELEASE_REAL-rhel6/enable fi export PS1="(${{KOMODO_RELEASE_REAL}}) ${{_PRE_KOMODO_PS1}}" export KOMODO_RELEASE=$KOMODO_RELEASE_REAL """.format( release=expected_release, prefix=prefix ) ) expected_csh_activator = os.path.join( prefix, "{}/enable.csh".format(expected_release) ) with open(expected_csh_activator) as expected: assert ( expected.read() == """setenv KOMODO_ROOT {prefix} set KOMODO_RELEASE_REAL = "{release}" if ( `uname -r` =~ *el7* ) then source $KOMODO_ROOT/$KOMODO_RELEASE_REAL-rhel7/enable.csh else source $KOMODO_ROOT/$KOMODO_RELEASE_REAL-rhel6/enable.csh endif set prompt = "[$KOMODO_RELEASE_REAL] $prompt" setenv KOMODO_RELEASE $KOMODO_RELEASE_REAL """.format( release=expected_release, prefix=prefix ) )
def test_write_local_activators(tmpdir): tmpdir = str(tmpdir) # XXX: python2 support locations = { "locations": { "south1": "computer01.south1.equinor.com", "west2": "computer45.west2.equinor.com", } } local_activator_path = os.path.join(tmpdir, "local") local_csh_activator_path = os.path.join(tmpdir, "local.csh") with open(local_activator_path, "w") as local_activator, open(local_csh_activator_path, "w") as local_activator_csh: local.write_local_activators(Data(), locations, local_activator, local_activator_csh) with open(local_activator_path) as activator: assert (activator.read() == """host=$(hostname) location=$(echo $host | cut -d "-" -f 1) case ${location} in south1) export ERT_LSF_SERVER=computer01.south1.equinor.com ;; west2) export ERT_LSF_SERVER=computer45.west2.equinor.com ;; esac """) with open(local_csh_activator_path) as activator: assert (activator.read() == """set host=`hostname` set location=`echo ${host} | cut -d "-" -f 1` switch (${location}) case south1: setenv ERT_LSF_SERVER computer01.south1.equinor.com breaksw case west2: setenv ERT_LSF_SERVER computer45.west2.equinor.com breaksw endsw """)
def _main(args): args.prefix = os.path.abspath(args.prefix) data = Data(extra_data_dirs=args.extra_data_dirs) if args.download or (not args.build and not args.install): git_hashes = fetch(args.pkgs, args.repo, outdir=args.cache, pip=args.pip) if args.download and not args.build: sys.exit(0) # append root to the temporary build dir, as we want a named root/ # directory as the distribution root, organised under the distribution name # (release) tmp_prefix = os.path.join(os.path.join(args.prefix), args.release, "root") fakeroot = os.path.abspath(args.release) if args.build or not args.install: make( args.pkgs, args.repo, data, prefix=tmp_prefix, dlprefix=args.cache, builddir=args.tmp, jobs=args.jobs, cmk=args.cmake, pip=args.pip, virtualenv=args.virtualenv, fakeroot=fakeroot, ) shell("mv {} {}".format(args.release + tmp_prefix, args.release)) shell("rmdir -p --ignore-fail-on-non-empty {}".format( os.path.dirname(args.release + tmp_prefix))) if args.build and not args.install: sys.exit(0) # create the enable script for tmpl, target in [("enable.in", "enable"), ("enable.csh.in", "enable.csh")]: # TODO should args.release be release_path? with open("{}/{}".format(args.release, target), "w") as f: f.write( shell([ "m4 {}".format(data.get("enable.m4")), "-D komodo_prefix={}".format(tmp_prefix), "-D komodo_pyver={}".format(args.pyver), "-D komodo_release={}".format(args.release), data.get(tmpl), ]).decode("utf-8")) with open(args.locations_config) as defs, open( os.path.join(args.release, "local"), "w") as local_activator, open( os.path.join(args.release, "local.csh"), "w") as local_csh_activator: defs = yml.safe_load(defs) local.write_local_activators(data, defs, local_activator, local_csh_activator) releasedoc = os.path.join(args.release, args.release) with open(releasedoc, "w") as y: release = {} for pkg, ver in args.pkgs.items(): entry = args.repo[pkg][ver] maintainer = args.repo[pkg][ver]["maintainer"] if ver == LATEST_PACKAGE_ALIAS: ver = latest_pypi_version(entry.get("pypi_package_name", pkg)) elif args.repo[pkg][ver].get("fetch") == "git": ver = git_hashes[pkg] release[pkg] = { "version": ver, "maintainer": maintainer, } yml.dump(release, y, default_flow_style=False) if args.dry_run: return print("Installing {} to {}".format(args.release, args.prefix)) install_root = os.path.join(args.prefix, args.release, "root") shell("{1} {0} .{0} {0}".format(args.release, args.renamer)) shell("rsync -a .{} {}".format(args.release, args.prefix), sudo=args.sudo) if os.path.exists("{1}/{0}".format(args.release, args.prefix)): shell( "{2} {0} {0}.delete {1}/{0}".format(args.release, args.prefix, args.renamer), sudo=args.sudo, ) shell( "{2} .{0} {0} {1}/.{0}".format(args.release, args.prefix, args.renamer), sudo=args.sudo, ) shell("rm -rf {1}/{0}.delete".format(args.release, args.prefix), sudo=args.sudo) if args.tmp: # Allows e.g. pip to use this folder as tmpfolder, instead of in some # cases falling back to /tmp, which is undesired when building on nfs. os.environ["TMPDIR"] = args.tmp print('Fixup #! in pip-provided packages if bin exist') release_path = os.path.join(args.prefix, args.release) release_root = os.path.join(release_path, "root") for pkg, ver in args.pkgs.items(): current = args.repo[pkg][ver] if current["make"] != "pip": continue package_name = current.get("pypi_package_name", pkg) if ver == LATEST_PACKAGE_ALIAS: ver = latest_pypi_version(package_name) shell_input = [ args.pip, "install {}=={}".format(package_name, strip_version(ver)), "--prefix", release_root, "--no-index", "--no-deps", "--ignore-installed", "--cache-dir {}".format(args.cache), "--find-links {}".format(args.cache), ] shell_input.append(current.get("makeopts")) print(shell(shell_input, sudo=args.sudo)) fixup_python_shebangs(args.prefix, args.release) switch.create_activator_switch(data, args.prefix, args.release) # run any post-install scripts on the release if args.postinst: shell([args.postinst, release_path]) print("running", "find {} -name '*.pyc' -delete".format(release_root)) shell("find {} -name '*.pyc' -delete".format(release_root)) print("Setting permissions", [data.get("set_permissions.sh"), release_path]) shell([data.get("set_permissions.sh"), release_path])
def test_non_existing_extra_data_dir(): with pytest.raises(IOError): Data(["/path/to/nowhere"])