samus 1.3.0 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9ac7da9bf69288accb52ebaddfa1e1627118e795
4
- data.tar.gz: 9e660338fc1b1043d2a7be7f3920830fc408643f
3
+ metadata.gz: e54825002248c11f8cef0169d001d109cb192d5c
4
+ data.tar.gz: 61d76cfcca24f5ac7daa3e4aaeb0aa396ada048a
5
5
  SHA512:
6
- metadata.gz: b9584d677db5e0d701c74ca6aad0fd31ab2b23e7b2460c59f125065448bf4b6c147ec25fad005b91d6b42adae13eed6d6f66638df8a644ef2e5c2df61b879d67
7
- data.tar.gz: 41fd97d715da5378cb2626f451818f8802c19827cef0365d39674a6cbc7390b970ea32c5c270c33fdc745841222cd6a5e6ee9db00b7cfc190cd6607bdb0f504b
6
+ metadata.gz: 1431b685cee99fc653737b73a5ddb58eda63b85589439788141a36a4de0902759fcbf8e9ae544fd4b714ee6c709e5d18d8ec92b08b5bcab5e097c9de1a0af669
7
+ data.tar.gz: f9bb16e41be1c35acb6c93750c146a520999c4f0a9ba56dd8aba63d6693eee35bf9ea2598aa496ac4485101b04feef91a945f0d9f406d6a375ea51eb1c63b3a2
@@ -0,0 +1,82 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "json"
4
+ require "date"
5
+ require "net/https"
6
+ require "uri"
7
+
8
+ def fail(msg, code = 1)
9
+ $stderr.puts msg
10
+ exit code
11
+ end
12
+
13
+ def https_request(opts = {})
14
+ uri = URI.parse(opts[:uri])
15
+ key, body = opts[:key], opts[:body]
16
+ content_type = opts[:content_type] || "application/json"
17
+ method = opts[:method] || :Post
18
+
19
+ http = Net::HTTP.new(uri.host, uri.port)
20
+ http.use_ssl = true
21
+ request = Net::HTTP.const_get(method).new(uri.request_uri)
22
+ request["content-type"] = "application/json"
23
+ request["authorization"] = "token #{key}"
24
+
25
+ if content_type == "application/json"
26
+ request.body = body
27
+ else
28
+ request.body_stream = body
29
+ request.content_length = body.size
30
+ end
31
+
32
+ response = http.request(request)
33
+ if response.code[0] != "2"
34
+ raise RuntimeError, response.code + " " + response.message
35
+ else
36
+ response
37
+ end
38
+ end
39
+
40
+ key = ENV["__creds_secret"]
41
+ repository = ENV["_repository"]
42
+ tag = ENV["_tag"]
43
+ changelog = ENV["_changelog"]
44
+ title = ENV["_title"] || "Release #{tag} - #{Time.now.to_date.to_s}"
45
+ out_file = ENV["_out_file"]
46
+ assets = ARGV
47
+
48
+ fail "Missing `repository`" unless repository
49
+ fail "Missing `tag`" unless tag
50
+
51
+ begin
52
+ uri = "https://api.github.com/repos/#{repository}/releases"
53
+ body = JSON.generate({
54
+ "body" => changelog ? File.read(changelog) : "",
55
+ "name" => title,
56
+ "tag_name" => tag,
57
+ })
58
+ response = https_request uri: uri, key: key, body: body
59
+ json = JSON.parse(response.body)
60
+
61
+ assets.each do |asset|
62
+ local_name, remote_name = *asset.split(':', 2)
63
+ remote_name ||= local_name
64
+ uri = json["upload_url"].sub(/\{\?name\}$/, "?name=#{remote_name}")
65
+ File.open(local_name, "r") do |file|
66
+ begin
67
+ https_request uri: uri, key: key,
68
+ body: file, content_type: "application/octet-stream"
69
+ rescue => e
70
+ puts "Failed to upload release asset #{local_name} as #{remote_name}."
71
+ https_request uri: json["url"], key: key, method: :Delete, body: ""
72
+ raise
73
+ end
74
+ end
75
+ end
76
+
77
+ File.open(out_file, "w") {|f| f.write(json["url"]) } if out_file
78
+ puts "Created GitHub release of #{repository}@#{tag}"
79
+ puts "URL: #{json["url"]}"
80
+ rescue => e
81
+ fail "Failed to create GitHub release of #{repository}@#{tag}: #{e.message}"
82
+ end
@@ -0,0 +1,11 @@
1
+ Creates a GitHub release from a given tag.
2
+
3
+ Files:
4
+ * An optional list of assets to upload with the release.
5
+
6
+ Arguments:
7
+ * repository: the fully qualified repository name (user/repo).
8
+ * tag: the tag name to create the release for.
9
+ * title: an optional title for the release.
10
+ * changelog: an optional filename containing changelog data.
11
+ * out_file: an optional filename to write the resulting release URL to.
@@ -1,3 +1,3 @@
1
1
  module Samus
2
- VERSION = '1.3.0'
2
+ VERSION = '1.4.0'
3
3
  end
data/samus.json CHANGED
@@ -21,13 +21,24 @@
21
21
  {
22
22
  "action": "git-clone",
23
23
  "files": ["git-repo"],
24
- "publish": [{
25
- "action": "git-push",
26
- "arguments": {
27
- "remotes": "origin",
28
- "refs": "master v$version"
24
+ "publish": [
25
+ {
26
+ "action": "git-push",
27
+ "arguments": {
28
+ "remotes": "origin",
29
+ "refs": "master v$version"
30
+ }
31
+ },
32
+ {
33
+ "action": "github-release",
34
+ "credentials": "lsegal.github",
35
+ "files": [],
36
+ "arguments": {
37
+ "repository": "lsegal/samus",
38
+ "tag": "v$version"
39
+ }
29
40
  }
30
- }]
41
+ ]
31
42
  },
32
43
  {
33
44
  "action": "gem-build",
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: samus
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Loren Segal
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-23 00:00:00.000000000 Z
11
+ date: 2014-10-24 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email: lsegal@soen.ca
@@ -61,6 +61,8 @@ files:
61
61
  - commands/publish/gem-push.help.md
62
62
  - commands/publish/git-push
63
63
  - commands/publish/git-push.help.md
64
+ - commands/publish/github-release
65
+ - commands/publish/github-release.help.md
64
66
  - commands/publish/npm-publish
65
67
  - commands/publish/npm-publish.help.md
66
68
  - commands/publish/s3-put
@@ -98,7 +100,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
98
100
  version: '0'
99
101
  requirements: []
100
102
  rubyforge_project:
101
- rubygems_version: 2.2.2
103
+ rubygems_version: 2.4.1
102
104
  signing_key:
103
105
  specification_version: 4
104
106
  summary: Samus helps you release Open Source Software.