aspera-cli 4.11.0 → 4.12.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/BUGS.md +0 -1
  4. data/CHANGELOG.md +71 -52
  5. data/CONTRIBUTING.md +31 -6
  6. data/README.md +404 -259
  7. data/bin/asession +2 -2
  8. data/docs/test_env.conf +1 -0
  9. data/examples/aoc.rb +2 -2
  10. data/examples/dascli +11 -11
  11. data/examples/faspex4.rb +7 -7
  12. data/examples/node.rb +1 -1
  13. data/examples/proxy.pac +2 -2
  14. data/examples/server.rb +3 -3
  15. data/lib/aspera/aoc.rb +105 -40
  16. data/lib/aspera/cli/extended_value.rb +4 -4
  17. data/lib/aspera/cli/{formater.rb → formatter.rb} +7 -7
  18. data/lib/aspera/cli/listener/progress.rb +1 -1
  19. data/lib/aspera/cli/listener/progress_multi.rb +2 -2
  20. data/lib/aspera/cli/main.rb +18 -18
  21. data/lib/aspera/cli/manager.rb +5 -5
  22. data/lib/aspera/cli/plugin.rb +23 -20
  23. data/lib/aspera/cli/plugins/aoc.rb +75 -112
  24. data/lib/aspera/cli/plugins/ats.rb +6 -6
  25. data/lib/aspera/cli/plugins/config.rb +84 -83
  26. data/lib/aspera/cli/plugins/cos.rb +1 -1
  27. data/lib/aspera/cli/plugins/faspex.rb +38 -38
  28. data/lib/aspera/cli/plugins/faspex5.rb +187 -43
  29. data/lib/aspera/cli/plugins/node.rb +30 -37
  30. data/lib/aspera/cli/plugins/orchestrator.rb +7 -4
  31. data/lib/aspera/cli/plugins/preview.rb +10 -9
  32. data/lib/aspera/cli/plugins/server.rb +1 -1
  33. data/lib/aspera/cli/plugins/shares.rb +67 -43
  34. data/lib/aspera/cli/transfer_agent.rb +16 -16
  35. data/lib/aspera/cli/version.rb +2 -1
  36. data/lib/aspera/command_line_builder.rb +70 -66
  37. data/lib/aspera/cos_node.rb +9 -9
  38. data/lib/aspera/fasp/agent_base.rb +3 -1
  39. data/lib/aspera/fasp/agent_connect.rb +23 -23
  40. data/lib/aspera/fasp/agent_direct.rb +13 -14
  41. data/lib/aspera/fasp/agent_httpgw.rb +20 -19
  42. data/lib/aspera/fasp/agent_node.rb +13 -15
  43. data/lib/aspera/fasp/agent_trsdk.rb +1 -1
  44. data/lib/aspera/fasp/installation.rb +5 -5
  45. data/lib/aspera/fasp/listener.rb +1 -1
  46. data/lib/aspera/fasp/parameters.rb +49 -41
  47. data/lib/aspera/fasp/parameters.yaml +311 -212
  48. data/lib/aspera/fasp/resume_policy.rb +2 -2
  49. data/lib/aspera/fasp/transfer_spec.rb +0 -13
  50. data/lib/aspera/faspex_gw.rb +80 -161
  51. data/lib/aspera/faspex_postproc.rb +77 -0
  52. data/lib/aspera/log.rb +7 -7
  53. data/lib/aspera/nagios.rb +6 -6
  54. data/lib/aspera/node.rb +24 -19
  55. data/lib/aspera/oauth.rb +50 -47
  56. data/lib/aspera/proxy_auto_config.js +22 -22
  57. data/lib/aspera/proxy_auto_config.rb +3 -3
  58. data/lib/aspera/rest.rb +12 -10
  59. data/lib/aspera/rest_error_analyzer.rb +5 -5
  60. data/lib/aspera/secret_hider.rb +4 -3
  61. data/lib/aspera/ssh.rb +4 -4
  62. data/lib/aspera/sync.rb +37 -36
  63. data/lib/aspera/web_auth.rb +7 -59
  64. data/lib/aspera/web_server_simple.rb +76 -0
  65. data.tar.gz.sig +0 -0
  66. metadata +6 -4
  67. metadata.gz.sig +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '08292755646ee9ced95363ddb7b109cec20c3826a72d8df12e54cabc9cfab2dd'
4
- data.tar.gz: 881782cb6655d6be4783ae34761bb44ffc84cb6972e223ec7cdde8020de6af1d
3
+ metadata.gz: e7b048647bb937cbea1f3bd8ef7e010c18b97456aa00b45ad8be45656472ae9f
4
+ data.tar.gz: c0f02324d8916a1ca5247a313da624e8365a57c438aefc58cc1301fd5ca5e0ff
5
5
  SHA512:
6
- metadata.gz: d222717fdc4632b1d423b4df6479714135469ba2d5ddaa6fb6cac185eeba8f9d96db4adf4484872224c3c5b4e7afe5dcc48d7365e0933954d1eadc80b9951b6b
7
- data.tar.gz: ca5b15ae38a0bd0841e5cb1aba74f75de99954d8ee09b8f86b0109bc11e58d4e54862b9c52afdca6da54808be17c6a778ae7000f8d2e6c8947a74eb66aac74a0
6
+ metadata.gz: fca3097df5295eaf1f3fa67efe04c7d1226c5c050d01f3e3c7319210967addfa01d98fd7a7b67024cae0a085f56b0357cf4b9b7ee4eb7aedd027b7996dc59356
7
+ data.tar.gz: c45dc8053b73c26b7f0eaac877d35118aad007974ae61cb6b3e19aac373e8713f682513161e1af5250263bf461a03aa71846e4149fed411e81c771a2943c8e57
checksums.yaml.gz.sig CHANGED
Binary file
data/BUGS.md CHANGED
@@ -11,7 +11,6 @@ Please, make sure to include the following information:
11
11
 
12
12
  [Use Github (Public Issue Reporting)](https://github.com/IBM/aspera-cli/issues)
13
13
 
14
-
15
14
  ## Security Policy
16
15
 
17
16
  | Version | Supported |
data/CHANGELOG.md CHANGED
@@ -1,19 +1,38 @@
1
1
  # Changes (Release notes)
2
2
 
3
+ * 4.12.0
4
+
5
+ * new: docker: build image from official gem version, possibility to deploy beta as well
6
+ * new: generic: `delete` operation supports option `value` for deletion parameters
7
+ * new: aoc: command `aoc packages recv` accepts option `query` to specify a shared inbox
8
+ * new: faspex: (v4) user delete accepts option `value` with value `{"destroy":true}` to delete users permanently
9
+ * new: faspex: (v4) gateway to faspex 5 for package send
10
+ * new: faspex5: possibility to change email templates
11
+ * new: faspex5: shared folder list and browse
12
+ * new: faspex5: emulate faspex 4 postprocessing, plugin: `faspex5` command: `postprocessing`
13
+ * new: faspex5: send package from remote source
14
+ * new: shares: option `type` for command `shares admin user`
15
+ * new: shares: full support for shares admin operations
16
+ * change(break): shares: command `shares admin user saml_import` replaced with `shares admin user import --type=saml`
17
+ * change(break): shares: command `shares admin user ldap_import` replaced with `shares admin user add --type=ldap`
18
+ * change(break): shares: command `app_authorizations` now has sub commands `show` and `modify`
19
+ * change(break): shares: similar changes for `shares admin share user show`
20
+ * change(break): option `ascp_opts` is removed, and replaced with `transfer_info` parameter `ascp_args`
21
+
3
22
  * 4.11.0
4
23
 
5
24
  * new: vault: secret finder, migration from config file
6
- * new: allow removal of transferspec parameter by setting value to `null`
25
+ * new: allow removal of transfer spec parameter by setting value to `null`
7
26
  * new: option `ascp_opts` allows to provide native `ascp` options on command line
8
27
  * new: command `sync` added to `node` (gen4) and `server` plugins, also available in `aoc`
9
28
  * fix: security: no shell interpolation
10
29
  * fix: when WSS and node agent: no localhost (certificate)
11
30
  * fix: #99 `aoc file download` for single shared folder
12
- * fix: due to change of API in faspex 5 for send pakage (paths is mandatory for any type of transfer now)
31
+ * fix: due to change of API in faspex 5 for send package (paths is mandatory for any type of transfer now)
13
32
  * fix: Oauth web authentication was broken, fixed now
14
- * change: (break) container image has entry point
15
- * change: (break) `aoc admin res node` commands `v3` and `v4` replaced with `do` and command `v3` moved inside `do`
16
- * change: (break) renamed options for `sync`
33
+ * change(break): container image has entry point
34
+ * change(break): `aoc admin res node` commands `v3` and `v4` replaced with `do` and command `v3` moved inside `do`
35
+ * change(break): renamed options for `sync`
17
36
  * change: node gen4 operations are moved from aoc plugin to node plugin but made available where gen4 is used
18
37
  * change: if wss is enabled on server, use wss
19
38
  * lots of cleanup and refactoring
@@ -34,7 +53,7 @@
34
53
  * new: improved documentation on faspex and aoc package send
35
54
  * fix: `node do` command fixed
36
55
  * fix: improved secret hiding from logs
37
- * change: (break) removed rarely commands nodeadmin, configuration, userdata, ctl from plugin `server`
56
+ * change(break): removed rarely commands nodeadmin, configuration, userdata, ctl from plugin `server`
38
57
  as well as option `cmd_prefix`
39
58
  * change: `ascli` runs as user `cliuser` instead of `root` in container
40
59
  * change: default access right for config folder is now user only, including private keys
@@ -46,10 +65,10 @@
46
65
  * new: add command `user profile` in `faspex5`
47
66
  * new: add config wizard for `faspex5`
48
67
  * new: #75 gem is signed
49
- * change: (break) removed dependency on gem `grpc` which is used only for the `trsdk` transfer agent. Users can install the gem manually if needed.
50
- * change: (break) hash vault keys are string instead of symbol
51
- * change: cleanup with rubocop, all strings are immutable now by default, list contants are frozen
52
- * change: removed Hash.dig implemetation because it is by default in Ruby >= 2.3
68
+ * change(break): removed dependency on gem `grpc` which is used only for the `trsdk` transfer agent. Users can install the gem manually if needed.
69
+ * change(break): hash vault keys are string instead of symbol
70
+ * change: cleanup with rubocop, all strings are immutable now by default, list constants are frozen
71
+ * change: removed Hash.dig implementation because it is by default in Ruby >= 2.3
53
72
  * change: default is now to hide secrets on command output. Set option `show_secrets` to reveal secrets.
54
73
  * change: option `insecure` displays a warning
55
74
 
@@ -62,11 +81,11 @@
62
81
  * new: added and updated commands for Faspex 5
63
82
  * new: option `cache_tokens`
64
83
  * new: Faspex4 dropbox packages can now be received by id
65
- * change: (break) command `conf gem path` replaces `conf gem_path`
66
- * change: (break) option `fpac` expects a value instead of URL
67
- * change: (break) option `cipher` in transfer spec must have hyphen
68
- * change: (break) renamed option `log_passwords` to `log_secrets`
69
- * change: (break) removed plugin `shares2` as products is now EOL
84
+ * change(break): command `conf gem path` replaces `conf gem_path`
85
+ * change(break): option `fpac` expects a value instead of URL
86
+ * change(break): option `cipher` in transfer spec must have hyphen
87
+ * change(break): renamed option `log_passwords` to `log_secrets`
88
+ * change(break): removed plugin `shares2` as products is now EOL
70
89
  * fix: After AoC version update, wizard did not detect AoC properly
71
90
 
72
91
  * 4.6.0
@@ -75,12 +94,12 @@
75
94
  * new: global option `plugin_folder`
76
95
  * new: global option `transpose_single`
77
96
  * new: simplified metadata passing for shared inbox package creation in AoC
78
- * change: (break) command `aoc packages shared_inboxes list` replaces `aoc user shared_inboxes`
79
- * change: (break) command `aoc user profile` replaces `aoc user info`
80
- * change: (break) command `aoc user workspaces list` replaces `aoc user workspaces`
81
- * change: (break) command `aoc user workspaces current` replaces `aoc workspace`
82
- * change: (break) command `conf plugin list` replaces `conf plugins`
83
- * change: (break) command `conf connect` simplified
97
+ * change(break): command `aoc packages shared_inboxes list` replaces `aoc user shared_inboxes`
98
+ * change(break): command `aoc user profile` replaces `aoc user info`
99
+ * change(break): command `aoc user workspaces list` replaces `aoc user workspaces`
100
+ * change(break): command `aoc user workspaces current` replaces `aoc workspace`
101
+ * change(break): command `conf plugin list` replaces `conf plugins`
102
+ * change(break): command `conf connect` simplified
84
103
  * fix: #60 ascli executable was not installed by default in 4.5.0
85
104
  * fix: add password hiding case in logs
86
105
 
@@ -94,9 +113,9 @@
94
113
  * new: identifier can be provided using either option `id` or directly after the command, e.g. `delete 123` is the same as `delete --id=123`
95
114
  * change: when using wss, use [ruby's CA certs](README.md#certificates)
96
115
  * change: unexpected parameter makes exit code not zero
97
- * change: (break) options `id` and `name` cannot be specified at the same time anymore, use [positional identifer or name selection](README.md#res_select)
98
- * change: (break) `aoc admin res node` does not take workspace main node as default node if no `id` specified.
99
- * change: (break): `orchestrator workflow status` requires id, and supports special id `ALL`
116
+ * change(break): options `id` and `name` cannot be specified at the same time anymore, use [positional identifier or name selection](README.md#res_select)
117
+ * change(break): `aoc admin res node` does not take workspace main node as default node if no `id` specified.
118
+ * change(break): : `orchestrator workflow status` requires id, and supports special id `ALL`
100
119
  * fix: various smaller fixes and renaming of some internal classes (transfer agents and few other)
101
120
 
102
121
  * 4.4.0
@@ -107,7 +126,7 @@
107
126
  * new: `node` plugin accepts bearer token and access key as credential
108
127
  * new: `node` option `token_type` allows using basic token in addition to aspera type.
109
128
  * change: `server`: option `username` not mandatory anymore: xfer user is by default. If transfer spec token is provided, password or keys are optional, and bypass keys are used by default.
110
- * change: (break) resource `apps_new` of `aoc` replaced with `application` (more clear)
129
+ * change(break): resource `apps_new` of `aoc` replaced with `application` (more clear)
111
130
 
112
131
  * 4.3.0
113
132
 
@@ -121,10 +140,10 @@
121
140
  * new: the error "Remote host is not who we expected" displays a special remediation message
122
141
  * new: `conf ascp spec` displays supported transfer spec
123
142
  * new: options `notif_to` and `notif_template` to send email notifications on transfer (and other events)
124
- * fix: space character in `faspe:` url are precent encoded if needed
143
+ * fix: space character in `faspe:` url are percent encoded if needed
125
144
  * fix: `preview scan`: if file_id is unknown, ignore and continue scan
126
145
  * change: for commands that potentially execute several transfers (`package recv --id=ALL`), if one transfer fails then ascli exits with code 1 (instead of zero=success)
127
- * change: (break) option `notify` or `aoc` replaced with `notif_to` and `notif_template`
146
+ * change(break): option `notify` or `aoc` replaced with `notif_to` and `notif_template`
128
147
 
129
148
  * 4.2.1
130
149
 
@@ -141,8 +160,8 @@
141
160
  * fix: (break) multi_session_threshold is Integer, not String
142
161
  * fix: `conf ascp install` renames sdk folder if it already exists (leftover shared lib may make fail)
143
162
  * fix: removed replace_illegal_chars from default aspera.conf causing "Error creating illegal char conversion table"
144
- * change: (break) `aoc apiinfo` is removed, use `aoc servers` to provide the list of cloud systems
145
- * change: (break) parameters for resume in `transfer-info` for [`direct`](README.md#agt_direct) are now in sub-key `"resume"`
163
+ * change(break): `aoc apiinfo` is removed, use `aoc servers` to provide the list of cloud systems
164
+ * change(break): parameters for resume in `transfer-info` for [`direct`](README.md#agt_direct) are now in sub-key `"resume"`
146
165
 
147
166
  * 4.1.0
148
167
 
@@ -173,7 +192,7 @@
173
192
 
174
193
  * 0.11.8
175
194
 
176
- * Simplified to use `unoconv` instead of bare `libreoffice` for office conversion, as `unoconv` does not require a X server (previously using Xvfb
195
+ * Simplified to use `unoconv` instead of bare `libreoffice` for office conversion, as `unoconv` does not require a X server (previously using Xvfb)
177
196
 
178
197
  * 0.11.7
179
198
 
@@ -294,7 +313,7 @@
294
313
  * 0.10.4
295
314
 
296
315
  * new options for AoC : `secrets`
297
- * ACLI-533 temp file list folder to use file lists is set by default, and used by asession
316
+ * ACLI-533 temp file list folder to use file lists is set by default, and used by `asession`
298
317
 
299
318
  * 0.10.3
300
319
 
@@ -383,7 +402,7 @@
383
402
  * 0.9.20
384
403
 
385
404
  * improved wizard (prepare for AoC global client id)
386
- * preview generator: addedoption : --skip-format=<png,mp4>
405
+ * preview generator: added option : --skip-format=<png,mp4>
387
406
  * removed outdated pictures from this doc
388
407
 
389
408
  * 0.9.19
@@ -411,19 +430,19 @@
411
430
 
412
431
  * 0.9.11
413
432
 
414
- * Breaking change: @stdin is now @stdin:
433
+ * change(break): @stdin is now @stdin:
415
434
  * support of ATS for IBM Cloud, removed old version based on aspera id
416
435
 
417
436
  * 0.9.10
418
437
 
419
- * Breaking change: parameter transfer-node becomes more generic: transfer-info
438
+ * change(break): parameter transfer-node becomes more generic: transfer-info
420
439
  * Display SaaS storage usage with command: aspera admin res node --id=nn info
421
440
  * cleaner way of specifying source file list for transfers
422
- * Breaking change: replaced download_mode option with http_download action
441
+ * change(break): replaced download_mode option with http_download action
423
442
 
424
443
  * 0.9.9
425
444
 
426
- * Breaking change: "aspera package send" parameter deprecated, use the --value option instead with "recipients" value. See example.
445
+ * change(break): "aspera package send" parameter deprecated, use the --value option instead with "recipients" value. See example.
427
446
  * Now supports "cargo" for Aspera on Cloud (automatic package download)
428
447
 
429
448
  * 0.9.8
@@ -441,7 +460,7 @@
441
460
 
442
461
  * 0.9.6
443
462
 
444
- * Breaking change: `@param:`is now `@preset:` and is generic
463
+ * change(break): `@param:`is now `@preset:` and is generic
445
464
  * AoC: added command to display current workspace information
446
465
 
447
466
  * 0.9.5
@@ -451,7 +470,7 @@
451
470
 
452
471
  * 0.9.4
453
472
 
454
- * Breaking change: onCloud file list follow --source convention as well (plus specific case for download when first path is source folder, and other are source file names).
473
+ * change(break): onCloud file list follow --source convention as well (plus specific case for download when first path is source folder, and other are source file names).
455
474
  * AoC Package send supports external users
456
475
  * new command to export AoC config to Aspera CLI config
457
476
 
@@ -462,15 +481,15 @@
462
481
  * modified transfer interface and allow token re-generation on error
463
482
  * async add admin command
464
483
  * async add db parameters
465
- * Breaking change: new option "sources" to specify files to transfer
484
+ * change(break): new option "sources" to specify files to transfer
466
485
 
467
486
  * 0.9.2
468
487
 
469
- * Breaking change: changed AoC package creation to match API, see AoC section
488
+ * change(break): changed AoC package creation to match API, see AoC section
470
489
 
471
490
  * 0.9.1
472
491
 
473
- * Breaking change: changed faspex package creation to match API, see Faspex section
492
+ * change(break): changed faspex package creation to match API, see Faspex section
474
493
 
475
494
  * 0.9
476
495
 
@@ -483,22 +502,22 @@
483
502
 
484
503
  * 0.7
485
504
 
486
- * Breaking change: AoC package recv take option if for package instead of argument.
487
- * Breaking change: Rest class and Oauth class changed init parameters
505
+ * change(break): AoC package recv take option if for package instead of argument.
506
+ * change(break): Rest class and Oauth class changed init parameters
488
507
  * AoC: receive package from public link
489
508
  * select by col value on output
490
509
  * added rename (AoC, node)
491
510
 
492
511
  * 0.6.19
493
512
 
494
- * change: (break) ats server list provisioned → ats cluster list
495
- * change: (break) ats server list clouds → ats cluster clouds
496
- * change: (break) ats server list instance --cloud=x --region=y → ats cluster show --cloud=x --region=y
497
- * change: (break) ats server id xxx → ats cluster show --id=xxx
498
- * change: (break) ats subscriptions → ats credential subscriptions
499
- * change: (break) ats api_key repository list → ats credential cache list
500
- * change: (break) ats api_key list → ats credential list
501
- * change: (break) ats access_key id xxx → ats access_key --id=xxx
513
+ * change(break): ats server list provisioned → ats cluster list
514
+ * change(break): ats server list clouds → ats cluster clouds
515
+ * change(break): ats server list instance --cloud=x --region=y → ats cluster show --cloud=x --region=y
516
+ * change(break): ats server id xxx → ats cluster show --id=xxx
517
+ * change(break): ats subscriptions → ats credential subscriptions
518
+ * change(break): ats api_key repository list → ats credential cache list
519
+ * change(break): ats api_key list → ats credential list
520
+ * change(break): ats access_key id xxx → ats access_key --id=xxx
502
521
 
503
522
  * 0.6.18
504
523
 
@@ -506,4 +525,4 @@
506
525
 
507
526
  * 0.6.15
508
527
 
509
- * Breaking change: "files" application renamed to "aspera" (for "Aspera on Cloud"). "repository" renamed to "files". Default is automatically reset, e.g. in config files and change key "files" to "aspera" in preset "default".
528
+ * change(break): "files" application renamed to "aspera" (for "Aspera on Cloud"). "repository" renamed to "files". Default is automatically reset, e.g. in config files and change key "files" to "aspera" in preset "default".
data/CONTRIBUTING.md CHANGED
@@ -8,7 +8,7 @@ Before you go ahead please search existing issues for your problem.
8
8
 
9
9
  To make sure that we can help you quickly please include and check the following information:
10
10
 
11
- - Include the ascli version you are running in your report.
11
+ - Include the `ascli` version you are running in your report.
12
12
  - If you are not running the latest version (please check), update.
13
13
  - Include your `ruby -e "puts RUBY_DESCRIPTION"`.
14
14
 
@@ -101,13 +101,38 @@ gem install -P HighSecurity aspera-cli
101
101
 
102
102
  ## Docker image build
103
103
 
104
- ### on MacOS using ubuntu multipass
104
+ The default docker image build installs the official gem version directly from <rubygems.org>.
105
105
 
106
- Install [multipass](https://multipass.run/docs) with [brew](https://multipass.run/docs/installing-on-macos#heading--use-brew):
106
+ By default it will build the image for the version in the current repository:
107
107
 
108
- [Initialize the docker environment](https://multipass.run/docs/docker-tutorial).
108
+ ```bash
109
+ make docker
110
+ ```
111
+
112
+ > **Note:** This target creates the `Dockerfile` from an `ERB` (embedded Ruby) template (Makefile target `dockerfile`).
113
+ A template is used as it allows some level of customization to tell where to take the gem from, as as for the SDK file.
114
+
115
+ Then, to push to the image registry:
116
+
117
+ ```bash
118
+ make dpush
119
+ ```
120
+
121
+ It is possible to build a specific version by setting envvar `GEMVERS` and `make` with option `-e`:
122
+
123
+ ```bash
124
+ GEMVERS=4.11.0 make -e docker
125
+ GEMVERS=4.11.0 make -e dpush
126
+ ```
127
+
128
+ To build/push a beta/development container:
129
+
130
+ ```bash
131
+ make dockerbeta
132
+ make dpushversion
133
+ ```
109
134
 
110
- Make sure the ubuntu user in container is part of the docker group.
135
+ The Dockerfile template allows customizing the optional copy of gem file , versus install from rubygems,org as well as customizing the retrieval of the SDK.
111
136
 
112
137
  ## Long Term Implementation and delivery improvements
113
138
 
@@ -115,4 +140,4 @@ Make sure the ubuntu user in container is part of the docker group.
115
140
  - <https://github.com/rest-client/rest-client>
116
141
  - <https://github.com/oauth-xx/oauth2>
117
142
  - use gem Thor <http://whatisthor.com/> (or other standard Ruby CLI manager)
118
- - Package with <https://github.com/pmq20/ruby-packer> (rubyc)
143
+ - Package a single-file executable for various architectures with <https://github.com/pmq20/ruby-packer> (rubyc)