capkin 0.0.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 +7 -0
- data/.gitignore +7 -0
- data/README.md +68 -0
- data/bin/capkin +5 -0
- data/capkin.gemspec +29 -0
- data/lib/capkin.rb +13 -0
- data/lib/capkin/cli.rb +30 -0
- data/lib/capkin/robot.rb +81 -0
- data/lib/capkin/version.rb +3 -0
- metadata +110 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 2b9796e5c2613d9609e4052216f0bd39942aef9d
|
4
|
+
data.tar.gz: b2a519ddb95c7cbd44432edfe0d672e385097710
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 2d4d176737c53651bccda74417666f681de7e52ff2597a6962415a7516ff522d41a68542ef04842dd7fd116efe89cfc7875c62889c0b48884a9ca0291c9ff6ed
|
7
|
+
data.tar.gz: d9d5c8daaddbd5aebb614a350237d6ff20ca0e8e677519fc5628dae4423c07771db8b8a34ecac11c2ab045712d707891c9a4ba064ba235684b9b835d6770db0b
|
data/.gitignore
ADDED
data/README.md
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
Capkin
|
2
|
+
======
|
3
|
+
|
4
|
+
* Upload your `Android Apps` ➔ `Google Play`
|
5
|
+
* Uploads your `.apk` to Alpha, Beta or Production stages.
|
6
|
+
* Promote apk from stages.
|
7
|
+
|
8
|
+
|
9
|
+
## Install
|
10
|
+
|
11
|
+
|
12
|
+
gem install capkin
|
13
|
+
|
14
|
+
|
15
|
+
## Use
|
16
|
+
|
17
|
+
To upload a new `.apk`:
|
18
|
+
|
19
|
+
```sh
|
20
|
+
capkin production
|
21
|
+
capkin beta
|
22
|
+
capkin alpha
|
23
|
+
```
|
24
|
+
|
25
|
+
To move current version to another stage:
|
26
|
+
|
27
|
+
**TODO**
|
28
|
+
|
29
|
+
## Capkin
|
30
|
+
|
31
|
+
Config file:
|
32
|
+
|
33
|
+
```
|
34
|
+
name: 'Foo'
|
35
|
+
app: 'com.your.app'
|
36
|
+
build: 'build/'
|
37
|
+
```
|
38
|
+
|
39
|
+
|
40
|
+
## Login/Auth
|
41
|
+
|
42
|
+
On Google Developer:
|
43
|
+
|
44
|
+
> Create a new project
|
45
|
+
|
46
|
+
On Play:
|
47
|
+
|
48
|
+
> Settings > API access > Link your developer project
|
49
|
+
|
50
|
+
|
51
|
+
### JSON Key
|
52
|
+
|
53
|
+
> APIs & auth > Credentials > Add credential > Service Account > JSON
|
54
|
+
|
55
|
+
|
56
|
+
```sh
|
57
|
+
export GOOGLE_APPLICATION_CREDENTIALS='/path/to/googs.json'
|
58
|
+
```
|
59
|
+
|
60
|
+
|
61
|
+
### Client/Secret
|
62
|
+
|
63
|
+
> APIs & auth > Credentials > Add credential > OAuth 2.0 client ID > Other
|
64
|
+
|
65
|
+
**TODO**
|
66
|
+
|
67
|
+
|
68
|
+
## Capkin
|
data/bin/capkin
ADDED
data/capkin.gemspec
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
lib = File.expand_path('../lib', __FILE__)
|
2
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
|
+
|
4
|
+
require 'capkin/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = 'capkin'
|
8
|
+
s.version = Capkin::VERSION
|
9
|
+
s.platform = Gem::Platform::RUBY
|
10
|
+
|
11
|
+
s.authors = ['Marcos Piccinini', 'Jorge Fernando']
|
12
|
+
s.homepage = 'http://github.com/fireho/capkin'
|
13
|
+
s.email = 'see@github.com'
|
14
|
+
s.description = 'Uploads your apps to Google Play'
|
15
|
+
s.summary = 'Uploads your apps to Google Play'
|
16
|
+
s.license = 'MIT'
|
17
|
+
|
18
|
+
s.executables = ['capkin']
|
19
|
+
s.default_executable = 'capkin'
|
20
|
+
|
21
|
+
s.files = `git ls-files`.split("\n")
|
22
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
23
|
+
s.require_paths = ['lib']
|
24
|
+
|
25
|
+
s.add_dependency 'thor'
|
26
|
+
s.add_dependency 'paint'
|
27
|
+
s.add_dependency 'google-api-client', '0.9.pre3'
|
28
|
+
s.add_dependency 'googleauth'
|
29
|
+
end
|
data/lib/capkin.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'pry'
|
2
|
+
require 'yaml'
|
3
|
+
require 'paint'
|
4
|
+
require 'fileutils'
|
5
|
+
|
6
|
+
require 'googleauth'
|
7
|
+
require 'google/apis/androidpublisher_v2'
|
8
|
+
|
9
|
+
# Capkin. Uploading your apks since 2015!
|
10
|
+
module Capkin
|
11
|
+
autoload :CLI, 'capkin/cli'
|
12
|
+
autoload :Robot, 'capkin/robot'
|
13
|
+
end
|
data/lib/capkin/cli.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
module Capkin
|
2
|
+
# Capking Command Line
|
3
|
+
class CLI
|
4
|
+
# Using class methods
|
5
|
+
class << self
|
6
|
+
#
|
7
|
+
# Check config file
|
8
|
+
#
|
9
|
+
def check_capkin_file
|
10
|
+
return if File.exist?('Capkin')
|
11
|
+
puts Paint['Creating Capkin file...', :red]
|
12
|
+
FileUtils.cp File.join(File.dirname(__FILE__), 'Capkin'), '.'
|
13
|
+
puts Paint['✓ Config file `Capkin` created, edit and re-run.', :green]
|
14
|
+
exit
|
15
|
+
end
|
16
|
+
|
17
|
+
def read_file
|
18
|
+
@config = YAML.load_file('Capkin')
|
19
|
+
msg = "✓ Config file OK! '#{@config['app']}' [#{@config['name']}]"
|
20
|
+
puts Paint[msg, :green]
|
21
|
+
end
|
22
|
+
|
23
|
+
def work!(params)
|
24
|
+
check_capkin_file
|
25
|
+
read_file
|
26
|
+
Capkin::Robot.new(@config, params).upload_apk!
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/lib/capkin/robot.rb
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
module Capkin
|
2
|
+
# Oauth2
|
3
|
+
# grant_type=authorization_token|refresh_token
|
4
|
+
# code=
|
5
|
+
# client_id=<the client ID token created in the APIs Console>
|
6
|
+
# client_secret=<the client secret corresponding to the client ID>
|
7
|
+
# refresh_token=<the refresh token from the previous step>
|
8
|
+
# start a new edit
|
9
|
+
# headers = {
|
10
|
+
# 'access_token' => ENV['CAPKIN_CLIENT']
|
11
|
+
# }
|
12
|
+
# auth.apply(headers)
|
13
|
+
class Robot
|
14
|
+
SCOPE = ['https://www.googleapis.com/auth/androidpublisher']
|
15
|
+
STAGE = 'alpha'
|
16
|
+
attr_reader :apk, :app, :pub, :pkg, :stage, :track, :source
|
17
|
+
|
18
|
+
def initialize(config, stage = nil)
|
19
|
+
@app = config['app']
|
20
|
+
@pkg = config['name']
|
21
|
+
@source ||= File.join(config['build'], "#{@app}.apk")
|
22
|
+
stage = stage.join if stage.respond_to?(:join)
|
23
|
+
@stage = stage.strip.empty? ? STAGE : stage.strip
|
24
|
+
|
25
|
+
init_google
|
26
|
+
puts Paint["Publishing new APK: ./#{source} ➔ '#{@stage}'", :blue]
|
27
|
+
end
|
28
|
+
|
29
|
+
def init_google
|
30
|
+
# Get authorization!
|
31
|
+
@auth = Google::Auth.get_application_default(SCOPE)
|
32
|
+
# create a publisher object
|
33
|
+
@pub = Google::Apis::AndroidpublisherV2::AndroidPublisherService.new
|
34
|
+
@pub.authorization = @auth
|
35
|
+
end
|
36
|
+
|
37
|
+
# Create new editio
|
38
|
+
def edit
|
39
|
+
@edit ||= pub.insert_edit(pkg)
|
40
|
+
end
|
41
|
+
|
42
|
+
def track
|
43
|
+
@track ||= pub.get_track(pkg, edit.id, stage)
|
44
|
+
end
|
45
|
+
|
46
|
+
# Uploads the APK
|
47
|
+
def upload_apk!
|
48
|
+
@apk = pub.upload_apk(pkg, edit.id, upload_source: source)
|
49
|
+
puts Paint["✓ APK uploaded! ##{apk.version_code}", :green]
|
50
|
+
track!
|
51
|
+
puts Paint["✓ All done! ##{apk.inspect}", :green]
|
52
|
+
rescue Google::Apis::ClientError => e
|
53
|
+
if e.to_s =~ /apkUpgradeVersionConflict/
|
54
|
+
puts Paint['✓ Version already exists on play store!', :yellow]
|
55
|
+
else
|
56
|
+
puts Paint["✗ Problem with upload: #{e}", :red]
|
57
|
+
raise e
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
# Update the alpha track to point to this APK
|
62
|
+
# You need to use a track object to change this
|
63
|
+
def track!
|
64
|
+
puts Paint["Pushing APK ➔ '#{@track.track}'", :blue]
|
65
|
+
track.update!(version_codes: [apk.version_code])
|
66
|
+
|
67
|
+
# Save the modified track object
|
68
|
+
pub.update_track(pkg, edit.id, stage, track)
|
69
|
+
|
70
|
+
commit!
|
71
|
+
end
|
72
|
+
|
73
|
+
# Commit the edit
|
74
|
+
def commit!
|
75
|
+
pub.commit_edit(pkg, edit.id)
|
76
|
+
rescue Google::Apis::ClientError => e
|
77
|
+
puts Paint["✗ Problem commiting: #{e}", :red]
|
78
|
+
raise e
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
metadata
ADDED
@@ -0,0 +1,110 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: capkin
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Marcos Piccinini
|
8
|
+
- Jorge Fernando
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2015-09-18 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: thor
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - ">="
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '0'
|
21
|
+
type: :runtime
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '0'
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: paint
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - ">="
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '0'
|
35
|
+
type: :runtime
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0'
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: google-api-client
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - '='
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: 0.9.pre3
|
49
|
+
type: :runtime
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - '='
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: 0.9.pre3
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: googleauth
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0'
|
63
|
+
type: :runtime
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ">="
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
description: Uploads your apps to Google Play
|
71
|
+
email: see@github.com
|
72
|
+
executables:
|
73
|
+
- capkin
|
74
|
+
extensions: []
|
75
|
+
extra_rdoc_files: []
|
76
|
+
files:
|
77
|
+
- ".gitignore"
|
78
|
+
- README.md
|
79
|
+
- bin/capkin
|
80
|
+
- capkin.gemspec
|
81
|
+
- lib/capkin.rb
|
82
|
+
- lib/capkin/Capkin
|
83
|
+
- lib/capkin/cli.rb
|
84
|
+
- lib/capkin/robot.rb
|
85
|
+
- lib/capkin/version.rb
|
86
|
+
homepage: http://github.com/fireho/capkin
|
87
|
+
licenses:
|
88
|
+
- MIT
|
89
|
+
metadata: {}
|
90
|
+
post_install_message:
|
91
|
+
rdoc_options: []
|
92
|
+
require_paths:
|
93
|
+
- lib
|
94
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
95
|
+
requirements:
|
96
|
+
- - ">="
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '0'
|
99
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
requirements: []
|
105
|
+
rubyforge_project:
|
106
|
+
rubygems_version: 2.4.8
|
107
|
+
signing_key:
|
108
|
+
specification_version: 4
|
109
|
+
summary: Uploads your apps to Google Play
|
110
|
+
test_files: []
|