travis_reprise 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source :rubygems
2
+
3
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,38 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ travis-reprise (0.1.0)
5
+ faraday (~> 0.8.4)
6
+ github_api (~> 0.7.0)
7
+
8
+ GEM
9
+ remote: http://rubygems.org/
10
+ specs:
11
+ faraday (0.8.4)
12
+ multipart-post (~> 1.1)
13
+ github_api (0.7.0)
14
+ faraday (~> 0.8.1)
15
+ hashie (~> 1.2.0)
16
+ multi_json (~> 1.3)
17
+ nokogiri (~> 1.5.2)
18
+ oauth2
19
+ hashie (1.2.0)
20
+ httpauth (0.2.0)
21
+ jwt (0.1.5)
22
+ multi_json (>= 1.0)
23
+ multi_json (1.3.6)
24
+ multipart-post (1.1.5)
25
+ nokogiri (1.5.5)
26
+ oauth2 (0.8.0)
27
+ faraday (~> 0.8)
28
+ httpauth (~> 0.1)
29
+ jwt (~> 0.1.4)
30
+ multi_json (~> 1.0)
31
+ rack (~> 1.2)
32
+ rack (1.4.1)
33
+
34
+ PLATFORMS
35
+ ruby
36
+
37
+ DEPENDENCIES
38
+ travis-reprise!
data/README.md ADDED
@@ -0,0 +1,16 @@
1
+ This is a stupid simple gem which you can use to trigger a rebuild on
2
+ Travis Pro. It could likely be enhanced without much effort to work on
3
+ the public system as well but I have no use for that at this time.
4
+
5
+ # Responsibility
6
+ *DO NOT* use this tool to compensate for a piece of crap test suite that
7
+ fails depending on the cycle of the moon. Fix your tests instead. Valid
8
+ use cases are when a test suite fails because a worker died, code
9
+ couldn't be checked out because GitHub had a temporary issue, etc.
10
+
11
+ # Using
12
+
13
+ ```bash
14
+ gem install travis_reprise
15
+ travis_reprise USER REPO BRANCH
16
+ ```
@@ -0,0 +1,90 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Pardon code fugliness that follows, got it working, don't care to
4
+ # clean it up at this point...
5
+
6
+ require 'github_api'
7
+ require 'net/https'
8
+ require 'json'
9
+
10
+ user, repo, branch = ARGV[0], ARGV[1], ARGV[2]
11
+
12
+ unless user && repo && branch
13
+ puts "USAGE: #{$0} GITHUB_USER REPO BRANCH_TO_BUILD"
14
+ puts "If not specified github user defaults to bigcartel"
15
+ exit 1
16
+ end
17
+
18
+ begin
19
+ config = JSON.parse(File.read(File.expand_path('~/.travis-reprise.json')))
20
+ rescue Errno::ENOENT
21
+ $stdout.sync = true
22
+ print "Github Username: "
23
+ u = $stdin.gets.chomp
24
+ print "Github Password: "
25
+ `stty -echo`
26
+ p = $stdin.gets.chomp
27
+ `stty echo`
28
+ puts
29
+
30
+ json = `curl -u '#{u}:#{p}' -d '{"scopes":["repo"],"note":"Travis Reprise"}' https://api.github.com/authorizations 2>/dev/null`
31
+ data = JSON.parse(json)
32
+ if data['token']
33
+ File.open(File.expand_path('~/.travis-reprise.json'), 'w') do |f|
34
+ f << json
35
+ end
36
+ else
37
+ puts "#{data['message']}: try again"
38
+ end
39
+ retry
40
+ end
41
+
42
+ gh = Github.new oauth_token: config['token']
43
+
44
+ branch_data = gh.repos.branch(user, repo, branch)
45
+ head = gh.repos.commits.get(user, repo, branch_data.commit.sha)
46
+ hook = gh.repos.hooks.all(user, repo).find { |h| h.name == 'travis' }
47
+
48
+ payload = {
49
+ :after => head.sha,
50
+ :before => head.parents.first.sha,
51
+ :ref => "refs/heads/#{branch}",
52
+ :commits => [{
53
+ :id => head.sha,
54
+ :message => head.commit.message,
55
+ :timestamp => head.commit.author['date'],
56
+ :url => "https://github.com/#{user}/#{repo}/commit/#{head.sha}",
57
+ :author => author = {
58
+ :name => head.commit.author.name,
59
+ :email => head.commit.author.email
60
+ },
61
+ :committer => author
62
+ }],
63
+ :compare => "http://dummy",
64
+ :repository => {
65
+ :name => repo,
66
+ :owner => { :name => user },
67
+ :private => true,
68
+ :url => "https://github.com/#{user}/#{repo}"
69
+ }
70
+ }
71
+
72
+ #pull_payload = gh.events.repository(user, repo).select { |e| e.type == 'PullRequestEvent' }.first.payload
73
+
74
+ payload = JSON.pretty_generate(payload)
75
+
76
+ http = Net::HTTP.new('notify.travis-ci.com', 443)
77
+ http.use_ssl = true
78
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
79
+ post = Net::HTTP::Post.new('/')
80
+ post.basic_auth hook.config.user, hook.config.token
81
+ post['X-GitHub-Event'] = 'push'
82
+ post.set_form_data({ :payload => payload })
83
+
84
+ result = http.request(post)
85
+
86
+ if result.code == '204'
87
+ puts "It may have worked, go check travis"
88
+ else
89
+ puts "OOPS: Travis responded #{result.inspect}"
90
+ end
@@ -0,0 +1,19 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = "travis_reprise"
5
+ s.version = '0.1.1'
6
+ s.platform = Gem::Platform::RUBY
7
+ s.summary = %q{Trigger travis rebuilds easily}
8
+ s.author = 'dev@bigcartel.com'
9
+ s.email = 'dev@bigcartel.com'
10
+ s.homepage = 'https://github.com/bigcartel/travis_reprise'
11
+
12
+ s.files = `git ls-files`.split("\n")
13
+ s.test_files = `git ls-files -- {spec}/*`.split("\n")
14
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
15
+ s.require_paths = ["lib"]
16
+
17
+ s.add_dependency 'github_api', '~>0.7.0'
18
+ s.add_dependency 'faraday', '~>0.8.4'
19
+ end
metadata ADDED
@@ -0,0 +1,82 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: travis_reprise
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - dev@bigcartel.com
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-10-15 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: github_api
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 0.7.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 0.7.0
30
+ - !ruby/object:Gem::Dependency
31
+ name: faraday
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: 0.8.4
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 0.8.4
46
+ description:
47
+ email: dev@bigcartel.com
48
+ executables:
49
+ - travis_reprise
50
+ extensions: []
51
+ extra_rdoc_files: []
52
+ files:
53
+ - Gemfile
54
+ - Gemfile.lock
55
+ - README.md
56
+ - bin/travis_reprise
57
+ - travis_reprise.gemspec
58
+ homepage: https://github.com/bigcartel/travis_reprise
59
+ licenses: []
60
+ post_install_message:
61
+ rdoc_options: []
62
+ require_paths:
63
+ - lib
64
+ required_ruby_version: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ required_rubygems_version: !ruby/object:Gem::Requirement
71
+ none: false
72
+ requirements:
73
+ - - ! '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ requirements: []
77
+ rubyforge_project:
78
+ rubygems_version: 1.8.23
79
+ signing_key:
80
+ specification_version: 3
81
+ summary: Trigger travis rebuilds easily
82
+ test_files: []