travis 1.11.0 → 1.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.
- checksums.yaml +4 -4
- data/README.md +18 -4
- data/Rakefile +22 -20
- data/bin/travis +5 -3
- data/examples/org_overview.rb +2 -0
- data/examples/pro_auth.rb +3 -1
- data/examples/stream.rb +5 -3
- data/lib/travis/auto_login.rb +2 -0
- data/lib/travis/cli/accounts.rb +12 -9
- data/lib/travis/cli/api_command.rb +85 -81
- data/lib/travis/cli/branches.rb +8 -6
- data/lib/travis/cli/cache.rb +48 -44
- data/lib/travis/cli/cancel.rb +4 -2
- data/lib/travis/cli/command.rb +170 -142
- data/lib/travis/cli/console.rb +5 -5
- data/lib/travis/cli/disable.rb +4 -2
- data/lib/travis/cli/enable.rb +14 -12
- data/lib/travis/cli/encrypt.rb +57 -57
- data/lib/travis/cli/encrypt_file.rb +29 -18
- data/lib/travis/cli/endpoint.rb +9 -7
- data/lib/travis/cli/env.rb +13 -8
- data/lib/travis/cli/help.rb +10 -8
- data/lib/travis/cli/history.rb +19 -15
- data/lib/travis/cli/init.rb +27 -24
- data/lib/travis/cli/lint.rb +10 -8
- data/lib/travis/cli/login.rb +17 -11
- data/lib/travis/cli/logout.rb +4 -2
- data/lib/travis/cli/logs.rb +28 -19
- data/lib/travis/cli/monitor.rb +11 -8
- data/lib/travis/cli/open.rb +17 -14
- data/lib/travis/cli/parser.rb +2 -0
- data/lib/travis/cli/pubkey.rb +13 -11
- data/lib/travis/cli/raw.rb +4 -3
- data/lib/travis/cli/repo_command.rb +123 -112
- data/lib/travis/cli/report.rb +40 -33
- data/lib/travis/cli/repos.rb +14 -9
- data/lib/travis/cli/requests.rb +13 -12
- data/lib/travis/cli/restart.rb +4 -2
- data/lib/travis/cli/settings.rb +41 -35
- data/lib/travis/cli/setup/anynines.rb +7 -6
- data/lib/travis/cli/setup/appfog.rb +6 -4
- data/lib/travis/cli/setup/artifacts.rb +7 -5
- data/lib/travis/cli/setup/biicode.rb +6 -4
- data/lib/travis/cli/setup/cloud_66.rb +6 -4
- data/lib/travis/cli/setup/cloud_control.rb +8 -6
- data/lib/travis/cli/setup/cloud_files.rb +7 -5
- data/lib/travis/cli/setup/cloud_foundry.rb +9 -7
- data/lib/travis/cli/setup/code_deploy.rb +33 -29
- data/lib/travis/cli/setup/deis.rb +8 -6
- data/lib/travis/cli/setup/divshot.rb +20 -18
- data/lib/travis/cli/setup/elastic_beanstalk.rb +10 -8
- data/lib/travis/cli/setup/engine_yard.rb +9 -7
- data/lib/travis/cli/setup/gcs.rb +9 -7
- data/lib/travis/cli/setup/hackage.rb +6 -4
- data/lib/travis/cli/setup/heroku.rb +10 -4
- data/lib/travis/cli/setup/modulus.rb +5 -3
- data/lib/travis/cli/setup/ninefold.rb +7 -5
- data/lib/travis/cli/setup/nodejitsu.rb +6 -4
- data/lib/travis/cli/setup/npm.rb +6 -4
- data/lib/travis/cli/setup/open_shift.rb +8 -6
- data/lib/travis/cli/setup/opsworks.rb +24 -22
- data/lib/travis/cli/setup/pypi.rb +7 -5
- data/lib/travis/cli/setup/releases.rb +6 -6
- data/lib/travis/cli/setup/ruby_gems.rb +7 -5
- data/lib/travis/cli/setup/s3.rb +12 -8
- data/lib/travis/cli/setup/sauce_connect.rb +7 -5
- data/lib/travis/cli/setup/service.rb +36 -25
- data/lib/travis/cli/setup.rb +7 -3
- data/lib/travis/cli/show.rb +10 -8
- data/lib/travis/cli/sshkey.rb +31 -28
- data/lib/travis/cli/status.rb +5 -3
- data/lib/travis/cli/sync.rb +9 -7
- data/lib/travis/cli/token.rb +4 -2
- data/lib/travis/cli/version.rb +4 -3
- data/lib/travis/cli/whatsup.rb +10 -8
- data/lib/travis/cli/whoami.rb +2 -2
- data/lib/travis/cli.rb +39 -36
- data/lib/travis/client/account.rb +8 -6
- data/lib/travis/client/artifact.rb +16 -12
- data/lib/travis/client/auto_login.rb +7 -4
- data/lib/travis/client/broadcast.rb +2 -0
- data/lib/travis/client/build.rb +7 -3
- data/lib/travis/client/cache.rb +4 -2
- data/lib/travis/client/commit.rb +5 -2
- data/lib/travis/client/entity.rb +50 -46
- data/lib/travis/client/env_var.rb +13 -8
- data/lib/travis/client/error.rb +5 -3
- data/lib/travis/client/has_uuid.rb +3 -1
- data/lib/travis/client/job.rb +8 -3
- data/lib/travis/client/lint_result.rb +2 -0
- data/lib/travis/client/listener.rb +70 -55
- data/lib/travis/client/methods.rb +10 -5
- data/lib/travis/client/namespace.rb +20 -16
- data/lib/travis/client/not_loadable.rb +3 -1
- data/lib/travis/client/repository.rb +34 -22
- data/lib/travis/client/request.rb +5 -2
- data/lib/travis/client/restartable.rb +2 -0
- data/lib/travis/client/session.rb +118 -88
- data/lib/travis/client/settings.rb +8 -3
- data/lib/travis/client/singleton_setting.rb +2 -0
- data/lib/travis/client/ssh_key.rb +2 -0
- data/lib/travis/client/states.rb +8 -6
- data/lib/travis/client/user.rb +2 -0
- data/lib/travis/client/weak_entity.rb +6 -3
- data/lib/travis/client.rb +4 -1
- data/lib/travis/pro/auto_login.rb +2 -0
- data/lib/travis/pro.rb +2 -0
- data/lib/travis/tools/assets.rb +6 -3
- data/lib/travis/tools/completion.rb +10 -6
- data/lib/travis/tools/formatter.rb +20 -14
- data/lib/travis/tools/github.rb +59 -49
- data/lib/travis/tools/notification.rb +18 -13
- data/lib/travis/tools/safe_string.rb +4 -1
- data/lib/travis/tools/ssl_key.rb +5 -2
- data/lib/travis/tools/system.rb +11 -6
- data/lib/travis/version.rb +3 -1
- data/lib/travis.rb +3 -1
- data/spec/cli/api_command_spec.rb +11 -8
- data/spec/cli/cancel_spec.rb +2 -4
- data/spec/cli/encrypt_file_spec.rb +9 -7
- data/spec/cli/encrypt_spec.rb +19 -17
- data/spec/cli/endpoint_spec.rb +12 -10
- data/spec/cli/help_spec.rb +14 -12
- data/spec/cli/history_spec.rb +2 -0
- data/spec/cli/init_spec.rb +35 -33
- data/spec/cli/logs_spec.rb +2 -0
- data/spec/cli/open_spec.rb +6 -4
- data/spec/cli/repo_command_spec.rb +8 -4
- data/spec/cli/restart_spec.rb +2 -4
- data/spec/cli/setup/service_spec.rb +17 -18
- data/spec/cli/setup_spec.rb +2 -4
- data/spec/cli/show_spec.rb +4 -2
- data/spec/cli/status_spec.rb +7 -5
- data/spec/cli/token_spec.rb +7 -5
- data/spec/cli/version_spec.rb +2 -0
- data/spec/cli/whoami_spec.rb +9 -7
- data/spec/client/account_spec.rb +28 -20
- data/spec/client/auto_login_spec.rb +12 -9
- data/spec/client/broadcast_spec.rb +5 -3
- data/spec/client/build_spec.rb +28 -24
- data/spec/client/commit_spec.rb +17 -14
- data/spec/client/job_spec.rb +27 -23
- data/spec/client/methods_spec.rb +8 -4
- data/spec/client/namespace_spec.rb +8 -4
- data/spec/client/repository_spec.rb +33 -30
- data/spec/client/session_spec.rb +71 -67
- data/spec/client/user_spec.rb +13 -10
- data/spec/client_spec.rb +6 -4
- data/spec/pro_spec.rb +5 -3
- data/spec/spec_helper.rb +3 -1
- data/spec/support/fake_api.rb +662 -662
- data/spec/support/fake_github.rb +6 -3
- data/spec/support/helpers.rb +13 -8
- data/spec/travis_spec.rb +5 -3
- data/travis.gemspec +400 -399
- metadata +30 -50
@@ -1,18 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'travis/cli/setup'
|
2
4
|
|
3
5
|
module Travis
|
4
6
|
module CLI
|
5
7
|
class Setup
|
6
8
|
class SauceConnect < Service
|
7
|
-
description
|
8
|
-
service_name
|
9
|
+
description 'Sauce Connet addon for Sauce Labs integration'
|
10
|
+
service_name 'sauce_connect'
|
9
11
|
|
10
12
|
def run
|
11
13
|
travis_config['addons'] ||= {}
|
12
14
|
configure 'sauce_connect', {}, travis_config['addons'] do |config|
|
13
|
-
config['username'] = ask(
|
14
|
-
config['access_key'] = ask(
|
15
|
-
encrypt(config, 'access_key') if agree(
|
15
|
+
config['username'] = ask('Sauce Labs user: ').to_s
|
16
|
+
config['access_key'] = ask('Sauce Labs access key: ') { |q| q.echo = '*' }.to_s
|
17
|
+
encrypt(config, 'access_key') if agree('Encrypt access key? ') { |q| q.default = 'yes' }
|
16
18
|
end
|
17
19
|
end
|
18
20
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'travis/cli/setup'
|
2
4
|
|
3
5
|
module Travis
|
@@ -9,7 +11,7 @@ module Travis
|
|
9
11
|
end
|
10
12
|
|
11
13
|
def self.description(description = nil)
|
12
|
-
@description ||=
|
14
|
+
@description ||= ''
|
13
15
|
@description = description if description
|
14
16
|
@description
|
15
17
|
end
|
@@ -36,39 +38,48 @@ module Travis
|
|
36
38
|
|
37
39
|
private
|
38
40
|
|
39
|
-
|
40
|
-
|
41
|
-
config['on'] ||= {}
|
42
|
-
config['on'].merge! condition
|
43
|
-
end
|
41
|
+
def on(question, config, condition)
|
42
|
+
return unless agree(question) { |q| q.default = 'yes' }
|
44
43
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
end
|
44
|
+
config['on'] ||= {}
|
45
|
+
config['on'].merge! condition
|
46
|
+
end
|
49
47
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
48
|
+
def encrypt(config, key)
|
49
|
+
encrypted = repository.encrypt(config.fetch(key))
|
50
|
+
config[key] = { 'secure' => encrypted }
|
51
|
+
end
|
54
52
|
|
55
|
-
|
56
|
-
|
53
|
+
def configure(key, value = {}, config = travis_config)
|
54
|
+
if config.include?(key) && !force?
|
55
|
+
error "#{key} section already exists in .travis.yml, run with --force to override"
|
57
56
|
end
|
57
|
+
yield(config[key] = value)
|
58
|
+
end
|
58
59
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
on("#{verb.capitalize} only from #{repository.slug}? ", config, 'repo' => repository.slug)
|
64
|
-
on("#{verb.capitalize} from #{branch} branch? ", config, 'branch' => branch) if branch != 'master' and branch != 'HEAD'
|
60
|
+
def branch
|
61
|
+
@branch ||= `git rev-parse --symbolic-full-name --abbrev-ref HEAD`.chomp
|
62
|
+
end
|
65
63
|
|
66
|
-
|
64
|
+
def deploy(provider, verb = 'deploy')
|
65
|
+
configure('deploy', 'provider' => provider) do |config|
|
66
|
+
yield config
|
67
67
|
|
68
|
-
|
69
|
-
|
68
|
+
on("#{verb.capitalize} only from #{repository.slug}? ", config, 'repo' => repository.slug)
|
69
|
+
if (branch != 'master') && (branch != 'HEAD')
|
70
|
+
on("#{verb.capitalize} from #{branch} branch? ", config,
|
71
|
+
'branch' => branch)
|
70
72
|
end
|
73
|
+
|
74
|
+
config['skip_cleanup'] = 'true' unless config.key?('skip_cleanup') || (config.fetch('edge',
|
75
|
+
'false') != 'false')
|
76
|
+
|
77
|
+
encrypt(config, 'password') if config['password'] && agree('Encrypt Password? ') do |q|
|
78
|
+
q.default = 'yes'
|
79
|
+
end
|
80
|
+
encrypt(config, 'api_key') if config['api_key'] && agree('Encrypt API key? ') { |q| q.default = 'yes' }
|
71
81
|
end
|
82
|
+
end
|
72
83
|
end
|
73
84
|
end
|
74
85
|
end
|
data/lib/travis/cli/setup.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'travis/cli'
|
2
4
|
|
3
5
|
module Travis
|
@@ -32,14 +34,14 @@ module Travis
|
|
32
34
|
autoload :Deis, 'travis/cli/setup/deis'
|
33
35
|
autoload :Service, 'travis/cli/setup/service'
|
34
36
|
|
35
|
-
description
|
37
|
+
description 'sets up an addon or deploy target'
|
36
38
|
on('-f', '--force', 'override config section if it already exists')
|
37
39
|
|
38
40
|
def self.service(name)
|
39
41
|
normal_name = Service.normalized_name(name)
|
40
42
|
const_name = constants(false).detect { |c| Service.normalized_name(c) == normal_name }
|
41
43
|
constant = const_get(const_name) if const_name
|
42
|
-
constant if constant
|
44
|
+
constant if constant && (constant < Service) && constant.known_as?(name)
|
43
45
|
end
|
44
46
|
|
45
47
|
def self.services
|
@@ -47,7 +49,9 @@ module Travis
|
|
47
49
|
end
|
48
50
|
|
49
51
|
def help
|
50
|
-
services = self.class.services.map
|
52
|
+
services = self.class.services.map do |s|
|
53
|
+
"\t" << color(s.service_name.ljust(20), :command) << color(s.description, :info)
|
54
|
+
end.join("\n")
|
51
55
|
super("\nAvailable services:\n\n#{services}\n\n")
|
52
56
|
end
|
53
57
|
|
data/lib/travis/cli/show.rb
CHANGED
@@ -1,12 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'travis/cli'
|
2
4
|
|
3
5
|
module Travis
|
4
6
|
module CLI
|
5
7
|
class Show < RepoCommand
|
6
|
-
description
|
8
|
+
description 'displays a build or job'
|
7
9
|
|
8
10
|
def run(number = last_build.number)
|
9
|
-
number = repository.branch(number).number if number !~ /^\d+(\.\d+)?$/
|
11
|
+
number = repository.branch(number).number if number !~ /^\d+(\.\d+)?$/ && repository.branch(number)
|
10
12
|
entity = job(number) || build(number)
|
11
13
|
|
12
14
|
error "could not find job or build #{repository.slug}##{number}" unless entity
|
@@ -17,7 +19,7 @@ module Travis
|
|
17
19
|
entity.commit.subject,
|
18
20
|
entity.state,
|
19
21
|
entity.color,
|
20
|
-
entity.pull_request? ?
|
22
|
+
entity.pull_request? ? 'pull request' : 'push',
|
21
23
|
entity.branch_info,
|
22
24
|
entity.commit.short_sha,
|
23
25
|
entity.commit.compare_url,
|
@@ -33,13 +35,13 @@ module Travis
|
|
33
35
|
color("##{job.number} #{job.state}:".ljust(16), [job.color, :bold]),
|
34
36
|
formatter.duration(job.duration).ljust(14),
|
35
37
|
formatter.job_config(job.config),
|
36
|
-
(color(
|
37
|
-
].compact.join(
|
38
|
+
(color('(failure allowed)', :info) if job.allow_failures?)
|
39
|
+
].compact.join(' ').rstrip
|
38
40
|
end
|
39
41
|
else
|
40
42
|
config = formatter.job_config(entity.config)
|
41
|
-
say color(
|
42
|
-
say color(
|
43
|
+
say color('Allow Failure: ', :info) + entity.allow_failures?.inspect
|
44
|
+
say color('Config: ', :info) + config unless config.empty?
|
43
45
|
end
|
44
46
|
end
|
45
47
|
end
|
@@ -56,4 +58,4 @@ __END__
|
|
56
58
|
<[[ color("Compare URL: ", :info) ]]>%s
|
57
59
|
<[[ color("Duration: ", :info) ]]>%s
|
58
60
|
<[[ color("Started: ", :info) ]]>%s
|
59
|
-
<[[ color("Finished: ", :info) ]]>%s
|
61
|
+
<[[ color("Finished: ", :info) ]]>%s
|
data/lib/travis/cli/sshkey.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'travis/cli'
|
2
4
|
require 'travis/tools/ssl_key'
|
3
5
|
require 'travis/tools/github'
|
@@ -5,7 +7,7 @@ require 'travis/tools/github'
|
|
5
7
|
module Travis
|
6
8
|
module CLI
|
7
9
|
class Sshkey < RepoCommand
|
8
|
-
description
|
10
|
+
description 'checks, updates or deletes an SSH key'
|
9
11
|
on '-D', '--delete', 'remove SSH key'
|
10
12
|
on '-d', '--description DESCRIPTION', 'set description'
|
11
13
|
on '-u', '--upload FILE', 'upload key from given file'
|
@@ -30,25 +32,26 @@ module Travis
|
|
30
32
|
say "Current SSH key: #{color(ssh_key.description, :info)}"
|
31
33
|
say "Finger print: #{color(ssh_key.fingerprint, :info)}"
|
32
34
|
rescue Travis::Client::NotFound
|
33
|
-
say
|
35
|
+
say 'No custom SSH key installed.'
|
34
36
|
exit 1 if check?
|
35
37
|
end
|
36
38
|
|
37
39
|
def update_key(value, file)
|
38
40
|
error "#{file} does not look like a private key" unless value.lines.first =~ /PRIVATE KEY/
|
39
41
|
value = remove_passphrase(value)
|
40
|
-
self.description ||= ask(
|
42
|
+
self.description ||= ask('Key description: ') { |q| q.default = 'Custom Key' } if interactive?
|
41
43
|
say "Updating ssh key for #{color slug, :info} with key from #{color file, :info}"
|
42
44
|
empty_line
|
43
|
-
ssh_key.update(
|
45
|
+
ssh_key.update(value:, description: description || file)
|
44
46
|
end
|
45
47
|
|
46
48
|
def delete_key
|
47
|
-
return if interactive?
|
49
|
+
return if interactive? && !danger_zone?("Remove SSH key for #{color slug, :info}?")
|
50
|
+
|
48
51
|
say "Removing ssh key for #{color slug, :info}"
|
49
52
|
ssh_key.delete
|
50
53
|
rescue Travis::Client::NotFound
|
51
|
-
warn
|
54
|
+
warn 'no key found to remove'
|
52
55
|
end
|
53
56
|
|
54
57
|
def generate_key
|
@@ -56,39 +59,39 @@ module Travis
|
|
56
59
|
github.with_token do |token|
|
57
60
|
access_token = github_auth(token)
|
58
61
|
end
|
59
|
-
|
60
|
-
|
61
|
-
raise Travis::Client::GitHubLoginFailed, "all GitHub tokens given were invalid"
|
62
|
-
end
|
62
|
+
raise Travis::Client::GitHubLoginFailed, 'all GitHub tokens given were invalid' unless access_token
|
63
|
+
|
63
64
|
gh = GH.with(token: github_token)
|
64
65
|
login = gh['user']['login']
|
65
66
|
check_access(gh)
|
66
67
|
empty_line
|
67
68
|
|
68
|
-
say
|
69
|
+
say 'Generating RSA key.'
|
69
70
|
private_key = Tools::SSLKey.generate_rsa
|
70
71
|
self.description ||= "key for fetching dependencies for #{slug} via #{login}"
|
71
72
|
|
72
|
-
say
|
73
|
-
gh.post(
|
73
|
+
say 'Uploading public key to GitHub.'
|
74
|
+
gh.post('/user/keys', title: "#{description} (Travis CI)",
|
75
|
+
key: Tools::SSLKey.rsa_ssh(private_key.public_key))
|
74
76
|
|
75
|
-
say
|
76
|
-
ssh_key.update(:
|
77
|
+
say 'Uploading private key to Travis CI.'
|
78
|
+
ssh_key.update(value: private_key.to_s, description:)
|
77
79
|
|
78
80
|
empty_line
|
79
|
-
say
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
81
|
+
say 'You can store the private key to reuse it for other repositories (travis sshkey --upload FILE).'
|
82
|
+
return unless agree('Store private key? ') { |q| q.default = 'no' }
|
83
|
+
|
84
|
+
path = ask('Path: ') { |q| q.default = 'id_travis_rsa' }
|
85
|
+
File.write(path, private_key.to_s)
|
84
86
|
end
|
85
87
|
|
86
88
|
def remove_passphrase(value)
|
87
89
|
return value unless Tools::SSLKey.has_passphrase? value
|
88
|
-
return Tools::SSLKey.remove_passphrase(value, passphrase) || error(
|
89
|
-
|
90
|
-
|
91
|
-
|
90
|
+
return Tools::SSLKey.remove_passphrase(value, passphrase) || error('wrong pass phrase') if passphrase
|
91
|
+
|
92
|
+
error 'Key is encrypted, but missing --passphrase option' unless interactive?
|
93
|
+
say 'The private key is protected by a pass phrase.'
|
94
|
+
result = Tools::SSLKey.remove_passphrase(value, ask('Enter pass phrase: ') { |q| q.echo = '*' }) until result
|
92
95
|
empty_line
|
93
96
|
result
|
94
97
|
end
|
@@ -108,15 +111,15 @@ module Travis
|
|
108
111
|
g.github_token = github_token
|
109
112
|
g.login_header = proc { login_header }
|
110
113
|
g.debug = proc { |log| debug(log) }
|
111
|
-
g.after_tokens = proc { g.explode = true and error(
|
114
|
+
g.after_tokens = proc { g.explode = true and error('no suitable github token found') }
|
112
115
|
end
|
113
116
|
end
|
114
117
|
end
|
115
118
|
|
116
119
|
def login_header
|
117
|
-
say
|
118
|
-
say
|
119
|
-
say "Try running with #{color(
|
120
|
+
say 'GitHub deprecated its Authorizations API exchanging a password for a token.'
|
121
|
+
say 'Please visit https://github.blog/2020-07-30-token-authentication-requirements-for-api-and-git-operations for more information.'
|
122
|
+
say "Try running with #{color('--github-token', :info)} or #{color('--auto-token', :info)} ."
|
120
123
|
end
|
121
124
|
end
|
122
125
|
end
|
data/lib/travis/cli/status.rb
CHANGED
@@ -1,9 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'travis/cli'
|
2
4
|
|
3
5
|
module Travis
|
4
6
|
module CLI
|
5
7
|
class Status < RepoCommand
|
6
|
-
description
|
8
|
+
description 'checks status of the latest build'
|
7
9
|
|
8
10
|
on '-x', '--[no-]exit-code', 'sets the exit code to 1 if the build failed'
|
9
11
|
on '-q', '--[no-]quiet', 'does not print anything'
|
@@ -11,8 +13,8 @@ module Travis
|
|
11
13
|
|
12
14
|
def run
|
13
15
|
say color(last_build.state, last_build.color), "build ##{last_build.number} %s" unless quiet?
|
14
|
-
exit 1 if exit_code?
|
15
|
-
exit 1 if fail_pending?
|
16
|
+
exit 1 if exit_code? && last_build.unsuccessful?
|
17
|
+
exit 1 if fail_pending? && last_build.pending?
|
16
18
|
end
|
17
19
|
end
|
18
20
|
end
|
data/lib/travis/cli/sync.rb
CHANGED
@@ -1,9 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'travis/cli'
|
2
4
|
|
3
5
|
module Travis
|
4
6
|
module CLI
|
5
7
|
class Sync < ApiCommand
|
6
|
-
description
|
8
|
+
description 'triggers a new sync with GitHub'
|
7
9
|
|
8
10
|
on '-c', '--check', 'only check the sync status'
|
9
11
|
on '-b', '--background', 'will trigger sync but not block until sync is done'
|
@@ -13,16 +15,16 @@ module Travis
|
|
13
15
|
authenticate
|
14
16
|
|
15
17
|
if check?
|
16
|
-
say "#{
|
17
|
-
elsif user.syncing?
|
18
|
-
error
|
18
|
+
say "#{'not ' unless user.syncing?}syncing", "#{user.login} is currently %s"
|
19
|
+
elsif user.syncing? && !force?
|
20
|
+
error 'user is already syncing'
|
19
21
|
elsif background?
|
20
|
-
say
|
22
|
+
say 'starting synchronization'
|
21
23
|
sync(false)
|
22
24
|
else
|
23
|
-
say
|
25
|
+
say 'synchronizing: '
|
24
26
|
sync
|
25
|
-
say color(
|
27
|
+
say color(' done', :success)
|
26
28
|
end
|
27
29
|
end
|
28
30
|
end
|
data/lib/travis/cli/token.rb
CHANGED
@@ -1,13 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'travis/cli'
|
2
4
|
|
3
5
|
module Travis
|
4
6
|
module CLI
|
5
7
|
class Token < ApiCommand
|
6
|
-
description
|
8
|
+
description 'outputs the secret API token'
|
7
9
|
|
8
10
|
def run
|
9
11
|
authenticate
|
10
|
-
say access_token,
|
12
|
+
say access_token, 'Your access token is %s'
|
11
13
|
end
|
12
14
|
end
|
13
15
|
end
|
data/lib/travis/cli/version.rb
CHANGED
@@ -1,17 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'travis/cli'
|
2
4
|
require 'travis/version'
|
3
5
|
|
4
6
|
module Travis
|
5
7
|
module CLI
|
6
8
|
class Version < Command
|
7
|
-
description
|
9
|
+
description 'outputs the client version'
|
8
10
|
|
9
11
|
def run
|
10
12
|
say Travis::VERSION
|
11
13
|
end
|
12
14
|
|
13
|
-
def check_version
|
14
|
-
end
|
15
|
+
def check_version; end
|
15
16
|
end
|
16
17
|
end
|
17
18
|
end
|
data/lib/travis/cli/whatsup.rb
CHANGED
@@ -1,30 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'travis/cli'
|
2
4
|
|
3
5
|
module Travis
|
4
6
|
module CLI
|
5
7
|
class Whatsup < ApiCommand
|
6
|
-
description
|
8
|
+
description 'lists most recent builds'
|
7
9
|
on('-m', '--my-repos', 'Only display my own repositories')
|
8
10
|
|
9
11
|
def run
|
10
|
-
say
|
12
|
+
say 'nothing to show' if recent.empty?
|
11
13
|
|
12
14
|
recent.each do |repo|
|
13
15
|
say [
|
14
16
|
color(repo.slug, [:bold, repo.color]),
|
15
17
|
color("#{repo.last_build.state}: ##{repo.last_build.number}", repo.color)
|
16
|
-
].join(
|
18
|
+
].join(' ')
|
17
19
|
end
|
18
20
|
end
|
19
21
|
|
20
22
|
private
|
21
23
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
end
|
24
|
+
def recent
|
25
|
+
@recent ||= begin
|
26
|
+
recent = my_repos ? repos : repos(member: user.login)
|
27
|
+
recent.select { |repo| repo.last_build }
|
27
28
|
end
|
29
|
+
end
|
28
30
|
end
|
29
31
|
end
|
30
32
|
end
|
data/lib/travis/cli/whoami.rb
CHANGED
@@ -3,12 +3,12 @@ require 'travis/cli'
|
|
3
3
|
module Travis
|
4
4
|
module CLI
|
5
5
|
class Whoami < ApiCommand
|
6
|
-
description
|
6
|
+
description 'outputs the current user'
|
7
7
|
|
8
8
|
def run
|
9
9
|
authenticate
|
10
10
|
name = " (#{user.name})" unless user.name.to_s.empty?
|
11
|
-
say user.login,
|
11
|
+
say user.login, 'You are %s' << name.to_s
|
12
12
|
end
|
13
13
|
end
|
14
14
|
end
|
data/lib/travis/cli.rb
CHANGED
@@ -1,12 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
begin
|
2
4
|
require 'travis/client'
|
3
5
|
rescue LoadError => e
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
raise e
|
9
|
-
end
|
6
|
+
raise e unless e.message == 'no such file to load -- json'
|
7
|
+
|
8
|
+
warn 'You should either run `gem install json` or upgrade your Ruby version!'
|
9
|
+
exit 1
|
10
10
|
end
|
11
11
|
|
12
12
|
require 'stringio'
|
@@ -66,11 +66,11 @@ module Travis
|
|
66
66
|
|
67
67
|
def command(name)
|
68
68
|
const_name = command_name(name)
|
69
|
-
constant = CLI.const_get(const_name) if const_name =~ /^[A-Z][A-Za-z]+$/
|
69
|
+
constant = CLI.const_get(const_name) if const_name =~ (/^[A-Z][A-Za-z]+$/) && const_defined?(const_name)
|
70
70
|
if command? constant
|
71
71
|
constant
|
72
72
|
else
|
73
|
-
|
73
|
+
warn "unknown command #{name}"
|
74
74
|
exit 1
|
75
75
|
end
|
76
76
|
end
|
@@ -80,8 +80,10 @@ module Travis
|
|
80
80
|
end
|
81
81
|
|
82
82
|
def silent
|
83
|
-
stderr
|
84
|
-
|
83
|
+
stderr = $stderr
|
84
|
+
$stderr = dummy_io
|
85
|
+
stdout = $stdout
|
86
|
+
$stdout = dummy_io
|
85
87
|
yield
|
86
88
|
ensure
|
87
89
|
$stderr = stderr if stderr
|
@@ -90,37 +92,38 @@ module Travis
|
|
90
92
|
|
91
93
|
private
|
92
94
|
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
95
|
+
def try_const_get(name)
|
96
|
+
CLI.const_get(name)
|
97
|
+
rescue Exception
|
98
|
+
end
|
97
99
|
|
98
|
-
|
99
|
-
|
100
|
-
File.open(IO::NULL, 'w')
|
101
|
-
end
|
100
|
+
def dummy_io
|
101
|
+
return StringIO.new unless defined? IO::NULL && IO::NULL
|
102
102
|
|
103
|
-
|
104
|
-
|
105
|
-
|
103
|
+
File.open(IO::NULL, 'w')
|
104
|
+
end
|
105
|
+
|
106
|
+
def command?(constant)
|
107
|
+
constant.is_a? Class and constant < Command and !constant.abstract?
|
108
|
+
end
|
106
109
|
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
end
|
110
|
+
def command_name(name)
|
111
|
+
case name
|
112
|
+
when nil, '-h', '-?' then 'Help'
|
113
|
+
when '-v' then 'Version'
|
114
|
+
when /^--/ then command_name(name[2..])
|
115
|
+
else name.split('-').map(&:capitalize).join
|
114
116
|
end
|
117
|
+
end
|
115
118
|
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
end
|
123
|
-
[args, opts]
|
119
|
+
# can't use flatten as it will flatten hashes
|
120
|
+
def preparse(unparsed, args = [], opts = {})
|
121
|
+
case unparsed
|
122
|
+
when Hash then opts.merge! unparsed
|
123
|
+
when Array then unparsed.each { |e| preparse(e, args, opts) }
|
124
|
+
else args << unparsed.to_s
|
124
125
|
end
|
126
|
+
[args, opts]
|
127
|
+
end
|
125
128
|
end
|
126
129
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'travis/client'
|
2
4
|
|
3
5
|
module Travis
|
@@ -32,11 +34,11 @@ module Travis
|
|
32
34
|
end
|
33
35
|
|
34
36
|
def repos_count
|
35
|
-
load_attribute(
|
37
|
+
load_attribute('repos_count') { repositories.count }
|
36
38
|
end
|
37
39
|
|
38
40
|
def repositories
|
39
|
-
attributes['repositories'] ||= session.repos(:
|
41
|
+
attributes['repositories'] ||= session.repos(owner_name: login)
|
40
42
|
end
|
41
43
|
|
42
44
|
def member?
|
@@ -47,10 +49,10 @@ module Travis
|
|
47
49
|
|
48
50
|
private
|
49
51
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
52
|
+
def load_attribute(name, &block)
|
53
|
+
session.accounts if missing? name
|
54
|
+
block ? attributes.fetch(name.to_s, &block) : attributes[name.to_s]
|
55
|
+
end
|
54
56
|
end
|
55
57
|
end
|
56
58
|
end
|