Skip to content

Commit 5912aea

Browse files
committed
Add support for prerelease tags
Add a new regex entry in the config for prerelease tags Process prerelease and release tags separately and mark them appropriately in the API Signed-off-by: Doug Ledford <dledford@redhat.com>
1 parent 3c146fd commit 5912aea

File tree

2 files changed

+27
-3
lines changed

2 files changed

+27
-3
lines changed

README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,3 +78,8 @@ differently. None of them should be required for normal, sane use.
7878
you might have decided to make. Only tags which match this regular
7979
expression will be pushed up by `git release`, and only those tags will
8080
be marked as releases.
81+
82+
* `release.pre-regex` (default `v\d+\.\d+(\.\d+)?(-rc\d+.*){1}$`) -- The
83+
regular expression to filter which tages denote prereleases. Only tags
84+
which match this regular expression will be pushed up by `git release`,
85+
and these will be marked as Pre-release on the github release pages.

lib/github-release.rb

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,21 @@
33

44
class GithubRelease
55
def run
6+
new_prereleases = tagged_prereleases.select { |p| !github_releases.include?(p) }
7+
8+
if new_prereleases.empty?
9+
puts "No new pre-release tags to push."
10+
end
11+
12+
new_prereleases.each { |t| create_release(t, true) }
13+
614
new_releases = tagged_releases.select { |r| !github_releases.include?(r) }
715

816
if new_releases.empty?
917
puts "No new release tags to push."
1018
end
1119

12-
new_releases.each { |t| create_release(t) }
20+
new_releases.each { |t| create_release(t, false) }
1321

1422
puts "All done!"
1523
end
@@ -52,6 +60,12 @@ def get_new_token
5260
log_val(token)
5361
end
5462

63+
def pre_regex
64+
@pre_regex ||= `git config --get release.pre-regex`.strip
65+
@pre_regex = /^v\d+\.\d+(\.\d+)?(-rc\d+.*){1}$/ if @pre_regex.empty?
66+
log_val(@pre_regex)
67+
end
68+
5569
def tag_regex
5670
@tag_regex ||= `git config --get release.tag-regex`.strip
5771
@tag_regex = /^v\d+\.\d+(\.\d+)?$/ if @tag_regex.empty?
@@ -63,6 +77,11 @@ def tagged_releases
6377
log_val(@tagged_releases)
6478
end
6579

80+
def tagged_prereleases
81+
@tagged_prereleases ||= `git tag`.split("\n").map(&:strip).grep pre_regex
82+
log_val(@tagged_prereleases)
83+
end
84+
6685
def repo_name
6786
@repo_name ||= begin
6887
case repo_url
@@ -106,7 +125,7 @@ def git_config(item, default = nil)
106125
log_val(@config_cache[item], item)
107126
end
108127

109-
def create_release(tag)
128+
def create_release(tag, prerelease)
110129
puts "Pushing to #{remote_name}..."
111130
system("git push #{remote_name} tag #{tag}")
112131

@@ -118,7 +137,7 @@ def create_release(tag)
118137
name = name.gsub(/^#{tag}/, '').strip
119138
body = body.split("\n").map { |l| l.sub(/^ /, '') }.join("\n")
120139

121-
api.create_release(repo_name, tag, :name => name, :body => body)
140+
api.create_release(repo_name, tag, :name => name, :body => body, :prerelease => prerelease)
122141

123142
puts " done!"
124143
end

0 commit comments

Comments
 (0)