aspera-cli 4.11.0 → 4.12.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.
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)