Skip to content

Commit 8c7f46a

Browse files
committed
automation: Add script for making new release
Introduce ./tools/make_release.sh doing: 0. Create `new_release` branch. 1. Bump `Cargo.toml` to next minor version. 2. Generate CHANGELOG line in interactive way. 3. Upload `new_release` branch to github. Signed-off-by: Gris Ge <fge@redhat.com>
1 parent 321e4d5 commit 8c7f46a

File tree

1 file changed

+87
-0
lines changed

1 file changed

+87
-0
lines changed

tools/make_release.sh

+87
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
#!/bin/bash -ex
2+
# SPDX-License-Identifier: MIT
3+
4+
MAIN_BRANCH_NAME="main"
5+
UPSTERAM_GIT="https://github.com/rust-netlink/netlink-packet-route.git"
6+
TMP_CHANGELOG_FILE=$(mktemp)
7+
EDITOR="${EDITOR:-vim}"
8+
9+
if ! command -v jq &> /dev/null
10+
then
11+
echo "Please install jq to proceed"
12+
exit 1
13+
fi
14+
15+
if ! command -v cargo set-version &> /dev/null
16+
then
17+
echo 'Please install cargo-edit via `cargo install cargo-edit` to proceed'
18+
exit 1
19+
fi
20+
21+
22+
CHANGLOG_FORMAT="
23+
### Breaking changes\n\
24+
- N/A\n\
25+
\n\
26+
### New features\n\
27+
- N/A\n\
28+
\n\
29+
### Bug fixes"
30+
31+
function cleanup {
32+
rm -f $TMP_CHANGELOG_FILE
33+
}
34+
35+
trap cleanup ERR EXIT
36+
37+
CODE_BASE_DIR=$(readlink -f "$(dirname -- "$0")/..");
38+
39+
cd $CODE_BASE_DIR;
40+
41+
CUR_VERSION=$(cargo metadata --no-deps --format-version 1 | \
42+
jq '.packages[0].version' --raw-output)
43+
CUR_MAJOR_VERSION=$(echo $CUR_VERSION|cut -f1 -d.)
44+
CUR_MINOR_VERSION=$(echo $CUR_VERSION|cut -f2 -d.)
45+
CUR_MICRO_VERSION=$(echo $CUR_VERSION|cut -f3 -d.)
46+
47+
# TODO: Be smart on bumping major, micro or minor version by checking API
48+
# stability
49+
NEXT_VERSION="${CUR_MAJOR_VERSION}.$((CUR_MINOR_VERSION + 1)).0";
50+
51+
git branch new_release || true
52+
git checkout new_release
53+
git fetch upstream || (git remote add upstream $UPSTERAM_GIT; \
54+
git fetch upstream)
55+
git reset --hard upstream/$MAIN_BRANCH_NAME
56+
57+
echo "Checking 'cargo publish --dry-run'"
58+
59+
cargo publish --dry-run
60+
61+
echo "# Changelog" > $TMP_CHANGELOG_FILE
62+
echo "## [$NEXT_VERSION] - $(date +%F)" >> $TMP_CHANGELOG_FILE
63+
echo -e $CHANGLOG_FORMAT >> $TMP_CHANGELOG_FILE
64+
git log --oneline --format=" - %s. (%h)" \
65+
v${CUR_VERSION}..upstream/$MAIN_BRANCH_NAME -- | \
66+
grep -v -E '^ - test:' | \
67+
grep -v -E '^ - Bump version' | \
68+
grep -v -E 'cargo clippy' >> $TMP_CHANGELOG_FILE
69+
echo "" >> $TMP_CHANGELOG_FILE
70+
71+
$EDITOR $TMP_CHANGELOG_FILE
72+
if [ $(wc -l < $TMP_CHANGELOG_FILE) -lt 2 ];then
73+
echo "No CHANGELOG addition, exiting"
74+
git checkout CHANGELOG
75+
exit 1
76+
fi
77+
78+
cargo set-version $NEXT_VERSION
79+
80+
CHANGELOG_STR=$(sed -n '3,$p' $TMP_CHANGELOG_FILE|tr '#' '=')
81+
sed -n '2,$p' CHANGELOG >> $TMP_CHANGELOG_FILE
82+
83+
mv $TMP_CHANGELOG_FILE $CODE_BASE_DIR/CHANGELOG
84+
git commit --signoff $CODE_BASE_DIR/CHANGELOG -m "New release ${NEXT_VERSION}" \
85+
-m "$CHANGELOG_STR"
86+
git push origin +new_release
87+
echo "Please visit github to create pull request for this breach"

0 commit comments

Comments
 (0)