mnenv 0.1.0
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 +7 -0
- data/Gemfile +17 -0
- data/README.adoc +605 -0
- data/Rakefile +8 -0
- data/data/chocolatey/versions.yaml +812 -0
- data/data/gemfile/v1.1.6/Gemfile +4 -0
- data/data/gemfile/v1.1.6/Gemfile.lock.archived +232 -0
- data/data/gemfile/v1.1.7/Gemfile +4 -0
- data/data/gemfile/v1.1.7/Gemfile.lock.archived +235 -0
- data/data/gemfile/v1.1.8/Gemfile +4 -0
- data/data/gemfile/v1.1.8/Gemfile.lock.archived +238 -0
- data/data/gemfile/v1.10.0/Gemfile +5 -0
- data/data/gemfile/v1.10.0/Gemfile.lock.archived +930 -0
- data/data/gemfile/v1.10.1/Gemfile +5 -0
- data/data/gemfile/v1.10.1/Gemfile.lock.archived +929 -0
- data/data/gemfile/v1.10.10/Gemfile +5 -0
- data/data/gemfile/v1.10.10/Gemfile.lock.archived +973 -0
- data/data/gemfile/v1.10.11/Gemfile +5 -0
- data/data/gemfile/v1.10.11/Gemfile.lock.archived +975 -0
- data/data/gemfile/v1.10.2/Gemfile +5 -0
- data/data/gemfile/v1.10.2/Gemfile.lock.archived +939 -0
- data/data/gemfile/v1.10.3/Gemfile +5 -0
- data/data/gemfile/v1.10.3/Gemfile.lock.archived +946 -0
- data/data/gemfile/v1.10.5/Gemfile +5 -0
- data/data/gemfile/v1.10.5/Gemfile.lock.archived +958 -0
- data/data/gemfile/v1.10.6/Gemfile +5 -0
- data/data/gemfile/v1.10.6/Gemfile.lock.archived +969 -0
- data/data/gemfile/v1.10.7/Gemfile +5 -0
- data/data/gemfile/v1.10.7/Gemfile.lock.archived +969 -0
- data/data/gemfile/v1.10.8/Gemfile +5 -0
- data/data/gemfile/v1.10.8/Gemfile.lock.archived +968 -0
- data/data/gemfile/v1.10.9/Gemfile +5 -0
- data/data/gemfile/v1.10.9/Gemfile.lock.archived +972 -0
- data/data/gemfile/v1.11.0/Gemfile +5 -0
- data/data/gemfile/v1.11.0/Gemfile.lock.archived +971 -0
- data/data/gemfile/v1.11.1/Gemfile +5 -0
- data/data/gemfile/v1.11.1/Gemfile.lock.archived +975 -0
- data/data/gemfile/v1.11.4/Gemfile +5 -0
- data/data/gemfile/v1.11.4/Gemfile.lock.archived +1046 -0
- data/data/gemfile/v1.11.5/Gemfile +5 -0
- data/data/gemfile/v1.11.5/Gemfile.lock.archived +1047 -0
- data/data/gemfile/v1.12.10/Gemfile +3 -0
- data/data/gemfile/v1.12.10/Gemfile.lock.archived +1073 -0
- data/data/gemfile/v1.12.3/Gemfile +3 -0
- data/data/gemfile/v1.12.3/Gemfile.lock.archived +1050 -0
- data/data/gemfile/v1.12.4/Gemfile +3 -0
- data/data/gemfile/v1.12.4/Gemfile.lock.archived +1056 -0
- data/data/gemfile/v1.12.5/Gemfile +3 -0
- data/data/gemfile/v1.12.5/Gemfile.lock.archived +1054 -0
- data/data/gemfile/v1.12.6/Gemfile +3 -0
- data/data/gemfile/v1.12.6/Gemfile.lock.archived +1056 -0
- data/data/gemfile/v1.12.8/Gemfile +3 -0
- data/data/gemfile/v1.12.8/Gemfile.lock.archived +1063 -0
- data/data/gemfile/v1.13.0/Gemfile +3 -0
- data/data/gemfile/v1.13.0/Gemfile.lock.archived +1074 -0
- data/data/gemfile/v1.13.2/Gemfile +3 -0
- data/data/gemfile/v1.13.2/Gemfile.lock.archived +899 -0
- data/data/gemfile/v1.13.3/Gemfile +3 -0
- data/data/gemfile/v1.13.3/Gemfile.lock.archived +938 -0
- data/data/gemfile/v1.13.4/Gemfile +3 -0
- data/data/gemfile/v1.13.4/Gemfile.lock.archived +938 -0
- data/data/gemfile/v1.13.5/Gemfile +3 -0
- data/data/gemfile/v1.13.5/Gemfile.lock.archived +944 -0
- data/data/gemfile/v1.13.7/Gemfile +3 -0
- data/data/gemfile/v1.13.7/Gemfile.lock.archived +944 -0
- data/data/gemfile/v1.13.8/Gemfile +3 -0
- data/data/gemfile/v1.13.8/Gemfile.lock.archived +944 -0
- data/data/gemfile/v1.13.9/Gemfile +3 -0
- data/data/gemfile/v1.13.9/Gemfile.lock.archived +956 -0
- data/data/gemfile/v1.14.3/Gemfile +3 -0
- data/data/gemfile/v1.14.3/Gemfile.lock.archived +950 -0
- data/data/gemfile/v1.2.12/Gemfile +3 -0
- data/data/gemfile/v1.2.12/Gemfile.lock.archived +283 -0
- data/data/gemfile/v1.2.2/Gemfile +4 -0
- data/data/gemfile/v1.2.2/Gemfile.lock.archived +224 -0
- data/data/gemfile/v1.2.3/Gemfile +4 -0
- data/data/gemfile/v1.2.3/Gemfile.lock.archived +231 -0
- data/data/gemfile/v1.2.6/Gemfile +4 -0
- data/data/gemfile/v1.2.6/Gemfile.lock.archived +239 -0
- data/data/gemfile/v1.2.8/Gemfile +4 -0
- data/data/gemfile/v1.2.8/Gemfile.lock.archived +233 -0
- data/data/gemfile/v1.2.9/Gemfile +4 -0
- data/data/gemfile/v1.2.9/Gemfile.lock.archived +245 -0
- data/data/gemfile/v1.3.1/Gemfile +3 -0
- data/data/gemfile/v1.3.1/Gemfile.lock.archived +296 -0
- data/data/gemfile/v1.3.2/Gemfile +3 -0
- data/data/gemfile/v1.3.2/Gemfile.lock.archived +296 -0
- data/data/gemfile/v1.3.4/Gemfile +3 -0
- data/data/gemfile/v1.3.4/Gemfile.lock.archived +284 -0
- data/data/gemfile/v1.3.5/Gemfile +3 -0
- data/data/gemfile/v1.3.5/Gemfile.lock.archived +284 -0
- data/data/gemfile/v1.3.6/Gemfile +3 -0
- data/data/gemfile/v1.3.6/Gemfile.lock.archived +286 -0
- data/data/gemfile/v1.3.9/Gemfile +3 -0
- data/data/gemfile/v1.3.9/Gemfile.lock.archived +334 -0
- data/data/gemfile/v1.4.0/Gemfile +3 -0
- data/data/gemfile/v1.4.0/Gemfile.lock.archived +330 -0
- data/data/gemfile/v1.4.10/Gemfile +4 -0
- data/data/gemfile/v1.4.10/Gemfile.lock.archived +461 -0
- data/data/gemfile/v1.4.11/Gemfile +4 -0
- data/data/gemfile/v1.4.11/Gemfile.lock.archived +452 -0
- data/data/gemfile/v1.4.12/Gemfile +4 -0
- data/data/gemfile/v1.4.12/Gemfile.lock.archived +452 -0
- data/data/gemfile/v1.4.13/Gemfile +4 -0
- data/data/gemfile/v1.4.13/Gemfile.lock.archived +455 -0
- data/data/gemfile/v1.4.14/Gemfile +4 -0
- data/data/gemfile/v1.4.14/Gemfile.lock.archived +456 -0
- data/data/gemfile/v1.4.18/Gemfile +3 -0
- data/data/gemfile/v1.4.18/Gemfile.lock.archived +486 -0
- data/data/gemfile/v1.4.3/Gemfile +3 -0
- data/data/gemfile/v1.4.3/Gemfile.lock.archived +339 -0
- data/data/gemfile/v1.4.4/Gemfile +3 -0
- data/data/gemfile/v1.4.4/Gemfile.lock.archived +339 -0
- data/data/gemfile/v1.4.5/Gemfile +3 -0
- data/data/gemfile/v1.4.5/Gemfile.lock.archived +348 -0
- data/data/gemfile/v1.4.6/Gemfile +3 -0
- data/data/gemfile/v1.4.6/Gemfile.lock.archived +357 -0
- data/data/gemfile/v1.4.7/Gemfile +3 -0
- data/data/gemfile/v1.4.7/Gemfile.lock.archived +391 -0
- data/data/gemfile/v1.4.8/Gemfile +3 -0
- data/data/gemfile/v1.4.8/Gemfile.lock.archived +445 -0
- data/data/gemfile/v1.4.9/Gemfile +3 -0
- data/data/gemfile/v1.4.9/Gemfile.lock.archived +448 -0
- data/data/gemfile/v1.5.0/Gemfile +3 -0
- data/data/gemfile/v1.5.0/Gemfile.lock.archived +478 -0
- data/data/gemfile/v1.5.10/Gemfile +3 -0
- data/data/gemfile/v1.5.10/Gemfile.lock.archived +668 -0
- data/data/gemfile/v1.5.11/Gemfile +3 -0
- data/data/gemfile/v1.5.11/Gemfile.lock.archived +668 -0
- data/data/gemfile/v1.5.15/Gemfile +3 -0
- data/data/gemfile/v1.5.15/Gemfile.lock.archived +686 -0
- data/data/gemfile/v1.5.16/Gemfile +3 -0
- data/data/gemfile/v1.5.16/Gemfile.lock.archived +684 -0
- data/data/gemfile/v1.5.17/Gemfile +3 -0
- data/data/gemfile/v1.5.17/Gemfile.lock.archived +684 -0
- data/data/gemfile/v1.5.18/Gemfile +5 -0
- data/data/gemfile/v1.5.18/Gemfile.lock.archived +691 -0
- data/data/gemfile/v1.5.19/Gemfile +5 -0
- data/data/gemfile/v1.5.19/Gemfile.lock.archived +703 -0
- data/data/gemfile/v1.5.20/Gemfile +5 -0
- data/data/gemfile/v1.5.20/Gemfile.lock.archived +703 -0
- data/data/gemfile/v1.5.21/Gemfile +5 -0
- data/data/gemfile/v1.5.21/Gemfile.lock.archived +707 -0
- data/data/gemfile/v1.5.22/Gemfile +5 -0
- data/data/gemfile/v1.5.22/Gemfile.lock.archived +707 -0
- data/data/gemfile/v1.5.23/Gemfile +5 -0
- data/data/gemfile/v1.5.23/Gemfile.lock.archived +711 -0
- data/data/gemfile/v1.5.24/Gemfile +5 -0
- data/data/gemfile/v1.5.24/Gemfile.lock.archived +711 -0
- data/data/gemfile/v1.5.3/Gemfile +3 -0
- data/data/gemfile/v1.5.3/Gemfile.lock.archived +651 -0
- data/data/gemfile/v1.5.4/Gemfile +3 -0
- data/data/gemfile/v1.5.4/Gemfile.lock.archived +657 -0
- data/data/gemfile/v1.5.5/Gemfile +3 -0
- data/data/gemfile/v1.5.5/Gemfile.lock.archived +657 -0
- data/data/gemfile/v1.5.6/Gemfile +3 -0
- data/data/gemfile/v1.5.6/Gemfile.lock.archived +657 -0
- data/data/gemfile/v1.5.7/Gemfile +3 -0
- data/data/gemfile/v1.5.7/Gemfile.lock.archived +657 -0
- data/data/gemfile/v1.5.8/Gemfile +3 -0
- data/data/gemfile/v1.5.8/Gemfile.lock.archived +655 -0
- data/data/gemfile/v1.5.9/Gemfile +3 -0
- data/data/gemfile/v1.5.9/Gemfile.lock.archived +656 -0
- data/data/gemfile/v1.6.1/Gemfile +5 -0
- data/data/gemfile/v1.6.1/Gemfile.lock.archived +721 -0
- data/data/gemfile/v1.6.10/Gemfile +5 -0
- data/data/gemfile/v1.6.10/Gemfile.lock.archived +744 -0
- data/data/gemfile/v1.6.11/Gemfile +5 -0
- data/data/gemfile/v1.6.11/Gemfile.lock.archived +744 -0
- data/data/gemfile/v1.6.12/Gemfile +5 -0
- data/data/gemfile/v1.6.12/Gemfile.lock.archived +745 -0
- data/data/gemfile/v1.6.13/Gemfile +5 -0
- data/data/gemfile/v1.6.13/Gemfile.lock.archived +745 -0
- data/data/gemfile/v1.6.14/Gemfile +5 -0
- data/data/gemfile/v1.6.14/Gemfile.lock.archived +754 -0
- data/data/gemfile/v1.6.15/Gemfile +5 -0
- data/data/gemfile/v1.6.15/Gemfile.lock.archived +757 -0
- data/data/gemfile/v1.6.2/Gemfile +5 -0
- data/data/gemfile/v1.6.2/Gemfile.lock.archived +718 -0
- data/data/gemfile/v1.6.3/Gemfile +5 -0
- data/data/gemfile/v1.6.3/Gemfile.lock.archived +728 -0
- data/data/gemfile/v1.6.4/Gemfile +5 -0
- data/data/gemfile/v1.6.4/Gemfile.lock.archived +730 -0
- data/data/gemfile/v1.6.5/Gemfile +5 -0
- data/data/gemfile/v1.6.5/Gemfile.lock.archived +733 -0
- data/data/gemfile/v1.6.6/Gemfile +5 -0
- data/data/gemfile/v1.6.6/Gemfile.lock.archived +733 -0
- data/data/gemfile/v1.6.7/Gemfile +5 -0
- data/data/gemfile/v1.6.7/Gemfile.lock.archived +733 -0
- data/data/gemfile/v1.6.9/Gemfile +5 -0
- data/data/gemfile/v1.6.9/Gemfile.lock.archived +744 -0
- data/data/gemfile/v1.7.0/Gemfile +5 -0
- data/data/gemfile/v1.7.0/Gemfile.lock.archived +750 -0
- data/data/gemfile/v1.7.1/Gemfile +5 -0
- data/data/gemfile/v1.7.1/Gemfile.lock.archived +750 -0
- data/data/gemfile/v1.7.2/Gemfile +5 -0
- data/data/gemfile/v1.7.2/Gemfile.lock.archived +747 -0
- data/data/gemfile/v1.7.3/Gemfile +5 -0
- data/data/gemfile/v1.7.3/Gemfile.lock.archived +755 -0
- data/data/gemfile/v1.7.4/Gemfile +5 -0
- data/data/gemfile/v1.7.4/Gemfile.lock.archived +756 -0
- data/data/gemfile/v1.7.5/Gemfile +5 -0
- data/data/gemfile/v1.7.5/Gemfile.lock.archived +759 -0
- data/data/gemfile/v1.7.6/Gemfile +5 -0
- data/data/gemfile/v1.7.6/Gemfile.lock.archived +768 -0
- data/data/gemfile/v1.8.10/Gemfile +5 -0
- data/data/gemfile/v1.8.10/Gemfile.lock.archived +792 -0
- data/data/gemfile/v1.8.11/Gemfile +5 -0
- data/data/gemfile/v1.8.11/Gemfile.lock.archived +862 -0
- data/data/gemfile/v1.8.3/Gemfile +5 -0
- data/data/gemfile/v1.8.3/Gemfile.lock.archived +773 -0
- data/data/gemfile/v1.8.4/Gemfile +5 -0
- data/data/gemfile/v1.8.4/Gemfile.lock.archived +768 -0
- data/data/gemfile/v1.8.5/Gemfile +5 -0
- data/data/gemfile/v1.8.5/Gemfile.lock.archived +768 -0
- data/data/gemfile/v1.8.6/Gemfile +5 -0
- data/data/gemfile/v1.8.6/Gemfile.lock.archived +777 -0
- data/data/gemfile/v1.8.7/Gemfile +5 -0
- data/data/gemfile/v1.8.7/Gemfile.lock.archived +777 -0
- data/data/gemfile/v1.8.8/Gemfile +5 -0
- data/data/gemfile/v1.8.8/Gemfile.lock.archived +778 -0
- data/data/gemfile/v1.8.9/Gemfile +5 -0
- data/data/gemfile/v1.8.9/Gemfile.lock.archived +775 -0
- data/data/gemfile/v1.9.0/Gemfile +5 -0
- data/data/gemfile/v1.9.0/Gemfile.lock.archived +871 -0
- data/data/gemfile/v1.9.1/Gemfile +5 -0
- data/data/gemfile/v1.9.1/Gemfile.lock.archived +906 -0
- data/data/gemfile/v1.9.2/Gemfile +5 -0
- data/data/gemfile/v1.9.2/Gemfile.lock.archived +898 -0
- data/data/gemfile/v1.9.3/Gemfile +5 -0
- data/data/gemfile/v1.9.3/Gemfile.lock.archived +898 -0
- data/data/gemfile/v1.9.4/Gemfile +5 -0
- data/data/gemfile/v1.9.4/Gemfile.lock.archived +901 -0
- data/data/gemfile/v1.9.5/Gemfile +5 -0
- data/data/gemfile/v1.9.5/Gemfile.lock.archived +903 -0
- data/data/gemfile/v1.9.6/Gemfile +5 -0
- data/data/gemfile/v1.9.6/Gemfile.lock.archived +900 -0
- data/data/gemfile/v1.9.7/Gemfile +5 -0
- data/data/gemfile/v1.9.7/Gemfile.lock.archived +922 -0
- data/data/gemfile/v1.9.8/Gemfile +5 -0
- data/data/gemfile/v1.9.8/Gemfile.lock.archived +933 -0
- data/data/gemfile/versions.yaml +751 -0
- data/data/homebrew/versions.yaml +567 -0
- data/data/snap/github_tags.json +42 -0
- data/data/snap/versions.yaml +589 -0
- data/exe/mnenv +10 -0
- data/lib/mnenv/chocolatey/fetcher.rb +69 -0
- data/lib/mnenv/chocolatey_repository.rb +11 -0
- data/lib/mnenv/cli.rb +124 -0
- data/lib/mnenv/commands/chocolatey_command.rb +76 -0
- data/lib/mnenv/commands/gemfile_command.rb +57 -0
- data/lib/mnenv/commands/homebrew_command.rb +76 -0
- data/lib/mnenv/commands/snap_command.rb +89 -0
- data/lib/mnenv/commands.rb +6 -0
- data/lib/mnenv/fetcher.rb +30 -0
- data/lib/mnenv/gemfile/extractor.rb +140 -0
- data/lib/mnenv/gemfile/fetcher.rb +43 -0
- data/lib/mnenv/gemfile_repository.rb +13 -0
- data/lib/mnenv/homebrew/fetcher.rb +44 -0
- data/lib/mnenv/homebrew_repository.rb +11 -0
- data/lib/mnenv/json_formatter.rb +43 -0
- data/lib/mnenv/logger.rb +63 -0
- data/lib/mnenv/models/chocolatey_version.rb +18 -0
- data/lib/mnenv/models/gemfile_version.rb +40 -0
- data/lib/mnenv/models/homebrew_version.rb +23 -0
- data/lib/mnenv/models/snap_version.rb +22 -0
- data/lib/mnenv/models/version.rb +23 -0
- data/lib/mnenv/models.rb +9 -0
- data/lib/mnenv/repository.rb +105 -0
- data/lib/mnenv/snap/fetcher.rb +109 -0
- data/lib/mnenv/snap_repository.rb +70 -0
- data/lib/mnenv/version.rb +5 -0
- data/lib/mnenv.rb +8 -0
- data/mnenv.gemspec +43 -0
- data/snapcraft-list-copied-from-site.md +101 -0
- metadata +421 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 2ceae10229bb0e66444311eeef2de11f97fb216e2d8ce67d9ba4c6f581ce9b0f
|
|
4
|
+
data.tar.gz: 216aecbe5a260dc838005eeb7e29b702308d9f7d1c31777f3226b0698136a337
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: bceb22cfa76a3575d86fc82917dd33dd260dd6c3385378ba9e95c8d6499fd603e55b2a3f21be19311d0c68626dae3cbcc031252efb38dd8edd2ee371761738df
|
|
7
|
+
data.tar.gz: ef9173a972487ed8448196191fa62f6e0b7b127c2b5bd85e82ed287ddebc53155d6f7eb7a862d1d8cc571decf4cdb1ce00fb11abb49383624ffcd2318e011f5c
|
data/Gemfile
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
source 'https://rubygems.org'
|
|
4
|
+
|
|
5
|
+
gem 'activesupport'
|
|
6
|
+
gem 'lutaml-model', '~> 0.7'
|
|
7
|
+
gem 'lutaml-xsd', '~> 1.0'
|
|
8
|
+
gem 'moxml'
|
|
9
|
+
gem 'nokogiri'
|
|
10
|
+
gem 'paint'
|
|
11
|
+
gem 'thor'
|
|
12
|
+
|
|
13
|
+
group :development do
|
|
14
|
+
gem 'rake'
|
|
15
|
+
gem 'rspec'
|
|
16
|
+
gem 'rubocop'
|
|
17
|
+
end
|
data/README.adoc
ADDED
|
@@ -0,0 +1,605 @@
|
|
|
1
|
+
= Metanorma Versions
|
|
2
|
+
|
|
3
|
+
image:https://img.shields.io/github/license/metanorma/versions[License]
|
|
4
|
+
image:https://github.com/metanorma/versions/actions/workflows/rake.yml/badge.svg[Rake]
|
|
5
|
+
|
|
6
|
+
Version discovery and management for Metanorma across multiple package sources.
|
|
7
|
+
|
|
8
|
+
== Purpose
|
|
9
|
+
|
|
10
|
+
This repository provides a unified interface for discovering and managing Metanorma versions from various sources:
|
|
11
|
+
|
|
12
|
+
* **Gemfile (Docker)** - Docker Hub images with Gemfile/Gemfile.lock.archived extraction
|
|
13
|
+
* **Snap** - Snapcraft snap packages with revision tracking
|
|
14
|
+
* **Homebrew** - macOS Homebrew formula versions from GitHub tags
|
|
15
|
+
* **Chocolatey** - Windows Chocolatey packages
|
|
16
|
+
|
|
17
|
+
This enables link:{https://github.com/metanorma/actions-mn/setup}[actions-mn/setup] to provide version selection across all platforms.
|
|
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.
|
|
30
|
+
|
|
31
|
+
== Features
|
|
32
|
+
|
|
33
|
+
* *Unified CLI* - Single `mnenv` command to query and manage versions from all sources
|
|
34
|
+
* *YAML Storage* - Version data stored in `data/` directory for easy inspection
|
|
35
|
+
* *JSON Output* - CLI commands output JSON for GitHub Actions consumption
|
|
36
|
+
* *Extraction Modes* - Incremental, replace, and revamp modes for Gemfile extraction
|
|
37
|
+
* *Model-Driven OOP* - Built with lutaml-model for proper data serialization
|
|
38
|
+
|
|
39
|
+
== Setting Up
|
|
40
|
+
|
|
41
|
+
Clone this repository and install dependencies:
|
|
42
|
+
|
|
43
|
+
[source,shell]
|
|
44
|
+
----
|
|
45
|
+
git clone https://github.com/metanorma/versions.git
|
|
46
|
+
cd versions
|
|
47
|
+
bundle install
|
|
48
|
+
----
|
|
49
|
+
|
|
50
|
+
== Usage
|
|
51
|
+
|
|
52
|
+
=== CLI commands
|
|
53
|
+
|
|
54
|
+
The `mnenv` command provides subcommands for each platform:
|
|
55
|
+
|
|
56
|
+
[source,shell]
|
|
57
|
+
----
|
|
58
|
+
# List Gemfile (Ruby) versions
|
|
59
|
+
bundle exec exe/mnenv gemfile list
|
|
60
|
+
|
|
61
|
+
# List Snap versions
|
|
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
|
|
81
|
+
----
|
|
82
|
+
|
|
83
|
+
=== Updating version data
|
|
84
|
+
|
|
85
|
+
Each platform supports three modes of updating version data:
|
|
86
|
+
|
|
87
|
+
* *refresh* - Incremental mode: fetch only new versions not present locally
|
|
88
|
+
* *revamp* - Re-fetch all versions, replacing existing data
|
|
89
|
+
* *update VERSION* - Update a specific version
|
|
90
|
+
|
|
91
|
+
.Gemfile (Docker) updates
|
|
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
|
+
----
|
|
103
|
+
|
|
104
|
+
.Snap updates
|
|
105
|
+
[source,shell]
|
|
106
|
+
----
|
|
107
|
+
# Fetch and add new Snap versions (preserves historical data)
|
|
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]
|
|
120
|
+
----
|
|
121
|
+
# Fetch and add new Homebrew versions
|
|
122
|
+
bundle exec exe/mnenv homebrew refresh
|
|
123
|
+
|
|
124
|
+
# Update a specific Homebrew version
|
|
125
|
+
bundle exec exe/mnenv homebrew update 1.13.0
|
|
126
|
+
|
|
127
|
+
# Re-fetch all Homebrew versions
|
|
128
|
+
bundle exec exe/mnenv homebrew revamp
|
|
129
|
+
----
|
|
130
|
+
|
|
131
|
+
.Chocolatey updates
|
|
132
|
+
[source,shell]
|
|
133
|
+
----
|
|
134
|
+
# Fetch and add new Chocolatey versions
|
|
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
|
|
142
|
+
----
|
|
143
|
+
|
|
144
|
+
.Extraction modes
|
|
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:
|
|
155
|
+
|
|
156
|
+
[source,ruby]
|
|
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:
|
|
181
|
+
|
|
182
|
+
[source,shell]
|
|
183
|
+
----
|
|
184
|
+
bundle exec exe/mnenv list-all -f json
|
|
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
|
+
}
|
|
213
|
+
----
|
|
214
|
+
|
|
215
|
+
== Direct Usage
|
|
216
|
+
|
|
217
|
+
=== Reading version data from YAML files
|
|
218
|
+
|
|
219
|
+
The version data is stored in YAML files under `data/` directory. You can read these files directly:
|
|
220
|
+
|
|
221
|
+
[source,shell]
|
|
222
|
+
----
|
|
223
|
+
# View all Gemfile versions
|
|
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
|
|
234
|
+
----
|
|
235
|
+
|
|
236
|
+
.Parsing YAML with `yq`
|
|
237
|
+
|
|
238
|
+
[source,shell]
|
|
239
|
+
----
|
|
240
|
+
# Get the latest version from each source
|
|
241
|
+
yq '.metadata.latest_version' data/gemfile/versions.yaml
|
|
242
|
+
yq '.metadata.latest_version' data/snap/versions.yaml
|
|
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
|
|
254
|
+
----
|
|
255
|
+
|
|
256
|
+
.Parsing YAML with Ruby
|
|
257
|
+
|
|
258
|
+
[source,ruby]
|
|
259
|
+
----
|
|
260
|
+
require 'yaml'
|
|
261
|
+
|
|
262
|
+
# Load Gemfile versions
|
|
263
|
+
data = YAML.load_file('data/gemfile/versions.yaml')
|
|
264
|
+
puts "Latest: #{data['metadata']['latest_version']}"
|
|
265
|
+
puts "Count: #{data['metadata']['count']}"
|
|
266
|
+
|
|
267
|
+
# Find specific version
|
|
268
|
+
version_1_14_4 = data['versions'].find { |v| v['version'] == '1.14.4' }
|
|
269
|
+
----
|
|
270
|
+
|
|
271
|
+
=== CLI queries for specific use cases
|
|
272
|
+
|
|
273
|
+
[source,shell]
|
|
274
|
+
----
|
|
275
|
+
# Get the latest version across all sources
|
|
276
|
+
bundle exec exe/mnenv list-all -f json | jq -r '.[].latest'
|
|
277
|
+
|
|
278
|
+
# Check if a specific version exists in Snap
|
|
279
|
+
bundle exec exe/mnenv snap list | grep "1.14.4"
|
|
280
|
+
|
|
281
|
+
# Get Snap revision for a specific version/arch
|
|
282
|
+
bundle exec exe/mnenv snap list | grep "1.14.4" | grep "amd64"
|
|
283
|
+
|
|
284
|
+
# List all versions newer than 1.10.0
|
|
285
|
+
bundle exec exe/mnenv gemfile list | awk '/v1\.(1[4-9]|[2-9][0-9])/ {print}'
|
|
286
|
+
|
|
287
|
+
# Count versions per source
|
|
288
|
+
bundle exec exe/mnenv gemfile list | wc -l
|
|
289
|
+
bundle exec exe/mnenv snap list | wc -l
|
|
290
|
+
----
|
|
291
|
+
|
|
292
|
+
=== Using version data in scripts
|
|
293
|
+
|
|
294
|
+
.Bash script to check for new versions
|
|
295
|
+
|
|
296
|
+
[source,shell]
|
|
297
|
+
----
|
|
298
|
+
#!/bin/bash
|
|
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
|
|
337
|
+
----
|
|
338
|
+
|
|
339
|
+
.Get Snap revision for a specific version
|
|
340
|
+
|
|
341
|
+
[source,shell]
|
|
342
|
+
----
|
|
343
|
+
#!/bin/bash
|
|
344
|
+
# get_snap_revision.sh - Get Snap revision for version/arch
|
|
345
|
+
|
|
346
|
+
VERSION=$1
|
|
347
|
+
ARCH=${2:-amd64}
|
|
348
|
+
CHANNEL=${3:-stable}
|
|
349
|
+
|
|
350
|
+
if [ -z "$VERSION" ]; then
|
|
351
|
+
echo "Usage: $0 <version> [arch] [channel]"
|
|
352
|
+
exit 1
|
|
353
|
+
fi
|
|
354
|
+
|
|
355
|
+
# Get revision from YAML
|
|
356
|
+
yq ".versions[] | select(.version == \"$VERSION\" and .arch == \"$ARCH\" and .channel == \"$CHANNEL\") | .revision" data/snap/versions.yaml
|
|
357
|
+
----
|
|
358
|
+
|
|
359
|
+
.Compare versions across sources
|
|
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
|
|
393
|
+
|
|
394
|
+
[source,shell]
|
|
395
|
+
----
|
|
396
|
+
# List versions that have Gemfiles extracted
|
|
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
|
|
404
|
+
|
|
405
|
+
# Copy Gemfiles to your project
|
|
406
|
+
cp data/gemfile/v1.14.4/Gemfile /path/to/project/
|
|
407
|
+
cp data/gemfile/v1.14.4/Gemfile.lock.archived /path/to/project/Gemfile.lock
|
|
408
|
+
----
|
|
409
|
+
|
|
410
|
+
=== Snap-specific queries
|
|
411
|
+
|
|
412
|
+
Snap versions use composite keys (version-revision-arch-channel). Query them:
|
|
413
|
+
|
|
414
|
+
[source,shell]
|
|
415
|
+
----
|
|
416
|
+
# List all Snap versions with their revisions
|
|
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
|
|
430
|
+
----
|
|
431
|
+
|
|
432
|
+
=== JSON output for automation
|
|
433
|
+
|
|
434
|
+
[source,shell]
|
|
435
|
+
----
|
|
436
|
+
# Get all versions as JSON
|
|
437
|
+
bundle exec exe/mnenv list-all -f json > versions.json
|
|
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"
|
|
447
|
+
----
|
|
448
|
+
|
|
449
|
+
== Data structure
|
|
450
|
+
|
|
451
|
+
Version data is stored in YAML files under `data/`:
|
|
452
|
+
|
|
453
|
+
----
|
|
454
|
+
data/
|
|
455
|
+
├── gemfile/
|
|
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
|
|
469
|
+
|
|
470
|
+
Each version object contains:
|
|
471
|
+
|
|
472
|
+
[source,ruby]
|
|
473
|
+
----
|
|
474
|
+
{
|
|
475
|
+
"version": "1.14.4",
|
|
476
|
+
"published_at": "2025-01-15T10:30:00Z",
|
|
477
|
+
"parsed_at": "2025-01-15T10:30:00Z"
|
|
478
|
+
}
|
|
479
|
+
----
|
|
480
|
+
|
|
481
|
+
Additional fields per source:
|
|
482
|
+
|
|
483
|
+
* **Gemfile** - `gemfile_exists`, `gemfile_path`, `gemfile_lock_path`
|
|
484
|
+
* **Snap** - `revision`, `arch`, `channel`
|
|
485
|
+
* **Homebrew** - `tag_name`, `commit_sha`
|
|
486
|
+
* **Chocolatey** - `package_name`, `is_pre_release`
|
|
487
|
+
|
|
488
|
+
=== Using lock files with Bundler
|
|
489
|
+
|
|
490
|
+
To install the exact gems from a specific Metanorma Docker version:
|
|
491
|
+
|
|
492
|
+
[source,sh]
|
|
493
|
+
----
|
|
494
|
+
# Clone this repository
|
|
495
|
+
git clone https://github.com/metanorma/versions.git
|
|
496
|
+
cd versions
|
|
497
|
+
|
|
498
|
+
# Copy the files for your desired version
|
|
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
|
|
501
|
+
|
|
502
|
+
# Install the exact gems
|
|
503
|
+
cd /path/to/your/project
|
|
504
|
+
bundle install
|
|
505
|
+
----
|
|
506
|
+
|
|
507
|
+
=== Finding the Docker image version
|
|
508
|
+
|
|
509
|
+
To find which version of metanorma/metanorma Docker image corresponds to a
|
|
510
|
+
metanorma-cli version:
|
|
511
|
+
|
|
512
|
+
[source,sh]
|
|
513
|
+
----
|
|
514
|
+
# Inspect the Gemfile to see the metanorma-cli version
|
|
515
|
+
cat data/gemfile/v1.14.4/Gemfile
|
|
516
|
+
|
|
517
|
+
# Output: gem "metanorma-cli", "= 1.14.4"
|
|
518
|
+
----
|
|
519
|
+
|
|
520
|
+
The Docker image tag is the same as the metanorma-cli version:
|
|
521
|
+
|
|
522
|
+
[source,sh]
|
|
523
|
+
----
|
|
524
|
+
docker pull metanorma/metanorma:1.14.4
|
|
525
|
+
----
|
|
526
|
+
|
|
527
|
+
== Development
|
|
528
|
+
|
|
529
|
+
=== Running tests
|
|
530
|
+
|
|
531
|
+
[source,shell]
|
|
532
|
+
----
|
|
533
|
+
bundle exec rake test
|
|
534
|
+
----
|
|
535
|
+
|
|
536
|
+
=== Running Rake tasks
|
|
537
|
+
|
|
538
|
+
[source,shell]
|
|
539
|
+
----
|
|
540
|
+
# List available Rake tasks
|
|
541
|
+
bundle exec rake -T
|
|
542
|
+
|
|
543
|
+
# Generate index
|
|
544
|
+
bundle exec rake generate_index
|
|
545
|
+
----
|
|
546
|
+
|
|
547
|
+
=== Code quality
|
|
548
|
+
|
|
549
|
+
[source,shell]
|
|
550
|
+
----
|
|
551
|
+
# Run Rubocop
|
|
552
|
+
bundle exec rubocop
|
|
553
|
+
|
|
554
|
+
# Auto-correct issues
|
|
555
|
+
bundle exec rubocop --autocorrect
|
|
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)
|
|
589
|
+
----
|
|
590
|
+
|
|
591
|
+
== Contributing
|
|
592
|
+
|
|
593
|
+
1. Fork the repository
|
|
594
|
+
2. Create your feature branch (`git checkout -b my-amazing-feature`)
|
|
595
|
+
3. Commit your changes (`git commit -am 'Add some amazing feature'`)
|
|
596
|
+
4. Push to the branch (`git push origin my-amazing-feature`)
|
|
597
|
+
5. Open a Pull Request
|
|
598
|
+
|
|
599
|
+
== License
|
|
600
|
+
|
|
601
|
+
This repository is available as open source under the terms of the {file-license}[MIT License].
|
|
602
|
+
|
|
603
|
+
== Copyright
|
|
604
|
+
|
|
605
|
+
Copyright (c) 2025 Ribose Inc.
|