secret_hub 0.1.3 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 366ad9f9647c8e1cfbbd9496b99ee1209fcd3a24b9409a59a68e81a880cbe90c
4
- data.tar.gz: 79b6bc712815818a9f322d2d7cead7698bfa11179f81c0fac99aa1c90abc5ecb
3
+ metadata.gz: 55c57ad86eb27ea766d06923f3231e513dcb37da3050c6d1ac22de4831796140
4
+ data.tar.gz: d653818ddfd5967f66761ad76512a027c0b7e1942c72a3f0b3e91ce4c99a7bc3
5
5
  SHA512:
6
- metadata.gz: 07b10bd5e5d859b3f732d40470fdf84005b7052ef08f1865f36c5539e9741a2e47736c9513d17d77fca14935d4e08db0aaf8628df5b16de2db81bc62a16a89e6
7
- data.tar.gz: 755121d143ca3faf0ed16391b2563827cf7788eaa8ffeb83931c595fba3bed822fc5e8a1eb2d737e010ba404670c57712fc394c41800c66edfafc332d22c0462
6
+ metadata.gz: 3f7f20c2ac2b71264a73a33fae3436e22968083f3bb00855a5f3f74c0a0e528c80ac6b2d0d9d2a2ab374a19c2345212e1c79bed7601a3244fd8f08c4f981164d
7
+ data.tar.gz: 8e4b87a3229d977c6c61c5629481517e4cdc945825e0e00b8343f629ab1d4811c6ab1958c6aaedc5258bcd75c9f75b4cde95fbb3cf141b427e7fa9f96f629b3a
data/README.md CHANGED
@@ -1,5 +1,4 @@
1
- SecretHub - GitHub Secrets CLI
2
- ==================================================
1
+ # SecretHub - GitHub Secrets CLI
3
2
 
4
3
  [![Gem Version](https://badge.fury.io/rb/secret_hub.svg)](https://badge.fury.io/rb/secret_hub)
5
4
  [![Build Status](https://github.com/DannyBen/secret_hub/workflows/Test/badge.svg)](https://github.com/DannyBen/secret_hub/actions?query=workflow%3ATest)
@@ -8,20 +7,25 @@ SecretHub - GitHub Secrets CLI
8
7
  ---
9
8
 
10
9
  SecretHub lets you easily manage your GitHub secrets from the command line
11
- with support for bulk operations.
10
+ with support for bulk operations and organization secrets.
12
11
 
13
12
  ---
14
13
 
15
- Installation
16
- --------------------------------------------------
14
+ ## Installation
15
+
16
+ With Ruby:
17
17
 
18
18
  ```shell
19
19
  $ gem install secret_hub
20
20
  ```
21
21
 
22
+ Or with Docker:
22
23
 
23
- Prerequisites
24
- --------------------------------------------------
24
+ ```shell
25
+ $ alias secrethub='docker run --rm -it -e GITHUB_ACCESS_TOKEN -v "$PWD:/app" dannyben/secrethub'
26
+ ```
27
+
28
+ ## Prerequisites
25
29
 
26
30
  SecretHub is a wrapper around the [GitHub Secrets API][secrets-api]. To use
27
31
  it, you need to set up your environment with a
@@ -32,50 +36,57 @@ it, you need to set up your environment with a
32
36
  $ export GITHUB_ACCESS_TOKEN=<your access token>
33
37
  ```
34
38
 
39
+ Give your token the `repo` scope, and for organization secrets, the `admin:org` scope.
35
40
 
36
- Usage
37
- --------------------------------------------------
38
-
39
- SecretHub has two families of commands:
41
+ ## Usage
40
42
 
41
- 1. Commands that operate on a single repository.
42
- 2. Commands that operate on multiple repositories, and multiple secrets.
43
+ SecretHub has three families of commands:
43
44
 
44
- Most commands are self explanatory, and described by the CLI.
45
+ 1. `secrethub repo` - manage repository secrets.
46
+ 2. `secrethub org` - manage organization secrets.
47
+ 3. `secrethub bulk` - manage multiple secrets in multiple repositories using a config file.
45
48
 
46
49
  ```shell
47
- $ secrethub --help
48
- ```
50
+ $ secrethub
51
+ GitHub Secret Manager
49
52
 
50
- Single repository operations
51
- --------------------------------------------------
53
+ Commands:
54
+ repo Manage repository secrets
55
+ org Manage organization secrets
56
+ bulk Manage multiple secrets in multiple repositories
52
57
 
53
- ### Show the secret keys in a repository
58
+ Run secrethub COMMAND --help for command specific help
54
59
 
55
- ```shell
56
- # secrethub list REPO
57
- $ secrethub list you/your-repo
58
- ```
59
60
 
60
- ### Create or update a secret in a repository
61
+ $ secrethub repo
62
+ Usage:
63
+ secrethub repo list REPO
64
+ secrethub repo save REPO KEY [VALUE]
65
+ secrethub repo delete REPO KEY
66
+ secrethub repo (-h|--help)
61
67
 
62
- ```shell
63
- # secrethub save REPO KEY VALUE
64
- $ secrethub list you/your-repo SECRET "there is no spoon"
65
- ```
66
68
 
67
- ### Delete a secret from a repository
69
+ $ secrethub org
70
+ Usage:
71
+ secrethub org list ORG
72
+ secrethub org save ORG KEY [VALUE]
73
+ secrethub org delete ORG KEY
74
+ secrethub org (-h|--help)
68
75
 
69
- ```shell
70
- # secrethub delete REPO KEY
71
- $ secrethub list you/your-repo SECRET
72
- ```
73
76
 
77
+ $ secrethub bulk
78
+ Usage:
79
+ secrethub bulk init [CONFIG]
80
+ secrethub bulk show [CONFIG --visible]
81
+ secrethub bulk list [CONFIG]
82
+ secrethub bulk save [CONFIG --clean --dry --only REPO]
83
+ secrethub bulk clean [CONFIG --dry]
84
+ secrethub bulk (-h|--help)
85
+ ```
74
86
 
75
- Bulk operations
76
- --------------------------------------------------
87
+ ## Bulk operations
77
88
 
78
- All the bulk operations function by using a simple YAML configuration file.
89
+ All the bulk operations use a simple YAML configuration file.
79
90
  The configuration file includes a list of GitHub repositories, each with a
80
91
  list of its secrets.
81
92
 
@@ -127,7 +138,7 @@ docker: &docker
127
138
  DOCKER_USER:
128
139
  DOCKER_PASSWORD:
129
140
 
130
- user/another-repo:
141
+ user/repo:
131
142
  <<: *docker
132
143
  SECRET:
133
144
  PASSWORD: p4ssw0rd
@@ -136,48 +147,7 @@ user/another-repo:
136
147
  Note that YAML anchors only work with the hash syntax.
137
148
 
138
149
 
139
- ### Create a sample configuration file
140
-
141
- ```shell
142
- # secrethub bulk init [CONFIG]
143
- $ secrethub bulk init mysecrets.yml
144
- ```
145
-
146
- ### Show the configuration file and its secrets
147
-
148
- ```shell
149
- # secrethub bulk show [CONFIG --visible]
150
- $ secrethub bulk show mysecrets.yml
151
- ```
152
-
153
- ### Show all secrets stored on GitHub in all repositories
154
-
155
- ```shell
156
- # secrethub bulk list [CONFIG]
157
- $ secrethub bulk list mysecrets.yml
158
- ```
159
-
160
- ### Save multiple secrets to multiple repositories
161
-
162
- ```shell
163
- # secrethub bulk save [CONFIG --clean]
164
- $ secrethub bulk save mysecrets.yml --clean
165
- ```
166
-
167
- Using the `--clean` flag, you can ensure that the repositories do not have
168
- any secrets that you are unaware of. This flag will delete any secret that is
169
- not specified in your config file.
170
-
171
- ### Delete secrets from multiple repositories unless they are specified in the config file
172
-
173
- ```shell
174
- # secrethub bulk clean [CONFIG]
175
- $ secrethub bulk clean mysecrets.yml
176
- ```
177
-
178
-
179
- Contributing / Support
180
- --------------------------------------------------
150
+ ## Contributing / Support
181
151
 
182
152
  If you experience any issue, have a question or a suggestion, or if you wish
183
153
  to contribute, feel free to [open an issue][issues].
@@ -8,6 +8,9 @@ router = SecretHub::CLI.router
8
8
 
9
9
  begin
10
10
  exit router.run ARGV
11
+ rescue Interrupt => e
12
+ say "\nGoodbye"
13
+ exit 1
11
14
  rescue => e
12
15
  puts e.backtrace.reverse if ENV['DEBUG']
13
16
  say! "!txtred!#{e.class}"
@@ -1,19 +1,18 @@
1
1
  require 'mister_bin'
2
2
  require 'secret_hub/commands/base'
3
- require 'secret_hub/commands/list'
4
- require 'secret_hub/commands/save'
5
- require 'secret_hub/commands/delete'
3
+ require 'secret_hub/commands/repo'
6
4
  require 'secret_hub/commands/bulk'
5
+ require 'secret_hub/commands/org'
7
6
 
8
7
  module SecretHub
9
8
  class CLI
10
9
  def self.router
11
10
  router = MisterBin::Runner.new version: VERSION,
12
- header: "GitHub Secret Manager"
11
+ header: "GitHub Secret Manager",
12
+ footer: "Run !txtpur!secrethub COMMAND --help!txtrst! for command specific help"
13
13
 
14
- router.route 'list', to: Commands::List
15
- router.route 'save', to: Commands::Save
16
- router.route 'delete', to: Commands::Delete
14
+ router.route 'repo', to: Commands::Repo
15
+ router.route 'org', to: Commands::Org
17
16
  router.route 'bulk', to: Commands::Bulk
18
17
 
19
18
  router
@@ -6,13 +6,13 @@ module SecretHub
6
6
  class Bulk < Base
7
7
  using StringObfuscation
8
8
 
9
- summary "Update or delete multiple secrets from multiple repositories"
9
+ summary "Manage multiple secrets in multiple repositories"
10
10
 
11
11
  usage "secrethub bulk init [CONFIG]"
12
12
  usage "secrethub bulk show [CONFIG --visible]"
13
13
  usage "secrethub bulk list [CONFIG]"
14
- usage "secrethub bulk save [CONFIG --clean]"
15
- usage "secrethub bulk clean [CONFIG]"
14
+ usage "secrethub bulk save [CONFIG --clean --dry --only REPO]"
15
+ usage "secrethub bulk clean [CONFIG --dry]"
16
16
  usage "secrethub bulk (-h|--help)"
17
17
 
18
18
  command "init", "Create a sample configuration file in the current directory"
@@ -23,6 +23,8 @@ module SecretHub
23
23
 
24
24
  option "-c, --clean", "Also delete any other secret not defined in the configuration file"
25
25
  option "-v, --visible", "Also show secret values"
26
+ option "-d, --dry", "Dry run"
27
+ option "-o, --only REPO", "Save all secrets to a single repository from the configuration file"
26
28
 
27
29
  param "CONFIG", "Path to the configuration file [default: secrethub.yml]"
28
30
 
@@ -30,8 +32,9 @@ module SecretHub
30
32
  example "secrethub bulk show --visible"
31
33
  example "secrethub bulk clean"
32
34
  example "secrethub bulk list mysecrets.yml"
33
- example "secrethub bulk save mysecrets.yml"
35
+ example "secrethub bulk save mysecrets.yml --dry"
34
36
  example "secrethub bulk save --clean"
37
+ example "secrethub bulk save --only me/my-important-repo"
35
38
 
36
39
  def init_command
37
40
  raise SecretHubError, "File #{config_file} already exists" if File.exist? config_file
@@ -58,45 +61,53 @@ module SecretHub
58
61
  end
59
62
 
60
63
  def save_command
61
- clean = args['--clean']
64
+ dry = args['--dry']
65
+ only = args['--only']
62
66
  skipped = 0
63
67
 
64
68
  config.each do |repo, secrets|
69
+ next if only and repo != only
65
70
  say "!txtblu!#{repo}"
66
- skipped += update_repo repo, secrets
67
- clean_repo repo, secrets.keys if clean
71
+ skipped += update_repo repo, secrets, dry
72
+ clean_repo repo, secrets.keys, dry if args['--clean']
68
73
  end
69
74
 
70
- say "\nSkipped #{skipped} missing secrets" if skipped > 0
75
+ puts "\n" if skipped > 0 or dry
76
+ say "Skipped #{skipped} missing secrets" if skipped > 0
77
+ say "Dry run, nothing happened" if dry
71
78
  end
72
79
 
73
80
  def clean_command
81
+ dry = args['--dry']
82
+
74
83
  config.each do |repo, secrets|
75
84
  say "!txtblu!#{repo}"
76
- clean_repo repo, secrets.keys
85
+ clean_repo repo, secrets.keys, dry
77
86
  end
87
+
88
+ say "\nDry run, nothing happened" if dry
78
89
  end
79
90
 
80
91
  private
81
92
 
82
- def clean_repo(repo, keys)
93
+ def clean_repo(repo, keys, dry)
83
94
  repo_keys = github.secrets repo
84
95
  delete_candidates = repo_keys - keys
85
96
 
86
97
  delete_candidates.each do |key|
87
98
  say "delete !txtpur!#{key} "
88
- success = github.delete_secret repo, key
99
+ github.delete_secret repo, key unless dry
89
100
  say "!txtgrn!OK"
90
101
  end
91
102
  end
92
103
 
93
- def update_repo(repo, secrets)
104
+ def update_repo(repo, secrets, dry)
94
105
  skipped = 0
95
106
 
96
107
  secrets.each do |key, value|
97
108
  say "save !txtpur!#{key} "
98
109
  if value
99
- github.put_secret repo, key, value
110
+ github.put_secret repo, key, value unless dry
100
111
  say "!txtgrn!OK"
101
112
  else
102
113
  say "!txtred!MISSING"
@@ -0,0 +1,62 @@
1
+ module SecretHub
2
+ module Commands
3
+ class Org < Base
4
+ summary "Manage organization secrets"
5
+
6
+ usage "secrethub org list ORG"
7
+ usage "secrethub org save ORG KEY [VALUE]"
8
+ usage "secrethub org delete ORG KEY"
9
+ usage "secrethub org (-h|--help)"
10
+
11
+ command "list", "Show all organization secrets"
12
+ command "save", "Create or update an organization secret (with private repositories visibility)"
13
+ command "delete", "Delete an organization secret"
14
+
15
+ param "ORG", "Name of the organization"
16
+ param "KEY", "The name of the secret"
17
+ param "VALUE", "The plain text secret value. If not provided, it is expected to be set as an environment variable"
18
+
19
+ example "secrethub org list myorg"
20
+ example "secrethub org save myorg PASSWORD"
21
+ example "secrethub org save myorg PASSWORD s3cr3t"
22
+ example "secrethub org delete myorg PASSWORD"
23
+
24
+ def list_command
25
+ say "!txtblu!#{org}:"
26
+ github.org_secrets(org).each do |secret|
27
+ say "- !txtpur!#{secret}"
28
+ end
29
+ end
30
+
31
+ def save_command
32
+ github.put_org_secret org, key, value
33
+ say "Saved !txtblu!#{org} !txtpur!#{key}"
34
+ end
35
+
36
+ def delete_command
37
+ github.delete_org_secret org, key
38
+ say "Deleted !txtblu!#{org} !txtpur!#{key}"
39
+ end
40
+
41
+ private
42
+
43
+ def org
44
+ args['ORG']
45
+ end
46
+
47
+ def key
48
+ args['KEY']
49
+ end
50
+
51
+ def value
52
+ result = args['VALUE'] || ENV[key]
53
+ if result
54
+ result
55
+ else
56
+ raise InvalidInput, "Please provide a value, either in the command line or in the environment variable '#{key}'"
57
+ end
58
+ end
59
+
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,61 @@
1
+ module SecretHub
2
+ module Commands
3
+ class Repo < Base
4
+ summary "Manage repository secrets"
5
+
6
+ usage "secrethub repo list REPO"
7
+ usage "secrethub repo save REPO KEY [VALUE]"
8
+ usage "secrethub repo delete REPO KEY"
9
+ usage "secrethub repo (-h|--help)"
10
+
11
+ command "list", "Show all repository secrets"
12
+ command "save", "Create or update a repository secret"
13
+ command "delete", "Delete a repository secret"
14
+
15
+ param "REPO", "Full name of the GitHub repository (user/repo)"
16
+ param "KEY", "The name of the secret"
17
+ param "VALUE", "The plain text secret value. If not provided, it is expected to be set as an environment variable"
18
+
19
+ example "secrethub repo list me/myrepo"
20
+ example "secrethub repo save me/myrepo PASSWORD"
21
+ example "secrethub repo save me/myrepo PASSWORD s3cr3t"
22
+ example "secrethub repo delete me/myrepo PASSWORD"
23
+
24
+ def list_command
25
+ say "!txtblu!#{repo}:"
26
+ github.secrets(repo).each do |secret|
27
+ say "- !txtpur!#{secret}"
28
+ end
29
+ end
30
+
31
+ def save_command
32
+ github.put_secret repo, key, value
33
+ say "Saved !txtblu!#{repo} !txtpur!#{key}"
34
+ end
35
+
36
+ def delete_command
37
+ github.delete_secret repo, key
38
+ say "Deleted !txtblu!#{repo} !txtpur!#{key}"
39
+ end
40
+
41
+ private
42
+
43
+ def repo
44
+ args['REPO']
45
+ end
46
+
47
+ def key
48
+ args['KEY']
49
+ end
50
+
51
+ def value
52
+ result = args['VALUE'] || ENV[key]
53
+ if result
54
+ result
55
+ else
56
+ raise InvalidInput, "Please provide a value, either in the command line or in the environment variable '#{key}'"
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
@@ -5,7 +5,7 @@ module SecretHub
5
5
  attr_reader :data
6
6
 
7
7
  def self.load(config_file)
8
- raise ConfigurationError, "Config file not found #{config_flie}" unless File.exist? config_file
8
+ raise ConfigurationError, "Config file not found #{config_file}" unless File.exist? config_file
9
9
  new YAML.load_file config_file
10
10
  end
11
11
 
@@ -1,6 +1,7 @@
1
1
  module SecretHub
2
2
  SecretHubError = Class.new StandardError
3
3
  ConfigurationError = Class.new SecretHubError
4
+ InvalidInput = Class.new SecretHubError
4
5
 
5
6
  class APIError < SecretHubError
6
7
  attr_reader :response
@@ -11,8 +11,15 @@ module SecretHub
11
11
  end
12
12
 
13
13
  # GET /repos/:owner/:repo/actions/secrets/public-key
14
- def public_key(repo)
15
- public_keys[repo] ||= get("/repos/#{repo}/actions/secrets/public-key")
14
+ # GET /orgs/:org/actions/secrets/public-key
15
+ def public_key(repo_or_org)
16
+ if repo_or_org.include? '/'
17
+ repo = repo_or_org
18
+ public_keys[repo_or_org] ||= get("/repos/#{repo}/actions/secrets/public-key")
19
+ else
20
+ org = repo_or_org
21
+ public_keys[repo_or_org] ||= get("/orgs/#{org}/actions/secrets/public-key")
22
+ end
16
23
  end
17
24
 
18
25
  # GET /repos/:owner/:repo/actions/secrets
@@ -21,28 +28,49 @@ module SecretHub
21
28
  response['secrets'].map { |s| s['name'] }
22
29
  end
23
30
 
31
+ # GET /orgs/:org/actions/secrets
32
+ def org_secrets(org)
33
+ response = get "/orgs/#{org}/actions/secrets"
34
+ response['secrets'].map { |s| s['name'] }
35
+ end
36
+
24
37
  # PUT /repos/:owner/:repo/actions/secrets/:name
25
38
  def put_secret(repo, name, value)
26
- secret = encrypt_for_repo repo, value
39
+ secret = encrypt_for repo, value
27
40
  key_id = public_key(repo)['key_id']
28
41
  put "/repos/#{repo}/actions/secrets/#{name}",
29
42
  encrypted_value: secret,
30
43
  key_id: key_id
31
44
  end
32
45
 
46
+ # PUT /orgs/:org/actions/secrets/:secret_name
47
+ def put_org_secret(org, name, value)
48
+ secret = encrypt_for org, value
49
+ key_id = public_key(org)['key_id']
50
+ put "/orgs/#{org}/actions/secrets/#{name}",
51
+ encrypted_value: secret,
52
+ key_id: key_id,
53
+ visibility: 'private'
54
+ end
55
+
33
56
  # DELETE /repos/:owner/:repo/actions/secrets/:name
34
57
  def delete_secret(repo, name)
35
58
  delete "/repos/#{repo}/actions/secrets/#{name}"
36
59
  end
37
60
 
61
+ # DELETE /orgs/:org/actions/secrets/:secret_name
62
+ def delete_org_secret(org, name)
63
+ delete "/orgs/#{org}/actions/secrets/#{name}"
64
+ end
65
+
38
66
  private
39
67
 
40
68
  def public_keys
41
69
  @public_keys ||= {}
42
70
  end
43
71
 
44
- def encrypt_for_repo(repo, secret)
45
- public_key = public_key(repo)['key']
72
+ def encrypt_for(repo_or_org, secret)
73
+ public_key = public_key(repo_or_org)['key']
46
74
  encrypt secret, public_key
47
75
  end
48
76
 
@@ -1,3 +1,3 @@
1
1
  module SecretHub
2
- VERSION = "0.1.3"
2
+ VERSION = "0.2.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: secret_hub
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Danny Ben Shitrit
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-02-15 00:00:00.000000000 Z
11
+ date: 2020-05-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mister_bin
@@ -107,9 +107,8 @@ files:
107
107
  - lib/secret_hub/cli.rb
108
108
  - lib/secret_hub/commands/base.rb
109
109
  - lib/secret_hub/commands/bulk.rb
110
- - lib/secret_hub/commands/delete.rb
111
- - lib/secret_hub/commands/list.rb
112
- - lib/secret_hub/commands/save.rb
110
+ - lib/secret_hub/commands/org.rb
111
+ - lib/secret_hub/commands/repo.rb
113
112
  - lib/secret_hub/config-template.yml
114
113
  - lib/secret_hub/config.rb
115
114
  - lib/secret_hub/exceptions.rb
@@ -136,7 +135,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
136
135
  - !ruby/object:Gem::Version
137
136
  version: '0'
138
137
  requirements: []
139
- rubygems_version: 3.0.3
138
+ rubygems_version: 3.1.2
140
139
  signing_key:
141
140
  specification_version: 4
142
141
  summary: Manage GitHub secrets over multiple repositories
@@ -1,23 +0,0 @@
1
- module SecretHub
2
- module Commands
3
- class Delete < Base
4
- summary "Delete a secret from a repository"
5
-
6
- usage "secrethub delete REPO KEY"
7
- usage "secrethub delete (-h|--help)"
8
-
9
- param "REPO", "Full name of the GitHub repository (user/repo)"
10
- param "KEY", "The name of the secret"
11
-
12
- example "secrethub delete bob/vault PASSWORD"
13
-
14
- def run
15
- repo = args['REPO']
16
- key = args['KEY']
17
-
18
- success = github.delete_secret repo, key
19
- say "Deleted !txtblu!#{repo} !txtpur!#{key}"
20
- end
21
- end
22
- end
23
- end
@@ -1,22 +0,0 @@
1
- module SecretHub
2
- module Commands
3
- class List < Base
4
- summary "Show secrets for a repository"
5
-
6
- usage "secrethub list REPO"
7
- usage "secrethub list (-h|--help)"
8
-
9
- param "REPO", "Full name of the GitHub repository (user/repo)"
10
-
11
- example "secrethub list bob/repo-woth-secrets"
12
-
13
- def run
14
- repo = args['REPO']
15
- say "!txtblu!#{repo}:"
16
- github.secrets(repo).each do |secret|
17
- say "- !txtpur!#{secret}"
18
- end
19
- end
20
- end
21
- end
22
- end
@@ -1,25 +0,0 @@
1
- module SecretHub
2
- module Commands
3
- class Save < Base
4
- summary "Create or update a secret in a repository"
5
-
6
- usage "secrethub save REPO KEY VALUE"
7
- usage "secrethub save (-h|--help)"
8
-
9
- param "REPO", "Full name of the GitHub repository (user/repo)"
10
- param "KEY", "The name of the secret"
11
- param "VALUE", "The plain text secret value"
12
-
13
- example "secrethub save bob/vault PASSWORD p4ssw0rd"
14
-
15
- def run
16
- repo = args['REPO']
17
- key = args['KEY']
18
- value = args['VALUE']
19
-
20
- github.put_secret repo, key, value
21
- say "Saved !txtblu!#{repo} !txtpur!#{key}"
22
- end
23
- end
24
- end
25
- end