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.
Files changed (306) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +3 -0
  3. data/PROPOSAL.md +197 -0
  4. data/README.adoc +168 -461
  5. data/Rakefile +7 -4
  6. data/bin/Install-Mnenv.ps1 +145 -0
  7. data/bin/mnenv-installer +72 -0
  8. data/completions/bash +47 -0
  9. data/completions/fish +29 -0
  10. data/completions/powershell.ps1 +94 -0
  11. data/completions/zsh +43 -0
  12. data/lib/mnenv/binary_repository.rb +189 -0
  13. data/lib/mnenv/chocolatey.rb +7 -0
  14. data/lib/mnenv/cli.rb +110 -10
  15. data/lib/mnenv/commands/available_command.rb +169 -0
  16. data/lib/mnenv/commands/chocolatey_command.rb +4 -5
  17. data/lib/mnenv/commands/gemfile_command.rb +4 -5
  18. data/lib/mnenv/commands/homebrew_command.rb +4 -5
  19. data/lib/mnenv/commands/install_command.rb +234 -0
  20. data/lib/mnenv/commands/snap_command.rb +5 -7
  21. data/lib/mnenv/commands/uninstall_command.rb +111 -0
  22. data/lib/mnenv/commands/version_command.rb +167 -0
  23. data/lib/mnenv/commands.rb +9 -4
  24. data/lib/mnenv/gemfile/extractor.rb +10 -3
  25. data/lib/mnenv/gemfile.rb +8 -0
  26. data/lib/mnenv/gemfile_repository.rb +0 -2
  27. data/lib/mnenv/homebrew.rb +7 -0
  28. data/lib/mnenv/installer/base.rb +62 -0
  29. data/lib/mnenv/installer/factory.rb +46 -0
  30. data/lib/mnenv/installer.rb +12 -0
  31. data/lib/mnenv/installers/binary_installer.rb +242 -0
  32. data/lib/mnenv/installers/gemfile_installer.rb +76 -0
  33. data/lib/mnenv/json_formatter.rb +3 -13
  34. data/lib/mnenv/logger.rb +9 -1
  35. data/lib/mnenv/models/binary_version.rb +78 -0
  36. data/lib/mnenv/models/chocolatey_version.rb +7 -0
  37. data/lib/mnenv/models/gemfile_version.rb +19 -5
  38. data/lib/mnenv/models/homebrew_version.rb +7 -0
  39. data/lib/mnenv/models/snap_version.rb +8 -0
  40. data/lib/mnenv/models/version.rb +16 -0
  41. data/lib/mnenv/models.rb +7 -5
  42. data/lib/mnenv/paths.rb +69 -0
  43. data/lib/mnenv/platform_detector.rb +109 -0
  44. data/lib/mnenv/repository.rb +50 -35
  45. data/lib/mnenv/resolver +72 -0
  46. data/lib/mnenv/shells/base.rb +32 -0
  47. data/lib/mnenv/shells/bash.rb +72 -0
  48. data/lib/mnenv/shells/cmd.rb +108 -0
  49. data/lib/mnenv/shells/factory.rb +82 -0
  50. data/lib/mnenv/shells/power_shell.rb +110 -0
  51. data/lib/mnenv/shim_manager.rb +121 -0
  52. data/lib/mnenv/snap.rb +7 -0
  53. data/lib/mnenv/snap_repository.rb +2 -19
  54. data/lib/mnenv/source_registry.rb +69 -0
  55. data/lib/mnenv/sources.rb +46 -0
  56. data/lib/mnenv/version.rb +1 -1
  57. data/lib/mnenv/version_resolver.rb +108 -0
  58. data/lib/mnenv/versions_manager.rb +92 -0
  59. data/lib/mnenv.rb +6 -0
  60. data/mnenv.gemspec +4 -1
  61. data/scripts/cross-source-switching-test.sh +214 -0
  62. data/scripts/integration-test.sh +89 -0
  63. data/scripts/version-switching-test.sh +151 -0
  64. metadata +85 -247
  65. data/data/chocolatey/versions.yaml +0 -812
  66. data/data/gemfile/v1.1.6/Gemfile +0 -4
  67. data/data/gemfile/v1.1.6/Gemfile.lock.archived +0 -232
  68. data/data/gemfile/v1.1.7/Gemfile +0 -4
  69. data/data/gemfile/v1.1.7/Gemfile.lock.archived +0 -235
  70. data/data/gemfile/v1.1.8/Gemfile +0 -4
  71. data/data/gemfile/v1.1.8/Gemfile.lock.archived +0 -238
  72. data/data/gemfile/v1.10.0/Gemfile +0 -5
  73. data/data/gemfile/v1.10.0/Gemfile.lock.archived +0 -930
  74. data/data/gemfile/v1.10.1/Gemfile +0 -5
  75. data/data/gemfile/v1.10.1/Gemfile.lock.archived +0 -929
  76. data/data/gemfile/v1.10.10/Gemfile +0 -5
  77. data/data/gemfile/v1.10.10/Gemfile.lock.archived +0 -973
  78. data/data/gemfile/v1.10.11/Gemfile +0 -5
  79. data/data/gemfile/v1.10.11/Gemfile.lock.archived +0 -975
  80. data/data/gemfile/v1.10.2/Gemfile +0 -5
  81. data/data/gemfile/v1.10.2/Gemfile.lock.archived +0 -939
  82. data/data/gemfile/v1.10.3/Gemfile +0 -5
  83. data/data/gemfile/v1.10.3/Gemfile.lock.archived +0 -946
  84. data/data/gemfile/v1.10.5/Gemfile +0 -5
  85. data/data/gemfile/v1.10.5/Gemfile.lock.archived +0 -958
  86. data/data/gemfile/v1.10.6/Gemfile +0 -5
  87. data/data/gemfile/v1.10.6/Gemfile.lock.archived +0 -969
  88. data/data/gemfile/v1.10.7/Gemfile +0 -5
  89. data/data/gemfile/v1.10.7/Gemfile.lock.archived +0 -969
  90. data/data/gemfile/v1.10.8/Gemfile +0 -5
  91. data/data/gemfile/v1.10.8/Gemfile.lock.archived +0 -968
  92. data/data/gemfile/v1.10.9/Gemfile +0 -5
  93. data/data/gemfile/v1.10.9/Gemfile.lock.archived +0 -972
  94. data/data/gemfile/v1.11.0/Gemfile +0 -5
  95. data/data/gemfile/v1.11.0/Gemfile.lock.archived +0 -971
  96. data/data/gemfile/v1.11.1/Gemfile +0 -5
  97. data/data/gemfile/v1.11.1/Gemfile.lock.archived +0 -975
  98. data/data/gemfile/v1.11.4/Gemfile +0 -5
  99. data/data/gemfile/v1.11.4/Gemfile.lock.archived +0 -1046
  100. data/data/gemfile/v1.11.5/Gemfile +0 -5
  101. data/data/gemfile/v1.11.5/Gemfile.lock.archived +0 -1047
  102. data/data/gemfile/v1.12.10/Gemfile +0 -3
  103. data/data/gemfile/v1.12.10/Gemfile.lock.archived +0 -1073
  104. data/data/gemfile/v1.12.3/Gemfile +0 -3
  105. data/data/gemfile/v1.12.3/Gemfile.lock.archived +0 -1050
  106. data/data/gemfile/v1.12.4/Gemfile +0 -3
  107. data/data/gemfile/v1.12.4/Gemfile.lock.archived +0 -1056
  108. data/data/gemfile/v1.12.5/Gemfile +0 -3
  109. data/data/gemfile/v1.12.5/Gemfile.lock.archived +0 -1054
  110. data/data/gemfile/v1.12.6/Gemfile +0 -3
  111. data/data/gemfile/v1.12.6/Gemfile.lock.archived +0 -1056
  112. data/data/gemfile/v1.12.8/Gemfile +0 -3
  113. data/data/gemfile/v1.12.8/Gemfile.lock.archived +0 -1063
  114. data/data/gemfile/v1.13.0/Gemfile +0 -3
  115. data/data/gemfile/v1.13.0/Gemfile.lock.archived +0 -1074
  116. data/data/gemfile/v1.13.2/Gemfile +0 -3
  117. data/data/gemfile/v1.13.2/Gemfile.lock.archived +0 -899
  118. data/data/gemfile/v1.13.3/Gemfile +0 -3
  119. data/data/gemfile/v1.13.3/Gemfile.lock.archived +0 -938
  120. data/data/gemfile/v1.13.4/Gemfile +0 -3
  121. data/data/gemfile/v1.13.4/Gemfile.lock.archived +0 -938
  122. data/data/gemfile/v1.13.5/Gemfile +0 -3
  123. data/data/gemfile/v1.13.5/Gemfile.lock.archived +0 -944
  124. data/data/gemfile/v1.13.7/Gemfile +0 -3
  125. data/data/gemfile/v1.13.7/Gemfile.lock.archived +0 -944
  126. data/data/gemfile/v1.13.8/Gemfile +0 -3
  127. data/data/gemfile/v1.13.8/Gemfile.lock.archived +0 -944
  128. data/data/gemfile/v1.13.9/Gemfile +0 -3
  129. data/data/gemfile/v1.13.9/Gemfile.lock.archived +0 -956
  130. data/data/gemfile/v1.14.3/Gemfile +0 -3
  131. data/data/gemfile/v1.14.3/Gemfile.lock.archived +0 -950
  132. data/data/gemfile/v1.2.12/Gemfile +0 -3
  133. data/data/gemfile/v1.2.12/Gemfile.lock.archived +0 -283
  134. data/data/gemfile/v1.2.2/Gemfile +0 -4
  135. data/data/gemfile/v1.2.2/Gemfile.lock.archived +0 -224
  136. data/data/gemfile/v1.2.3/Gemfile +0 -4
  137. data/data/gemfile/v1.2.3/Gemfile.lock.archived +0 -231
  138. data/data/gemfile/v1.2.6/Gemfile +0 -4
  139. data/data/gemfile/v1.2.6/Gemfile.lock.archived +0 -239
  140. data/data/gemfile/v1.2.8/Gemfile +0 -4
  141. data/data/gemfile/v1.2.8/Gemfile.lock.archived +0 -233
  142. data/data/gemfile/v1.2.9/Gemfile +0 -4
  143. data/data/gemfile/v1.2.9/Gemfile.lock.archived +0 -245
  144. data/data/gemfile/v1.3.1/Gemfile +0 -3
  145. data/data/gemfile/v1.3.1/Gemfile.lock.archived +0 -296
  146. data/data/gemfile/v1.3.2/Gemfile +0 -3
  147. data/data/gemfile/v1.3.2/Gemfile.lock.archived +0 -296
  148. data/data/gemfile/v1.3.4/Gemfile +0 -3
  149. data/data/gemfile/v1.3.4/Gemfile.lock.archived +0 -284
  150. data/data/gemfile/v1.3.5/Gemfile +0 -3
  151. data/data/gemfile/v1.3.5/Gemfile.lock.archived +0 -284
  152. data/data/gemfile/v1.3.6/Gemfile +0 -3
  153. data/data/gemfile/v1.3.6/Gemfile.lock.archived +0 -286
  154. data/data/gemfile/v1.3.9/Gemfile +0 -3
  155. data/data/gemfile/v1.3.9/Gemfile.lock.archived +0 -334
  156. data/data/gemfile/v1.4.0/Gemfile +0 -3
  157. data/data/gemfile/v1.4.0/Gemfile.lock.archived +0 -330
  158. data/data/gemfile/v1.4.10/Gemfile +0 -4
  159. data/data/gemfile/v1.4.10/Gemfile.lock.archived +0 -461
  160. data/data/gemfile/v1.4.11/Gemfile +0 -4
  161. data/data/gemfile/v1.4.11/Gemfile.lock.archived +0 -452
  162. data/data/gemfile/v1.4.12/Gemfile +0 -4
  163. data/data/gemfile/v1.4.12/Gemfile.lock.archived +0 -452
  164. data/data/gemfile/v1.4.13/Gemfile +0 -4
  165. data/data/gemfile/v1.4.13/Gemfile.lock.archived +0 -455
  166. data/data/gemfile/v1.4.14/Gemfile +0 -4
  167. data/data/gemfile/v1.4.14/Gemfile.lock.archived +0 -456
  168. data/data/gemfile/v1.4.18/Gemfile +0 -3
  169. data/data/gemfile/v1.4.18/Gemfile.lock.archived +0 -486
  170. data/data/gemfile/v1.4.3/Gemfile +0 -3
  171. data/data/gemfile/v1.4.3/Gemfile.lock.archived +0 -339
  172. data/data/gemfile/v1.4.4/Gemfile +0 -3
  173. data/data/gemfile/v1.4.4/Gemfile.lock.archived +0 -339
  174. data/data/gemfile/v1.4.5/Gemfile +0 -3
  175. data/data/gemfile/v1.4.5/Gemfile.lock.archived +0 -348
  176. data/data/gemfile/v1.4.6/Gemfile +0 -3
  177. data/data/gemfile/v1.4.6/Gemfile.lock.archived +0 -357
  178. data/data/gemfile/v1.4.7/Gemfile +0 -3
  179. data/data/gemfile/v1.4.7/Gemfile.lock.archived +0 -391
  180. data/data/gemfile/v1.4.8/Gemfile +0 -3
  181. data/data/gemfile/v1.4.8/Gemfile.lock.archived +0 -445
  182. data/data/gemfile/v1.4.9/Gemfile +0 -3
  183. data/data/gemfile/v1.4.9/Gemfile.lock.archived +0 -448
  184. data/data/gemfile/v1.5.0/Gemfile +0 -3
  185. data/data/gemfile/v1.5.0/Gemfile.lock.archived +0 -478
  186. data/data/gemfile/v1.5.10/Gemfile +0 -3
  187. data/data/gemfile/v1.5.10/Gemfile.lock.archived +0 -668
  188. data/data/gemfile/v1.5.11/Gemfile +0 -3
  189. data/data/gemfile/v1.5.11/Gemfile.lock.archived +0 -668
  190. data/data/gemfile/v1.5.15/Gemfile +0 -3
  191. data/data/gemfile/v1.5.15/Gemfile.lock.archived +0 -686
  192. data/data/gemfile/v1.5.16/Gemfile +0 -3
  193. data/data/gemfile/v1.5.16/Gemfile.lock.archived +0 -684
  194. data/data/gemfile/v1.5.17/Gemfile +0 -3
  195. data/data/gemfile/v1.5.17/Gemfile.lock.archived +0 -684
  196. data/data/gemfile/v1.5.18/Gemfile +0 -5
  197. data/data/gemfile/v1.5.18/Gemfile.lock.archived +0 -691
  198. data/data/gemfile/v1.5.19/Gemfile +0 -5
  199. data/data/gemfile/v1.5.19/Gemfile.lock.archived +0 -703
  200. data/data/gemfile/v1.5.20/Gemfile +0 -5
  201. data/data/gemfile/v1.5.20/Gemfile.lock.archived +0 -703
  202. data/data/gemfile/v1.5.21/Gemfile +0 -5
  203. data/data/gemfile/v1.5.21/Gemfile.lock.archived +0 -707
  204. data/data/gemfile/v1.5.22/Gemfile +0 -5
  205. data/data/gemfile/v1.5.22/Gemfile.lock.archived +0 -707
  206. data/data/gemfile/v1.5.23/Gemfile +0 -5
  207. data/data/gemfile/v1.5.23/Gemfile.lock.archived +0 -711
  208. data/data/gemfile/v1.5.24/Gemfile +0 -5
  209. data/data/gemfile/v1.5.24/Gemfile.lock.archived +0 -711
  210. data/data/gemfile/v1.5.3/Gemfile +0 -3
  211. data/data/gemfile/v1.5.3/Gemfile.lock.archived +0 -651
  212. data/data/gemfile/v1.5.4/Gemfile +0 -3
  213. data/data/gemfile/v1.5.4/Gemfile.lock.archived +0 -657
  214. data/data/gemfile/v1.5.5/Gemfile +0 -3
  215. data/data/gemfile/v1.5.5/Gemfile.lock.archived +0 -657
  216. data/data/gemfile/v1.5.6/Gemfile +0 -3
  217. data/data/gemfile/v1.5.6/Gemfile.lock.archived +0 -657
  218. data/data/gemfile/v1.5.7/Gemfile +0 -3
  219. data/data/gemfile/v1.5.7/Gemfile.lock.archived +0 -657
  220. data/data/gemfile/v1.5.8/Gemfile +0 -3
  221. data/data/gemfile/v1.5.8/Gemfile.lock.archived +0 -655
  222. data/data/gemfile/v1.5.9/Gemfile +0 -3
  223. data/data/gemfile/v1.5.9/Gemfile.lock.archived +0 -656
  224. data/data/gemfile/v1.6.1/Gemfile +0 -5
  225. data/data/gemfile/v1.6.1/Gemfile.lock.archived +0 -721
  226. data/data/gemfile/v1.6.10/Gemfile +0 -5
  227. data/data/gemfile/v1.6.10/Gemfile.lock.archived +0 -744
  228. data/data/gemfile/v1.6.11/Gemfile +0 -5
  229. data/data/gemfile/v1.6.11/Gemfile.lock.archived +0 -744
  230. data/data/gemfile/v1.6.12/Gemfile +0 -5
  231. data/data/gemfile/v1.6.12/Gemfile.lock.archived +0 -745
  232. data/data/gemfile/v1.6.13/Gemfile +0 -5
  233. data/data/gemfile/v1.6.13/Gemfile.lock.archived +0 -745
  234. data/data/gemfile/v1.6.14/Gemfile +0 -5
  235. data/data/gemfile/v1.6.14/Gemfile.lock.archived +0 -754
  236. data/data/gemfile/v1.6.15/Gemfile +0 -5
  237. data/data/gemfile/v1.6.15/Gemfile.lock.archived +0 -757
  238. data/data/gemfile/v1.6.2/Gemfile +0 -5
  239. data/data/gemfile/v1.6.2/Gemfile.lock.archived +0 -718
  240. data/data/gemfile/v1.6.3/Gemfile +0 -5
  241. data/data/gemfile/v1.6.3/Gemfile.lock.archived +0 -728
  242. data/data/gemfile/v1.6.4/Gemfile +0 -5
  243. data/data/gemfile/v1.6.4/Gemfile.lock.archived +0 -730
  244. data/data/gemfile/v1.6.5/Gemfile +0 -5
  245. data/data/gemfile/v1.6.5/Gemfile.lock.archived +0 -733
  246. data/data/gemfile/v1.6.6/Gemfile +0 -5
  247. data/data/gemfile/v1.6.6/Gemfile.lock.archived +0 -733
  248. data/data/gemfile/v1.6.7/Gemfile +0 -5
  249. data/data/gemfile/v1.6.7/Gemfile.lock.archived +0 -733
  250. data/data/gemfile/v1.6.9/Gemfile +0 -5
  251. data/data/gemfile/v1.6.9/Gemfile.lock.archived +0 -744
  252. data/data/gemfile/v1.7.0/Gemfile +0 -5
  253. data/data/gemfile/v1.7.0/Gemfile.lock.archived +0 -750
  254. data/data/gemfile/v1.7.1/Gemfile +0 -5
  255. data/data/gemfile/v1.7.1/Gemfile.lock.archived +0 -750
  256. data/data/gemfile/v1.7.2/Gemfile +0 -5
  257. data/data/gemfile/v1.7.2/Gemfile.lock.archived +0 -747
  258. data/data/gemfile/v1.7.3/Gemfile +0 -5
  259. data/data/gemfile/v1.7.3/Gemfile.lock.archived +0 -755
  260. data/data/gemfile/v1.7.4/Gemfile +0 -5
  261. data/data/gemfile/v1.7.4/Gemfile.lock.archived +0 -756
  262. data/data/gemfile/v1.7.5/Gemfile +0 -5
  263. data/data/gemfile/v1.7.5/Gemfile.lock.archived +0 -759
  264. data/data/gemfile/v1.7.6/Gemfile +0 -5
  265. data/data/gemfile/v1.7.6/Gemfile.lock.archived +0 -768
  266. data/data/gemfile/v1.8.10/Gemfile +0 -5
  267. data/data/gemfile/v1.8.10/Gemfile.lock.archived +0 -792
  268. data/data/gemfile/v1.8.11/Gemfile +0 -5
  269. data/data/gemfile/v1.8.11/Gemfile.lock.archived +0 -862
  270. data/data/gemfile/v1.8.3/Gemfile +0 -5
  271. data/data/gemfile/v1.8.3/Gemfile.lock.archived +0 -773
  272. data/data/gemfile/v1.8.4/Gemfile +0 -5
  273. data/data/gemfile/v1.8.4/Gemfile.lock.archived +0 -768
  274. data/data/gemfile/v1.8.5/Gemfile +0 -5
  275. data/data/gemfile/v1.8.5/Gemfile.lock.archived +0 -768
  276. data/data/gemfile/v1.8.6/Gemfile +0 -5
  277. data/data/gemfile/v1.8.6/Gemfile.lock.archived +0 -777
  278. data/data/gemfile/v1.8.7/Gemfile +0 -5
  279. data/data/gemfile/v1.8.7/Gemfile.lock.archived +0 -777
  280. data/data/gemfile/v1.8.8/Gemfile +0 -5
  281. data/data/gemfile/v1.8.8/Gemfile.lock.archived +0 -778
  282. data/data/gemfile/v1.8.9/Gemfile +0 -5
  283. data/data/gemfile/v1.8.9/Gemfile.lock.archived +0 -775
  284. data/data/gemfile/v1.9.0/Gemfile +0 -5
  285. data/data/gemfile/v1.9.0/Gemfile.lock.archived +0 -871
  286. data/data/gemfile/v1.9.1/Gemfile +0 -5
  287. data/data/gemfile/v1.9.1/Gemfile.lock.archived +0 -906
  288. data/data/gemfile/v1.9.2/Gemfile +0 -5
  289. data/data/gemfile/v1.9.2/Gemfile.lock.archived +0 -898
  290. data/data/gemfile/v1.9.3/Gemfile +0 -5
  291. data/data/gemfile/v1.9.3/Gemfile.lock.archived +0 -898
  292. data/data/gemfile/v1.9.4/Gemfile +0 -5
  293. data/data/gemfile/v1.9.4/Gemfile.lock.archived +0 -901
  294. data/data/gemfile/v1.9.5/Gemfile +0 -5
  295. data/data/gemfile/v1.9.5/Gemfile.lock.archived +0 -903
  296. data/data/gemfile/v1.9.6/Gemfile +0 -5
  297. data/data/gemfile/v1.9.6/Gemfile.lock.archived +0 -900
  298. data/data/gemfile/v1.9.7/Gemfile +0 -5
  299. data/data/gemfile/v1.9.7/Gemfile.lock.archived +0 -922
  300. data/data/gemfile/v1.9.8/Gemfile +0 -5
  301. data/data/gemfile/v1.9.8/Gemfile.lock.archived +0 -933
  302. data/data/gemfile/versions.yaml +0 -751
  303. data/data/homebrew/versions.yaml +0 -567
  304. data/data/snap/github_tags.json +0 -42
  305. data/data/snap/versions.yaml +0 -589
  306. data/snapcraft-list-copied-from-site.md +0 -101
@@ -0,0 +1,214 @@
1
+ #!/bin/bash
2
+ # Local cross-source switching test script for mnenv
3
+ # Tests switching between gemfile and binary for the same version
4
+ # Usage: ./scripts/cross-source-switching-test.sh [VERSION]
5
+
6
+ set -e
7
+
8
+ # Colors
9
+ RED='\033[0;31m'
10
+ GREEN='\033[0;32m'
11
+ YELLOW='\033[1;33m'
12
+ BLUE='\033[0;34m'
13
+ NC='\033[0m' # No Color
14
+
15
+ log_info() {
16
+ echo -e "${GREEN}[INFO]${NC} $1"
17
+ }
18
+
19
+ log_warn() {
20
+ echo -e "${YELLOW}[WARN]${NC} $1"
21
+ }
22
+
23
+ log_error() {
24
+ echo -e "${RED}[ERROR]${NC} $1"
25
+ }
26
+
27
+ log_step() {
28
+ echo -e "${BLUE}=== $1 ===${NC}"
29
+ }
30
+
31
+ # Version to test
32
+ VERSION="${1:-1.14.3}"
33
+
34
+ # Check if we're in the mnenv directory
35
+ if [ ! -f "mnenv.gemspec" ]; then
36
+ log_error "Please run this script from the mnenv root directory"
37
+ exit 1
38
+ fi
39
+
40
+ # Install mnenv
41
+ log_step "Installing mnenv"
42
+ bundle install > /dev/null 2>&1
43
+ rake install > /dev/null 2>&1
44
+ log_info "mnenv $(mnenv version) installed"
45
+
46
+ # Add mnenv to PATH
47
+ export PATH="$HOME/.mnenv/shims:$PATH"
48
+
49
+ # Clean up any existing test state
50
+ log_step "Cleaning up previous test state"
51
+ rm -f ~/.mnenv/version ~/.mnenv/source
52
+ rm -rf "/tmp/mnenv-cross-test-$VERSION"
53
+ mkdir -p "/tmp/mnenv-cross-test-$VERSION"
54
+
55
+ # Check binary availability
56
+ log_step "Checking binary availability for version $VERSION"
57
+ BINARY_URL="https://github.com/metanorma/packed-mn/releases/download/v${VERSION}/metanorma-$(uname -s | tr '[:upper:]' '[:lower:]')"
58
+ BINARY_AVAILABLE=false
59
+
60
+ if curl -s -f -L -o /dev/null "$BINARY_URL" 2>/dev/null; then
61
+ BINARY_AVAILABLE=true
62
+ log_info "Binary is available for $VERSION"
63
+ else
64
+ log_warn "Binary NOT available for $VERSION"
65
+ log_info "Will test gemfile installation only"
66
+ fi
67
+
68
+ # Install with gemfile
69
+ log_step "Installing Metanorma $VERSION (gemfile)"
70
+ if mnenv install "$VERSION" --source gemfile > /dev/null 2>&1; then
71
+ log_info "✓ Gemfile installation successful"
72
+ else
73
+ log_warn "⚠ Gemfile installation may have failed (may already be installed)"
74
+ fi
75
+
76
+ # Install with binary
77
+ if [ "$BINARY_AVAILABLE" = true ]; then
78
+ log_step "Installing Metanorma $VERSION (binary)"
79
+ if mnenv install "$VERSION" --source binary > /dev/null 2>&1; then
80
+ log_info "✓ Binary installation successful"
81
+ else
82
+ log_warn "⚠ Binary installation may have failed (may already be installed)"
83
+ fi
84
+
85
+ # Show both installations
86
+ log_step "Installation structure"
87
+ echo "Gemfile installation:"
88
+ ls -lah ~/.mnenv/versions/"$VERSION"/gemfile/ 2>/dev/null || echo " Not found"
89
+
90
+ echo ""
91
+ echo "Binary installation:"
92
+ ls -lah ~/.mnenv/versions/"$VERSION"/binary/ 2>/dev/null || echo " Not found"
93
+ fi
94
+
95
+ # Show installed versions
96
+ log_step "Installed versions"
97
+ mnenv versions
98
+
99
+ if [ "$BINARY_AVAILABLE" = false ]; then
100
+ echo ""
101
+ log_warn "Binary not available - skipping cross-source tests"
102
+ log_info "Binary tests require packed-mn releases"
103
+ exit 0
104
+ fi
105
+
106
+ # Test 1: Switch from gemfile to binary
107
+ log_step "Test 1: Switch from gemfile to binary"
108
+ mnenv global "$VERSION" --source gemfile
109
+ v_gemfile=$(metanorma --version 2>&1 | grep -oP '\d+\.\d+\.\d+' || echo "failed")
110
+ log_info "Gemfile source: metanorma --version = $v_gemfile"
111
+
112
+ mnenv global "$VERSION" --source binary
113
+ v_binary=$(metanorma --version 2>&1 | grep -oP '\d+\.\d+\.\d+' || echo "failed")
114
+ log_info "Binary source: metanorma --version = $v_binary"
115
+
116
+ if [ "$v_gemfile" = "$VERSION" ] && [ "$v_binary" = "$VERSION" ]; then
117
+ log_info "✓ Both sources produce correct version $VERSION"
118
+ else
119
+ log_error "✗ Version mismatch: gemfile=$v_gemfile, binary=$v_binary"
120
+ exit 1
121
+ fi
122
+
123
+ # Test 2: Switch from binary to gemfile
124
+ log_step "Test 2: Switch from binary to gemfile"
125
+ mnenv global "$VERSION" --source binary
126
+ v1=$(metanorma --version 2>&1 | grep -oP '\d+\.\d+\.\d+' || echo "failed")
127
+
128
+ mnenv global "$VERSION" --source gemfile
129
+ v2=$(metanorma --version 2>&1 | grep -oP '\d+\.\d+\.\d+' || echo "failed")
130
+
131
+ if [ "$v1" = "$VERSION" ] && [ "$v2" = "$VERSION" ]; then
132
+ log_info "✓ Bidirectional switching works"
133
+ else
134
+ log_error "✗ Version mismatch: binary=$v1, gemfile=$v2"
135
+ exit 1
136
+ fi
137
+
138
+ # Test 3: Rapid switching
139
+ log_step "Test 3: Rapid source switching (5 rounds)"
140
+ for i in {1..5}; do
141
+ mnenv global "$VERSION" --source gemfile > /dev/null
142
+ v_g=$(metanorma --version 2>&1 | grep -oP '\d+\.\d+\.\d+' || echo "failed")
143
+
144
+ mnenv global "$VERSION" --source binary > /dev/null
145
+ v_b=$(metanorma --version 2>&1 | grep -oP '\d+\.\d+\.\d+' || echo "failed")
146
+
147
+ if [ "$v_g" != "$VERSION" ] || [ "$v_b" != "$VERSION" ]; then
148
+ log_error "✗ Round $i failed: gemfile=$v_g, binary=$v_b"
149
+ exit 1
150
+ fi
151
+ done
152
+ log_info "✓ Rapid switching test passed"
153
+
154
+ # Test 4: Local override with different source
155
+ log_step "Test 4: Local override with source change"
156
+ cd "/tmp/mnenv-cross-test-$VERSION"
157
+
158
+ # Set global to gemfile
159
+ mnenv global "$VERSION" --source gemfile > /dev/null
160
+ v_global=$(metanorma --version 2>&1 | grep -oP '\d+\.\d+\.\d+' || echo "failed")
161
+
162
+ # Set local to binary
163
+ mnenv local "$VERSION" --source binary > /dev/null
164
+ v_local=$(metanorma --version 2>&1 | grep -oP '\d+\.\d+\.\d+' || echo "failed")
165
+
166
+ if [ "$v_global" = "$VERSION" ] && [ "$v_local" = "$VERSION" ]; then
167
+ log_info "✓ Local override works with different source"
168
+ else
169
+ log_error "✗ Local override failed"
170
+ exit 1
171
+ fi
172
+
173
+ # Test 5: Shell override takes precedence
174
+ log_step "Test 5: Shell session override"
175
+ # Local is binary
176
+ export METANORMA_VERSION="$VERSION"
177
+ export METANORMA_SOURCE=gemfile
178
+ v_env=$(metanorma --version 2>&1 | grep -oP '\d+\.\d+\.\d+' || echo "failed")
179
+
180
+ if [ "$v_env" = "$VERSION" ]; then
181
+ log_info "✓ Environment variable overrides local file"
182
+ else
183
+ log_error "✗ Environment override failed"
184
+ exit 1
185
+ fi
186
+ unset METANORMA_VERSION METANORMA_SOURCE
187
+
188
+ # Test 6: Version list shows both sources
189
+ log_step "Test 6: Version list shows both sources"
190
+ if mnenv versions | grep -q "$VERSION.*gemfile"; then
191
+ log_info "✓ Gemfile source shown in version list"
192
+ else
193
+ log_error "✗ Gemfile source not in version list"
194
+ exit 1
195
+ fi
196
+
197
+ if mnenv versions | grep -q "$VERSION.*binary"; then
198
+ log_info "✓ Binary source shown in version list"
199
+ else
200
+ log_error "✗ Binary source not in version list"
201
+ exit 1
202
+ fi
203
+
204
+ # Final state
205
+ log_step "All tests passed!"
206
+ echo ""
207
+ echo "Final state:"
208
+ echo " Global version: $(cat ~/.mnenv/version 2>/dev/null || echo 'not set')"
209
+ echo " Global source: $(cat ~/.mnenv/source 2>/dev/null || echo 'not set')"
210
+ echo " Current metanorma: $(metanorma --version 2>&1 | head -1)"
211
+
212
+ # Clean up
213
+ cd /
214
+ rm -rf "/tmp/mnenv-cross-test-$VERSION"
@@ -0,0 +1,89 @@
1
+ #!/bin/bash
2
+ # Local integration test script for mnenv
3
+ # Usage: ./scripts/integration-test.sh [gemfile|binary]
4
+
5
+ set -e
6
+
7
+ # Configuration
8
+ METANORMA_VERSION="${METANORMA_VERSION:-1.14.4}"
9
+ METHOD="${1:-gemfile}"
10
+ SAMPLES_REPO="${SAMPLES_REPO:-metanorma/mn-samples-cc}"
11
+ SAMPLES_DIR="/tmp/mn-samples-cc"
12
+
13
+ # Colors
14
+ RED='\033[0;31m'
15
+ GREEN='\033[0;32m'
16
+ YELLOW='\033[1;33m'
17
+ NC='\033[0m' # No Color
18
+
19
+ log_info() {
20
+ echo -e "${GREEN}[INFO]${NC} $1"
21
+ }
22
+
23
+ log_warn() {
24
+ echo -e "${YELLOW}[WARN]${NC} $1"
25
+ }
26
+
27
+ log_error() {
28
+ echo -e "${RED}[ERROR]${NC} $1"
29
+ }
30
+
31
+ # Check if we're in the mnenv directory
32
+ if [ ! -f "mnenv.gemspec" ]; then
33
+ log_error "Please run this script from the mnenv root directory"
34
+ exit 1
35
+ fi
36
+
37
+ # Check if mnenv is installed
38
+ if ! command -v mnenv &> /dev/null; then
39
+ log_info "Installing mnenv..."
40
+ bundle install
41
+ rake install
42
+ else
43
+ log_info "mnenv is already installed"
44
+ fi
45
+
46
+ # Install Metanorma
47
+ log_info "Installing Metanorma ${METANORMA_VERSION} (method: ${METHOD})..."
48
+ mnenv install "${METANORMA_VERSION}" --source "${METHOD}"
49
+ mnenv global "${METANORMA_VERSION}" --source "${METHOD}"
50
+
51
+ # Show installed versions
52
+ log_info "Installed versions:"
53
+ mnenv versions
54
+
55
+ # Clone or update samples repository
56
+ if [ -d "$SAMPLES_DIR" ]; then
57
+ log_info "Updating samples repository..."
58
+ cd "$SAMPLES_DIR"
59
+ git pull
60
+ else
61
+ log_info "Cloning samples repository..."
62
+ git clone "https://github.com/${SAMPLES_REPO}.git" "$SAMPLES_DIR"
63
+ cd "$SAMPLES_DIR"
64
+ fi
65
+
66
+ # Test single document compilation
67
+ log_info "Testing single document compilation..."
68
+ if metanorma compile sources/cc-18011.adoc; then
69
+ log_info "Document compilation successful"
70
+ ls -lah sources/cc-18011.* 2>/dev/null || true
71
+ else
72
+ log_error "Document compilation failed"
73
+ exit 1
74
+ fi
75
+
76
+ # Test site generation
77
+ log_info "Testing site generation..."
78
+ if metanorma site generate --agree-to-terms; then
79
+ log_info "Site generation successful"
80
+ if [ -d "site" ]; then
81
+ log_info "Site contents:"
82
+ ls -lah site/ | head -20
83
+ fi
84
+ else
85
+ log_error "Site generation failed"
86
+ exit 1
87
+ fi
88
+
89
+ log_info "All tests passed!"
@@ -0,0 +1,151 @@
1
+ #!/bin/bash
2
+ # Local version switching test script for mnenv
3
+ # Usage: ./scripts/version-switching-test.sh
4
+
5
+ set -e
6
+
7
+ # Colors
8
+ RED='\033[0;31m'
9
+ GREEN='\033[0;32m'
10
+ YELLOW='\033[1;33m'
11
+ NC='\033[0m' # No Color
12
+
13
+ log_info() {
14
+ echo -e "${GREEN}[INFO]${NC} $1"
15
+ }
16
+
17
+ log_warn() {
18
+ echo -e "${YELLOW}[WARN]${NC} $1"
19
+ }
20
+
21
+ log_error() {
22
+ echo -e "${RED}[ERROR]${NC} $1"
23
+ }
24
+
25
+ # Versions to test
26
+ VERSIONS=("1.13.9" "1.14.3")
27
+ SOURCE="gemfile"
28
+
29
+ # Check if we're in the mnenv directory
30
+ if [ ! -f "mnenv.gemspec" ]; then
31
+ log_error "Please run this script from the mnenv root directory"
32
+ exit 1
33
+ fi
34
+
35
+ # Install mnenv
36
+ log_info "Installing mnenv..."
37
+ bundle install > /dev/null 2>&1
38
+ rake install > /dev/null 2>&1
39
+ log_info "mnenv $(mnenv version) installed"
40
+
41
+ # Add mnenv to PATH
42
+ export PATH="$HOME/.mnenv/shims:$PATH"
43
+
44
+ # Clean up any existing test state
45
+ log_info "Cleaning up previous test state..."
46
+ rm -f ~/.mnenv/version ~/.mnenv/source
47
+ rm -rf /tmp/mnenv-test-*
48
+
49
+ # Install test versions
50
+ log_info "Installing Metanorma versions: ${VERSIONS[*]}..."
51
+ for version in "${VERSIONS[@]}"; do
52
+ if mnenv install "$version" --source "$SOURCE" > /dev/null 2>&1; then
53
+ log_info " ✓ Installed $version"
54
+ else
55
+ log_warn " ⚠ Failed to install $version (may already be installed)"
56
+ fi
57
+ done
58
+
59
+ echo ""
60
+ log_info "=== Test 1: Global Version Switching ==="
61
+ mnenv global "${VERSIONS[0]}" --source "$SOURCE"
62
+ v1=$(metanorma --version 2>&1 | grep -oP '\d+\.\d+\.\d+' || echo "failed")
63
+ if [ "$v1" = "${VERSIONS[0]}" ]; then
64
+ log_info " ✓ Global ${VERSIONS[0]} verified"
65
+ else
66
+ log_error " ✗ Expected ${VERSIONS[0]}, got $v1"
67
+ exit 1
68
+ fi
69
+
70
+ mnenv global "${VERSIONS[1]}" --source "$SOURCE"
71
+ v2=$(metanorma --version 2>&1 | grep -oP '\d+\.\d+\.\d+' || echo "failed")
72
+ if [ "$v2" = "${VERSIONS[1]}" ]; then
73
+ log_info " ✓ Global ${VERSIONS[1]} verified"
74
+ else
75
+ log_error " ✗ Expected ${VERSIONS[1]}, got $v2"
76
+ exit 1
77
+ fi
78
+
79
+ echo ""
80
+ log_info "=== Test 2: Local Version Override ==="
81
+ mnenv global "${VERSIONS[1]}" --source "$SOURCE"
82
+ TEST_DIR="/tmp/mnenv-test-local"
83
+ mkdir -p "$TEST_DIR"
84
+ cd "$TEST_DIR"
85
+ mnenv local "${VERSIONS[0]}" --source "$SOURCE"
86
+
87
+ v_local=$(metanorma --version 2>&1 | grep -oP '\d+\.\d+\.\d+' || echo "failed")
88
+ if [ "$v_local" = "${VERSIONS[0]}" ]; then
89
+ log_info " ✓ Local ${VERSIONS[0]} overrides global ${VERSIONS[1]}"
90
+ else
91
+ log_error " ✗ Expected ${VERSIONS[0]}, got $v_local"
92
+ exit 1
93
+ fi
94
+
95
+ cd /tmp
96
+ v_outside=$(metanorma --version 2>&1 | grep -oP '\d+\.\d+\.\d+' || echo "failed")
97
+ if [ "$v_outside" = "${VERSIONS[1]}" ]; then
98
+ log_info " ✓ Global ${VERSIONS[1]} restored outside project"
99
+ else
100
+ log_error " ✗ Expected ${VERSIONS[1]}, got $v_outside"
101
+ exit 1
102
+ fi
103
+
104
+ echo ""
105
+ log_info "=== Test 3: Shell Session Override ==="
106
+ cd "$TEST_DIR"
107
+ export METANORMA_VERSION="${VERSIONS[1]}"
108
+ export METANORMA_SOURCE="$SOURCE"
109
+ v_env=$(metanorma --version 2>&1 | grep -oP '\d+\.\d+\.\d+' || echo "failed")
110
+ if [ "$v_env" = "${VERSIONS[1]}" ]; then
111
+ log_info " ✓ METANORMA_VERSION=${VERSIONS[1]} overrides local ${VERSIONS[0]}"
112
+ else
113
+ log_error " ✗ Expected ${VERSIONS[1]}, got $v_env"
114
+ exit 1
115
+ fi
116
+ unset METANORMA_VERSION METANORMA_SOURCE
117
+
118
+ echo ""
119
+ log_info "=== Test 4: Consecutive Switches ==="
120
+ for i in 1 2 3; do
121
+ mnenv global "${VERSIONS[0]}" --source "$SOURCE"
122
+ v1=$(metanorma --version 2>&1 | grep -oP '\d+\.\d+\.\d+' || echo "failed")
123
+
124
+ mnenv global "${VERSIONS[1]}" --source "$SOURCE"
125
+ v2=$(metanorma --version 2>&1 | grep -oP '\d+\.\d+\.\d+' || echo "failed")
126
+
127
+ if [ "$v1" != "${VERSIONS[0]}" ] || [ "$v2" != "${VERSIONS[1]}" ]; then
128
+ log_error " ✗ Round $i failed: v1=$v1, v2=$v2"
129
+ exit 1
130
+ fi
131
+ done
132
+ log_info " ✓ 3 rounds of consecutive switches successful"
133
+
134
+ echo ""
135
+ log_info "=== Test 5: Version List Command ==="
136
+ mnenv versions | grep -q "${VERSIONS[0]}"
137
+ log_info " ✓ ${VERSIONS[0]} in version list"
138
+
139
+ mnenv versions | grep -q "${VERSIONS[1]}"
140
+ log_info " ✓ ${VERSIONS[1]} in version list"
141
+
142
+ echo ""
143
+ log_info "=== All tests passed! ==="
144
+ echo ""
145
+ log_info "Final state:"
146
+ echo " Global version: $(cat ~/.mnenv/version 2>/dev/null || echo 'not set')"
147
+ echo " Global source: $(cat ~/.mnenv/source 2>/dev/null || echo 'not set')"
148
+ echo " Current metanorma: $(metanorma --version 2>&1 | head -1)"
149
+
150
+ # Clean up test directory
151
+ rm -rf "$TEST_DIR"