From 7e13c623587bb846dcd07c7fa252137707009207 Mon Sep 17 00:00:00 2001 From: nsheff Date: Thu, 18 Mar 2021 11:22:13 -0400 Subject: [PATCH 1/8] Update to yacman 0.8.x --- bulker/_version.py | 2 +- bulker/bulker.py | 22 +++++++++++----------- docs/changelog.md | 5 ++++- requirements/requirements-all.txt | 2 +- 4 files changed, 17 insertions(+), 14 deletions(-) diff --git a/bulker/_version.py b/bulker/_version.py index a5f830a..bc8c296 100644 --- a/bulker/_version.py +++ b/bulker/_version.py @@ -1 +1 @@ -__version__ = "0.7.1" +__version__ = "0.7.2" diff --git a/bulker/bulker.py b/bulker/bulker.py index ef0b532..4cd66cd 100644 --- a/bulker/bulker.py +++ b/bulker/bulker.py @@ -443,7 +443,7 @@ def bulker_load(manifest, cratevars, bcfg, exe_jinja2_template, manifest_name, cratevars['tag']) if not os.path.isabs(crate_path): - crate_path = os.path.join(os.path.dirname(bcfg._file_path), crate_path) + crate_path = os.path.join(os.path.dirname(bcfg["__internal"].file_path), crate_path) _LOGGER.debug("Crate path: {}".format(crate_path)) _LOGGER.debug("cratevars: {}".format(cratevars)) @@ -483,7 +483,7 @@ def bulker_load(manifest, cratevars, bcfg, exe_jinja2_template, imp_cratevars['crate'], imp_cratevars['tag']) if not os.path.isabs(imp_crate_path): - imp_crate_path = os.path.join(os.path.dirname(bcfg._file_path), imp_crate_path) + imp_crate_path = os.path.join(os.path.dirname(bcfg["__internal"].file_path), imp_crate_path) if not os.path.exists(imp_crate_path): _LOGGER.error("Nonexistent crate: '{}' from '{}'. Reloading...".format(imp, imp_crate_path)) reload_import = True @@ -533,7 +533,7 @@ def host_tool_specific_args(bcfg, pkg, hosttool_arg_key): if os.path.isabs(pkg["singularity_image_folder"]): sif = pkg["singularity_image_folder"] else: - sif = os.path.join(os.path.dirname(bcfg._file_path), + sif = os.path.join(os.path.dirname(bcfg["__internal"].file_path), pkg["singularity_image_folder"]) pkg["singularity_fullpath"] = os.path.join( @@ -756,10 +756,10 @@ def bulker_activate(bulker_config, cratelist, echo=False, strict=False, prompt=T if os.path.basename(shellpath) == "bash": if strict: rcfile = mkabs(bulker_config.bulker.rcfile_strict, - os.path.dirname(bulker_config._file_path)) + os.path.dirname(bulker_config["__internal"].file_path)) else: rcfile = mkabs(bulker_config.bulker.rcfile, - os.path.dirname(bulker_config._file_path)) + os.path.dirname(bulker_config["__internal"].file_path)) shell_list.append("--rcfile") shell_list.append(rcfile) @@ -770,11 +770,11 @@ def bulker_activate(bulker_config, cratelist, echo=False, strict=False, prompt=T if strict: rcfolder = mkabs(os.path.join( os.path.dirname(bulker_config.bulker.rcfile_strict), - "zsh_start_strict"), os.path.dirname(bulker_config._file_path)) + "zsh_start_strict"), os.path.dirname(bulker_config["__internal"].file_path)) else: rcfolder = mkabs(os.path.join( os.path.dirname(bulker_config.bulker.rcfile_strict), - "zsh_start"), os.path.dirname(bulker_config._file_path)) + "zsh_start"), os.path.dirname(bulker_config["__internal"].file_path)) new_env["ZDOTDIR"] = rcfolder _LOGGER.debug("ZDOTDIR: {}".format(new_env["ZDOTDIR"])) @@ -1047,12 +1047,12 @@ def prep_load(bulker_config, crate_registry_paths, manifest=None, build=False): shell_template_jinja = None exe_template = mkabs(bulker_config.bulker.executable_template, - os.path.dirname(bulker_config._file_path)) + os.path.dirname(bulker_config["__internal"].file_path)) build_template = mkabs(bulker_config.bulker.build_template, - os.path.dirname(bulker_config._file_path)) + os.path.dirname(bulker_config["__internal"].file_path)) try: shell_template = mkabs(bulker_config.bulker.shell_template, - os.path.dirname(bulker_config._file_path)) + os.path.dirname(bulker_config["__internal"].file_path)) except AttributeError: _LOGGER.error("You need to re-initialize your bulker config or add a 'shell_template' attribute.") sys.exit(1) @@ -1289,7 +1289,7 @@ def main(): manifest_name, cratevars['tag']) if not os.path.isabs(crate_path): - crate_path = os.path.join(os.path.dirname(bcfg._file_path), crate_path) + crate_path = os.path.join(os.path.dirname(bcfg["__internal"].file_path), crate_path) print("Crate path: {}".format(crate_path)) diff --git a/docs/changelog.md b/docs/changelog.md index 0afc3e5..a02b5a0 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -1,7 +1,10 @@ # Changelog +## [0.7.2] -- 2021-03-18 +- Update to yacman 0.8.0, fixing references to internal config attributes. + ## [0.7.1] -- 2021-03-03 --- Fixed bug in bulker reload. +- Fixed bug in bulker reload. ## [0.7.0] -- 2021-03-02 - EXPERIMENTAL: Added `bulker cwl2man` to create a bulker manifest from a CWL file. diff --git a/requirements/requirements-all.txt b/requirements/requirements-all.txt index bcc8626..645664a 100644 --- a/requirements/requirements-all.txt +++ b/requirements/requirements-all.txt @@ -1,4 +1,4 @@ -yacman>=0.6.6 +yacman>=0.8.1 pyyaml>=5.1 logmuse>=0.2.0 jinja2 From 79a66fed44514893198e3f5a1a8f673b8c6b8c36 Mon Sep 17 00:00:00 2001 From: nsheff Date: Thu, 25 Mar 2021 10:40:59 -0400 Subject: [PATCH 2/8] document prompts. See #50 --- bulker/templates/start.sh | 1 - docs/custom_prompts.md | 69 +++++++++++++++++++++++++++++++++++ docs/img/prompts/default.png | Bin 0 -> 7046 bytes docs/img/prompts/prompt1.png | Bin 0 -> 11077 bytes docs/img/prompts/prompt2.png | Bin 0 -> 11201 bytes docs/img/prompts/prompt3.png | Bin 0 -> 8790 bytes docs/img/prompts/prompt4.png | Bin 0 -> 13796 bytes mkdocs.yml | 1 + 8 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 docs/custom_prompts.md create mode 100644 docs/img/prompts/default.png create mode 100644 docs/img/prompts/prompt1.png create mode 100644 docs/img/prompts/prompt2.png create mode 100644 docs/img/prompts/prompt3.png create mode 100644 docs/img/prompts/prompt4.png diff --git a/bulker/templates/start.sh b/bulker/templates/start.sh index 986f2fa..de36c6f 100755 --- a/bulker/templates/start.sh +++ b/bulker/templates/start.sh @@ -1,4 +1,3 @@ source "${BULKERSHELLRC}" -echo $BULKERPROMPT if [ -z ${BULKERPROMPT+x} ]; then echo "No prompt change"; else PS1="${BULKERPROMPT}"; fi export PATH="${BULKERPATH}:${PATH}" diff --git a/docs/custom_prompts.md b/docs/custom_prompts.md new file mode 100644 index 0000000..67ebeb3 --- /dev/null +++ b/docs/custom_prompts.md @@ -0,0 +1,69 @@ +# Customizing bulker prompts + +By default, when you activate a crate, bulker will change your prompt. You can customize it. Here are some examples that show you how to customize it. + +In these examples we'll activate the crate like this: + +```console +bulker activate databio/lab +``` + +The variables that could be displayed are these: + +- namespace: `databio` +- crate name: `lab` +- username: `nsheff` +- host: `zither` +- working directory: `code` + +# Default prompt + +The default bulker prompt shows you the name of the crate you've activated, colored in yellow. It's the equivalent of putting this in your config. + +```yaml + shell_prompt: '\[\033[01;93m\]\b|\[\033[00m\]\[\033[01;34m\]\w\[\033[00m\]\$ ' +``` + +![](img/prompts/default.png) + + +## Include username and hostname + +```yaml + shell_prompt: '[\u@\h(\b) \W] $ ' +``` + +![](img/prompts/prompt1.png) + +## Change colors + +You can use any terminal colors compatible with your terminal. + + +```yaml + shell_prompt: '\u@\h|\e[94m\b\[\e[00m\]:\e[90m\W\e[39m $ ' +``` + +![](img/prompts/prompt2.png) + + +## Emoji + +Yes, you can even put emoji in your prompt, if that's your thing: + +```yaml + shell_prompt: '⚓ \e[94m\b\[\e[00m\]:\e[90m\W\e[39m $ ' +``` + +![](img/prompts/prompt3.png) + + +## Date/time + +Also switched to using 256-color codes here: + +```yaml + shell_prompt: '\D{%y/%m/%d %H:%M}⚓ \e[38;5;141m\b\[\e[00m\]:\e[38;5;29m\W\e[39m $ ' +``` + +![](img/prompts/prompt4.png) diff --git a/docs/img/prompts/default.png b/docs/img/prompts/default.png new file mode 100644 index 0000000000000000000000000000000000000000..85287b870de85f10adbf9ea3acb72dd9ee84f59f GIT binary patch literal 7046 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 literal 0 HcmV?d00001 diff --git a/docs/img/prompts/prompt1.png b/docs/img/prompts/prompt1.png new file mode 100644 index 0000000000000000000000000000000000000000..bb26a6b6aa0d06f2650ab1989d18a342e295f6fb GIT binary patch literal 11077 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 SzrIskKS)a`h*yXj{{BB%^tHYK literal 0 HcmV?d00001 diff --git a/docs/img/prompts/prompt2.png b/docs/img/prompts/prompt2.png new file mode 100644 index 0000000000000000000000000000000000000000..7e6c4f26b86027cd5be4b2018420131471575878 GIT binary patch literal 11201 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 literal 0 HcmV?d00001 diff --git a/docs/img/prompts/prompt3.png b/docs/img/prompts/prompt3.png new file mode 100644 index 0000000000000000000000000000000000000000..f81b11e572493a44a0d508254ab0445152c52adf GIT binary patch literal 8790 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 E09*Sp=l}o! literal 0 HcmV?d00001 diff --git a/mkdocs.yml b/mkdocs.yml index 0a68d03..b599b8b 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -22,6 +22,7 @@ nav: - Start an exploratory shell: shell.md - Use bulker in a multi-user environment: multi_user_environment.md - Host- and tool-specific settings: settings.md + - Custom prompts: custom_prompts.md - Use a bulker registry: registry.md - Use images with entrypoints: entrypoint.md - Disable user or network map: advanced_templates.md From 90dce78ba606ecf0926e92ad54b8663dcac61e0d Mon Sep 17 00:00:00 2001 From: nsheff Date: Thu, 25 Mar 2021 10:46:52 -0400 Subject: [PATCH 3/8] docs --- docs/custom_prompts.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/docs/custom_prompts.md b/docs/custom_prompts.md index 67ebeb3..e59918c 100644 --- a/docs/custom_prompts.md +++ b/docs/custom_prompts.md @@ -1,6 +1,6 @@ # Customizing bulker prompts -By default, when you activate a crate, bulker will change your prompt. You can customize it. Here are some examples that show you how to customize it. +By default, when you activate a crate, bulker will change your prompt. You can customize it by specifying the `shell_prompt` attribute in your bulker config. *Make sure you enclose the value in single quotes*; if you use double-quotes the parser will re-escape your prompt escape sequences and break stuff. Here are some examples: In these examples we'll activate the crate like this: @@ -18,7 +18,7 @@ The variables that could be displayed are these: # Default prompt -The default bulker prompt shows you the name of the crate you've activated, colored in yellow. It's the equivalent of putting this in your config. +The default bulker prompt shows you the name of the crate you've activated, colored in yellow. Bulker uses `\b` to indicate the name of the bulker namespace and crate. The default prompt is the equivalent of putting this in your config: ```yaml shell_prompt: '\[\033[01;93m\]\b|\[\033[00m\]\[\033[01;34m\]\w\[\033[00m\]\$ ' @@ -29,6 +29,8 @@ The default bulker prompt shows you the name of the crate you've activated, colo ## Include username and hostname +In addition the bulker-provided `\b`, there are lots of other shell-provided variables you can use, like `\u` for username and `\h` for hostname, and `\W` for working directory path. You can look up lists of these by searching for *customizing bash PS1 prompt*. Here's a simple sample using *username* and *hostname*: + ```yaml shell_prompt: '[\u@\h(\b) \W] $ ' ``` @@ -37,7 +39,7 @@ The default bulker prompt shows you the name of the crate you've activated, colo ## Change colors -You can use any terminal colors compatible with your terminal. +You can al;so use any terminal colors compatible with your terminal. ```yaml @@ -60,7 +62,7 @@ Yes, you can even put emoji in your prompt, if that's your thing: ## Date/time -Also switched to using 256-color codes here: +This example uses a custom date/time format along with 256-color codes: ```yaml shell_prompt: '\D{%y/%m/%d %H:%M}⚓ \e[38;5;141m\b\[\e[00m\]:\e[38;5;29m\W\e[39m $ ' From 85419b89733c57ac9bfc15076f140681191be15b Mon Sep 17 00:00:00 2001 From: nsheff Date: Thu, 25 Mar 2021 11:09:07 -0400 Subject: [PATCH 4/8] update changelog --- docs/changelog.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/changelog.md b/docs/changelog.md index a02b5a0..f4d3504 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -1,7 +1,8 @@ # Changelog -## [0.7.2] -- 2021-03-18 +## [0.7.2] -- 2021-03-25 - Update to yacman 0.8.0, fixing references to internal config attributes. +- Add documentation and clarity for the `shell_prompt` option ## [0.7.1] -- 2021-03-03 - Fixed bug in bulker reload. From 15c824674fa876f2869f104764569da84ce3cff2 Mon Sep 17 00:00:00 2001 From: nsheff Date: Wed, 26 May 2021 08:27:26 -0400 Subject: [PATCH 5/8] bulker run should return value of child process --- bulker/bulker.py | 1 + docs/changelog.md | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/bulker/bulker.py b/bulker/bulker.py index 4cd66cd..c00173d 100644 --- a/bulker/bulker.py +++ b/bulker/bulker.py @@ -844,6 +844,7 @@ def maybe_quote(item): global PROC PROC = psutil.Popen(merged_command, shell=True, preexec_fn=os.setsid) PROC.communicate() + sys.exit(PROC.returncode) #command[0:0] = ["export", "PATH=\"{}\"".format(newpath)] #subprocess.call(merged_command) diff --git a/docs/changelog.md b/docs/changelog.md index f4d3504..8b4f959 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -12,7 +12,7 @@ - BREAKING CHANGE: Renamed the `bulker load` arguments: the `--manifest` short arg changed from `-f` to `-m`; `--force` changed from `-r` to `-f`. This is to be more consistent with the names. Since I doubt many people are using this in script, I don't think this will break much, if anything. - Added new option for `-r`, `--recurse` to `bulker load`, which recursively re-loads all imported manifests. - Added new `bulker reload` command, that reloads all manifests. -- Added `bulker envvar`, which allows you to list, add (`-a VAR`), or remove (`-r VAR`) environment variables to the bulker config from the CLI. +- Added `bulker envvars`, which allows you to list, add (`-a VAR`), or remove (`-r VAR`) environment variables to the bulker config from the CLI. - Added `bulker unload` to remove a loaded manifest. ## [0.6.0] -- 2020-07-10 From 83803a33039ebdb20e86dba0991574634898dcf5 Mon Sep 17 00:00:00 2001 From: nsheff Date: Thu, 3 Jun 2021 14:29:43 -0400 Subject: [PATCH 6/8] return error code if bulker load fails --- bulker/bulker.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/bulker/bulker.py b/bulker/bulker.py index c00173d..61bd6ff 100644 --- a/bulker/bulker.py +++ b/bulker/bulker.py @@ -1360,13 +1360,18 @@ def main(): manifest, cratevars, exe_template_jinja, shell_template_jinja, build_template_jinja = prep_load( bulker_config, args.crate_registry_paths, args.manifest, args.build) - bulker_load(manifest, cratevars, bulker_config, + try: + bulker_load(manifest, cratevars, bulker_config, exe_jinja2_template=exe_template_jinja, shell_jinja2_template=shell_template_jinja, crate_path=args.path, build=build_template_jinja, force=args.force, recurse=args.recurse) + except Exception as e: + print(f'Bulker load failed: {e}') + sys.exit(1) + if args.command == "reload": bulker_config.make_writable() From 9c31071f7ffd7bd19995aa044f599274191592bd Mon Sep 17 00:00:00 2001 From: nsheff Date: Wed, 23 Jun 2021 13:53:32 -0400 Subject: [PATCH 7/8] fix bug with relative bulker_crates path in inspect --- bulker/bulker.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bulker/bulker.py b/bulker/bulker.py index 61bd6ff..9e548f2 100644 --- a/bulker/bulker.py +++ b/bulker/bulker.py @@ -1290,7 +1290,7 @@ def main(): manifest_name, cratevars['tag']) if not os.path.isabs(crate_path): - crate_path = os.path.join(os.path.dirname(bcfg["__internal"].file_path), crate_path) + crate_path = os.path.join(os.path.dirname(bulker_config["__internal"].file_path), crate_path) print("Crate path: {}".format(crate_path)) From 49fa76611e755b244d04ecd6932db50d935f2822 Mon Sep 17 00:00:00 2001 From: nsheff Date: Thu, 24 Jun 2021 12:46:15 -0400 Subject: [PATCH 8/8] changelog --- docs/changelog.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/changelog.md b/docs/changelog.md index 8b4f959..cf942d2 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -1,8 +1,9 @@ # Changelog -## [0.7.2] -- 2021-03-25 +## [0.7.2] -- 2021-06-24 - Update to yacman 0.8.0, fixing references to internal config attributes. - Add documentation and clarity for the `shell_prompt` option +- Fixed bug with relative crate root folders. ## [0.7.1] -- 2021-03-03 - Fixed bug in bulker reload.