mnenv 0.1.0 → 0.1.2
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.
- checksums.yaml +4 -4
- data/Gemfile +3 -0
- data/PROPOSAL.md +197 -0
- data/README.adoc +168 -461
- data/Rakefile +7 -4
- data/bin/Install-Mnenv.ps1 +145 -0
- data/bin/mnenv-installer +72 -0
- data/completions/bash +47 -0
- data/completions/fish +29 -0
- data/completions/powershell.ps1 +94 -0
- data/completions/zsh +43 -0
- data/lib/mnenv/binary_repository.rb +189 -0
- data/lib/mnenv/chocolatey.rb +7 -0
- data/lib/mnenv/cli.rb +110 -10
- data/lib/mnenv/commands/available_command.rb +169 -0
- data/lib/mnenv/commands/chocolatey_command.rb +4 -5
- data/lib/mnenv/commands/gemfile_command.rb +4 -5
- data/lib/mnenv/commands/homebrew_command.rb +4 -5
- data/lib/mnenv/commands/install_command.rb +234 -0
- data/lib/mnenv/commands/snap_command.rb +5 -7
- data/lib/mnenv/commands/uninstall_command.rb +111 -0
- data/lib/mnenv/commands/version_command.rb +167 -0
- data/lib/mnenv/commands.rb +9 -4
- data/lib/mnenv/gemfile/extractor.rb +10 -3
- data/lib/mnenv/gemfile.rb +8 -0
- data/lib/mnenv/gemfile_repository.rb +0 -2
- data/lib/mnenv/homebrew.rb +7 -0
- data/lib/mnenv/installer/base.rb +62 -0
- data/lib/mnenv/installer/factory.rb +46 -0
- data/lib/mnenv/installer.rb +12 -0
- data/lib/mnenv/installers/binary_installer.rb +242 -0
- data/lib/mnenv/installers/gemfile_installer.rb +76 -0
- data/lib/mnenv/json_formatter.rb +3 -13
- data/lib/mnenv/logger.rb +9 -1
- data/lib/mnenv/models/binary_version.rb +78 -0
- data/lib/mnenv/models/chocolatey_version.rb +7 -0
- data/lib/mnenv/models/gemfile_version.rb +19 -5
- data/lib/mnenv/models/homebrew_version.rb +7 -0
- data/lib/mnenv/models/snap_version.rb +8 -0
- data/lib/mnenv/models/version.rb +16 -0
- data/lib/mnenv/models.rb +7 -5
- data/lib/mnenv/paths.rb +69 -0
- data/lib/mnenv/platform_detector.rb +109 -0
- data/lib/mnenv/repository.rb +50 -35
- data/lib/mnenv/resolver +72 -0
- data/lib/mnenv/shells/base.rb +32 -0
- data/lib/mnenv/shells/bash.rb +72 -0
- data/lib/mnenv/shells/cmd.rb +108 -0
- data/lib/mnenv/shells/factory.rb +82 -0
- data/lib/mnenv/shells/power_shell.rb +110 -0
- data/lib/mnenv/shim_manager.rb +121 -0
- data/lib/mnenv/snap.rb +7 -0
- data/lib/mnenv/snap_repository.rb +2 -19
- data/lib/mnenv/source_registry.rb +69 -0
- data/lib/mnenv/sources.rb +46 -0
- data/lib/mnenv/version.rb +1 -1
- data/lib/mnenv/version_resolver.rb +108 -0
- data/lib/mnenv/versions_manager.rb +92 -0
- data/lib/mnenv.rb +6 -0
- data/mnenv.gemspec +4 -1
- data/scripts/cross-source-switching-test.sh +214 -0
- data/scripts/integration-test.sh +89 -0
- data/scripts/version-switching-test.sh +151 -0
- metadata +85 -247
- data/data/chocolatey/versions.yaml +0 -812
- data/data/gemfile/v1.1.6/Gemfile +0 -4
- data/data/gemfile/v1.1.6/Gemfile.lock.archived +0 -232
- data/data/gemfile/v1.1.7/Gemfile +0 -4
- data/data/gemfile/v1.1.7/Gemfile.lock.archived +0 -235
- data/data/gemfile/v1.1.8/Gemfile +0 -4
- data/data/gemfile/v1.1.8/Gemfile.lock.archived +0 -238
- data/data/gemfile/v1.10.0/Gemfile +0 -5
- data/data/gemfile/v1.10.0/Gemfile.lock.archived +0 -930
- data/data/gemfile/v1.10.1/Gemfile +0 -5
- data/data/gemfile/v1.10.1/Gemfile.lock.archived +0 -929
- data/data/gemfile/v1.10.10/Gemfile +0 -5
- data/data/gemfile/v1.10.10/Gemfile.lock.archived +0 -973
- data/data/gemfile/v1.10.11/Gemfile +0 -5
- data/data/gemfile/v1.10.11/Gemfile.lock.archived +0 -975
- data/data/gemfile/v1.10.2/Gemfile +0 -5
- data/data/gemfile/v1.10.2/Gemfile.lock.archived +0 -939
- data/data/gemfile/v1.10.3/Gemfile +0 -5
- data/data/gemfile/v1.10.3/Gemfile.lock.archived +0 -946
- data/data/gemfile/v1.10.5/Gemfile +0 -5
- data/data/gemfile/v1.10.5/Gemfile.lock.archived +0 -958
- data/data/gemfile/v1.10.6/Gemfile +0 -5
- data/data/gemfile/v1.10.6/Gemfile.lock.archived +0 -969
- data/data/gemfile/v1.10.7/Gemfile +0 -5
- data/data/gemfile/v1.10.7/Gemfile.lock.archived +0 -969
- data/data/gemfile/v1.10.8/Gemfile +0 -5
- data/data/gemfile/v1.10.8/Gemfile.lock.archived +0 -968
- data/data/gemfile/v1.10.9/Gemfile +0 -5
- data/data/gemfile/v1.10.9/Gemfile.lock.archived +0 -972
- data/data/gemfile/v1.11.0/Gemfile +0 -5
- data/data/gemfile/v1.11.0/Gemfile.lock.archived +0 -971
- data/data/gemfile/v1.11.1/Gemfile +0 -5
- data/data/gemfile/v1.11.1/Gemfile.lock.archived +0 -975
- data/data/gemfile/v1.11.4/Gemfile +0 -5
- data/data/gemfile/v1.11.4/Gemfile.lock.archived +0 -1046
- data/data/gemfile/v1.11.5/Gemfile +0 -5
- data/data/gemfile/v1.11.5/Gemfile.lock.archived +0 -1047
- data/data/gemfile/v1.12.10/Gemfile +0 -3
- data/data/gemfile/v1.12.10/Gemfile.lock.archived +0 -1073
- data/data/gemfile/v1.12.3/Gemfile +0 -3
- data/data/gemfile/v1.12.3/Gemfile.lock.archived +0 -1050
- data/data/gemfile/v1.12.4/Gemfile +0 -3
- data/data/gemfile/v1.12.4/Gemfile.lock.archived +0 -1056
- data/data/gemfile/v1.12.5/Gemfile +0 -3
- data/data/gemfile/v1.12.5/Gemfile.lock.archived +0 -1054
- data/data/gemfile/v1.12.6/Gemfile +0 -3
- data/data/gemfile/v1.12.6/Gemfile.lock.archived +0 -1056
- data/data/gemfile/v1.12.8/Gemfile +0 -3
- data/data/gemfile/v1.12.8/Gemfile.lock.archived +0 -1063
- data/data/gemfile/v1.13.0/Gemfile +0 -3
- data/data/gemfile/v1.13.0/Gemfile.lock.archived +0 -1074
- data/data/gemfile/v1.13.2/Gemfile +0 -3
- data/data/gemfile/v1.13.2/Gemfile.lock.archived +0 -899
- data/data/gemfile/v1.13.3/Gemfile +0 -3
- data/data/gemfile/v1.13.3/Gemfile.lock.archived +0 -938
- data/data/gemfile/v1.13.4/Gemfile +0 -3
- data/data/gemfile/v1.13.4/Gemfile.lock.archived +0 -938
- data/data/gemfile/v1.13.5/Gemfile +0 -3
- data/data/gemfile/v1.13.5/Gemfile.lock.archived +0 -944
- data/data/gemfile/v1.13.7/Gemfile +0 -3
- data/data/gemfile/v1.13.7/Gemfile.lock.archived +0 -944
- data/data/gemfile/v1.13.8/Gemfile +0 -3
- data/data/gemfile/v1.13.8/Gemfile.lock.archived +0 -944
- data/data/gemfile/v1.13.9/Gemfile +0 -3
- data/data/gemfile/v1.13.9/Gemfile.lock.archived +0 -956
- data/data/gemfile/v1.14.3/Gemfile +0 -3
- data/data/gemfile/v1.14.3/Gemfile.lock.archived +0 -950
- data/data/gemfile/v1.2.12/Gemfile +0 -3
- data/data/gemfile/v1.2.12/Gemfile.lock.archived +0 -283
- data/data/gemfile/v1.2.2/Gemfile +0 -4
- data/data/gemfile/v1.2.2/Gemfile.lock.archived +0 -224
- data/data/gemfile/v1.2.3/Gemfile +0 -4
- data/data/gemfile/v1.2.3/Gemfile.lock.archived +0 -231
- data/data/gemfile/v1.2.6/Gemfile +0 -4
- data/data/gemfile/v1.2.6/Gemfile.lock.archived +0 -239
- data/data/gemfile/v1.2.8/Gemfile +0 -4
- data/data/gemfile/v1.2.8/Gemfile.lock.archived +0 -233
- data/data/gemfile/v1.2.9/Gemfile +0 -4
- data/data/gemfile/v1.2.9/Gemfile.lock.archived +0 -245
- data/data/gemfile/v1.3.1/Gemfile +0 -3
- data/data/gemfile/v1.3.1/Gemfile.lock.archived +0 -296
- data/data/gemfile/v1.3.2/Gemfile +0 -3
- data/data/gemfile/v1.3.2/Gemfile.lock.archived +0 -296
- data/data/gemfile/v1.3.4/Gemfile +0 -3
- data/data/gemfile/v1.3.4/Gemfile.lock.archived +0 -284
- data/data/gemfile/v1.3.5/Gemfile +0 -3
- data/data/gemfile/v1.3.5/Gemfile.lock.archived +0 -284
- data/data/gemfile/v1.3.6/Gemfile +0 -3
- data/data/gemfile/v1.3.6/Gemfile.lock.archived +0 -286
- data/data/gemfile/v1.3.9/Gemfile +0 -3
- data/data/gemfile/v1.3.9/Gemfile.lock.archived +0 -334
- data/data/gemfile/v1.4.0/Gemfile +0 -3
- data/data/gemfile/v1.4.0/Gemfile.lock.archived +0 -330
- data/data/gemfile/v1.4.10/Gemfile +0 -4
- data/data/gemfile/v1.4.10/Gemfile.lock.archived +0 -461
- data/data/gemfile/v1.4.11/Gemfile +0 -4
- data/data/gemfile/v1.4.11/Gemfile.lock.archived +0 -452
- data/data/gemfile/v1.4.12/Gemfile +0 -4
- data/data/gemfile/v1.4.12/Gemfile.lock.archived +0 -452
- data/data/gemfile/v1.4.13/Gemfile +0 -4
- data/data/gemfile/v1.4.13/Gemfile.lock.archived +0 -455
- data/data/gemfile/v1.4.14/Gemfile +0 -4
- data/data/gemfile/v1.4.14/Gemfile.lock.archived +0 -456
- data/data/gemfile/v1.4.18/Gemfile +0 -3
- data/data/gemfile/v1.4.18/Gemfile.lock.archived +0 -486
- data/data/gemfile/v1.4.3/Gemfile +0 -3
- data/data/gemfile/v1.4.3/Gemfile.lock.archived +0 -339
- data/data/gemfile/v1.4.4/Gemfile +0 -3
- data/data/gemfile/v1.4.4/Gemfile.lock.archived +0 -339
- data/data/gemfile/v1.4.5/Gemfile +0 -3
- data/data/gemfile/v1.4.5/Gemfile.lock.archived +0 -348
- data/data/gemfile/v1.4.6/Gemfile +0 -3
- data/data/gemfile/v1.4.6/Gemfile.lock.archived +0 -357
- data/data/gemfile/v1.4.7/Gemfile +0 -3
- data/data/gemfile/v1.4.7/Gemfile.lock.archived +0 -391
- data/data/gemfile/v1.4.8/Gemfile +0 -3
- data/data/gemfile/v1.4.8/Gemfile.lock.archived +0 -445
- data/data/gemfile/v1.4.9/Gemfile +0 -3
- data/data/gemfile/v1.4.9/Gemfile.lock.archived +0 -448
- data/data/gemfile/v1.5.0/Gemfile +0 -3
- data/data/gemfile/v1.5.0/Gemfile.lock.archived +0 -478
- data/data/gemfile/v1.5.10/Gemfile +0 -3
- data/data/gemfile/v1.5.10/Gemfile.lock.archived +0 -668
- data/data/gemfile/v1.5.11/Gemfile +0 -3
- data/data/gemfile/v1.5.11/Gemfile.lock.archived +0 -668
- data/data/gemfile/v1.5.15/Gemfile +0 -3
- data/data/gemfile/v1.5.15/Gemfile.lock.archived +0 -686
- data/data/gemfile/v1.5.16/Gemfile +0 -3
- data/data/gemfile/v1.5.16/Gemfile.lock.archived +0 -684
- data/data/gemfile/v1.5.17/Gemfile +0 -3
- data/data/gemfile/v1.5.17/Gemfile.lock.archived +0 -684
- data/data/gemfile/v1.5.18/Gemfile +0 -5
- data/data/gemfile/v1.5.18/Gemfile.lock.archived +0 -691
- data/data/gemfile/v1.5.19/Gemfile +0 -5
- data/data/gemfile/v1.5.19/Gemfile.lock.archived +0 -703
- data/data/gemfile/v1.5.20/Gemfile +0 -5
- data/data/gemfile/v1.5.20/Gemfile.lock.archived +0 -703
- data/data/gemfile/v1.5.21/Gemfile +0 -5
- data/data/gemfile/v1.5.21/Gemfile.lock.archived +0 -707
- data/data/gemfile/v1.5.22/Gemfile +0 -5
- data/data/gemfile/v1.5.22/Gemfile.lock.archived +0 -707
- data/data/gemfile/v1.5.23/Gemfile +0 -5
- data/data/gemfile/v1.5.23/Gemfile.lock.archived +0 -711
- data/data/gemfile/v1.5.24/Gemfile +0 -5
- data/data/gemfile/v1.5.24/Gemfile.lock.archived +0 -711
- data/data/gemfile/v1.5.3/Gemfile +0 -3
- data/data/gemfile/v1.5.3/Gemfile.lock.archived +0 -651
- data/data/gemfile/v1.5.4/Gemfile +0 -3
- data/data/gemfile/v1.5.4/Gemfile.lock.archived +0 -657
- data/data/gemfile/v1.5.5/Gemfile +0 -3
- data/data/gemfile/v1.5.5/Gemfile.lock.archived +0 -657
- data/data/gemfile/v1.5.6/Gemfile +0 -3
- data/data/gemfile/v1.5.6/Gemfile.lock.archived +0 -657
- data/data/gemfile/v1.5.7/Gemfile +0 -3
- data/data/gemfile/v1.5.7/Gemfile.lock.archived +0 -657
- data/data/gemfile/v1.5.8/Gemfile +0 -3
- data/data/gemfile/v1.5.8/Gemfile.lock.archived +0 -655
- data/data/gemfile/v1.5.9/Gemfile +0 -3
- data/data/gemfile/v1.5.9/Gemfile.lock.archived +0 -656
- data/data/gemfile/v1.6.1/Gemfile +0 -5
- data/data/gemfile/v1.6.1/Gemfile.lock.archived +0 -721
- data/data/gemfile/v1.6.10/Gemfile +0 -5
- data/data/gemfile/v1.6.10/Gemfile.lock.archived +0 -744
- data/data/gemfile/v1.6.11/Gemfile +0 -5
- data/data/gemfile/v1.6.11/Gemfile.lock.archived +0 -744
- data/data/gemfile/v1.6.12/Gemfile +0 -5
- data/data/gemfile/v1.6.12/Gemfile.lock.archived +0 -745
- data/data/gemfile/v1.6.13/Gemfile +0 -5
- data/data/gemfile/v1.6.13/Gemfile.lock.archived +0 -745
- data/data/gemfile/v1.6.14/Gemfile +0 -5
- data/data/gemfile/v1.6.14/Gemfile.lock.archived +0 -754
- data/data/gemfile/v1.6.15/Gemfile +0 -5
- data/data/gemfile/v1.6.15/Gemfile.lock.archived +0 -757
- data/data/gemfile/v1.6.2/Gemfile +0 -5
- data/data/gemfile/v1.6.2/Gemfile.lock.archived +0 -718
- data/data/gemfile/v1.6.3/Gemfile +0 -5
- data/data/gemfile/v1.6.3/Gemfile.lock.archived +0 -728
- data/data/gemfile/v1.6.4/Gemfile +0 -5
- data/data/gemfile/v1.6.4/Gemfile.lock.archived +0 -730
- data/data/gemfile/v1.6.5/Gemfile +0 -5
- data/data/gemfile/v1.6.5/Gemfile.lock.archived +0 -733
- data/data/gemfile/v1.6.6/Gemfile +0 -5
- data/data/gemfile/v1.6.6/Gemfile.lock.archived +0 -733
- data/data/gemfile/v1.6.7/Gemfile +0 -5
- data/data/gemfile/v1.6.7/Gemfile.lock.archived +0 -733
- data/data/gemfile/v1.6.9/Gemfile +0 -5
- data/data/gemfile/v1.6.9/Gemfile.lock.archived +0 -744
- data/data/gemfile/v1.7.0/Gemfile +0 -5
- data/data/gemfile/v1.7.0/Gemfile.lock.archived +0 -750
- data/data/gemfile/v1.7.1/Gemfile +0 -5
- data/data/gemfile/v1.7.1/Gemfile.lock.archived +0 -750
- data/data/gemfile/v1.7.2/Gemfile +0 -5
- data/data/gemfile/v1.7.2/Gemfile.lock.archived +0 -747
- data/data/gemfile/v1.7.3/Gemfile +0 -5
- data/data/gemfile/v1.7.3/Gemfile.lock.archived +0 -755
- data/data/gemfile/v1.7.4/Gemfile +0 -5
- data/data/gemfile/v1.7.4/Gemfile.lock.archived +0 -756
- data/data/gemfile/v1.7.5/Gemfile +0 -5
- data/data/gemfile/v1.7.5/Gemfile.lock.archived +0 -759
- data/data/gemfile/v1.7.6/Gemfile +0 -5
- data/data/gemfile/v1.7.6/Gemfile.lock.archived +0 -768
- data/data/gemfile/v1.8.10/Gemfile +0 -5
- data/data/gemfile/v1.8.10/Gemfile.lock.archived +0 -792
- data/data/gemfile/v1.8.11/Gemfile +0 -5
- data/data/gemfile/v1.8.11/Gemfile.lock.archived +0 -862
- data/data/gemfile/v1.8.3/Gemfile +0 -5
- data/data/gemfile/v1.8.3/Gemfile.lock.archived +0 -773
- data/data/gemfile/v1.8.4/Gemfile +0 -5
- data/data/gemfile/v1.8.4/Gemfile.lock.archived +0 -768
- data/data/gemfile/v1.8.5/Gemfile +0 -5
- data/data/gemfile/v1.8.5/Gemfile.lock.archived +0 -768
- data/data/gemfile/v1.8.6/Gemfile +0 -5
- data/data/gemfile/v1.8.6/Gemfile.lock.archived +0 -777
- data/data/gemfile/v1.8.7/Gemfile +0 -5
- data/data/gemfile/v1.8.7/Gemfile.lock.archived +0 -777
- data/data/gemfile/v1.8.8/Gemfile +0 -5
- data/data/gemfile/v1.8.8/Gemfile.lock.archived +0 -778
- data/data/gemfile/v1.8.9/Gemfile +0 -5
- data/data/gemfile/v1.8.9/Gemfile.lock.archived +0 -775
- data/data/gemfile/v1.9.0/Gemfile +0 -5
- data/data/gemfile/v1.9.0/Gemfile.lock.archived +0 -871
- data/data/gemfile/v1.9.1/Gemfile +0 -5
- data/data/gemfile/v1.9.1/Gemfile.lock.archived +0 -906
- data/data/gemfile/v1.9.2/Gemfile +0 -5
- data/data/gemfile/v1.9.2/Gemfile.lock.archived +0 -898
- data/data/gemfile/v1.9.3/Gemfile +0 -5
- data/data/gemfile/v1.9.3/Gemfile.lock.archived +0 -898
- data/data/gemfile/v1.9.4/Gemfile +0 -5
- data/data/gemfile/v1.9.4/Gemfile.lock.archived +0 -901
- data/data/gemfile/v1.9.5/Gemfile +0 -5
- data/data/gemfile/v1.9.5/Gemfile.lock.archived +0 -903
- data/data/gemfile/v1.9.6/Gemfile +0 -5
- data/data/gemfile/v1.9.6/Gemfile.lock.archived +0 -900
- data/data/gemfile/v1.9.7/Gemfile +0 -5
- data/data/gemfile/v1.9.7/Gemfile.lock.archived +0 -922
- data/data/gemfile/v1.9.8/Gemfile +0 -5
- data/data/gemfile/v1.9.8/Gemfile.lock.archived +0 -933
- data/data/gemfile/versions.yaml +0 -751
- data/data/homebrew/versions.yaml +0 -567
- data/data/snap/github_tags.json +0 -42
- data/data/snap/versions.yaml +0 -589
- data/snapcraft-list-copied-from-site.md +0 -101
data/README.adoc
CHANGED
|
@@ -1,527 +1,270 @@
|
|
|
1
|
-
=
|
|
1
|
+
= mnenv
|
|
2
2
|
|
|
3
|
-
image:https://img.shields.io/
|
|
4
|
-
image:https://
|
|
3
|
+
image:https://img.shields.io/gem/v/mnenv.svg[RubyGems Version]
|
|
4
|
+
image:https://img.shields.io/github/license/metanorma/mnenv.svg[License]
|
|
5
|
+
image:https://github.com/metanorma/mnenv/actions/workflows/rake.yml/badge.svg["Build", link="https://github.com/metanorma/mnenv/actions/workflows/rake.yml"]
|
|
5
6
|
|
|
6
|
-
Version
|
|
7
|
+
Version manager for Metanorma, similar to rbenv/pyenv.
|
|
7
8
|
|
|
8
9
|
== Purpose
|
|
9
10
|
|
|
10
|
-
|
|
11
|
+
mnenv is a version manager for Metanorma that allows you to:
|
|
11
12
|
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* **Chocolatey** - Windows Chocolatey packages
|
|
13
|
+
* Install and manage multiple Metanorma versions
|
|
14
|
+
* Switch between versions globally, per-project, or per-shell session
|
|
15
|
+
* Install from multiple sources: RubyGems (gemfile) or pre-built binaries
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
=== Historical Gemfile Lock Archive
|
|
20
|
-
|
|
21
|
-
This repository also stores Gemfile and Gemfile.lock.archived files extracted from
|
|
22
|
-
https://hub.docker.com/r/metanorma/metanorma[Docker Hub: metanorma/metanorma]
|
|
23
|
-
Docker containers for each version of Metanorma.
|
|
24
|
-
|
|
25
|
-
When deploying or using Metanorma, you may need to install the exact same gem
|
|
26
|
-
versions that are used in a specific Docker container release. This repository
|
|
27
|
-
provides the Gemfile and Gemfile.lock.archived files for each version of the
|
|
28
|
-
metanorma/metanorma Docker image, allowing you to replicate the exact gem
|
|
29
|
-
dependency set.
|
|
17
|
+
Version data is sourced from the
|
|
18
|
+
https://github.com/metanorma/versions[metanorma/versions] repository.
|
|
30
19
|
|
|
31
20
|
== Features
|
|
32
21
|
|
|
33
|
-
* *
|
|
34
|
-
* *
|
|
35
|
-
* *
|
|
36
|
-
* *
|
|
37
|
-
* *
|
|
22
|
+
* *Multiple Installation Sources* - Install from RubyGems (gemfile) or pre-built binaries
|
|
23
|
+
* *Version Switching* - Switch versions globally, per-project, or per-shell session
|
|
24
|
+
* *Shell Integration* - Automatic PATH management via shims
|
|
25
|
+
* *Cross-Platform* - Works on Linux, macOS, and Windows
|
|
26
|
+
* *Offline Capable* - Version data cached locally for fast operation
|
|
38
27
|
|
|
39
|
-
==
|
|
28
|
+
== Installation
|
|
40
29
|
|
|
41
|
-
|
|
30
|
+
=== As a Ruby gem
|
|
42
31
|
|
|
43
32
|
[source,shell]
|
|
44
33
|
----
|
|
45
|
-
|
|
46
|
-
cd versions
|
|
47
|
-
bundle install
|
|
34
|
+
gem install mnenv
|
|
48
35
|
----
|
|
49
36
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
=== CLI commands
|
|
53
|
-
|
|
54
|
-
The `mnenv` command provides subcommands for each platform:
|
|
37
|
+
=== From source
|
|
55
38
|
|
|
56
39
|
[source,shell]
|
|
57
40
|
----
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
bundle exec exe/mnenv snap list
|
|
63
|
-
|
|
64
|
-
# List Homebrew versions
|
|
65
|
-
bundle exec exe/mnenv homebrew list
|
|
66
|
-
|
|
67
|
-
# List Chocolatey versions
|
|
68
|
-
bundle exec exe/mnenv chocolatey list
|
|
69
|
-
|
|
70
|
-
# List all versions in text format
|
|
71
|
-
bundle exec exe/mnenv list-all
|
|
72
|
-
|
|
73
|
-
# List all versions in JSON format
|
|
74
|
-
bundle exec exe/mnenv list-all -f json
|
|
75
|
-
|
|
76
|
-
# Get info for a specific version
|
|
77
|
-
bundle exec exe/mnenv info gemfile 1.14.4
|
|
78
|
-
|
|
79
|
-
# Show mnenv version
|
|
80
|
-
bundle exec exe/mnenv version
|
|
41
|
+
git clone https://github.com/metanorma/mnenv.git
|
|
42
|
+
cd mnenv
|
|
43
|
+
bundle install
|
|
44
|
+
bundle exec rake install
|
|
81
45
|
----
|
|
82
46
|
|
|
83
|
-
===
|
|
47
|
+
=== Shell setup
|
|
84
48
|
|
|
85
|
-
|
|
49
|
+
After installation, add mnenv shims to your PATH:
|
|
86
50
|
|
|
87
|
-
|
|
88
|
-
* *revamp* - Re-fetch all versions, replacing existing data
|
|
89
|
-
* *update VERSION* - Update a specific version
|
|
51
|
+
==== Bash
|
|
90
52
|
|
|
91
|
-
|
|
92
|
-
[source,shell]
|
|
93
|
-
----
|
|
94
|
-
# Extract only missing versions (incremental mode)
|
|
95
|
-
bundle exec exe/mnenv gemfile refresh
|
|
96
|
-
|
|
97
|
-
# Replace a single version
|
|
98
|
-
bundle exec exe/mnenv gemfile update 1.14.4
|
|
99
|
-
|
|
100
|
-
# Re-extract all versions
|
|
101
|
-
bundle exec exe/mnenv gemfile revamp
|
|
102
|
-
----
|
|
53
|
+
Add to `~/.bashrc`:
|
|
103
54
|
|
|
104
|
-
.Snap updates
|
|
105
55
|
[source,shell]
|
|
106
56
|
----
|
|
107
|
-
|
|
108
|
-
bundle exec exe/mnenv snap refresh
|
|
109
|
-
|
|
110
|
-
# Update a specific Snap version (updates all arch/channel combinations)
|
|
111
|
-
bundle exec exe/mnenv snap update 1.14.4
|
|
112
|
-
|
|
113
|
-
NOTE: Snap does not support 'revamp' mode because historical revision data
|
|
114
|
-
would be lost. The YAML file (data/snap/versions.yaml) is the single source
|
|
115
|
-
of truth containing both historical Snapcraft revisions and current API data.
|
|
116
|
-
----
|
|
117
|
-
|
|
118
|
-
.Homebrew updates
|
|
119
|
-
[source,shell]
|
|
57
|
+
export PATH="$HOME/.mnenv/shims:$PATH"
|
|
120
58
|
----
|
|
121
|
-
# Fetch and add new Homebrew versions
|
|
122
|
-
bundle exec exe/mnenv homebrew refresh
|
|
123
59
|
|
|
124
|
-
|
|
125
|
-
bundle exec exe/mnenv homebrew update 1.13.0
|
|
60
|
+
==== Zsh
|
|
126
61
|
|
|
127
|
-
|
|
128
|
-
bundle exec exe/mnenv homebrew revamp
|
|
129
|
-
----
|
|
62
|
+
Add to `~/.zshrc`:
|
|
130
63
|
|
|
131
|
-
.Chocolatey updates
|
|
132
64
|
[source,shell]
|
|
133
65
|
----
|
|
134
|
-
|
|
135
|
-
bundle exec exe/mnenv chocolatey refresh
|
|
136
|
-
|
|
137
|
-
# Update a specific Chocolatey version
|
|
138
|
-
bundle exec exe/mnenv chocolatey update 1.14.4
|
|
139
|
-
|
|
140
|
-
# Re-fetch all Chocolatey versions
|
|
141
|
-
bundle exec exe/mnenv chocolatey revamp
|
|
66
|
+
export PATH="$HOME/.mnenv/shims:$PATH"
|
|
142
67
|
----
|
|
143
68
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
incremental:: Extract only versions that are not present locally. This is the default mode and is used for daily scheduled runs.
|
|
147
|
-
|
|
148
|
-
replace:: Re-extract a single version, replacing any existing files. Use this to fix corrupted or outdated extractions.
|
|
149
|
-
|
|
150
|
-
revamp:: Re-extract all versions, replacing all existing files. Use this when the data model changes or you need to refresh all versions.
|
|
151
|
-
|
|
152
|
-
=== Ruby API
|
|
153
|
-
|
|
154
|
-
Query versions programmatically:
|
|
69
|
+
==== Fish
|
|
155
70
|
|
|
156
|
-
|
|
157
|
-
----
|
|
158
|
-
require 'mnenv'
|
|
159
|
-
|
|
160
|
-
# Gemfile versions
|
|
161
|
-
gemfile_repo = Mnenv::GemfileRepository.new
|
|
162
|
-
gemfile_versions = gemfile_repo.all
|
|
163
|
-
gemfile_latest = gemfile_repo.latest
|
|
164
|
-
|
|
165
|
-
# Snap versions
|
|
166
|
-
snap_repo = Mnenv::SnapRepository.new
|
|
167
|
-
snap_versions = snap_repo.all
|
|
168
|
-
|
|
169
|
-
# Homebrew versions
|
|
170
|
-
homebrew_repo = Mnenv::HomebrewRepository.new
|
|
171
|
-
homebrew_versions = homebrew_repo.all
|
|
172
|
-
|
|
173
|
-
# Chocolatey versions
|
|
174
|
-
chocolatey_repo = Mnenv::ChocolateyRepository.new
|
|
175
|
-
chocolatey_versions = chocolatey_repo.all
|
|
176
|
-
----
|
|
177
|
-
|
|
178
|
-
=== JSON output
|
|
179
|
-
|
|
180
|
-
For GitHub Actions integration, output JSON format:
|
|
71
|
+
Add to `~/.config/fish/config.fish`:
|
|
181
72
|
|
|
182
73
|
[source,shell]
|
|
183
74
|
----
|
|
184
|
-
|
|
185
|
-
----
|
|
186
|
-
|
|
187
|
-
Returns:
|
|
188
|
-
|
|
189
|
-
[source,json]
|
|
190
|
-
----
|
|
191
|
-
{
|
|
192
|
-
"gemfile": {
|
|
193
|
-
"count": 124,
|
|
194
|
-
"latest": "1.14.4",
|
|
195
|
-
"versions": [...]
|
|
196
|
-
},
|
|
197
|
-
"snap": {
|
|
198
|
-
"count": 14,
|
|
199
|
-
"latest": "1.14.4",
|
|
200
|
-
"versions": [...]
|
|
201
|
-
},
|
|
202
|
-
"homebrew": {
|
|
203
|
-
"count": 56,
|
|
204
|
-
"latest": "1.13.0",
|
|
205
|
-
"versions": [...]
|
|
206
|
-
},
|
|
207
|
-
"chocolatey": {
|
|
208
|
-
"count": 144,
|
|
209
|
-
"latest": "1.14.4",
|
|
210
|
-
"versions": [...]
|
|
211
|
-
}
|
|
212
|
-
}
|
|
75
|
+
set -gx PATH $HOME/.mnenv/shims $PATH
|
|
213
76
|
----
|
|
214
77
|
|
|
215
|
-
|
|
78
|
+
==== PowerShell (Windows)
|
|
216
79
|
|
|
217
|
-
|
|
80
|
+
Add to your PowerShell profile:
|
|
218
81
|
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
[source,shell]
|
|
82
|
+
[source,powershell]
|
|
222
83
|
----
|
|
223
|
-
|
|
224
|
-
cat data/gemfile/versions.yaml
|
|
225
|
-
|
|
226
|
-
# View all Snap versions with revisions
|
|
227
|
-
cat data/snap/versions.yaml
|
|
228
|
-
|
|
229
|
-
# View all Homebrew versions
|
|
230
|
-
cat data/homebrew/versions.yaml
|
|
231
|
-
|
|
232
|
-
# View all Chocolatey versions
|
|
233
|
-
cat data/chocolatey/versions.yaml
|
|
84
|
+
$env:PATH = "$env:USERPROFILE\.mnenv\shims;$env:PATH"
|
|
234
85
|
----
|
|
235
86
|
|
|
236
|
-
|
|
87
|
+
== Usage
|
|
88
|
+
|
|
89
|
+
=== List available versions
|
|
237
90
|
|
|
238
91
|
[source,shell]
|
|
239
92
|
----
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
yq '.metadata.latest_version' data/homebrew/versions.yaml
|
|
244
|
-
yq '.metadata.latest_version' data/chocolatey/versions.yaml
|
|
245
|
-
|
|
246
|
-
# Get version count
|
|
247
|
-
yq '.metadata.count' data/gemfile/versions.yaml
|
|
248
|
-
|
|
249
|
-
# Get all version numbers
|
|
250
|
-
yq '.versions[].version' data/gemfile/versions.yaml
|
|
251
|
-
|
|
252
|
-
# Get specific version info (Snap example with revision)
|
|
253
|
-
yq '.versions[] | select(.version == "1.14.4")' data/snap/versions.yaml
|
|
93
|
+
mnenv install --list
|
|
94
|
+
# or
|
|
95
|
+
mnenv install -l
|
|
254
96
|
----
|
|
255
97
|
|
|
256
|
-
|
|
98
|
+
Shows all available Metanorma versions with platform availability:
|
|
257
99
|
|
|
258
|
-
[source,ruby]
|
|
259
100
|
----
|
|
260
|
-
|
|
101
|
+
Available Metanorma versions:
|
|
102
|
+
(gemfile = source build, binary = prebuilt for specific platforms)
|
|
261
103
|
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
104
|
+
1.14.4 (gemfile, binary [linux, macos*, windows])
|
|
105
|
+
1.14.3 (gemfile, binary [linux, macos*, windows])
|
|
106
|
+
1.14.1 (binary [linux, macos*])
|
|
107
|
+
...
|
|
266
108
|
|
|
267
|
-
|
|
268
|
-
|
|
109
|
+
Legend:
|
|
110
|
+
* Current version / platform
|
|
111
|
+
[installed: ...] = Already installed locally
|
|
112
|
+
Detected platform: macos
|
|
269
113
|
----
|
|
270
114
|
|
|
271
|
-
===
|
|
115
|
+
=== Install a version
|
|
272
116
|
|
|
273
117
|
[source,shell]
|
|
274
118
|
----
|
|
275
|
-
#
|
|
276
|
-
|
|
119
|
+
# Install from gemfile (source build, requires dev tools)
|
|
120
|
+
mnenv install 1.14.4 --source gemfile
|
|
277
121
|
|
|
278
|
-
#
|
|
279
|
-
|
|
122
|
+
# Install from binary (pre-built, no dev tools needed)
|
|
123
|
+
mnenv install 1.14.4 --source binary
|
|
280
124
|
|
|
281
|
-
#
|
|
282
|
-
|
|
125
|
+
# Interactive installation
|
|
126
|
+
mnenv install -i
|
|
283
127
|
|
|
284
|
-
# List
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
# Count versions per source
|
|
288
|
-
bundle exec exe/mnenv gemfile list | wc -l
|
|
289
|
-
bundle exec exe/mnenv snap list | wc -l
|
|
128
|
+
# List versions before installing
|
|
129
|
+
mnenv install --list
|
|
290
130
|
----
|
|
291
131
|
|
|
292
|
-
===
|
|
293
|
-
|
|
294
|
-
.Bash script to check for new versions
|
|
132
|
+
=== List installed versions
|
|
295
133
|
|
|
296
134
|
[source,shell]
|
|
297
135
|
----
|
|
298
|
-
|
|
299
|
-
# check_versions.sh - Check if a version exists across all sources
|
|
300
|
-
|
|
301
|
-
VERSION=$1
|
|
302
|
-
|
|
303
|
-
if [ -z "$VERSION" ]; then
|
|
304
|
-
echo "Usage: $0 <version>"
|
|
305
|
-
exit 1
|
|
306
|
-
fi
|
|
307
|
-
|
|
308
|
-
echo "Checking version $VERSION across all sources..."
|
|
309
|
-
|
|
310
|
-
# Check Gemfile
|
|
311
|
-
if bundle exec exe/mnenv gemfile list | grep -q "$VERSION"; then
|
|
312
|
-
echo "✓ Gemfile: $VERSION found"
|
|
313
|
-
else
|
|
314
|
-
echo "✗ Gemfile: $VERSION not found"
|
|
315
|
-
fi
|
|
316
|
-
|
|
317
|
-
# Check Snap
|
|
318
|
-
if bundle exec exe/mnenv snap list | grep -q "$VERSION"; then
|
|
319
|
-
echo "✓ Snap: $VERSION found"
|
|
320
|
-
else
|
|
321
|
-
echo "✗ Snap: $VERSION not found"
|
|
322
|
-
fi
|
|
323
|
-
|
|
324
|
-
# Check Homebrew
|
|
325
|
-
if bundle exec exe/mnenv homebrew list | grep -q "$VERSION"; then
|
|
326
|
-
echo "✓ Homebrew: $VERSION found"
|
|
327
|
-
else
|
|
328
|
-
echo "✗ Homebrew: $VERSION not found"
|
|
329
|
-
fi
|
|
330
|
-
|
|
331
|
-
# Check Chocolatey
|
|
332
|
-
if bundle exec exe/mnenv chocolatey list | grep -q "$VERSION"; then
|
|
333
|
-
echo "✓ Chocolatey: $VERSION found"
|
|
334
|
-
else
|
|
335
|
-
echo "✗ Chocolatey: $VERSION not found"
|
|
336
|
-
fi
|
|
136
|
+
mnenv versions
|
|
337
137
|
----
|
|
338
138
|
|
|
339
|
-
|
|
139
|
+
=== Set version
|
|
340
140
|
|
|
341
141
|
[source,shell]
|
|
342
142
|
----
|
|
343
|
-
|
|
344
|
-
|
|
143
|
+
# Set global version (affects all projects)
|
|
144
|
+
mnenv global 1.14.4
|
|
345
145
|
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
CHANNEL=${3:-stable}
|
|
146
|
+
# Set global version with source
|
|
147
|
+
mnenv global 1.14.4 --source binary
|
|
349
148
|
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
exit 1
|
|
353
|
-
fi
|
|
149
|
+
# Set local version (affects current directory)
|
|
150
|
+
mnenv local 1.14.4
|
|
354
151
|
|
|
355
|
-
#
|
|
356
|
-
|
|
152
|
+
# Set shell version (affects current shell session only)
|
|
153
|
+
mnenv use 1.14.4
|
|
357
154
|
----
|
|
358
155
|
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
[source,ruby]
|
|
362
|
-
----
|
|
363
|
-
#!/usr/bin/env ruby
|
|
364
|
-
# compare_versions.rb - Compare version availability
|
|
365
|
-
|
|
366
|
-
require 'json'
|
|
367
|
-
require 'yaml'
|
|
368
|
-
|
|
369
|
-
SOURCES = %w[gemfile snap homebrew chocolatey].freeze
|
|
370
|
-
|
|
371
|
-
def load_versions(source)
|
|
372
|
-
yaml_path = "data/#{source}/versions.yaml"
|
|
373
|
-
return [] unless File.exist?(yaml_path)
|
|
374
|
-
|
|
375
|
-
data = YAML.load_file(yaml_path)
|
|
376
|
-
data['versions'].map { |v| v['version'] }.uniq
|
|
377
|
-
end
|
|
378
|
-
|
|
379
|
-
def compare(version)
|
|
380
|
-
puts "Version #{version} availability:"
|
|
381
|
-
SOURCES.each do |source|
|
|
382
|
-
versions = load_versions(source)
|
|
383
|
-
status = versions.include?(version) ? '✓' : '✗'
|
|
384
|
-
puts " #{status} #{source}"
|
|
385
|
-
end
|
|
386
|
-
end
|
|
387
|
-
|
|
388
|
-
# Usage: ruby compare_versions.rb 1.14.4
|
|
389
|
-
compare(ARGV[0])
|
|
390
|
-
----
|
|
391
|
-
|
|
392
|
-
=== Getting Gemfile files for a version
|
|
156
|
+
=== Uninstall a version
|
|
393
157
|
|
|
394
158
|
[source,shell]
|
|
395
159
|
----
|
|
396
|
-
|
|
397
|
-
bundle exec exe/mnenv gemfile list | grep -E "v[0-9]"
|
|
398
|
-
|
|
399
|
-
# Check if a specific version has Gemfiles
|
|
400
|
-
if [ -f "data/gemfile/v1.14.4/Gemfile" ]; then
|
|
401
|
-
echo "Gemfile exists for 1.14.4"
|
|
402
|
-
cat data/gemfile/v1.14.4/Gemfile
|
|
403
|
-
fi
|
|
160
|
+
mnenv uninstall 1.14.4
|
|
404
161
|
|
|
405
|
-
#
|
|
406
|
-
|
|
407
|
-
cp data/gemfile/v1.14.4/Gemfile.lock.archived /path/to/project/Gemfile.lock
|
|
162
|
+
# Force uninstall without confirmation
|
|
163
|
+
mnenv uninstall 1.14.4 --force
|
|
408
164
|
----
|
|
409
165
|
|
|
410
|
-
===
|
|
411
|
-
|
|
412
|
-
Snap versions use composite keys (version-revision-arch-channel). Query them:
|
|
166
|
+
=== Show mnenv version
|
|
413
167
|
|
|
414
168
|
[source,shell]
|
|
415
169
|
----
|
|
416
|
-
|
|
417
|
-
bundle exec exe/mnenv snap list
|
|
418
|
-
|
|
419
|
-
# Get all revisions for a specific version
|
|
420
|
-
bundle exec exe/mnenv snap list | grep "1.14.4"
|
|
421
|
-
|
|
422
|
-
# Get AMD64 stable revision for a version
|
|
423
|
-
yq '.versions[] | select(.version == "1.14.4" and .arch == "amd64" and .channel == "stable") | .revision' data/snap/versions.yaml
|
|
424
|
-
|
|
425
|
-
# Get all architectures for a version
|
|
426
|
-
yq '.versions[] | select(.version == "1.14.4") | .arch' data/snap/versions.yaml | sort -u
|
|
427
|
-
|
|
428
|
-
# Get all channels for a version
|
|
429
|
-
yq '.versions[] | select(.version == "1.14.4") | .channel' data/snap/versions.yaml | sort -u
|
|
170
|
+
mnenv version
|
|
430
171
|
----
|
|
431
172
|
|
|
432
|
-
===
|
|
173
|
+
=== Update version data
|
|
433
174
|
|
|
434
175
|
[source,shell]
|
|
435
176
|
----
|
|
436
|
-
#
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
# Query JSON with jq
|
|
440
|
-
jq '.gemfile.latest' versions.json
|
|
441
|
-
jq '.snap.versions[] | select(.version == "1.14.4")' versions.json
|
|
442
|
-
jq '.homebrew.count' versions.json
|
|
443
|
-
|
|
444
|
-
# Use in scripts
|
|
445
|
-
LATEST=$(bundle exec exe/mnenv list-all -f json | jq -r '.gemfile.latest')
|
|
446
|
-
echo "Latest Gemfile version: $LATEST"
|
|
177
|
+
# Update version data from metanorma/versions repository
|
|
178
|
+
mnenv update
|
|
447
179
|
----
|
|
448
180
|
|
|
449
|
-
==
|
|
181
|
+
== Version Sources
|
|
450
182
|
|
|
451
|
-
|
|
183
|
+
mnenv supports two installation sources:
|
|
452
184
|
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
│ ├── versions.yaml # Gemfile version metadata
|
|
457
|
-
│ └── v1.14.4/ # Gemfile extraction per version
|
|
458
|
-
│ ├── Gemfile
|
|
459
|
-
│ └── Gemfile.lock.archived
|
|
460
|
-
├── snap/
|
|
461
|
-
│ └── versions.yaml # Snap versions with revision data
|
|
462
|
-
├── homebrew/
|
|
463
|
-
│ └── versions.yaml # Homebrew versions from tags
|
|
464
|
-
└── chocolatey/
|
|
465
|
-
└── versions.yaml # Chocolatey versions
|
|
466
|
-
----
|
|
467
|
-
|
|
468
|
-
=== Version object structure
|
|
185
|
+
[width="100%",cols="25%,75%"]
|
|
186
|
+
|===
|
|
187
|
+
| Source | Description
|
|
469
188
|
|
|
470
|
-
|
|
189
|
+
| `gemfile`
|
|
190
|
+
| RubyGems installation using Gemfile.
|
|
191
|
+
Requires development tools (Ruby, bundler).
|
|
192
|
+
Faster startup with lazy loading.
|
|
471
193
|
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
}
|
|
479
|
-
----
|
|
194
|
+
| `binary`
|
|
195
|
+
| Pre-compiled binaries from
|
|
196
|
+
https://github.com/metanorma/packed-mn[packed-mn] releases.
|
|
197
|
+
No development tools required.
|
|
198
|
+
Full memory load at startup.
|
|
199
|
+
|===
|
|
480
200
|
|
|
481
|
-
|
|
201
|
+
== Version Resolution
|
|
482
202
|
|
|
483
|
-
|
|
484
|
-
* **Snap** - `revision`, `arch`, `channel`
|
|
485
|
-
* **Homebrew** - `tag_name`, `commit_sha`
|
|
486
|
-
* **Chocolatey** - `package_name`, `is_pre_release`
|
|
203
|
+
mnenv resolves the active version in the following order:
|
|
487
204
|
|
|
488
|
-
|
|
205
|
+
. `METANORMA_VERSION` environment variable
|
|
206
|
+
. `.metanorma-version` file in current directory (and parent directories)
|
|
207
|
+
. `~/.mnenv/version` file (global version)
|
|
489
208
|
|
|
490
|
-
|
|
209
|
+
The source is resolved similarly:
|
|
491
210
|
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
cd versions
|
|
211
|
+
. `METANORMA_SOURCE` environment variable
|
|
212
|
+
. `.metanorma-source` file in current directory (and parent directories)
|
|
213
|
+
. `~/.mnenv/source` file (global source)
|
|
214
|
+
. Default: `gemfile`
|
|
497
215
|
|
|
498
|
-
|
|
499
|
-
cp data/gemfile/v1.14.4/Gemfile /path/to/your/project/
|
|
500
|
-
cp data/gemfile/v1.14.4/Gemfile.lock.archived /path/to/your/project/Gemfile.lock
|
|
216
|
+
== Directory Structure
|
|
501
217
|
|
|
502
|
-
|
|
503
|
-
cd /path/to/your/project
|
|
504
|
-
bundle install
|
|
218
|
+
[source]
|
|
505
219
|
----
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
220
|
+
~/.mnenv/
|
|
221
|
+
├── versions/ # Version data (cloned from metanorma/versions)
|
|
222
|
+
│ └── data/
|
|
223
|
+
│ ├── gemfile/versions.yaml
|
|
224
|
+
│ ├── binary/versions.yaml
|
|
225
|
+
│ └── ...
|
|
226
|
+
├── installed/ # Installed Metanorma versions
|
|
227
|
+
│ └── 1.14.4/
|
|
228
|
+
│ ├── bin/metanorma # (gemfile source)
|
|
229
|
+
│ ├── metanorma # (binary source)
|
|
230
|
+
│ └── source # Records installation source
|
|
231
|
+
├── shims/ # Shim executables
|
|
232
|
+
│ └── metanorma
|
|
233
|
+
├── version # Global version file
|
|
234
|
+
└── source # Global source file
|
|
513
235
|
----
|
|
514
|
-
# Inspect the Gemfile to see the metanorma-cli version
|
|
515
|
-
cat data/gemfile/v1.14.4/Gemfile
|
|
516
236
|
|
|
517
|
-
|
|
518
|
-
----
|
|
519
|
-
|
|
520
|
-
The Docker image tag is the same as the metanorma-cli version:
|
|
237
|
+
== Architecture
|
|
521
238
|
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
239
|
+
mnenv follows a model-driven architecture:
|
|
240
|
+
|
|
241
|
+
[source]
|
|
242
|
+
----
|
|
243
|
+
mnenv
|
|
244
|
+
├── Cli # Thor CLI entry point
|
|
245
|
+
├── Commands/
|
|
246
|
+
│ ├── InstallCommand # Install versions
|
|
247
|
+
│ ├── VersionCommand # Version switching (global, local, use, versions)
|
|
248
|
+
│ └── UninstallCommand # Uninstall versions
|
|
249
|
+
├── Installers/
|
|
250
|
+
│ ├── Base # Abstract installer
|
|
251
|
+
│ ├── BinaryInstaller # Binary installation (downloads, extracts)
|
|
252
|
+
│ └── GemfileInstaller # Gemfile-based installation
|
|
253
|
+
├── Shells/
|
|
254
|
+
│ ├── Base # Abstract shell
|
|
255
|
+
│ ├── Bash # Unix shells (bash, zsh, sh)
|
|
256
|
+
│ ├── PowerShell # Windows PowerShell
|
|
257
|
+
│ └── Cmd # Windows CMD
|
|
258
|
+
├── Repositories/
|
|
259
|
+
│ ├── GemfileRepository # RubyGems version data
|
|
260
|
+
│ ├── BinaryRepository # Binary version data
|
|
261
|
+
│ └── ...
|
|
262
|
+
├── ShimManager # Shim generation
|
|
263
|
+
├── VersionsManager # Version data management
|
|
264
|
+
└── Models/
|
|
265
|
+
├── ArtifactVersion # Base version model
|
|
266
|
+
├── GemfileVersion # RubyGems version
|
|
267
|
+
└── BinaryVersion # Binary version
|
|
525
268
|
----
|
|
526
269
|
|
|
527
270
|
== Development
|
|
@@ -530,18 +273,14 @@ docker pull metanorma/metanorma:1.14.4
|
|
|
530
273
|
|
|
531
274
|
[source,shell]
|
|
532
275
|
----
|
|
533
|
-
bundle exec rake
|
|
276
|
+
bundle exec rake spec
|
|
534
277
|
----
|
|
535
278
|
|
|
536
|
-
|
|
279
|
+
Or with RSpec directly:
|
|
537
280
|
|
|
538
281
|
[source,shell]
|
|
539
282
|
----
|
|
540
|
-
|
|
541
|
-
bundle exec rake -T
|
|
542
|
-
|
|
543
|
-
# Generate index
|
|
544
|
-
bundle exec rake generate_index
|
|
283
|
+
bundle exec rspec
|
|
545
284
|
----
|
|
546
285
|
|
|
547
286
|
=== Code quality
|
|
@@ -552,53 +291,21 @@ bundle exec rake generate_index
|
|
|
552
291
|
bundle exec rubocop
|
|
553
292
|
|
|
554
293
|
# Auto-correct issues
|
|
555
|
-
bundle exec rubocop
|
|
556
|
-
----
|
|
557
|
-
|
|
558
|
-
== Architecture
|
|
559
|
-
|
|
560
|
-
This repository follows a model-driven OOP architecture using lutaml-model:
|
|
561
|
-
|
|
562
|
-
----
|
|
563
|
-
Mnenv
|
|
564
|
-
├── ArtifactVersion (base version class with LutaML serialization)
|
|
565
|
-
├── Repository (YAML CRUD operations)
|
|
566
|
-
├── Fetcher (API communication)
|
|
567
|
-
├── Logger (logging utility)
|
|
568
|
-
├── JsonFormatter (JSON output)
|
|
569
|
-
└── Cli (Thor CLI with subcommands)
|
|
570
|
-
|
|
571
|
-
Modules by platform:
|
|
572
|
-
├── Gemfile/
|
|
573
|
-
│ ├── Version (Gemfile-specific with gemfile paths)
|
|
574
|
-
│ ├── Repository (Gemfile YAML storage)
|
|
575
|
-
│ ├── Fetcher (Docker Hub API)
|
|
576
|
-
│ └── Extractor (Gemfile extraction from containers)
|
|
577
|
-
├── Snap/
|
|
578
|
-
│ ├── Version (Snap-specific with revision/arch)
|
|
579
|
-
│ ├── Repository (Snap YAML storage)
|
|
580
|
-
│ └── Fetcher (Snapcraft API)
|
|
581
|
-
├── Homebrew/
|
|
582
|
-
│ ├── Version (Homebrew-specific with tag/commit)
|
|
583
|
-
│ ├── Repository (Homebrew YAML storage)
|
|
584
|
-
│ └── Fetcher (GitHub tags API)
|
|
585
|
-
└── Chocolatey/
|
|
586
|
-
├── Version (Chocolatey-specific with pre-release flag)
|
|
587
|
-
├── Repository (Chocolatey YAML storage)
|
|
588
|
-
└── Fetcher (Chocolatey API)
|
|
294
|
+
bundle exec rubocop -A
|
|
589
295
|
----
|
|
590
296
|
|
|
591
297
|
== Contributing
|
|
592
298
|
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
299
|
+
. Fork the repository
|
|
300
|
+
. Create your feature branch (`git checkout -b my-amazing-feature`)
|
|
301
|
+
. Commit your changes (`git commit -am 'Add some amazing feature'`)
|
|
302
|
+
. Push to the branch (`git push origin my-amazing-feature`)
|
|
303
|
+
. Open a Pull Request
|
|
598
304
|
|
|
599
305
|
== License
|
|
600
306
|
|
|
601
|
-
This
|
|
307
|
+
This project is available as open source under the terms of the
|
|
308
|
+
https://opensource.org/licenses/MIT[MIT License].
|
|
602
309
|
|
|
603
310
|
== Copyright
|
|
604
311
|
|