concourse-github-status 0.1.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 37681d254aa1cc86d5b71a12c61755b39a3142b3
4
+ data.tar.gz: 5cb323a8ebf24bed9873cfec9b1687ce9eb77a7d
5
+ SHA512:
6
+ metadata.gz: fd652cbfa3939568adcd4739559fc3bb5d1b84afc2aad191ffecc4a12ea46bdd228d161d28023e7bd6676ec4366d6f89854470b6120e0d3be7a03df758965da5
7
+ data.tar.gz: 1b389a5affe1cc2559a0591518650e0f5dac1777e014c1fe21f423ba03c73cbb29b6e7c6b3c73701765b54d281b1ef499d25c4905eb7788fb13edaf835a480ef
data/.gitignore ADDED
@@ -0,0 +1 @@
1
+ vendor/**
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source ENV.fetch 'RUBYGEMS_MIRROR', 'https://rubygems.org'
2
+
3
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,33 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ concourse-github-status (0.1.0)
5
+ concourse-fuselage (~> 0.1, >= 0.1.0)
6
+ git (~> 1.3, >= 1.3.0)
7
+ octokit (~> 4.2, >= 4.2.0)
8
+
9
+ GEM
10
+ remote: https://rubygems.org/
11
+ specs:
12
+ addressable (2.3.8)
13
+ concourse-fuselage (0.1.0)
14
+ contracts (~> 0.13, >= 0.13.0)
15
+ contracts (0.13.0)
16
+ faraday (0.9.2)
17
+ multipart-post (>= 1.2, < 3)
18
+ git (1.3.0)
19
+ multipart-post (2.0.0)
20
+ octokit (4.2.0)
21
+ sawyer (~> 0.6.0, >= 0.5.3)
22
+ sawyer (0.6.0)
23
+ addressable (~> 2.3.5)
24
+ faraday (~> 0.8, < 0.10)
25
+
26
+ PLATFORMS
27
+ ruby
28
+
29
+ DEPENDENCIES
30
+ concourse-github-status!
31
+
32
+ BUNDLED WITH
33
+ 1.11.2
data/LICENSE.txt ADDED
@@ -0,0 +1,13 @@
1
+ Copyright 2016 Chris Olstrom <chris@olstrom.com>
2
+
3
+ Licensed under the Apache License, Version 2.0 (the "License");
4
+ you may not use this file except in compliance with the License.
5
+ You may obtain a copy of the License at
6
+
7
+ http://www.apache.org/licenses/LICENSE-2.0
8
+
9
+ Unless required by applicable law or agreed to in writing, software
10
+ distributed under the License is distributed on an "AS IS" BASIS,
11
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ See the License for the specific language governing permissions and
13
+ limitations under the License.
data/README.org ADDED
@@ -0,0 +1,54 @@
1
+ #+TITLE: GitHub Status
2
+ #+SUBTITLE: A Custom Resource for Concourse
3
+ #+LATEX: \pagebreak
4
+
5
+ * Overview
6
+
7
+ Create and update GitHub statuses from Concourse.
8
+
9
+ * Usage
10
+
11
+ Add the resource to your pipeline's ~resource_types~ (requires Concourse 0.74.0+)
12
+
13
+ #+BEGIN_SRC yaml
14
+ resource_types:
15
+ - name: github-status
16
+ type: docker-image
17
+ source:
18
+ repository: colstrom/concourse-github-status
19
+ #+END_SRC
20
+
21
+ * Source Configuration
22
+
23
+ |--------------+----------+---------------------------------------------|
24
+ | Name | Required | Description |
25
+ |--------------+----------+---------------------------------------------|
26
+ | repo | Yes | The GitHub repository in ~user/repo~ format |
27
+ | access_token | Yes | The access token to use with the GitHub API |
28
+ |--------------+----------+---------------------------------------------|
29
+
30
+ * Behaviour
31
+
32
+ ** ~out~ Update the status for a commit
33
+
34
+ *** Parameters
35
+
36
+ |-------------+----------+-----------+--------------------------------------------|
37
+ | Name | Required | Default | Description |
38
+ |-------------+----------+-----------+--------------------------------------------|
39
+ | path | Yes | | Relative path to the repository |
40
+ | state | Yes | | One of ~pending~, ~success~, or ~failure~ |
41
+ | context | No | concourse | The ~context~ for the status being updated |
42
+ | description | No | | A description of the context. |
43
+ |-------------+----------+-----------+--------------------------------------------|
44
+
45
+ ** ~check~ Not Implemented
46
+ ** ~in~ Not Implemented
47
+
48
+ * License
49
+
50
+ Apache 2.0 License, see ~LICENSE.txt~ for details.
51
+
52
+ * Contributors
53
+
54
+ - [[https://colstrom.github.io/][Chris Olstrom]] | [[mailto:chris@olstrom.com][e-mail]] | [[https://twitter.com/ChrisOlstrom][Twitter]]
data/bin/out ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require_relative '../lib/github-status/out'
4
+
5
+ status = GitHubStatus::Out.new
6
+
7
+ unless status.run
8
+ STDERR.puts "Failed to update status"
9
+ abort
10
+ end
@@ -0,0 +1,17 @@
1
+ Gem::Specification.new do |gem|
2
+ gem.name = 'concourse-github-status'
3
+ gem.version = '0.1.0'
4
+ gem.authors = ['Chris Olstrom']
5
+ gem.license = 'Apache-2.0'
6
+ gem.summary = 'GitHub Status resource for Concourse'
7
+ gem.description = 'Concourse Resource for updating arbitrary GitHub statuses'
8
+
9
+ gem.files = `git ls-files`.split("\n")
10
+ gem.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
11
+ gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
12
+ gem.require_paths = ['lib']
13
+
14
+ gem.add_runtime_dependency 'concourse-fuselage', '~> 0.1', '>= 0.1.0'
15
+ gem.add_runtime_dependency 'git', '~> 1.3', '>= 1.3.0'
16
+ gem.add_runtime_dependency 'octokit', '~> 4.2', '>= 4.2.0'
17
+ end
@@ -0,0 +1,97 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'concourse-fuselage'
4
+ require 'contracts'
5
+ require 'git'
6
+ require 'octokit'
7
+
8
+ module GitHubStatus
9
+ class Out < Fuselage::Out
10
+ Contract None => String
11
+ def repo
12
+ @repo ||= source.fetch 'repo'
13
+ rescue KeyError
14
+ STDERR.puts 'Source is missing repo'
15
+ abort
16
+ end
17
+
18
+ Contract None => String
19
+ def access_token
20
+ @access_token ||= source.fetch 'access_token'
21
+ rescue KeyError
22
+ STDERR.puts 'Source is missing access_token'
23
+ abort
24
+ end
25
+
26
+ Contract None => String
27
+ def state
28
+ @state ||= params.fetch 'state'
29
+ rescue KeyError
30
+ STDERR.puts 'Params is missing state'
31
+ abort
32
+ end
33
+
34
+ Contract None => String
35
+ def path
36
+ @path ||= params.fetch 'path'
37
+ rescue KeyError
38
+ STDERR.puts 'Params is missing path'
39
+ abort
40
+ end
41
+
42
+ Contract None => String
43
+ def context
44
+ @context ||= params.fetch 'context', 'concourse'
45
+ end
46
+
47
+ Contract None => String
48
+ def description
49
+ @description ||= params.fetch 'description', ''
50
+ end
51
+
52
+ Contract None => String
53
+ def target_url
54
+ @target_url ||= "#{atc_external_url}/builds/#{build_id}"
55
+ end
56
+
57
+ Contract None => HashOf[Symbol, String]
58
+ def options
59
+ @options ||= {
60
+ context: context,
61
+ target_url: target_url,
62
+ description: description
63
+ }
64
+ end
65
+
66
+ Contract None => Git::Repository
67
+ def git
68
+ @git ||= Git.open "#{working_path}/#{path}"
69
+ rescue ArgumentError
70
+ STDERR.puts "#{path} is not a git repository"
71
+ abort
72
+ end
73
+
74
+ Contract None => String
75
+ def sha
76
+ @repo ||= git.revparse 'HEAD'
77
+ end
78
+
79
+ Contract None => HashOf[String, String]
80
+ def version
81
+ { 'context@sha' => "#{context}@#{sha}" }
82
+ end
83
+
84
+ Contract None => Octokit::Client
85
+ def github
86
+ @github ||= Octokit::Client.new access_token: access_token
87
+ end
88
+
89
+ Contract None => Sawyer::Resource
90
+ def update!
91
+ github.create_status repo, sha, state, options
92
+ rescue Octokit::Error => error
93
+ STDERR.puts error.message
94
+ abort
95
+ end
96
+ end
97
+ end
metadata ADDED
@@ -0,0 +1,113 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: concourse-github-status
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Chris Olstrom
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-03-01 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: concourse-fuselage
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.1'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 0.1.0
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '0.1'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 0.1.0
33
+ - !ruby/object:Gem::Dependency
34
+ name: git
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '1.3'
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 1.3.0
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '1.3'
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 1.3.0
53
+ - !ruby/object:Gem::Dependency
54
+ name: octokit
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '4.2'
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: 4.2.0
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '4.2'
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: 4.2.0
73
+ description: Concourse Resource for updating arbitrary GitHub statuses
74
+ email:
75
+ executables:
76
+ - out
77
+ extensions: []
78
+ extra_rdoc_files: []
79
+ files:
80
+ - ".gitignore"
81
+ - Gemfile
82
+ - Gemfile.lock
83
+ - LICENSE.txt
84
+ - README.org
85
+ - bin/out
86
+ - concourse-github-status.gemspec
87
+ - lib/github-status/out.rb
88
+ homepage:
89
+ licenses:
90
+ - Apache-2.0
91
+ metadata: {}
92
+ post_install_message:
93
+ rdoc_options: []
94
+ require_paths:
95
+ - lib
96
+ required_ruby_version: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ version: '0'
101
+ required_rubygems_version: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - ">="
104
+ - !ruby/object:Gem::Version
105
+ version: '0'
106
+ requirements: []
107
+ rubyforge_project:
108
+ rubygems_version: 2.5.1
109
+ signing_key:
110
+ specification_version: 4
111
+ summary: GitHub Status resource for Concourse
112
+ test_files: []
113
+ has_rdoc: