appetize-cli 0.1.3 → 0.1.4
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 +4 -4
- data/.rubocop.yml +7 -1
- data/CHANGELOG.md +4 -0
- data/README.md +18 -0
- data/lib/appetize/api.rb +37 -0
- data/lib/appetize/ci/gitlab.rb +26 -0
- data/lib/appetize/cli.rb +12 -0
- data/lib/appetize/commands/delete.rb +3 -10
- data/lib/appetize/commands/update.rb +25 -0
- data/lib/appetize/commands/upload.rb +37 -11
- data/lib/appetize/templates/update/.gitkeep +1 -0
- data/lib/appetize/version.rb +1 -1
- data/lib/appetize.rb +0 -1
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9cc8bacaba3e5f4e836d8e174d551bd32124a1ca8bfa4df92526492ac4904ae1
|
4
|
+
data.tar.gz: 7650c019adbc139aeac7beb5ee44e58f9163e340e26c7b6a43bf2f78204bd8b2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 920e345be4a9c43c4cc12b853fbb0b354b2aebbd49fd6b368b6e220d344bac8d440446f7c62c39d34cd6509fb6337a49f01092f16118b99fc9388a098f4664f2
|
7
|
+
data.tar.gz: 49d8e0478a0ec95b035dc0737d758b3c798ec3cb8476a26e5b258f2ab882c452dda6e8237ee3876019facea3dedb81ee362edfbc88b0208aa1aedc88de8f8a1e
|
data/.rubocop.yml
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
AllCops:
|
2
2
|
TargetRubyVersion: 2.5
|
3
|
+
SuggestExtensions: false
|
4
|
+
NewCops: enable
|
3
5
|
|
4
6
|
Style/StringLiterals:
|
5
7
|
Enabled: true
|
@@ -19,4 +21,8 @@ Lint/UnusedMethodArgument:
|
|
19
21
|
Enabled: false
|
20
22
|
|
21
23
|
Style/Documentation:
|
22
|
-
Enabled: false
|
24
|
+
Enabled: false
|
25
|
+
|
26
|
+
Metrics/BlockLength:
|
27
|
+
IgnoredMethods: ['describe', 'context']
|
28
|
+
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -47,6 +47,24 @@ Example:
|
|
47
47
|
$ appetize upload builds/app-debug.apk android
|
48
48
|
$ appetize upload builds/app.zip ios
|
49
49
|
|
50
|
+
### Update
|
51
|
+
|
52
|
+
Update an existing app in Appitize with a new APK/ZIP
|
53
|
+
|
54
|
+
```
|
55
|
+
Usage:
|
56
|
+
appetize update PATH PUBLIC_KEY
|
57
|
+
```
|
58
|
+
|
59
|
+
`PATH` the path to the Apk or Zip file of the app you would like to deploy
|
60
|
+
|
61
|
+
`PUBLIC_KEY` the public key provided by Appetize for the specific app deployment you'd like to update
|
62
|
+
|
63
|
+
Example:
|
64
|
+
|
65
|
+
$ appetize upload builds/app-debug.apk somepublickey
|
66
|
+
$ appetize upload builds/app.zip somepublickey
|
67
|
+
|
50
68
|
|
51
69
|
### Delete
|
52
70
|
|
data/lib/appetize/api.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "httparty"
|
4
|
+
|
5
|
+
module Appetize
|
6
|
+
class API
|
7
|
+
def initialize(token = nil, api_host = nil)
|
8
|
+
@token = token || ENV["APPETIZE_API_TOKEN"]
|
9
|
+
@api_host = api_host || "api.appetize.io"
|
10
|
+
|
11
|
+
raise "Appetize Token Missing" if @token.nil?
|
12
|
+
end
|
13
|
+
|
14
|
+
def create(path, platform)
|
15
|
+
url = "https://#{@api_host}/v1/apps"
|
16
|
+
auth = { username: @token, password: "" }
|
17
|
+
body = { platform: platform, file: File.open(path) }
|
18
|
+
|
19
|
+
HTTParty.post(url, body: body, basic_auth: auth)
|
20
|
+
end
|
21
|
+
|
22
|
+
def update(path, public_key)
|
23
|
+
url = "https://#{@api_host}/v1/apps/#{public_key}"
|
24
|
+
auth = { username: @token, password: "" }
|
25
|
+
body = { file: File.open(path) }
|
26
|
+
|
27
|
+
HTTParty.post(url, body: body, basic_auth: auth)
|
28
|
+
end
|
29
|
+
|
30
|
+
def delete(public_key)
|
31
|
+
url = "https://#{@api_host}/v1/apps/#{public_key}"
|
32
|
+
auth = { username: @token, password: "" }
|
33
|
+
|
34
|
+
HTTParty.delete(url, basic_auth: auth)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "httparty"
|
4
|
+
|
5
|
+
module Appetize
|
6
|
+
module CI
|
7
|
+
class GitLab
|
8
|
+
def initialize(project_id, ref_name, api_token, api_host = nil)
|
9
|
+
@project_id = project_id
|
10
|
+
@ref_name = ref_name
|
11
|
+
@api_token = api_token
|
12
|
+
@api_host = api_host || "https://gitlab.com/api/v4"
|
13
|
+
end
|
14
|
+
|
15
|
+
def fetch_artifact(job, artifact_name)
|
16
|
+
url = "#{@api_host}/projects/#{@project_id}/jobs/artifacts/#{@ref_name}/raw/#{artifact_name}?job=#{job}"
|
17
|
+
|
18
|
+
headers = {
|
19
|
+
"PRIVATE-TOKEN" => @api_token
|
20
|
+
}
|
21
|
+
|
22
|
+
HTTParty.get(url, headers: headers)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/lib/appetize/cli.rb
CHANGED
@@ -18,6 +18,18 @@ module Appetize
|
|
18
18
|
end
|
19
19
|
map %w[--version -v] => :version
|
20
20
|
|
21
|
+
desc "update PATH PUBLIC_KEY", "Command description..."
|
22
|
+
method_option :help, aliases: "-h", type: :boolean,
|
23
|
+
desc: "Display usage information"
|
24
|
+
def update(path, public_key, token = nil, api_host = nil)
|
25
|
+
if options[:help]
|
26
|
+
invoke :help, ["update"]
|
27
|
+
else
|
28
|
+
require_relative "commands/update"
|
29
|
+
Appetize::Commands::Update.new(path, public_key, token, api_host, options).execute
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
21
33
|
desc "upload PATH PLATFORM", "Upload an APK/ZIP to Appetize"
|
22
34
|
method_option :help, aliases: "-h", type: :boolean,
|
23
35
|
desc: "Display usage information"
|
@@ -1,26 +1,19 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "httparty"
|
4
3
|
require_relative "../command"
|
4
|
+
require_relative "../api"
|
5
5
|
|
6
6
|
module Appetize
|
7
7
|
module Commands
|
8
8
|
class Delete < Appetize::Command
|
9
9
|
def initialize(public_key, token = nil, api_host = nil, options = {})
|
10
|
+
@api = Appetize::API.new(token, api_host)
|
10
11
|
@public_key = public_key
|
11
|
-
@token = token
|
12
|
-
@api_host = api_host
|
13
12
|
@options = options
|
14
13
|
end
|
15
14
|
|
16
15
|
def execute(input: $stdin, output: $stdout)
|
17
|
-
|
18
|
-
api_host = @api_host || "api.appetize.io"
|
19
|
-
|
20
|
-
url = "https://#{api_host}/v1/apps/#{@public_key}"
|
21
|
-
auth = { username: token, password: "" }
|
22
|
-
|
23
|
-
response = HTTParty.delete(url, basic_auth: auth)
|
16
|
+
response = @api.delete(@public_key)
|
24
17
|
|
25
18
|
raise "Delete failed: #{response.code}" unless response.code == 200
|
26
19
|
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "../command"
|
4
|
+
require_relative "../api"
|
5
|
+
|
6
|
+
module Appetize
|
7
|
+
module Commands
|
8
|
+
class Update < Appetize::Command
|
9
|
+
def initialize(path, public_key, token, api_host, options)
|
10
|
+
@api = Appetize::API.new(token, api_host)
|
11
|
+
@path = path
|
12
|
+
@public_key = public_key
|
13
|
+
@options = options
|
14
|
+
end
|
15
|
+
|
16
|
+
def execute(input: $stdin, output: $stdout)
|
17
|
+
response = @api.update(@path, @public_key)
|
18
|
+
|
19
|
+
raise "Update failed: #{response.code}" unless response.code == 200
|
20
|
+
|
21
|
+
output.puts response.body
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -1,33 +1,59 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "httparty"
|
4
3
|
require_relative "../command"
|
4
|
+
require_relative "../api"
|
5
|
+
require_relative "../ci/gitlab"
|
5
6
|
|
6
7
|
module Appetize
|
7
8
|
module Commands
|
8
9
|
class Upload < Appetize::Command
|
9
10
|
def initialize(path, platform, token, api_host, options)
|
10
|
-
@
|
11
|
+
@api = Appetize::API.new(token, api_host)
|
12
|
+
@path = path
|
11
13
|
@platform = platform
|
12
|
-
@
|
13
|
-
@api_host = api_host
|
14
|
-
@options = options
|
14
|
+
@options = options
|
15
15
|
end
|
16
16
|
|
17
17
|
def execute(input: $stdin, output: $stdout)
|
18
|
-
|
19
|
-
|
18
|
+
# If we are running in GitLab CI, check for an existing pipeline
|
19
|
+
# if a pipeline is found, fetch the public key and update the
|
20
|
+
# existing Appetize app
|
21
|
+
if Appetize::Commands::Upload.gitlab_ci?
|
22
|
+
artifact_response = fetch_gitlab_artifact
|
20
23
|
|
21
|
-
|
22
|
-
|
23
|
-
body = { platform: @platform, file: File.open(@path) }
|
24
|
+
if artifact_response.code == 200
|
25
|
+
public_key = JSON.parse(artifact_response.body)["publicKey"]
|
24
26
|
|
25
|
-
|
27
|
+
response = @api.update(@path, public_key)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
response = @api.create(@path, @platform) if public_key.nil?
|
26
32
|
|
27
33
|
raise "Upload failed: #{response.code}" unless response.code == 200
|
28
34
|
|
29
35
|
output.puts response.body
|
30
36
|
end
|
37
|
+
|
38
|
+
def self.gitlab_ci?
|
39
|
+
ENV["GITLAB_CI"].to_s.downcase == "true"
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def fetch_gitlab_artifact
|
45
|
+
gitlab_client = Appetize::CI::GitLab.new(
|
46
|
+
ENV["CI_PROJECT_ID"],
|
47
|
+
ENV["CI_COMMIT_REF_NAME"],
|
48
|
+
ENV["PRIVATE_TOKEN"],
|
49
|
+
ENV["CI_API_V4_URL"]
|
50
|
+
)
|
51
|
+
|
52
|
+
gitlab_client.fetch_artifact(
|
53
|
+
"startReview",
|
54
|
+
"appetize-information.json"
|
55
|
+
)
|
56
|
+
end
|
31
57
|
end
|
32
58
|
end
|
33
59
|
end
|
@@ -0,0 +1 @@
|
|
1
|
+
#
|
data/lib/appetize/version.rb
CHANGED
data/lib/appetize.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: appetize-cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Darby Frey
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-09-
|
11
|
+
date: 2021-09-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|
@@ -59,13 +59,17 @@ files:
|
|
59
59
|
- bin/setup
|
60
60
|
- exe/appetize
|
61
61
|
- lib/appetize.rb
|
62
|
+
- lib/appetize/api.rb
|
63
|
+
- lib/appetize/ci/gitlab.rb
|
62
64
|
- lib/appetize/cli.rb
|
63
65
|
- lib/appetize/command.rb
|
64
66
|
- lib/appetize/commands/.gitkeep
|
65
67
|
- lib/appetize/commands/delete.rb
|
68
|
+
- lib/appetize/commands/update.rb
|
66
69
|
- lib/appetize/commands/upload.rb
|
67
70
|
- lib/appetize/templates/.gitkeep
|
68
71
|
- lib/appetize/templates/delete/.gitkeep
|
72
|
+
- lib/appetize/templates/update/.gitkeep
|
69
73
|
- lib/appetize/templates/upload/.gitkeep
|
70
74
|
- lib/appetize/version.rb
|
71
75
|
homepage: https://gitlab.com/gitlab-org/incubation-engineering/devops-for-mobile-apps/appetize-cli
|