mnenv 0.1.0 → 0.1.1
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 +42 -0
- data/lib/mnenv/commands/version_command.rb +213 -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 +17 -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/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/version.rb +1 -1
- data/lib/mnenv/versions_manager.rb +92 -0
- data/lib/mnenv.rb +3 -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 +82 -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
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: '090048897f563d0162ceda95dd4f727cda725916b40e7150d815280dc9592ef6'
|
|
4
|
+
data.tar.gz: 0fbf4dfbbff09224c9672fef91b5607289848166bb58eaeb904d6633eecfcfdf
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 4695512492c103578d75100163c8201407473f73d53c67e1ebf684e7b6f248d29012caf1f17b504e5f1b4167de34199f07b5c04b09e6749fcc0634c7bcc53a8c
|
|
7
|
+
data.tar.gz: cea3fa81d4e70f8516d5866b5ee144ae8e734deccc09d80a3269d1deb98207f8af9468c82c89ef2e68256f9336d8e607968c9b59116d9f5644ca1c5cdf962c40
|
data/Gemfile
CHANGED
|
@@ -3,12 +3,15 @@
|
|
|
3
3
|
source 'https://rubygems.org'
|
|
4
4
|
|
|
5
5
|
gem 'activesupport'
|
|
6
|
+
gem 'git'
|
|
6
7
|
gem 'lutaml-model', '~> 0.7'
|
|
7
8
|
gem 'lutaml-xsd', '~> 1.0'
|
|
8
9
|
gem 'moxml'
|
|
9
10
|
gem 'nokogiri'
|
|
11
|
+
gem 'octokit'
|
|
10
12
|
gem 'paint'
|
|
11
13
|
gem 'thor'
|
|
14
|
+
gem 'tty-prompt'
|
|
12
15
|
|
|
13
16
|
group :development do
|
|
14
17
|
gem 'rake'
|
data/PROPOSAL.md
ADDED
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
# Proposal: Extract mnenv into a Standalone Gem
|
|
2
|
+
|
|
3
|
+
## Background
|
|
4
|
+
|
|
5
|
+
The `mnenv` codebase currently resides within the `metanorma/versions` repository. This creates a coupling between:
|
|
6
|
+
|
|
7
|
+
1. **mnenv** - A version manager tool for Metanorma (like rbenv/pyenv)
|
|
8
|
+
2. **versions** - A registry of Metanorma version metadata and Gemfiles
|
|
9
|
+
|
|
10
|
+
These two concerns should be separated for better maintainability and clearer responsibility.
|
|
11
|
+
|
|
12
|
+
## Current State
|
|
13
|
+
|
|
14
|
+
### Repository: `metanorma/versions`
|
|
15
|
+
|
|
16
|
+
Contains:
|
|
17
|
+
- `lib/mnenv/` - The mnenv gem code
|
|
18
|
+
- `data/gemfile/` - Gemfile registry with version metadata
|
|
19
|
+
- `spec/` - Test suite for mnenv
|
|
20
|
+
- `.github/workflows/` - CI/CD workflows
|
|
21
|
+
|
|
22
|
+
### Proposed State
|
|
23
|
+
|
|
24
|
+
#### Repository: `metanorma/mnenv` (NEW)
|
|
25
|
+
|
|
26
|
+
A standalone Ruby gem containing:
|
|
27
|
+
- Version management logic
|
|
28
|
+
- Installation methods (gemfile/binary)
|
|
29
|
+
- Shell integration (shims)
|
|
30
|
+
- CLI commands
|
|
31
|
+
|
|
32
|
+
#### Repository: `metanorma/versions` (SIMPLIFIED)
|
|
33
|
+
|
|
34
|
+
A static data registry containing:
|
|
35
|
+
- `data/gemfile/versions.yaml` - Version metadata
|
|
36
|
+
- `data/gemfile/v*/` - Gemfile and Gemfile.lock for each version
|
|
37
|
+
- `.github/workflows/` - Workflows to update version data
|
|
38
|
+
|
|
39
|
+
## Architecture
|
|
40
|
+
|
|
41
|
+
### mnenv Gem Structure
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
mnenv/
|
|
45
|
+
├── lib/
|
|
46
|
+
│ ├── mnenv/
|
|
47
|
+
│ │ ├── cli.rb # Thor CLI entry point
|
|
48
|
+
│ │ ├── commands/
|
|
49
|
+
│ │ │ ├── available_command.rb # List available versions
|
|
50
|
+
│ │ │ ├── install_command.rb # Install a version
|
|
51
|
+
│ │ │ ├── uninstall_command.rb # Uninstall a version
|
|
52
|
+
│ │ │ ├── version_command.rb # Show mnenv version
|
|
53
|
+
│ │ │ ├── global_command.rb # Set global version
|
|
54
|
+
│ │ │ ├── local_command.rb # Set local version
|
|
55
|
+
│ │ │ ├── use_command.rb # Set shell session version
|
|
56
|
+
│ │ │ ├── versions_command.rb # List installed versions
|
|
57
|
+
│ │ │ └── snap_command.rb # Snap package support
|
|
58
|
+
│ │ ├── shells/
|
|
59
|
+
│ │ │ ├── base.rb # Abstract shell base class
|
|
60
|
+
│ │ │ ├── bash.rb # Bash/Unix shell
|
|
61
|
+
│ │ │ ├── power_shell.rb # PowerShell (Windows)
|
|
62
|
+
│ │ │ ├── cmd.rb # CMD (Windows)
|
|
63
|
+
│ │ │ └── factory.rb # Shell detection factory
|
|
64
|
+
│ │ ├── installers/
|
|
65
|
+
│ │ │ ├── base.rb # Abstract installer base
|
|
66
|
+
│ │ │ ├── gemfile_installer.rb # Gemfile-based installation
|
|
67
|
+
│ │ │ └── binary_installer.rb # Binary installation
|
|
68
|
+
│ │ ├── installer.rb # Installer factory
|
|
69
|
+
│ │ ├── shim_manager.rb # Shim generation
|
|
70
|
+
│ │ ├── resolver # Version resolution script
|
|
71
|
+
│ │ ├── logger.rb # Logging utilities
|
|
72
|
+
│ │ └── version.rb # Gem version
|
|
73
|
+
│ └── mnenv.rb # Main entry point
|
|
74
|
+
├── spec/
|
|
75
|
+
│ └── ... # Test suite
|
|
76
|
+
├── exe/
|
|
77
|
+
│ └── mnenv # Executable
|
|
78
|
+
├── mnenv.gemspec
|
|
79
|
+
├── Gemfile
|
|
80
|
+
├── Gemfile.lock
|
|
81
|
+
├── Rakefile
|
|
82
|
+
├── .rubocop.yml
|
|
83
|
+
└── README.adoc
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### versions Registry Structure
|
|
87
|
+
|
|
88
|
+
```
|
|
89
|
+
versions/
|
|
90
|
+
├── data/
|
|
91
|
+
│ └── gemfile/
|
|
92
|
+
│ ├── versions.yaml # Version metadata
|
|
93
|
+
│ └── v1.14.3/
|
|
94
|
+
│ ├── Gemfile
|
|
95
|
+
│ └── Gemfile.lock.archived
|
|
96
|
+
├── .github/
|
|
97
|
+
│ └── workflows/
|
|
98
|
+
│ ├── fetch-gemfile.yml # Extract Gemfiles from Docker
|
|
99
|
+
│ ├── fetch-chocolatey.yml # Update Chocolatey versions
|
|
100
|
+
│ ├── fetch-homebrew.yml # Update Homebrew versions
|
|
101
|
+
│ └── fetch-snap.yml # Update Snap versions
|
|
102
|
+
├── scripts/
|
|
103
|
+
│ └── update_versions_yaml.rb # Utility script
|
|
104
|
+
├── Gemfile
|
|
105
|
+
├── Gemfile.lock
|
|
106
|
+
└── README.adoc
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## Version Data Access
|
|
110
|
+
|
|
111
|
+
### Option A: Git Submodule (Recommended)
|
|
112
|
+
|
|
113
|
+
The `mnenv` gem includes the `versions` repository as a data source:
|
|
114
|
+
|
|
115
|
+
```ruby
|
|
116
|
+
# In mnenv, versions data is accessed via submodule
|
|
117
|
+
DATA_DIR = File.expand_path('../versions/data', __dir__)
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### Option B: Remote Fetch
|
|
121
|
+
|
|
122
|
+
The `mnenv` gem fetches version data from GitHub:
|
|
123
|
+
|
|
124
|
+
```ruby
|
|
125
|
+
# Fetch versions.yaml from GitHub
|
|
126
|
+
VERSIONS_URL = 'https://raw.githubusercontent.com/metanorma/versions/main/data/gemfile/versions.yaml'
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### Option C: RubyGems Distribution
|
|
130
|
+
|
|
131
|
+
Version data is packaged with the `mnenv` gem and updated via gem releases.
|
|
132
|
+
|
|
133
|
+
## Migration Plan
|
|
134
|
+
|
|
135
|
+
### Phase 1: Create mnenv Repository
|
|
136
|
+
|
|
137
|
+
1. Create new repository `metanorma/mnenv`
|
|
138
|
+
2. Copy mnenv code from `versions` repository
|
|
139
|
+
3. Update gemspec and dependencies
|
|
140
|
+
4. Set up CI/CD workflows
|
|
141
|
+
|
|
142
|
+
### Phase 2: Simplify versions Repository
|
|
143
|
+
|
|
144
|
+
1. Remove mnenv code from `versions`
|
|
145
|
+
2. Keep only version data and fetch workflows
|
|
146
|
+
3. Update documentation
|
|
147
|
+
|
|
148
|
+
### Phase 3: Update Dependencies
|
|
149
|
+
|
|
150
|
+
1. Update any projects depending on `versions` to use `mnenv`
|
|
151
|
+
2. Ensure backward compatibility during transition
|
|
152
|
+
|
|
153
|
+
## Benefits
|
|
154
|
+
|
|
155
|
+
### Separation of Concerns
|
|
156
|
+
|
|
157
|
+
- **mnenv**: Tool development and releases
|
|
158
|
+
- **versions**: Data registry and updates
|
|
159
|
+
|
|
160
|
+
### Independent Versioning
|
|
161
|
+
|
|
162
|
+
- mnenv can be versioned independently
|
|
163
|
+
- Version data can be updated without releasing a new gem
|
|
164
|
+
|
|
165
|
+
### Cleaner Architecture
|
|
166
|
+
|
|
167
|
+
- Single responsibility for each repository
|
|
168
|
+
- Easier testing and maintenance
|
|
169
|
+
|
|
170
|
+
### Better Distribution
|
|
171
|
+
|
|
172
|
+
- mnenv as a standard Ruby gem
|
|
173
|
+
- Version data as static files accessible via HTTP
|
|
174
|
+
|
|
175
|
+
## Implementation Checklist
|
|
176
|
+
|
|
177
|
+
- [ ] Create `metanorma/mnenv` repository
|
|
178
|
+
- [ ] Copy lib/mnenv/* to new repository
|
|
179
|
+
- [ ] Copy spec/* to new repository
|
|
180
|
+
- [ ] Copy exe/mnenv to new repository
|
|
181
|
+
- [ ] Update mnenv.gemspec
|
|
182
|
+
- [ ] Create README.adoc for mnenv
|
|
183
|
+
- [ ] Set up GitHub Actions for mnenv
|
|
184
|
+
- [ ] Remove mnenv code from versions repository
|
|
185
|
+
- [ ] Update versions README.adoc
|
|
186
|
+
- [ ] Test mnenv installation from new repository
|
|
187
|
+
- [ ] Publish mnenv gem to RubyGems
|
|
188
|
+
|
|
189
|
+
## Timeline
|
|
190
|
+
|
|
191
|
+
Estimated effort: 2-3 hours for migration and testing.
|
|
192
|
+
|
|
193
|
+
## Questions
|
|
194
|
+
|
|
195
|
+
1. Should mnenv fetch version data remotely or bundle it?
|
|
196
|
+
2. How to handle the transition period for existing users?
|
|
197
|
+
3. Should we maintain backward compatibility in the versions repository?
|