[
https://issues.apache.org/jira/browse/BUILDR-438?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12889220#action_12889220
]
Alexis Midon commented on BUILDR-438:
-------------------------------------
By the way the behavior implemented by this patch is describe in a new page for
the website.
I pasted here as well for conveniency.
---
layout: default
title: Releasing
---
Now that we built and test awesome software, let's the world know and release
it.
Each buildile can specify the current version with a constant named
VERSION_NUMBER or THIS_VERSION.
{% highlight ruby %}
THIS_VERSION = "1.0.0-SNAPSHOT"
define 'killer-app' do
project.version = THIS_VERSION
# ...
end
{% endhighlight %}
h2(#default). What does a release do?
The default behavior of the Release task is the following:
# Check that the version to be released and the next version are different
# Check that the project is being tracked by Git or Subversion
# Package, test and deploy the artifacts using THIS_VERSION value minus the
'-SNAPSHOT' suffix (if any)
# Tag the repository with the released version number
# Update the value of THIS_VERSION in the buildfile with the next version number
Buildr will increment the last digit of the 3-digit versioni number if
THIS_VERSION contains '-SNAPSHOT'.
So, at the end of a release, the buildfile now looks like this:
{% highlight ruby %}
THIS_VERSION = "1.0.1-SNAPSHOT"
define 'killer-app' do
project.version = THIS_VERSION
# ...
end
{% endhighlight %}
And the Git repository now contains two new commits and a new tag.
{% highlight sh %}
~/w/killer-app[master]$git ol -4
c1af3d5 (HEAD, origin/master, master) Changed version number to 1.0.1-SNAPSHOT
dd35015 (tag: 1.0.0) Changed version number to 1.0.0
76c96e7 Last fix before the release
{% endhighlight %}
h2(#custom_version). How to specify my own version number scheme?
If THIS_VERSION does not contain '-SNAPSHOT', Buildr delegates the resolution
of the next version number to the user which has 2 differents ways to express
her wishes: Release.next_version or the environment variable NEXT_VERSION.
h3(#next_version_proc). Using Release.next_version
The Release class can receive the next version of the buildfile. This could be
a string or a proc that would receive the current version and return the next
version.
{% highlight ruby %}
THIS_VERSION = "1.0.0-SNAPSHOT"
# a string
Release.next_version = "2.0.0-SNAPSHOT"
# or a proc
Release.next_version = lambda do |this_version| # 1.0.0-SNAPSHOT
new_version = this_version.split(/\./)
new_version[0] = new_version[0] + 1
new_version
end
define 'killer-app' do
project.version = THIS_VERSION
# ...
end
{% endhighlight %}
h3(#next_version_envvar). Using the environment variable NEXT_VERSION
If the environment variable NEXT_VERSION is set, Buildr will use this value to
update THIS_VERSION at the end of the release.
For conveniency, this variable is case insensitive.
So, all 3 following commands would generate the buildfile below:
{% highlight sh %}
$ buildr release next_version="1.0.0-rc1"
$ env next_version="1.0.0-rc1" buildr release
$ env NEXT_VERSION="1.0.0-rc1" buildr release
{% endhighlight %}
{% highlight ruby %}
THIS_VERSION = "1.0.0-rc1"
define 'killer-app' do
project.version = THIS_VERSION
# ...
end
{% endhighlight %}
The environment variable NEXT_VERSION has precedence over Release.next_version.
h2(#custom_tag_and_msg). How to specify my own tag name and commit message?
As explained earlier, Buildr will create two new commits and a new tag in the
version control system. Similarly to Release.next_version, the commit message
and the tag name can be customized with Release.message and Release.tag_name.
Both could be strings or procs that would receive the released version i.i
THIS_VERSION without '-SNAPSHOT'.
> Release Task: customizable version numbers
> ------------------------------------------
>
> Key: BUILDR-438
> URL: https://issues.apache.org/jira/browse/BUILDR-438
> Project: Buildr
> Issue Type: New Feature
> Components: Core features
> Reporter: Alexis Midon
> Fix For: 1.4.2
>
> Attachments: buildr-438.patch.txt
>
>
> Base on this conversation, http://markmail.org/thread/t7pd773y4m6ncfyd it
> seems that the way Buildr handles versions can be improved.
> Here is what I suggest:
> # default behavior
> The default supported version scheme is the 3-digit number. Buildr releases
> VERSION_NUMBER minus -SNAPSHOT, and increments the last digit of that version
> to get the new version. The VERSION_NUMBER is then updated with the
> new-version, and the buildfile is committed.
> 1.0.0 -> 1.0.1
> If the VERSION_NUMBER does not match this pattern, then the release should
> fail.
> We could relax this convention to check if the last char is a digit and if so
> increment it.
> # custom increment
> If the default behavior does fit one's needs, the method Release.bump_version
> receives a block that lets the user implement his custom strategy. This will
> be consistent with Release#tag_name, and #commit_message.
> A buildfile could look like this:
> VERSION_NUMBER='1.0.0-rc1-SNAPSHOT'
> Release.bump_version = lambda { |version| # the version number without the
> -SNAPSHOT suffix, i.e. 1.0.0-rc1
> version[0..-2]+(version[-1].to_i+1).to_s # returns 1.0.0-rc2
> }
> The output of Release#bump_version is then used to update VERSION_NUMBER. And
> the buildfile is committed.
> When the version template changes - let's say you're done with the release
> candidates - you will manually edit the buildfile and change the version
> number to 1.0.0-SNAPSHOT. Then commit the buildfile.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.