env-module-manager 0.2.0__tar.gz → 0.4.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. env_module_manager-0.4.0/AGENTS.md +101 -0
  2. {env_module_manager-0.2.0 → env_module_manager-0.4.0}/PKG-INFO +28 -13
  3. {env_module_manager-0.2.0 → env_module_manager-0.4.0}/README.md +25 -10
  4. env_module_manager-0.4.0/docs/collective-environments.md +83 -0
  5. {env_module_manager-0.2.0 → env_module_manager-0.4.0}/docs/configuration.md +5 -0
  6. {env_module_manager-0.2.0 → env_module_manager-0.4.0}/docs/environment-modules.md +3 -0
  7. {env_module_manager-0.2.0 → env_module_manager-0.4.0}/docs/index.md +6 -2
  8. {env_module_manager-0.2.0 → env_module_manager-0.4.0}/docs/installation.md +9 -3
  9. {env_module_manager-0.2.0 → env_module_manager-0.4.0}/docs/python-tools.md +23 -0
  10. {env_module_manager-0.2.0 → env_module_manager-0.4.0}/docs/reference.md +22 -2
  11. {env_module_manager-0.2.0 → env_module_manager-0.4.0}/docs/rust-tools.md +10 -0
  12. {env_module_manager-0.2.0 → env_module_manager-0.4.0}/docs/shell-tools.md +10 -0
  13. {env_module_manager-0.2.0 → env_module_manager-0.4.0}/mkdocs.yml +2 -1
  14. {env_module_manager-0.2.0 → env_module_manager-0.4.0}/module_manager/__init__.py +1 -1
  15. env_module_manager-0.4.0/module_manager/cli.py +620 -0
  16. {env_module_manager-0.2.0 → env_module_manager-0.4.0}/module_manager/config.py +105 -10
  17. env_module_manager-0.4.0/module_manager/deploy.py +823 -0
  18. {env_module_manager-0.2.0 → env_module_manager-0.4.0}/module_manager/modulefile.py +52 -6
  19. {env_module_manager-0.2.0 → env_module_manager-0.4.0}/pyproject.toml +2 -2
  20. {env_module_manager-0.2.0 → env_module_manager-0.4.0}/tests/test_cli.py +165 -1
  21. {env_module_manager-0.2.0 → env_module_manager-0.4.0}/tests/test_config.py +13 -2
  22. env_module_manager-0.4.0/tests/test_modulefile.py +567 -0
  23. {env_module_manager-0.2.0 → env_module_manager-0.4.0}/uv.lock +1 -1
  24. env_module_manager-0.2.0/AGENTS.md +0 -54
  25. env_module_manager-0.2.0/module_manager/cli.py +0 -300
  26. env_module_manager-0.2.0/module_manager/deploy.py +0 -265
  27. env_module_manager-0.2.0/tests/test_modulefile.py +0 -249
  28. {env_module_manager-0.2.0 → env_module_manager-0.4.0}/.github/workflows/publish.yml +0 -0
  29. {env_module_manager-0.2.0 → env_module_manager-0.4.0}/.github/workflows/tag.yml +0 -0
  30. {env_module_manager-0.2.0 → env_module_manager-0.4.0}/.github/workflows/test.yml +0 -0
  31. {env_module_manager-0.2.0 → env_module_manager-0.4.0}/.gitignore +0 -0
  32. {env_module_manager-0.2.0 → env_module_manager-0.4.0}/.python-version +0 -0
  33. {env_module_manager-0.2.0 → env_module_manager-0.4.0}/.readthedocs.yaml +0 -0
  34. {env_module_manager-0.2.0 → env_module_manager-0.4.0}/CONTRIBUTING.md +0 -0
  35. /env_module_manager-0.2.0/LICENSE → /env_module_manager-0.4.0/LICENSE.md +0 -0
  36. {env_module_manager-0.2.0 → env_module_manager-0.4.0}/docs/development.md +0 -0
  37. {env_module_manager-0.2.0 → env_module_manager-0.4.0}/docs/stylesheets/extra.css +0 -0
  38. {env_module_manager-0.2.0 → env_module_manager-0.4.0}/docs/uninstall.md +0 -0
  39. {env_module_manager-0.2.0 → env_module_manager-0.4.0}/example.bash +0 -0
@@ -0,0 +1,101 @@
1
+ # Agents
2
+
3
+ This file gives coding agents the local rules for working in this repository.
4
+
5
+ ## Project Shape
6
+
7
+ `module-manager` is a Python CLI for deploying versioned command-line tools
8
+ behind GNU Environment Modules on Linux/HPC systems. The published package name
9
+ is `env-module-manager`, the import package is `module_manager`, and the console
10
+ script is `module-manager`.
11
+
12
+ The core package lives in `module_manager/`, tests live in `tests/`, and MkDocs
13
+ documentation lives in `docs/`.
14
+
15
+ Important modules:
16
+
17
+ * `module_manager/cli.py`: Rich Click command group and CLI wrappers.
18
+ * `module_manager/config.py`: TOML and environment configuration loading.
19
+ * `module_manager/deploy.py`: filesystem deployment and uninstall behavior.
20
+ * `module_manager/modulefile.py`: Tcl modulefile and default-version rendering.
21
+ * `tests/test_cli.py`: command-line behavior tests.
22
+ * `tests/test_config.py`: configuration precedence tests.
23
+ * `tests/test_modulefile.py`: modulefile and deployment helper tests.
24
+
25
+ ## Commands
26
+
27
+ Use these commands when validating changes:
28
+
29
+ ```bash
30
+ uv run ruff format .
31
+ uv run ruff check .
32
+ uv run pytest
33
+ uv run mkdocs build --strict
34
+ uv build
35
+ uv run twine check dist/*
36
+ ```
37
+
38
+ The test suite is configured with coverage and a 90 percent fail-under
39
+ threshold, so targeted pytest runs can fail coverage even when the selected test
40
+ passes. Run the full suite before treating coverage as meaningful.
41
+
42
+ ## Coding Rules
43
+
44
+ * Preserve user changes. Do not revert unrelated dirty work.
45
+ * Use typed function signatures throughout tests and source code.
46
+ * Use Google-style docstrings for new or edited functions.
47
+ * Keep Click command functions thin; put filesystem behavior in
48
+ `module_manager.deploy`.
49
+ * Keep modulefile string generation in `module_manager.modulefile`.
50
+ * Prefer `pathlib.Path` over string path manipulation.
51
+ * Prefer structured subprocess calls such as `subprocess.run([...], check=True)`.
52
+ * Keep edits scoped. Avoid opportunistic refactors while fixing a bug.
53
+ * Update docs and `README.md` when changing user-facing CLI behavior.
54
+
55
+ ## CLI Behavior
56
+
57
+ Deploy commands create versioned install roots under `<prefix>/<name>/<version>`
58
+ and modulefiles under `<module-root>/<name>/<version>`.
59
+
60
+ Supported deploy commands:
61
+
62
+ * `deploy-python`: writes a modulefile for a Python CLI, and can install it with
63
+ `uv tool install`.
64
+ * `deploy-rust`: copies a compiled binary into the versioned `bin` directory.
65
+ * `deploy-script`: copies a shell script into the versioned `bin` directory.
66
+ * `deploy-env`: reads a TOML manifest and deploys Python, Rust, and script
67
+ tools into one shared environment module.
68
+
69
+ Deployments write `<module-root>/<name>/.version` by default so `module load
70
+ <name>` resolves to the deployed version. Use `--no-default` to skip that.
71
+
72
+ Rust, script, collective environment, and uninstall workflows support
73
+ `--dry-run`. Individual `deploy-python` intentionally keeps `--execute-install`
74
+ for its two-step metadata-first workflow.
75
+
76
+ `uninstall` removes one versioned install root and modulefile. It removes the
77
+ default selector only when it still points at the version being removed. Use
78
+ `--dry-run` to show paths without deleting them, and `--keep-default` to leave
79
+ the default selector untouched.
80
+
81
+ ## Configuration
82
+
83
+ Configuration can come from `~/.config/module-manager/config.toml`, a path set
84
+ with `MODULE_MANAGER_CONFIG`, environment variables, or CLI options. CLI options
85
+ take precedence over environment values, which take precedence over TOML.
86
+
87
+ Common settings:
88
+
89
+ * `prefix` or `MODULE_MANAGER_PREFIX`
90
+ * `module_root` or `MODULE_MANAGER_MODULE_ROOT`
91
+ * `[python].indexes`, `MODULE_MANAGER_INDEX`, or `MODULE_MANAGER_INDEXES`
92
+ * `[python].find_links` or `MODULE_MANAGER_FIND_LINKS`
93
+ * `[python].uv_config_file` for the uv `--config-file` option. Do not add a
94
+ `MODULE_MANAGER_*` wrapper for this; users should use uv's `UV_CONFIG_FILE`
95
+ environment variable when they want environment-based uv configuration.
96
+
97
+ ## Documentation
98
+
99
+ MkDocs Material is used for documentation. Update `mkdocs.yml` navigation when
100
+ adding pages. The Material theme currently prints an upstream warning during
101
+ `mkdocs build --strict`; the build is still valid when the command exits zero.
@@ -1,14 +1,14 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: env-module-manager
3
- Version: 0.2.0
4
- Summary: Deploy Python, Rust, and shell CLI tools behind GNU environment modulefiles
3
+ Version: 0.4.0
4
+ Summary: Deploy Python, Rust, shell, and collective CLI environments behind GNU environment modulefiles
5
5
  Project-URL: Homepage, https://github.com/ejb90/module-manager
6
6
  Project-URL: Documentation, https://module-manager.readthedocs.io/
7
7
  Project-URL: Tests, https://app.codecov.io/gh/ejb90/module-manager
8
8
  Project-URL: Repository, https://github.com/ejb90/module-manager
9
9
  Author: ejb90
10
10
  License-Expression: MIT
11
- License-File: LICENSE
11
+ License-File: LICENSE.md
12
12
  Classifier: Development Status :: 3 - Alpha
13
13
  Classifier: Environment :: Console
14
14
  Classifier: Intended Audience :: System Administrators
@@ -40,8 +40,8 @@ Description-Content-Type: text/markdown
40
40
  [![PyPI](https://img.shields.io/pypi/v/env-module-manager)](https://pypi.org/project/env-module-manager/)
41
41
  [![Python versions](https://img.shields.io/pypi/pyversions/env-module-manager)](https://pypi.org/project/env-module-manager/)
42
42
 
43
- `module-manager` deploys versioned Python, Rust, and shell CLI tools behind GNU
44
- environment modulefiles for Linux/HPC systems.
43
+ `module-manager` deploys versioned Python, Rust, shell, and collective CLI
44
+ environments behind GNU environment modulefiles for Linux/HPC systems.
45
45
 
46
46
  It writes tools and modulefiles into predictable versioned locations:
47
47
 
@@ -50,6 +50,20 @@ It writes tools and modulefiles into predictable versioned locations:
50
50
  /prod/modulefiles/<name>/<version>
51
51
  ```
52
52
 
53
+ ## Installation
54
+
55
+ Install from PyPI:
56
+
57
+ ```sh
58
+ pip install env-module-manager
59
+ ```
60
+
61
+ Or install as a uv-managed tool:
62
+
63
+ ```sh
64
+ uv tool install env-module-manager
65
+ ```
66
+
53
67
  ## Quick Start
54
68
 
55
69
  Deploy a Python CLI with `uv tool install`:
@@ -80,6 +94,13 @@ module-manager deploy-script my-tool 1.0.0 \
80
94
  --module-root /prod/modulefiles
81
95
  ```
82
96
 
97
+ Deploy a collective environment from a TOML manifest:
98
+
99
+ ```sh
100
+ module-manager deploy-env --file dev-tools.toml --dry-run
101
+ module-manager deploy-env --file dev-tools.toml
102
+ ```
103
+
83
104
  Use the generated module:
84
105
 
85
106
  ```sh
@@ -101,11 +122,5 @@ module-manager uninstall ruff 0.8.0 \
101
122
 
102
123
  ## Documentation
103
124
 
104
- Full documentation lives in `docs/` and can be served with MkDocs:
105
-
106
- ```sh
107
- uv run mkdocs serve
108
- ```
109
-
110
- Start with `docs/index.md` for installation, configuration, Python tools, Rust
111
- tools, shell scripts, uninstall, and local development notes.
125
+ Read the full documentation on
126
+ [Read the Docs](https://module-manager.readthedocs.io/).
@@ -8,8 +8,8 @@
8
8
  [![PyPI](https://img.shields.io/pypi/v/env-module-manager)](https://pypi.org/project/env-module-manager/)
9
9
  [![Python versions](https://img.shields.io/pypi/pyversions/env-module-manager)](https://pypi.org/project/env-module-manager/)
10
10
 
11
- `module-manager` deploys versioned Python, Rust, and shell CLI tools behind GNU
12
- environment modulefiles for Linux/HPC systems.
11
+ `module-manager` deploys versioned Python, Rust, shell, and collective CLI
12
+ environments behind GNU environment modulefiles for Linux/HPC systems.
13
13
 
14
14
  It writes tools and modulefiles into predictable versioned locations:
15
15
 
@@ -18,6 +18,20 @@ It writes tools and modulefiles into predictable versioned locations:
18
18
  /prod/modulefiles/<name>/<version>
19
19
  ```
20
20
 
21
+ ## Installation
22
+
23
+ Install from PyPI:
24
+
25
+ ```sh
26
+ pip install env-module-manager
27
+ ```
28
+
29
+ Or install as a uv-managed tool:
30
+
31
+ ```sh
32
+ uv tool install env-module-manager
33
+ ```
34
+
21
35
  ## Quick Start
22
36
 
23
37
  Deploy a Python CLI with `uv tool install`:
@@ -48,6 +62,13 @@ module-manager deploy-script my-tool 1.0.0 \
48
62
  --module-root /prod/modulefiles
49
63
  ```
50
64
 
65
+ Deploy a collective environment from a TOML manifest:
66
+
67
+ ```sh
68
+ module-manager deploy-env --file dev-tools.toml --dry-run
69
+ module-manager deploy-env --file dev-tools.toml
70
+ ```
71
+
51
72
  Use the generated module:
52
73
 
53
74
  ```sh
@@ -69,11 +90,5 @@ module-manager uninstall ruff 0.8.0 \
69
90
 
70
91
  ## Documentation
71
92
 
72
- Full documentation lives in `docs/` and can be served with MkDocs:
73
-
74
- ```sh
75
- uv run mkdocs serve
76
- ```
77
-
78
- Start with `docs/index.md` for installation, configuration, Python tools, Rust
79
- tools, shell scripts, uninstall, and local development notes.
93
+ Read the full documentation on
94
+ [Read the Docs](https://module-manager.readthedocs.io/).
@@ -0,0 +1,83 @@
1
+ # Collective Environments
2
+
3
+ Collective environments package several tools behind one modulefile. Use them
4
+ when a shared workflow needs Python CLIs, Rust binaries, and shell scripts to
5
+ appear together from one `module load`.
6
+
7
+ Create a TOML manifest:
8
+
9
+ ```toml
10
+ name = "dev-tools"
11
+ version = "2026.05"
12
+ description = "Shared developer command-line tools"
13
+ prefix = "/prod/tools"
14
+ module_root = "/prod/modulefiles"
15
+ default = true
16
+
17
+ [[tools]]
18
+ type = "python"
19
+ name = "ruff"
20
+ version = "0.8.0"
21
+ package = "ruff==0.8.0"
22
+ python = "3.12"
23
+ indexes = ["https://packages.example/simple"]
24
+ find_links = ["/prod/wheels"]
25
+ uv_config_file = "/prod/config/uv.toml"
26
+
27
+ [[tools]]
28
+ type = "rust"
29
+ name = "ripgrep"
30
+ version = "14.1.1"
31
+ binary = "./target/release/rg"
32
+
33
+ [[tools]]
34
+ type = "script"
35
+ name = "lab-helper"
36
+ version = "1.0.0"
37
+ script = "./scripts/lab-helper"
38
+ ```
39
+
40
+ Deploy the environment:
41
+
42
+ ```sh
43
+ module-manager deploy-env --file dev-tools.toml
44
+ ```
45
+
46
+ This writes one shared environment:
47
+
48
+ ```text
49
+ /prod/tools/dev-tools/2026.05/bin
50
+ /prod/modulefiles/dev-tools/2026.05
51
+ ```
52
+
53
+ The generated modulefile prepends the shared `bin` directory to `PATH`, so all
54
+ tools in the manifest are available after:
55
+
56
+ ```sh
57
+ module use /prod/modulefiles
58
+ module load dev-tools
59
+ ```
60
+
61
+ Relative `binary` and `script` paths are resolved relative to the manifest file.
62
+
63
+ ## Preview
64
+
65
+ Use `--dry-run` to preview the install, copy, and modulefile actions without
66
+ creating files:
67
+
68
+ ```sh
69
+ module-manager deploy-env --file dev-tools.toml --dry-run
70
+ ```
71
+
72
+ ## Overrides
73
+
74
+ The manifest can define `prefix`, `module_root`, and `default`, but CLI options
75
+ can override them:
76
+
77
+ ```sh
78
+ module-manager deploy-env \
79
+ --file dev-tools.toml \
80
+ --prefix /scratch/tools \
81
+ --module-root /scratch/modulefiles \
82
+ --no-default
83
+ ```
@@ -17,6 +17,7 @@ module_root = "/prod/modulefiles"
17
17
  [python]
18
18
  indexes = ["https://packages.example/simple"]
19
19
  find_links = ["/prod/wheels"]
20
+ uv_config_file = "/prod/config/uv.toml"
20
21
  ```
21
22
 
22
23
  Use a different config file with `--config`:
@@ -36,6 +37,10 @@ export MODULE_MANAGER_FIND_LINKS=/prod/wheels,/prod/more-wheels
36
37
 
37
38
  `MODULE_MANAGER_CONFIG` can point to an alternate TOML config file.
38
39
 
40
+ There is no `MODULE_MANAGER_*` environment variable for uv configuration files.
41
+ Use uv's own `UV_CONFIG_FILE` environment variable when you want to set that via
42
+ the environment.
43
+
39
44
  ## CLI Precedence
40
45
 
41
46
  CLI options override both environment variables and TOML config:
@@ -55,3 +55,6 @@ module-manager deploy-python ruff 0.8.0 \
55
55
  Uninstall removes the default selector only when it still points at the version
56
56
  being removed. If another deployment has already made a newer version the
57
57
  default, that selector is left alone.
58
+
59
+ Collective environments use the same modulefile behavior, but the versioned
60
+ `bin` directory contains every tool listed in the manifest.
@@ -1,7 +1,7 @@
1
1
  # module-manager
2
2
 
3
- `module-manager` deploys versioned Python, Rust, and shell CLI tools behind GNU
4
- environment modulefiles for Linux/HPC systems.
3
+ `module-manager` deploys versioned Python, Rust, shell, and collective CLI
4
+ environments behind GNU environment modulefiles for Linux/HPC systems.
5
5
 
6
6
  It is designed for administrators who want reproducible command-line tool
7
7
  installations under a production prefix such as `/prod/tools`, with matching
@@ -27,6 +27,9 @@ The generated modulefile is written to:
27
27
  /prod/modulefiles/<name>/<version>
28
28
  ```
29
29
 
30
+ Collective environments use the same layout, but several tools share one
31
+ versioned `bin` directory and one modulefile.
32
+
30
33
  ## Common Workflow
31
34
 
32
35
  ```sh
@@ -48,4 +51,5 @@ ruff --version
48
51
  - Deploy Python packages with [Python Tools](python-tools.md).
49
52
  - Deploy Rust binaries with [Rust Tools](rust-tools.md).
50
53
  - Deploy shell scripts with [Shell Scripts](shell-tools.md).
54
+ - Deploy shared tool bundles with [Collective Environments](collective-environments.md).
51
55
  - Remove deployed versions with [Uninstall](uninstall.md).
@@ -38,18 +38,24 @@ in every new shell.
38
38
 
39
39
  ## Install module-manager
40
40
 
41
- From a local checkout:
41
+ From PyPI with pip:
42
42
 
43
43
  ```sh
44
- uv tool install .
44
+ pip install env-module-manager
45
45
  ```
46
46
 
47
- From PyPI:
47
+ As a uv-managed tool:
48
48
 
49
49
  ```sh
50
50
  uv tool install env-module-manager
51
51
  ```
52
52
 
53
+ From a local checkout:
54
+
55
+ ```sh
56
+ uv tool install .
57
+ ```
58
+
53
59
  During development, use:
54
60
 
55
61
  ```sh
@@ -51,6 +51,29 @@ module-manager deploy-python gitconductor 0.1.0 \
51
51
 
52
52
  `--find-links` may be used more than once.
53
53
 
54
+ ## Use a uv Config File
55
+
56
+ Pass a specific uv configuration file to `uv tool install`:
57
+
58
+ ```sh
59
+ module-manager deploy-python internal-tool 1.2.3 \
60
+ --package internal-tool==1.2.3 \
61
+ --uv-config-file /prod/config/uv.toml \
62
+ --prefix /prod/tools \
63
+ --module-root /prod/modulefiles \
64
+ --execute-install
65
+ ```
66
+
67
+ The same option can be set in the module-manager config file:
68
+
69
+ ```toml
70
+ [python]
71
+ uv_config_file = "/prod/config/uv.toml"
72
+ ```
73
+
74
+ Use uv's own `UV_CONFIG_FILE` environment variable if you want to configure uv
75
+ through the environment.
76
+
54
77
  ## Deploy from VCS
55
78
 
56
79
  `--package` is passed directly to `uv tool install`, so VCS package specs are
@@ -24,6 +24,12 @@ Show shell script deployment options:
24
24
  module-manager deploy-script --help
25
25
  ```
26
26
 
27
+ Show collective environment deployment options:
28
+
29
+ ```sh
30
+ module-manager deploy-env --help
31
+ ```
32
+
27
33
  Show uninstall options:
28
34
 
29
35
  ```sh
@@ -38,6 +44,7 @@ module-manager deploy-python NAME VERSION \
38
44
  [--python PYTHON] \
39
45
  [--index URL] \
40
46
  [--find-links PATH_OR_URL] \
47
+ [--uv-config-file PATH] \
41
48
  [--prefix PATH] \
42
49
  [--module-root PATH] \
43
50
  [--no-default] \
@@ -51,7 +58,8 @@ module-manager deploy-rust NAME VERSION \
51
58
  [--binary PATH] \
52
59
  [--prefix PATH] \
53
60
  [--module-root PATH] \
54
- [--no-default]
61
+ [--no-default] \
62
+ [--dry-run]
55
63
  ```
56
64
 
57
65
  ## Shell Script Command
@@ -61,7 +69,19 @@ module-manager deploy-script NAME VERSION \
61
69
  [--script PATH] \
62
70
  [--prefix PATH] \
63
71
  [--module-root PATH] \
64
- [--no-default]
72
+ [--no-default] \
73
+ [--dry-run]
74
+ ```
75
+
76
+ ## Collective Environment Command
77
+
78
+ ```sh
79
+ module-manager deploy-env \
80
+ --file MANIFEST.toml \
81
+ [--prefix PATH] \
82
+ [--module-root PATH] \
83
+ [--no-default] \
84
+ [--dry-run]
65
85
  ```
66
86
 
67
87
  ## Uninstall Command
@@ -26,3 +26,13 @@ The generated modulefile prepends the deployed `bin` directory to `PATH`.
26
26
  Deployments make the deployed version the module default, so `module load
27
27
  ripgrep` resolves to `ripgrep/14.1.1`. Add `--no-default` to leave the current
28
28
  default unchanged.
29
+
30
+ Preview the paths that would be written without copying the binary:
31
+
32
+ ```sh
33
+ module-manager deploy-rust ripgrep 14.1.1 \
34
+ --binary ./target/release/rg \
35
+ --prefix /prod/tools \
36
+ --module-root /prod/modulefiles \
37
+ --dry-run
38
+ ```
@@ -27,3 +27,13 @@ the deployed `bin` directory to `PATH`.
27
27
  Deployments make the deployed version the module default, so `module load
28
28
  my-tool` resolves to `my-tool/1.0.0`. Add `--no-default` to leave the current
29
29
  default unchanged.
30
+
31
+ Preview the paths that would be written without copying the script:
32
+
33
+ ```sh
34
+ module-manager deploy-script my-tool 1.0.0 \
35
+ --script ./scripts/my-tool \
36
+ --prefix /prod/tools \
37
+ --module-root /prod/modulefiles \
38
+ --dry-run
39
+ ```
@@ -1,5 +1,5 @@
1
1
  site_name: module-manager
2
- site_description: Deploy Python, Rust, and shell CLI tools behind GNU environment modulefiles.
2
+ site_description: Deploy Python, Rust, shell, and collective CLI environments behind GNU environment modulefiles.
3
3
  repo_url: https://github.com/ellis/module-manager
4
4
 
5
5
  theme:
@@ -46,6 +46,7 @@ nav:
46
46
  - Python Tools: python-tools.md
47
47
  - Rust Tools: rust-tools.md
48
48
  - Shell Scripts: shell-tools.md
49
+ - Collective Environments: collective-environments.md
49
50
  - Uninstall: uninstall.md
50
51
  - Environment Modules: environment-modules.md
51
52
  - Local Development: development.md
@@ -1,3 +1,3 @@
1
1
  """Deployment helpers for HPC environment module files."""
2
2
 
3
- __version__ = "0.1.0"
3
+ __version__ = "0.4.0"