blob: 7c61c6b1dfa4088251a40e8c5cf656afd2812e8c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
#!/bin/bash
set -e
# Usage: create_release.sh [optional next version]
meson_file="meson.build"
metainfo_file="data/org.gnome.Nautilus.metainfo.xml.in.in"
news_file="NEWS"
### Version ###
meson_version=$(grep " version: '" ${meson_file} | cut -d\' -f2 | head -n 1)
release_version=${1:-"${meson_version}"}
current_branch=$(git rev-parse --abbrev-ref HEAD)
latest_commit=$(git rev-parse HEAD)
previous_tag=$(git describe --tags --abbrev=0)
# Calculate next version
IFS='.' read -r major minor patch <<< "${release_version}"
case "$minor" in
"alpha")
next_version="${major}.beta"
;;
"beta")
next_version="${major}.rc"
;;
"rc")
next_version="${major}.0"
;;
*)
if [[ ! "$minor" =~ ^[0-9]+$ ]]; then
echo "Error: Don't know how to handle version '${release_version}'"
exit 1
elif [[ ${current_branch} = "main" ]] ; then
# if branch is main increase major number
next_version="$((major+1)).alpha"
else
# otherwise increase minor
next_version="${major}.$((minor + 1))"
fi
;;
esac
### Commits ###
bump_commit_msg="Post[\ -]release version bump"
translation_filter="^Update.*translation\$"
commits=$(git log \
--pretty=format:"%h %s (%an)" \
${previous_tag}..${latest_commit} \
--invert-grep --grep="${bump_commit_msg}" --grep="${translation_filter}")
t10n_commits=$(git log --pretty=oneline \
${previous_tag}..${latest_commit} \
--grep="${translation_filter}")
num_commits=$(echo "${commits}" | sed '/^\s*$/d' | wc -l)
num_t10n_commits=$(echo "${t10n_commits}" | sed '/^\s*$/d' | wc -l)
meson_version_str=""
if [ ! ${release_version} = ${meson_version} ] ; then
meson_version_str=" (meson has ${meson_version})"
fi
echo "Creating release ${release_version}${meson_version_str} (Bumping to ${next_version})"
echo "on top of commit ${latest_commit}"
echo ""
echo "There were ${num_commits} code change(s) and ${num_t10n_commits} translation change(s) since ${previous_tag}."
echo ""
### NEWS ###
header="Major Changes in ${release_version}"
underline=$(printf '%*s\n' "${#header}" '' | tr ' ' '=')
translations=""
if [ ! ${num_t10n_commits} = 0 ] ; then
translations="* Translation updates (GNOME Translation Project contributors)"
fi
news_update="\
${header}
${underline}
* Enhancements:
-
* Bugfixes:
-
* Cleanups:
-
${commits}
${translations}
"
echo "${news_update}" | cat - NEWS > temp && mv temp NEWS
echo "Edit the NEWS file then continue with [Enter]"
read
release_notes=$(git diff --unified=0 --color=never NEWS | grep -E '^\+[^+]' | sed 's/^\+//')
### metainfo.xml ###
date=$(date --iso-8601)
next_minor="${next_version##*.}"
type=$([[ "$next_minor" =~ ^[1-9][0-9]*$ ]] && echo "stable" || echo "development")
metainfo_release_version=$(echo ${release_version} | sed -E "s/\.([a-z]+)/~\1/")
snapshot="<release version=\"@release-version@\" type=\"snapshot\"\/>"
placeholder="<!--NEXT_RELEASE_PLACEHOLDER-->"
new_entry="<release version=\"${metainfo_release_version}\" type=\"${type}\" date=\"${date}\"\/>"
replace="s/${snapshot}/${placeholder}\n ${new_entry}/"
sed -i "${replace}" "${metainfo_file}"
### Release commit ###
release_message="Release ${release_version}"
git add "${metainfo_file}" "${news_file}"
git commit -m "${release_message}"
release_commit=$(git rev-parse HEAD)
### Post-Release bump commit ###
sed -ri "s/ version: [^,]*,/ version: '${next_version}',/" "${meson_file}"
replace="s/${placeholder}/${snapshot}/"
sed -i "${replace}" "${metainfo_file}"
git add "${metainfo_file}" "${meson_file}"
git commit -m "Post-release version bump"
### Note about release tagging ###
release_notes="${release_message}
${release_notes}"
echo Release commits created. Tag release with:
echo "git tag -s ${release_version} ${release_commit} -m \"${release_notes}\""
echo "git push --tags"
|