Skip to content

Commit 0482815

Browse files
committed
[Build] Add release automation
1 parent 64de149 commit 0482815

File tree

4 files changed

+142
-2
lines changed

4 files changed

+142
-2
lines changed

.m2/maven-version-rules.xml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<ruleset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2+
comparisonMethod="maven"
3+
xmlns="http://mojo.codehaus.org/versions-maven-plugin/rule/2.0.0"
4+
xsi:schemaLocation="http://mojo.codehaus.org/versions-maven-plugin/rule/2.0.0 https://www.mojohaus.org/versions-maven-plugin/xsd/rule-2.0.0.xsd">
5+
<ignoreVersions>
6+
<ignoreVersion type="regex">.*(-|.)(A|a)lpha-?[\da-z]+</ignoreVersion>
7+
<ignoreVersion type="regex">.*(-|.)(B|b)eta-?[\da-z]+</ignoreVersion>
8+
<ignoreVersion type="regex">.*-b[\d.]+</ignoreVersion>
9+
<ignoreVersion type="regex">.*-pr\d+</ignoreVersion>
10+
<ignoreVersion type="regex">.*[-.]rc-?\d+</ignoreVersion>
11+
<ignoreVersion type="regex">.*[-.]RC-?\d+</ignoreVersion>
12+
<ignoreVersion type="regex">.*-M\d+</ignoreVersion>
13+
<ignoreVersion type="regex">.*-milestone\d+</ignoreVersion>
14+
</ignoreVersions>
15+
</ruleset>

CHANGELOG.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ See also the [CHANGELOG](https://github.com/cucumber/cucumber-jvm/blob/master/CH
106106
- [Core] Update `cucumber-core` dependency to 4.1.0 (Glib Briia)
107107
- [Build] Update Scala versions to 2.11.12 and 2.12.7 ([#11](https://github.com/cucumber/cucumber-jvm-scala/issues/11) Arturas Smorgun)
108108

109-
<!-- References -->
109+
<!-- Releases -->
110110
[Unreleased]: https://github.com/cucumber/cucumber-jvm-scala/compare/v4.7.1...master
111111
[4.7.1]: https://github.com/cucumber/cucumber-jvm-scala/compare/v4.7.0...v4.7.1
112112
[4.7.0]: https://github.com/cucumber/cucumber-jvm-scala/compare/v4.6.0...v4.7.0
@@ -117,4 +117,4 @@ See also the [CHANGELOG](https://github.com/cucumber/cucumber-jvm/blob/master/CH
117117
[4.3.1]: https://github.com/cucumber/cucumber-jvm-scala/compare/v4.3.0...v4.3.1
118118
[4.3.0]: https://github.com/cucumber/cucumber-jvm-scala/compare/v4.2.6...v4.3.0
119119
[4.2.6]: https://github.com/cucumber/cucumber-jvm-scala/compare/v4.2.0...v4.2.6
120-
[4.2.0]: https://github.com/cucumber/cucumber-jvm-scala/compare/v4.1.0...v4.2.0
120+
[4.2.0]: https://github.com/cucumber/cucumber-jvm-scala/compare/v4.1.0...v4.2.0

Makefile

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
SHELL := /usr/bin/env bash
2+
3+
default:
4+
mvn clean install
5+
.PHONY: default
6+
7+
VERSION = $(shell mvn help:evaluate -Dexpression=project.version -q -DforceStdout 2> /dev/null)
8+
NEW_VERSION = $(subst -SNAPSHOT,,$(VERSION))
9+
CURRENT_BRANCH = $(shell git rev-parse --abbrev-ref HEAD)
10+
11+
clean:
12+
mvn clean release:clean
13+
.PHONY: clean
14+
15+
version:
16+
@echo ""
17+
@echo "The next version of Cucumber-JVM will be $(NEW_VERSION) and released from '$(CURRENT_BRANCH)'"
18+
@echo ""
19+
.PHONY: version
20+
21+
update-compatibility:
22+
MSG_VERSION=$$(mvn help:evaluate -Dexpression=messages.version -q -DforceStdout 2> /dev/null) && \
23+
git clone --branch messages/v$$MSG_VERSION [email protected]:cucumber/cucumber.git target/cucumber
24+
rm -rf compatibility/src/test/resources/*
25+
cp -r target/cucumber/compatibility-kit/javascript/features compatibility/src/test/resources
26+
rm -rf target/cucumber
27+
.PHONY: update-cck
28+
29+
update-dependency-versions:
30+
mvn versions:force-releases
31+
mvn versions:update-properties -DallowMajorUpdates=false -Dmaven.version.rules="file://`pwd`/.m2/maven-version-rules.xml"
32+
.PHONY: update-dependency-versions
33+
34+
update-major-dependency-versions:
35+
mvn versions:force-releases
36+
mvn versions:update-properties -DallowMajorUpdates=true -Dmaven.version.rules="file://`pwd`/.m2/maven-version-rules.xml"
37+
.PHONY: update-major-dependency-versions
38+
39+
update-changelog:
40+
cat CHANGELOG.md | ./scripts/update-changelog.sh $(NEW_VERSION) > CHANGELOG.md.tmp
41+
mv CHANGELOG.md.tmp CHANGELOG.md
42+
.PHONY: update-changelog
43+
44+
.commit-and-push-changelog:
45+
git commit -am "Update CHANGELOG for v$(NEW_VERSION)"
46+
git push
47+
.PHONY: .commit-and-push-changelog
48+
49+
release: default update-changelog .commit-and-push-changelog
50+
mvn --batch-mode release:clean release:prepare -DautoVersionSubmodules=true -Darguments="-DskipTests=true -DskipITs=true -Darchetype.test.skip=true"
51+
git checkout "v$(NEW_VERSION)"
52+
mvn deploy -P-examples -P-compatibility -Psign-source-javadoc -DskipTests=true -DskipITs=true -Darchetype.test.skip=true
53+
git checkout $(CURRENT_BRANCH)
54+
.PHONY: release
55+

scripts/update-changelog.sh

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
#!/usr/bin/env bash
2+
set -uf -o pipefail
3+
4+
# Reads a changelog from STDIN and writes out a new one to STDOUT where:
5+
#
6+
# * The [Unreleased] diff link is updated
7+
# * A new diff link for the new release is added
8+
# * The ## [Unreleased] header is changed to a version header with date
9+
# * A new, empty [Unreleased] paragraph is added at the top
10+
#
11+
12+
changelog=$(</dev/stdin)
13+
14+
new_version=$1
15+
16+
version_header=$(echo "${changelog}" | grep "^## \[${new_version}\]")
17+
if [[ "${version_header}" != "" ]]; then
18+
echo "${changelog}"
19+
exit 0
20+
fi
21+
22+
header=$(cat <<EOF
23+
## [Unreleased] (In Git)
24+
25+
### Added
26+
27+
### Changed
28+
29+
### Deprecated
30+
31+
### Removed
32+
33+
### Fixed
34+
EOF
35+
)
36+
header_escaped=${header//$'\n'/\\$'\n'}
37+
38+
# Update the [Unreleased] header
39+
40+
today=$(date +"%Y-%m-%d")
41+
changelog=$(echo "${changelog}" | sed "s/## \[Unreleased\] (In Git)/## \[${new_version}\] (${today})/")
42+
43+
# Update [Unreleased] diff link
44+
line_number_colon_unreleased_link=$(echo "${changelog}" | grep -n "\[Unreleased\]")
45+
line_number=$(echo "${line_number_colon_unreleased_link}" | cut -d: -f1)
46+
unreleased_link=$(echo "${line_number_colon_unreleased_link}" | cut -d' ' -f2)
47+
48+
if [[ "${unreleased_link}" =~ \/v([0-9]+\.[0-9]+\.[0-9]+(-RC[0-9]+)?) ]]; then
49+
last_version="${BASH_REMATCH[1]}"
50+
changelog=$(echo "${changelog}" | sed "s/v${last_version}\.\.\./v${new_version}.../")
51+
else
52+
>&2 echo "No version found in link: ${unreleased_link}"
53+
exit 1
54+
fi
55+
56+
# Insert a new release diff link
57+
58+
insertion_line_number=$((line_number + 1))
59+
release_link=$(echo "${changelog}" | head -n ${insertion_line_number} | tail -1)
60+
new_release_link=$(echo "${release_link}" | \
61+
sed "s/${last_version}/${new_version}/g" | \
62+
sed "s/v[0-9]\+.[0-9]\+.[0-9]\+/v${last_version}/")
63+
64+
changelog=$(echo "${changelog}" | sed "${insertion_line_number} i ${new_release_link}")
65+
66+
# Insert a new [Unreleased] header
67+
68+
changelog=$(echo "${changelog}" | sed "s/----/----\n${header_escaped}\n/g")
69+
70+
echo "${changelog}"

0 commit comments

Comments
 (0)