* [PATCH v2 1/7] release.sh: add signing and fix outdated commands
2025-01-22 15:01 [PATCH v2 0/7] Update release.sh Andrey Albershteyn
@ 2025-01-22 15:01 ` Andrey Albershteyn
2025-01-22 15:01 ` [PATCH v2 2/7] release.sh: add --kup to upload release tarball to kernel.org Andrey Albershteyn
` (5 subsequent siblings)
6 siblings, 0 replies; 14+ messages in thread
From: Andrey Albershteyn @ 2025-01-22 15:01 UTC (permalink / raw)
To: linux-xfs; +Cc: Darrick J. Wong, Andrey Albershteyn
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Andrey Albershteyn <aalbersh@kernel.org>
---
release.sh | 29 ++++++++++++++++++++++++-----
1 file changed, 24 insertions(+), 5 deletions(-)
diff --git a/release.sh b/release.sh
index 577257a354d442e1cc0a2b9381b11ffbe2f64a71..b15ed610082f34928827ab0547db944cf559cef4 100755
--- a/release.sh
+++ b/release.sh
@@ -9,6 +9,8 @@
# configure.ac (with new version string)
# debian/changelog (with new release entry, only for release version)
+set -e
+
. ./VERSION
version=${PKG_MAJOR}.${PKG_MINOR}.${PKG_REVISION}
@@ -16,21 +18,38 @@ date=`date +"%-d %B %Y"`
echo "Cleaning up"
make realclean
+rm -rf "xfsprogs-${version}.tar" \
+ "xfsprogs-${version}.tar.gz" \
+ "xfsprogs-${version}.tar.asc" \
+ "xfsprogs-${version}.tar.sign"
echo "Updating CHANGES"
sed -e "s/${version}.*/${version} (${date})/" doc/CHANGES > doc/CHANGES.tmp && \
mv doc/CHANGES.tmp doc/CHANGES
echo "Commiting CHANGES update to git"
-git commit -a -m "${version} release"
+git commit --all --signoff --message="xfsprogs: Release v${version}
+
+Update all the necessary files for a v${version} release."
echo "Tagging git repository"
-git tag -a -m "${version} release" v${version}
+git tag --annotate --sign --message="Release v${version}" v${version}
echo "Making source tarball"
make dist
+gunzip -k "xfsprogs-${version}.tar.gz"
-#echo "Sign the source tarball"
-#gpg --detach-sign xfsprogs-${version}.tar.gz
+echo "Sign the source tarball"
+gpg \
+ --detach-sign \
+ --armor \
+ "xfsprogs-${version}.tar"
-echo "Done. Please remember to push out tags using \"git push --tags\""
+echo "Verify signature"
+gpg \
+ --verify \
+ "xfsprogs-${version}.tar.asc"
+
+mv "xfsprogs-${version}.tar.asc" "xfsprogs-${version}.tar.sign"
+
+echo "Done. Please remember to push out tags using \"git push origin v${version}\""
--
2.47.0
^ permalink raw reply related [flat|nested] 14+ messages in thread* [PATCH v2 2/7] release.sh: add --kup to upload release tarball to kernel.org
2025-01-22 15:01 [PATCH v2 0/7] Update release.sh Andrey Albershteyn
2025-01-22 15:01 ` [PATCH v2 1/7] release.sh: add signing and fix outdated commands Andrey Albershteyn
@ 2025-01-22 15:01 ` Andrey Albershteyn
2025-01-28 17:35 ` Darrick J. Wong
2025-01-22 15:01 ` [PATCH v2 3/7] release.sh: update version files make commit optional Andrey Albershteyn
` (4 subsequent siblings)
6 siblings, 1 reply; 14+ messages in thread
From: Andrey Albershteyn @ 2025-01-22 15:01 UTC (permalink / raw)
To: linux-xfs; +Cc: Andrey Albershteyn
Add kup support so that the maintainer can push the newly formed
release tarballs to kernel.org.
Signed-off-by: Andrey Albershteyn <aalbersh@kernel.org>
---
release.sh | 31 +++++++++++++++++++++++++++++++
1 file changed, 31 insertions(+)
diff --git a/release.sh b/release.sh
index b15ed610082f34928827ab0547db944cf559cef4..b036c3241b3f67bfb2435398e6a17ea4c6a6eebe 100755
--- a/release.sh
+++ b/release.sh
@@ -16,6 +16,30 @@ set -e
version=${PKG_MAJOR}.${PKG_MINOR}.${PKG_REVISION}
date=`date +"%-d %B %Y"`
+KUP=0
+
+help() {
+ echo "$(basename) - create xfsprogs release"
+ printf "\t[--kup|-k] upload final tarball with KUP\n"
+}
+
+while [ $# -gt 0 ]; do
+ case "$1" in
+ --kup|-k)
+ KUP=1
+ ;;
+ --help|-h)
+ help
+ exit 0
+ ;;
+ *)
+ >&2 printf "Error: Invalid argument\n"
+ exit 1
+ ;;
+ esac
+ shift
+done
+
echo "Cleaning up"
make realclean
rm -rf "xfsprogs-${version}.tar" \
@@ -52,4 +76,11 @@ gpg \
mv "xfsprogs-${version}.tar.asc" "xfsprogs-${version}.tar.sign"
+if [ $KUP -eq 1 ]; then
+ kup put \
+ xfsprogs-${version}.tar.gz \
+ xfsprogs-${version}.tar.sign \
+ pub/linux/utils/fs/xfs/xfsprogs/
+fi;
+
echo "Done. Please remember to push out tags using \"git push origin v${version}\""
--
2.47.0
^ permalink raw reply related [flat|nested] 14+ messages in thread* Re: [PATCH v2 2/7] release.sh: add --kup to upload release tarball to kernel.org
2025-01-22 15:01 ` [PATCH v2 2/7] release.sh: add --kup to upload release tarball to kernel.org Andrey Albershteyn
@ 2025-01-28 17:35 ` Darrick J. Wong
0 siblings, 0 replies; 14+ messages in thread
From: Darrick J. Wong @ 2025-01-28 17:35 UTC (permalink / raw)
To: Andrey Albershteyn; +Cc: linux-xfs, Andrey Albershteyn
On Wed, Jan 22, 2025 at 04:01:28PM +0100, Andrey Albershteyn wrote:
> Add kup support so that the maintainer can push the newly formed
> release tarballs to kernel.org.
>
> Signed-off-by: Andrey Albershteyn <aalbersh@kernel.org>
Looks good now,
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
--D
> ---
> release.sh | 31 +++++++++++++++++++++++++++++++
> 1 file changed, 31 insertions(+)
>
> diff --git a/release.sh b/release.sh
> index b15ed610082f34928827ab0547db944cf559cef4..b036c3241b3f67bfb2435398e6a17ea4c6a6eebe 100755
> --- a/release.sh
> +++ b/release.sh
> @@ -16,6 +16,30 @@ set -e
> version=${PKG_MAJOR}.${PKG_MINOR}.${PKG_REVISION}
> date=`date +"%-d %B %Y"`
>
> +KUP=0
> +
> +help() {
> + echo "$(basename) - create xfsprogs release"
> + printf "\t[--kup|-k] upload final tarball with KUP\n"
> +}
> +
> +while [ $# -gt 0 ]; do
> + case "$1" in
> + --kup|-k)
> + KUP=1
> + ;;
> + --help|-h)
> + help
> + exit 0
> + ;;
> + *)
> + >&2 printf "Error: Invalid argument\n"
> + exit 1
> + ;;
> + esac
> + shift
> +done
> +
> echo "Cleaning up"
> make realclean
> rm -rf "xfsprogs-${version}.tar" \
> @@ -52,4 +76,11 @@ gpg \
>
> mv "xfsprogs-${version}.tar.asc" "xfsprogs-${version}.tar.sign"
>
> +if [ $KUP -eq 1 ]; then
> + kup put \
> + xfsprogs-${version}.tar.gz \
> + xfsprogs-${version}.tar.sign \
> + pub/linux/utils/fs/xfs/xfsprogs/
> +fi;
> +
> echo "Done. Please remember to push out tags using \"git push origin v${version}\""
>
> --
> 2.47.0
>
>
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH v2 3/7] release.sh: update version files make commit optional
2025-01-22 15:01 [PATCH v2 0/7] Update release.sh Andrey Albershteyn
2025-01-22 15:01 ` [PATCH v2 1/7] release.sh: add signing and fix outdated commands Andrey Albershteyn
2025-01-22 15:01 ` [PATCH v2 2/7] release.sh: add --kup to upload release tarball to kernel.org Andrey Albershteyn
@ 2025-01-22 15:01 ` Andrey Albershteyn
2025-01-28 17:38 ` Darrick J. Wong
2025-01-22 15:01 ` [PATCH v2 4/7] release.sh: generate ANNOUNCE email Andrey Albershteyn
` (3 subsequent siblings)
6 siblings, 1 reply; 14+ messages in thread
From: Andrey Albershteyn @ 2025-01-22 15:01 UTC (permalink / raw)
To: linux-xfs; +Cc: Andrey Albershteyn
Based on ./VERSION script updates all other files. For
./doc/changelog script asks maintainer to fill it manually as not
all changes goes into changelog.
--no-commit|-n flag is handy when something got into the version commit
and need to be changed manually. Then ./release.sh -c will use fixed
history
Signed-off-by: Andrey Albershteyn <aalbersh@kernel.org>
---
release.sh | 75 ++++++++++++++++++++++++++++++++++++++++++++++++--------------
1 file changed, 58 insertions(+), 17 deletions(-)
diff --git a/release.sh b/release.sh
index b036c3241b3f67bfb2435398e6a17ea4c6a6eebe..57ff217b9b6bf62873a149029957fdd9f01b8c38 100755
--- a/release.sh
+++ b/release.sh
@@ -11,16 +11,33 @@
set -e
-. ./VERSION
-
-version=${PKG_MAJOR}.${PKG_MINOR}.${PKG_REVISION}
-date=`date +"%-d %B %Y"`
-
KUP=0
+COMMIT=1
help() {
echo "$(basename) - create xfsprogs release"
printf "\t[--kup|-k] upload final tarball with KUP\n"
+ printf "\t[--no-commit|-n] don't create release commit\n"
+}
+
+update_version() {
+ echo "Updating version files"
+ # doc/CHANGES
+ header="xfsprogs-${version} ($(date +'%d %b %Y'))"
+ sed -i "1s/^/$header\n\t<TODO list user affecting changes>\n\n/" doc/CHANGES
+ $EDITOR doc/CHANGES
+
+ # ./configure.ac
+ CONF_AC="AC_INIT([xfsprogs],[${version}],[linux-xfs@vger.kernel.org])"
+ sed -i "s/^AC_INIT.*/$CONF_AC/" ./configure.ac
+
+ # ./debian/changelog
+ sed -i "1s/^/\n/" ./debian/changelog
+ sed -i "1s/^/ -- Nathan Scott <nathans@debian.org> `date -R`\n/" ./debian/changelog
+ sed -i "1s/^/\n/" ./debian/changelog
+ sed -i "1s/^/ * New upstream release\n/" ./debian/changelog
+ sed -i "1s/^/\n/" ./debian/changelog
+ sed -i "1s/^/xfsprogs (${version}-1) unstable; urgency=low\n/" ./debian/changelog
}
while [ $# -gt 0 ]; do
@@ -28,6 +45,9 @@ while [ $# -gt 0 ]; do
--kup|-k)
KUP=1
;;
+ --no-commit|-n)
+ COMMIT=0
+ ;;
--help|-h)
help
exit 0
@@ -40,6 +60,36 @@ while [ $# -gt 0 ]; do
shift
done
+if [ -z "$EDITOR" ]; then
+ EDITOR=$(command -v vi)
+fi
+
+if [ $COMMIT -eq 1 ]; then
+ if git diff --exit-code ./VERSION > /dev/null; then
+ $EDITOR ./VERSION
+ fi
+fi
+
+. ./VERSION
+
+version=${PKG_MAJOR}.${PKG_MINOR}.${PKG_REVISION}
+date=`date +"%-d %B %Y"`
+
+if [ $COMMIT -eq 1 ]; then
+ update_version
+
+ git diff --color=always | less -r
+ [[ "$(read -e -p 'All good? [Y/n]> '; echo $REPLY)" == [Nn]* ]] && exit 0
+
+ echo "Commiting new version update to git"
+ git commit --all --signoff --message="xfsprogs: Release v${version}
+
+Update all the necessary files for a v${version} release."
+
+ echo "Tagging git repository"
+ git tag --annotate --sign --message="Release v${version}" v${version}
+fi
+
echo "Cleaning up"
make realclean
rm -rf "xfsprogs-${version}.tar" \
@@ -47,17 +97,6 @@ rm -rf "xfsprogs-${version}.tar" \
"xfsprogs-${version}.tar.asc" \
"xfsprogs-${version}.tar.sign"
-echo "Updating CHANGES"
-sed -e "s/${version}.*/${version} (${date})/" doc/CHANGES > doc/CHANGES.tmp && \
- mv doc/CHANGES.tmp doc/CHANGES
-
-echo "Commiting CHANGES update to git"
-git commit --all --signoff --message="xfsprogs: Release v${version}
-
-Update all the necessary files for a v${version} release."
-
-echo "Tagging git repository"
-git tag --annotate --sign --message="Release v${version}" v${version}
echo "Making source tarball"
make dist
@@ -83,4 +122,6 @@ if [ $KUP -eq 1 ]; then
pub/linux/utils/fs/xfs/xfsprogs/
fi;
-echo "Done. Please remember to push out tags using \"git push origin v${version}\""
+echo ""
+echo "Done. Please remember to push out tags and the branch."
+printf "\tgit push origin v${version} master\n"
--
2.47.0
^ permalink raw reply related [flat|nested] 14+ messages in thread* Re: [PATCH v2 3/7] release.sh: update version files make commit optional
2025-01-22 15:01 ` [PATCH v2 3/7] release.sh: update version files make commit optional Andrey Albershteyn
@ 2025-01-28 17:38 ` Darrick J. Wong
0 siblings, 0 replies; 14+ messages in thread
From: Darrick J. Wong @ 2025-01-28 17:38 UTC (permalink / raw)
To: Andrey Albershteyn; +Cc: linux-xfs, Andrey Albershteyn
On Wed, Jan 22, 2025 at 04:01:29PM +0100, Andrey Albershteyn wrote:
> Based on ./VERSION script updates all other files. For
> ./doc/changelog script asks maintainer to fill it manually as not
> all changes goes into changelog.
>
> --no-commit|-n flag is handy when something got into the version commit
> and need to be changed manually. Then ./release.sh -c will use fixed
> history
>
> Signed-off-by: Andrey Albershteyn <aalbersh@kernel.org>
> ---
> release.sh | 75 ++++++++++++++++++++++++++++++++++++++++++++++++--------------
> 1 file changed, 58 insertions(+), 17 deletions(-)
>
> diff --git a/release.sh b/release.sh
> index b036c3241b3f67bfb2435398e6a17ea4c6a6eebe..57ff217b9b6bf62873a149029957fdd9f01b8c38 100755
> --- a/release.sh
> +++ b/release.sh
> @@ -11,16 +11,33 @@
>
> set -e
>
> -. ./VERSION
> -
> -version=${PKG_MAJOR}.${PKG_MINOR}.${PKG_REVISION}
> -date=`date +"%-d %B %Y"`
> -
> KUP=0
> +COMMIT=1
>
> help() {
> echo "$(basename) - create xfsprogs release"
> printf "\t[--kup|-k] upload final tarball with KUP\n"
> + printf "\t[--no-commit|-n] don't create release commit\n"
> +}
> +
> +update_version() {
> + echo "Updating version files"
> + # doc/CHANGES
> + header="xfsprogs-${version} ($(date +'%d %b %Y'))"
> + sed -i "1s/^/$header\n\t<TODO list user affecting changes>\n\n/" doc/CHANGES
> + $EDITOR doc/CHANGES
> +
> + # ./configure.ac
> + CONF_AC="AC_INIT([xfsprogs],[${version}],[linux-xfs@vger.kernel.org])"
> + sed -i "s/^AC_INIT.*/$CONF_AC/" ./configure.ac
> +
> + # ./debian/changelog
> + sed -i "1s/^/\n/" ./debian/changelog
> + sed -i "1s/^/ -- Nathan Scott <nathans@debian.org> `date -R`\n/" ./debian/changelog
> + sed -i "1s/^/\n/" ./debian/changelog
> + sed -i "1s/^/ * New upstream release\n/" ./debian/changelog
> + sed -i "1s/^/\n/" ./debian/changelog
> + sed -i "1s/^/xfsprogs (${version}-1) unstable; urgency=low\n/" ./debian/changelog
> }
>
> while [ $# -gt 0 ]; do
> @@ -28,6 +45,9 @@ while [ $# -gt 0 ]; do
> --kup|-k)
> KUP=1
> ;;
> + --no-commit|-n)
> + COMMIT=0
> + ;;
> --help|-h)
> help
> exit 0
> @@ -40,6 +60,36 @@ while [ $# -gt 0 ]; do
> shift
> done
>
> +if [ -z "$EDITOR" ]; then
> + EDITOR=$(command -v vi)
> +fi
> +
> +if [ $COMMIT -eq 1 ]; then
> + if git diff --exit-code ./VERSION > /dev/null; then
> + $EDITOR ./VERSION
> + fi
> +fi
> +
> +. ./VERSION
> +
> +version=${PKG_MAJOR}.${PKG_MINOR}.${PKG_REVISION}
> +date=`date +"%-d %B %Y"`
> +
> +if [ $COMMIT -eq 1 ]; then
> + update_version
> +
> + git diff --color=always | less -r
> + [[ "$(read -e -p 'All good? [Y/n]> '; echo $REPLY)" == [Nn]* ]] && exit 0
> +
> + echo "Commiting new version update to git"
> + git commit --all --signoff --message="xfsprogs: Release v${version}
> +
> +Update all the necessary files for a v${version} release."
> +
> + echo "Tagging git repository"
> + git tag --annotate --sign --message="Release v${version}" v${version}
> +fi
> +
> echo "Cleaning up"
> make realclean
> rm -rf "xfsprogs-${version}.tar" \
> @@ -47,17 +97,6 @@ rm -rf "xfsprogs-${version}.tar" \
> "xfsprogs-${version}.tar.asc" \
> "xfsprogs-${version}.tar.sign"
>
> -echo "Updating CHANGES"
> -sed -e "s/${version}.*/${version} (${date})/" doc/CHANGES > doc/CHANGES.tmp && \
> - mv doc/CHANGES.tmp doc/CHANGES
> -
> -echo "Commiting CHANGES update to git"
> -git commit --all --signoff --message="xfsprogs: Release v${version}
> -
> -Update all the necessary files for a v${version} release."
> -
> -echo "Tagging git repository"
> -git tag --annotate --sign --message="Release v${version}" v${version}
>
> echo "Making source tarball"
> make dist
> @@ -83,4 +122,6 @@ if [ $KUP -eq 1 ]; then
> pub/linux/utils/fs/xfs/xfsprogs/
> fi;
>
> -echo "Done. Please remember to push out tags using \"git push origin v${version}\""
> +echo ""
> +echo "Done. Please remember to push out tags and the branch."
> +printf "\tgit push origin v${version} master\n"
git push origin v${version} master:master master:for-next
per this morning's office hours discussion ;)
With that changed,
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
--D
>
> --
> 2.47.0
>
>
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH v2 4/7] release.sh: generate ANNOUNCE email
2025-01-22 15:01 [PATCH v2 0/7] Update release.sh Andrey Albershteyn
` (2 preceding siblings ...)
2025-01-22 15:01 ` [PATCH v2 3/7] release.sh: update version files make commit optional Andrey Albershteyn
@ 2025-01-22 15:01 ` Andrey Albershteyn
2025-01-28 17:38 ` Darrick J. Wong
2025-01-22 15:01 ` [PATCH v2 5/7] Add git-contributors script to notify about merges Andrey Albershteyn
` (2 subsequent siblings)
6 siblings, 1 reply; 14+ messages in thread
From: Andrey Albershteyn @ 2025-01-22 15:01 UTC (permalink / raw)
To: linux-xfs; +Cc: Andrey Albershteyn
Signed-off-by: Andrey Albershteyn <aalbersh@kernel.org>
---
release.sh | 43 +++++++++++++++++++++++++++++++++++++++++++
1 file changed, 43 insertions(+)
diff --git a/release.sh b/release.sh
index 57ff217b9b6bf62873a149029957fdd9f01b8c38..723806beb05761da06d971460ee15c97d2d0d5b1 100755
--- a/release.sh
+++ b/release.sh
@@ -13,11 +13,13 @@ set -e
KUP=0
COMMIT=1
+LAST_HEAD=""
help() {
echo "$(basename) - create xfsprogs release"
printf "\t[--kup|-k] upload final tarball with KUP\n"
printf "\t[--no-commit|-n] don't create release commit\n"
+ printf "\t[--last-head|-h] commit of the last release\n"
}
update_version() {
@@ -48,6 +50,10 @@ while [ $# -gt 0 ]; do
--no-commit|-n)
COMMIT=0
;;
+ --last-head|-h)
+ LAST_HEAD=$2
+ shift
+ ;;
--help|-h)
help
exit 0
@@ -122,6 +128,43 @@ if [ $KUP -eq 1 ]; then
pub/linux/utils/fs/xfs/xfsprogs/
fi;
+mail_file=$(mktemp)
+if [ -n "$LAST_HEAD" ]; then
+ cat << EOF > $mail_file
+To: linux-xfs@vger.kernel.org
+Subject: [ANNOUNCE] xfsprogs $(git describe --abbrev=0) released
+
+Hi folks,
+
+The xfsprogs repository at:
+
+ git://git.kernel.org/pub/scm/fs/xfs/xfsprogs-dev.git
+
+has just been updated.
+
+Patches often get missed, so if your outstanding patches are properly reviewed
+on the list and not included in this update, please let me know.
+
+The for-next branch has also been updated to match the state of master.
+
+The new head of the master branch is commit:
+
+$(git log --oneline --format="%H" -1)
+
+New commits:
+
+$(git shortlog --format="[%h] %s" $LAST_HEAD..HEAD)
+
+Code Diffstat:
+
+$(git diff --stat --summary -C -M $LAST_HEAD..HEAD)
+EOF
+fi
+
echo ""
echo "Done. Please remember to push out tags and the branch."
printf "\tgit push origin v${version} master\n"
+if [ -n "$LAST_HEAD" ]; then
+ echo "Command to send ANNOUNCE email"
+ printf "\tneomutt -H $mail_file\n"
+fi
--
2.47.0
^ permalink raw reply related [flat|nested] 14+ messages in thread* Re: [PATCH v2 4/7] release.sh: generate ANNOUNCE email
2025-01-22 15:01 ` [PATCH v2 4/7] release.sh: generate ANNOUNCE email Andrey Albershteyn
@ 2025-01-28 17:38 ` Darrick J. Wong
0 siblings, 0 replies; 14+ messages in thread
From: Darrick J. Wong @ 2025-01-28 17:38 UTC (permalink / raw)
To: Andrey Albershteyn; +Cc: linux-xfs, Andrey Albershteyn
On Wed, Jan 22, 2025 at 04:01:30PM +0100, Andrey Albershteyn wrote:
> Signed-off-by: Andrey Albershteyn <aalbersh@kernel.org>
Looks good!
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
--D
> ---
> release.sh | 43 +++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 43 insertions(+)
>
> diff --git a/release.sh b/release.sh
> index 57ff217b9b6bf62873a149029957fdd9f01b8c38..723806beb05761da06d971460ee15c97d2d0d5b1 100755
> --- a/release.sh
> +++ b/release.sh
> @@ -13,11 +13,13 @@ set -e
>
> KUP=0
> COMMIT=1
> +LAST_HEAD=""
>
> help() {
> echo "$(basename) - create xfsprogs release"
> printf "\t[--kup|-k] upload final tarball with KUP\n"
> printf "\t[--no-commit|-n] don't create release commit\n"
> + printf "\t[--last-head|-h] commit of the last release\n"
> }
>
> update_version() {
> @@ -48,6 +50,10 @@ while [ $# -gt 0 ]; do
> --no-commit|-n)
> COMMIT=0
> ;;
> + --last-head|-h)
> + LAST_HEAD=$2
> + shift
> + ;;
> --help|-h)
> help
> exit 0
> @@ -122,6 +128,43 @@ if [ $KUP -eq 1 ]; then
> pub/linux/utils/fs/xfs/xfsprogs/
> fi;
>
> +mail_file=$(mktemp)
> +if [ -n "$LAST_HEAD" ]; then
> + cat << EOF > $mail_file
> +To: linux-xfs@vger.kernel.org
> +Subject: [ANNOUNCE] xfsprogs $(git describe --abbrev=0) released
> +
> +Hi folks,
> +
> +The xfsprogs repository at:
> +
> + git://git.kernel.org/pub/scm/fs/xfs/xfsprogs-dev.git
> +
> +has just been updated.
> +
> +Patches often get missed, so if your outstanding patches are properly reviewed
> +on the list and not included in this update, please let me know.
> +
> +The for-next branch has also been updated to match the state of master.
> +
> +The new head of the master branch is commit:
> +
> +$(git log --oneline --format="%H" -1)
> +
> +New commits:
> +
> +$(git shortlog --format="[%h] %s" $LAST_HEAD..HEAD)
> +
> +Code Diffstat:
> +
> +$(git diff --stat --summary -C -M $LAST_HEAD..HEAD)
> +EOF
> +fi
> +
> echo ""
> echo "Done. Please remember to push out tags and the branch."
> printf "\tgit push origin v${version} master\n"
> +if [ -n "$LAST_HEAD" ]; then
> + echo "Command to send ANNOUNCE email"
> + printf "\tneomutt -H $mail_file\n"
> +fi
>
> --
> 2.47.0
>
>
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH v2 5/7] Add git-contributors script to notify about merges
2025-01-22 15:01 [PATCH v2 0/7] Update release.sh Andrey Albershteyn
` (3 preceding siblings ...)
2025-01-22 15:01 ` [PATCH v2 4/7] release.sh: generate ANNOUNCE email Andrey Albershteyn
@ 2025-01-22 15:01 ` Andrey Albershteyn
2025-01-28 17:43 ` Darrick J. Wong
2025-01-22 15:01 ` [PATCH v2 6/7] git-contributors: make revspec required and shebang fix Andrey Albershteyn
2025-01-22 15:01 ` [PATCH v2 7/7] release.sh: use git-contributors to --cc contributors Andrey Albershteyn
6 siblings, 1 reply; 14+ messages in thread
From: Andrey Albershteyn @ 2025-01-22 15:01 UTC (permalink / raw)
To: linux-xfs; +Cc: Darrick J. Wong, Andrey Albershteyn
Add python script used to collect emails over all changes merged in
the next release.
CC: "Darrick J. Wong" <djwong@kernel.org>
Signed-off-by: Andrey Albershteyn <aalbersh@kernel.org>
---
tools/git-contributors.py | 94 +++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 94 insertions(+)
diff --git a/tools/git-contributors.py b/tools/git-contributors.py
new file mode 100755
index 0000000000000000000000000000000000000000..83bbe8ce0ee1dcbd591c6d3016d553fac2a7d286
--- /dev/null
+++ b/tools/git-contributors.py
@@ -0,0 +1,94 @@
+#!/usr/bin/python3
+
+# List all contributors to a series of git commits.
+# Copyright(C) 2025 Oracle, All Rights Reserved.
+# Licensed under GPL 2.0 or later
+
+import re
+import subprocess
+import io
+import sys
+import argparse
+import email.utils
+
+DEBUG = False
+
+def backtick(args):
+ '''Generator function that yields lines of a program's stdout.'''
+ if DEBUG:
+ print(' '.join(args))
+ p = subprocess.Popen(args, stdout = subprocess.PIPE)
+ for line in io.TextIOWrapper(p.stdout, encoding="utf-8"):
+ yield line
+
+class find_developers(object):
+ def __init__(self):
+ tags = '%s|%s|%s|%s|%s|%s|%s|%s' % (
+ 'signed-off-by',
+ 'acked-by',
+ 'cc',
+ 'reviewed-by',
+ 'reported-by',
+ 'tested-by',
+ 'suggested-by',
+ 'reported-and-tested-by')
+ # some tag, a colon, a space, and everything after that
+ regex1 = r'^(%s):\s+(.+)$' % tags
+
+ self.r1 = re.compile(regex1, re.I)
+
+ def run(self, lines):
+ addr_list = []
+
+ for line in lines:
+ l = line.strip()
+
+ # emailutils can handle abominations like:
+ #
+ # Reviewed-by: Bogus J. Simpson <bogus@simpson.com>
+ # Reviewed-by: "Bogus J. Simpson" <bogus@simpson.com>
+ # Reviewed-by: bogus@simpson.com
+ # Cc: <stable@vger.kernel.org> # v6.9
+ # Tested-by: Moo Cow <foo@bar.com> # powerpc
+ m = self.r1.match(l)
+ if not m:
+ continue
+ (name, addr) = email.utils.parseaddr(m.expand(r'\g<2>'))
+
+ # This last split removes anything after a hash mark,
+ # because someone could have provided an improperly
+ # formatted email address:
+ #
+ # Cc: stable@vger.kernel.org # v6.19+
+ #
+ # emailutils doesn't seem to catch this, and I can't
+ # fully tell from RFC2822 that this isn't allowed. I
+ # think it is because dtext doesn't forbid spaces or
+ # hash marks.
+ addr_list.append(addr.split('#')[0])
+
+ return sorted(set(addr_list))
+
+def main():
+ parser = argparse.ArgumentParser(description = "List email addresses of contributors to a series of git commits.")
+ parser.add_argument("revspec", nargs = '?', default = None, \
+ help = "git revisions to process.")
+ parser.add_argument("--delimiter", type = str, default = '\n', \
+ help = "Separate each email address with this string.")
+ args = parser.parse_args()
+
+ fd = find_developers()
+ if args.revspec:
+ # read git commits from repo
+ contributors = fd.run(backtick(['git', 'log', '--pretty=medium',
+ args.revspec]))
+ else:
+ # read patch from stdin
+ contributors = fd.run(sys.stdin.readlines())
+
+ print(args.delimiter.join(sorted(contributors)))
+ return 0
+
+if __name__ == '__main__':
+ sys.exit(main())
+
--
2.47.0
^ permalink raw reply related [flat|nested] 14+ messages in thread* Re: [PATCH v2 5/7] Add git-contributors script to notify about merges
2025-01-22 15:01 ` [PATCH v2 5/7] Add git-contributors script to notify about merges Andrey Albershteyn
@ 2025-01-28 17:43 ` Darrick J. Wong
0 siblings, 0 replies; 14+ messages in thread
From: Darrick J. Wong @ 2025-01-28 17:43 UTC (permalink / raw)
To: Andrey Albershteyn; +Cc: linux-xfs, Andrey Albershteyn
On Wed, Jan 22, 2025 at 04:01:31PM +0100, Andrey Albershteyn wrote:
> Add python script used to collect emails over all changes merged in
> the next release.
>
> CC: "Darrick J. Wong" <djwong@kernel.org>
> Signed-off-by: Andrey Albershteyn <aalbersh@kernel.org>
Signed-off-by: "Darrick J. Wong" <djwong@kernel.org>
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
--D
> ---
> tools/git-contributors.py | 94 +++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 94 insertions(+)
>
> diff --git a/tools/git-contributors.py b/tools/git-contributors.py
> new file mode 100755
> index 0000000000000000000000000000000000000000..83bbe8ce0ee1dcbd591c6d3016d553fac2a7d286
> --- /dev/null
> +++ b/tools/git-contributors.py
> @@ -0,0 +1,94 @@
> +#!/usr/bin/python3
> +
> +# List all contributors to a series of git commits.
> +# Copyright(C) 2025 Oracle, All Rights Reserved.
> +# Licensed under GPL 2.0 or later
> +
> +import re
> +import subprocess
> +import io
> +import sys
> +import argparse
> +import email.utils
> +
> +DEBUG = False
> +
> +def backtick(args):
> + '''Generator function that yields lines of a program's stdout.'''
> + if DEBUG:
> + print(' '.join(args))
> + p = subprocess.Popen(args, stdout = subprocess.PIPE)
> + for line in io.TextIOWrapper(p.stdout, encoding="utf-8"):
> + yield line
> +
> +class find_developers(object):
> + def __init__(self):
> + tags = '%s|%s|%s|%s|%s|%s|%s|%s' % (
> + 'signed-off-by',
> + 'acked-by',
> + 'cc',
> + 'reviewed-by',
> + 'reported-by',
> + 'tested-by',
> + 'suggested-by',
> + 'reported-and-tested-by')
> + # some tag, a colon, a space, and everything after that
> + regex1 = r'^(%s):\s+(.+)$' % tags
> +
> + self.r1 = re.compile(regex1, re.I)
> +
> + def run(self, lines):
> + addr_list = []
> +
> + for line in lines:
> + l = line.strip()
> +
> + # emailutils can handle abominations like:
> + #
> + # Reviewed-by: Bogus J. Simpson <bogus@simpson.com>
> + # Reviewed-by: "Bogus J. Simpson" <bogus@simpson.com>
> + # Reviewed-by: bogus@simpson.com
> + # Cc: <stable@vger.kernel.org> # v6.9
> + # Tested-by: Moo Cow <foo@bar.com> # powerpc
> + m = self.r1.match(l)
> + if not m:
> + continue
> + (name, addr) = email.utils.parseaddr(m.expand(r'\g<2>'))
> +
> + # This last split removes anything after a hash mark,
> + # because someone could have provided an improperly
> + # formatted email address:
> + #
> + # Cc: stable@vger.kernel.org # v6.19+
> + #
> + # emailutils doesn't seem to catch this, and I can't
> + # fully tell from RFC2822 that this isn't allowed. I
> + # think it is because dtext doesn't forbid spaces or
> + # hash marks.
> + addr_list.append(addr.split('#')[0])
> +
> + return sorted(set(addr_list))
> +
> +def main():
> + parser = argparse.ArgumentParser(description = "List email addresses of contributors to a series of git commits.")
> + parser.add_argument("revspec", nargs = '?', default = None, \
> + help = "git revisions to process.")
> + parser.add_argument("--delimiter", type = str, default = '\n', \
> + help = "Separate each email address with this string.")
> + args = parser.parse_args()
> +
> + fd = find_developers()
> + if args.revspec:
> + # read git commits from repo
> + contributors = fd.run(backtick(['git', 'log', '--pretty=medium',
> + args.revspec]))
> + else:
> + # read patch from stdin
> + contributors = fd.run(sys.stdin.readlines())
> +
> + print(args.delimiter.join(sorted(contributors)))
> + return 0
> +
> +if __name__ == '__main__':
> + sys.exit(main())
> +
>
> --
> 2.47.0
>
>
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH v2 6/7] git-contributors: make revspec required and shebang fix
2025-01-22 15:01 [PATCH v2 0/7] Update release.sh Andrey Albershteyn
` (4 preceding siblings ...)
2025-01-22 15:01 ` [PATCH v2 5/7] Add git-contributors script to notify about merges Andrey Albershteyn
@ 2025-01-22 15:01 ` Andrey Albershteyn
2025-01-28 17:44 ` Darrick J. Wong
2025-01-22 15:01 ` [PATCH v2 7/7] release.sh: use git-contributors to --cc contributors Andrey Albershteyn
6 siblings, 1 reply; 14+ messages in thread
From: Andrey Albershteyn @ 2025-01-22 15:01 UTC (permalink / raw)
To: linux-xfs; +Cc: Andrey Albershteyn
Without default value script will show help instead of just hanging
waiting for input on stdin.
Shebang fix for system with different python location than the
/usr/bin one.
Signed-off-by: Andrey Albershteyn <aalbersh@kernel.org>
---
tools/git-contributors.py | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/tools/git-contributors.py b/tools/git-contributors.py
index 83bbe8ce0ee1dcbd591c6d3016d553fac2a7d286..628d6d0b4d8795e10b1317fa6fc91c6b98b21f3e 100755
--- a/tools/git-contributors.py
+++ b/tools/git-contributors.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python3
+#!/usr/bin/env python3
# List all contributors to a series of git commits.
# Copyright(C) 2025 Oracle, All Rights Reserved.
@@ -71,8 +71,7 @@ class find_developers(object):
def main():
parser = argparse.ArgumentParser(description = "List email addresses of contributors to a series of git commits.")
- parser.add_argument("revspec", nargs = '?', default = None, \
- help = "git revisions to process.")
+ parser.add_argument("revspec", help = "git revisions to process.")
parser.add_argument("--delimiter", type = str, default = '\n', \
help = "Separate each email address with this string.")
args = parser.parse_args()
--
2.47.0
^ permalink raw reply related [flat|nested] 14+ messages in thread* Re: [PATCH v2 6/7] git-contributors: make revspec required and shebang fix
2025-01-22 15:01 ` [PATCH v2 6/7] git-contributors: make revspec required and shebang fix Andrey Albershteyn
@ 2025-01-28 17:44 ` Darrick J. Wong
0 siblings, 0 replies; 14+ messages in thread
From: Darrick J. Wong @ 2025-01-28 17:44 UTC (permalink / raw)
To: Andrey Albershteyn; +Cc: linux-xfs, Andrey Albershteyn
On Wed, Jan 22, 2025 at 04:01:32PM +0100, Andrey Albershteyn wrote:
> Without default value script will show help instead of just hanging
> waiting for input on stdin.
Is it useful to be able to do
git-contributors < fubar.patch
?
For the single usecase of generating announcement emails it probably
doesn't matter though.
--D
> Shebang fix for system with different python location than the
> /usr/bin one.
>
> Signed-off-by: Andrey Albershteyn <aalbersh@kernel.org>
> ---
> tools/git-contributors.py | 5 ++---
> 1 file changed, 2 insertions(+), 3 deletions(-)
>
> diff --git a/tools/git-contributors.py b/tools/git-contributors.py
> index 83bbe8ce0ee1dcbd591c6d3016d553fac2a7d286..628d6d0b4d8795e10b1317fa6fc91c6b98b21f3e 100755
> --- a/tools/git-contributors.py
> +++ b/tools/git-contributors.py
> @@ -1,4 +1,4 @@
> -#!/usr/bin/python3
> +#!/usr/bin/env python3
>
> # List all contributors to a series of git commits.
> # Copyright(C) 2025 Oracle, All Rights Reserved.
> @@ -71,8 +71,7 @@ class find_developers(object):
>
> def main():
> parser = argparse.ArgumentParser(description = "List email addresses of contributors to a series of git commits.")
> - parser.add_argument("revspec", nargs = '?', default = None, \
> - help = "git revisions to process.")
> + parser.add_argument("revspec", help = "git revisions to process.")
> parser.add_argument("--delimiter", type = str, default = '\n', \
> help = "Separate each email address with this string.")
> args = parser.parse_args()
>
> --
> 2.47.0
>
>
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH v2 7/7] release.sh: use git-contributors to --cc contributors
2025-01-22 15:01 [PATCH v2 0/7] Update release.sh Andrey Albershteyn
` (5 preceding siblings ...)
2025-01-22 15:01 ` [PATCH v2 6/7] git-contributors: make revspec required and shebang fix Andrey Albershteyn
@ 2025-01-22 15:01 ` Andrey Albershteyn
2025-01-28 18:01 ` Darrick J. Wong
6 siblings, 1 reply; 14+ messages in thread
From: Andrey Albershteyn @ 2025-01-22 15:01 UTC (permalink / raw)
To: linux-xfs; +Cc: Andrey Albershteyn
Signed-off-by: Andrey Albershteyn <aalbersh@kernel.org>
---
release.sh | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/release.sh b/release.sh
index 723806beb05761da06d971460ee15c97d2d0d5b1..e5ae3a8f2f1c601c2e8803b9d899712b567fbbfe 100755
--- a/release.sh
+++ b/release.sh
@@ -166,5 +166,6 @@ echo "Done. Please remember to push out tags and the branch."
printf "\tgit push origin v${version} master\n"
if [ -n "$LAST_HEAD" ]; then
echo "Command to send ANNOUNCE email"
- printf "\tneomutt -H $mail_file\n"
+ cc="$(./tools/git-contributors.py $LAST_HEAD.. --delimiter ' -c ')"
+ printf "\tneomutt -H $mail_file -c $cc\n"
fi
--
2.47.0
^ permalink raw reply related [flat|nested] 14+ messages in thread* Re: [PATCH v2 7/7] release.sh: use git-contributors to --cc contributors
2025-01-22 15:01 ` [PATCH v2 7/7] release.sh: use git-contributors to --cc contributors Andrey Albershteyn
@ 2025-01-28 18:01 ` Darrick J. Wong
0 siblings, 0 replies; 14+ messages in thread
From: Darrick J. Wong @ 2025-01-28 18:01 UTC (permalink / raw)
To: Andrey Albershteyn; +Cc: linux-xfs, Andrey Albershteyn
On Wed, Jan 22, 2025 at 04:01:33PM +0100, Andrey Albershteyn wrote:
> Signed-off-by: Andrey Albershteyn <aalbersh@kernel.org>
> ---
> release.sh | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/release.sh b/release.sh
> index 723806beb05761da06d971460ee15c97d2d0d5b1..e5ae3a8f2f1c601c2e8803b9d899712b567fbbfe 100755
> --- a/release.sh
> +++ b/release.sh
> @@ -166,5 +166,6 @@ echo "Done. Please remember to push out tags and the branch."
> printf "\tgit push origin v${version} master\n"
> if [ -n "$LAST_HEAD" ]; then
> echo "Command to send ANNOUNCE email"
> - printf "\tneomutt -H $mail_file\n"
> + cc="$(./tools/git-contributors.py $LAST_HEAD.. --delimiter ' -c ')"
You could also do:
Cc: $(./tools/git-contributors.py $LAST_HEAD.. --delimiter ' ')
in the mail_file generation, right after you generate the To: line,
which would eliminate the user having to do a messy cut and paste of a
very long command line:
neomutt -H /tmp/fubar -c root@localhost -c postmaster@localhost -c ...
something like this:
cat << EOF > $mail_file
To: linux-xfs@vger.kernel.org
Cc: $(./tools/git-contributors.py $LAST_HEAD.. --delimiter ' ')
Subject: [ANNOUNCE] xfsprogs $(git describe --abbrev=0) released
Hi folks,
ENDL
--D
> + printf "\tneomutt -H $mail_file -c $cc\n"
> fi
>
> --
> 2.47.0
>
>
^ permalink raw reply [flat|nested] 14+ messages in thread