diff mbox series

[4/4] release.sh: generate ANNOUNCE email

Message ID 20250110-update-release-v1-4-61e40b8ffbac@kernel.org (mailing list archive)
State New
Headers show
Series Update release.sh | expand

Commit Message

Andrey Albershteyn Jan. 10, 2025, 11:05 a.m. UTC
Signed-off-by: Andrey Albershteyn <aalbersh@kernel.org>
---
 release.sh | 46 +++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 45 insertions(+), 1 deletion(-)

Comments

Darrick J. Wong Jan. 16, 2025, 10:41 p.m. UTC | #1
On Fri, Jan 10, 2025 at 12:05:09PM +0100, Andrey Albershteyn wrote:
> Signed-off-by: Andrey Albershteyn <aalbersh@kernel.org>
> ---
>  release.sh | 46 +++++++++++++++++++++++++++++++++++++++++++++-
>  1 file changed, 45 insertions(+), 1 deletion(-)
> 
> diff --git a/release.sh b/release.sh
> index c34efcbcdfcaf50a08853e65542e8f16214cfb4e..40ecfaff66c3e9f8d794e7543750bd9579b7c6c9 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,7 +128,45 @@ if [ $KUP -eq 1 ]; then
>  		pub/linux/utils/fs/xfs/xfsprogs/xfsprogs-${version}.tar.gz
>  fi;
>  
> +mail_file=$(mktemp)
> +subject=""
> +if [ -n "$LAST_HEAD" ]; then
> +	subject="[ANNOUNCE] xfsprogs $(git describe --abbrev=0) released"
> +
> +	cat << EOF > $mail_file
> +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

Looks pretty similar to my git-announce tool. ;)

> +
>  echo ""
> -echo "Done. Please remember to push out tags and the branch."
> +echo "Done."
> +echo "Please remember to push out tags and the branch."
>  printf "\tgit push origin v${version}\n"
>  printf "\tgit push origin master\n"
> +if [ -n "$LAST_HEAD" ]; then
> +	echo "Command to send ANNOUNCE email"
> +	printf "\tneomutt linux-xfs@vger.kernel.org -s \"$subject\" -i $mail_file\n"

Note: if you put the headers in $mail_file, like this:

cat << EOF > $mail_file
To: linux-xfs@vger.kernel.org
Subject: $subject

Hi folks,
...
ENDL

then you can do:

	neomutt -H $mail_file

to edit the message and send it out.  I also wonder if you'd like a copy
of my git-contributors script that spits out a list of emails to cc
based on the git diff?

--D

> +fi
> 
> -- 
> 2.47.0
> 
>
Andrey Albershteyn Jan. 20, 2025, 12:14 p.m. UTC | #2
On 2025-01-16 14:41:48, Darrick J. Wong wrote:
> On Fri, Jan 10, 2025 at 12:05:09PM +0100, Andrey Albershteyn wrote:
> > Signed-off-by: Andrey Albershteyn <aalbersh@kernel.org>
> > ---
> >  release.sh | 46 +++++++++++++++++++++++++++++++++++++++++++++-
> >  1 file changed, 45 insertions(+), 1 deletion(-)
> > 
> > diff --git a/release.sh b/release.sh
> > index c34efcbcdfcaf50a08853e65542e8f16214cfb4e..40ecfaff66c3e9f8d794e7543750bd9579b7c6c9 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,7 +128,45 @@ if [ $KUP -eq 1 ]; then
> >  		pub/linux/utils/fs/xfs/xfsprogs/xfsprogs-${version}.tar.gz
> >  fi;
> >  
> > +mail_file=$(mktemp)
> > +subject=""
> > +if [ -n "$LAST_HEAD" ]; then
> > +	subject="[ANNOUNCE] xfsprogs $(git describe --abbrev=0) released"
> > +
> > +	cat << EOF > $mail_file
> > +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
> 
> Looks pretty similar to my git-announce tool. ;)
> 
> > +
> >  echo ""
> > -echo "Done. Please remember to push out tags and the branch."
> > +echo "Done."
> > +echo "Please remember to push out tags and the branch."
> >  printf "\tgit push origin v${version}\n"
> >  printf "\tgit push origin master\n"
> > +if [ -n "$LAST_HEAD" ]; then
> > +	echo "Command to send ANNOUNCE email"
> > +	printf "\tneomutt linux-xfs@vger.kernel.org -s \"$subject\" -i $mail_file\n"
> 
> Note: if you put the headers in $mail_file, like this:
> 
> cat << EOF > $mail_file
> To: linux-xfs@vger.kernel.org
> Subject: $subject
> 
> Hi folks,
> ...
> ENDL
> 
> then you can do:
> 
> 	neomutt -H $mail_file

Neat, will update this

> 
> to edit the message and send it out.  I also wonder if you'd like a copy
> of my git-contributors script that spits out a list of emails to cc
> based on the git diff?

sure, is it small enough to be a part of this file?
Darrick J. Wong Jan. 22, 2025, 2:02 a.m. UTC | #3
On Mon, Jan 20, 2025 at 01:14:18PM +0100, Andrey Albershteyn wrote:
> On 2025-01-16 14:41:48, Darrick J. Wong wrote:
> > On Fri, Jan 10, 2025 at 12:05:09PM +0100, Andrey Albershteyn wrote:
> > > Signed-off-by: Andrey Albershteyn <aalbersh@kernel.org>
> > > ---
> > >  release.sh | 46 +++++++++++++++++++++++++++++++++++++++++++++-
> > >  1 file changed, 45 insertions(+), 1 deletion(-)
> > > 
> > > diff --git a/release.sh b/release.sh
> > > index c34efcbcdfcaf50a08853e65542e8f16214cfb4e..40ecfaff66c3e9f8d794e7543750bd9579b7c6c9 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,7 +128,45 @@ if [ $KUP -eq 1 ]; then
> > >  		pub/linux/utils/fs/xfs/xfsprogs/xfsprogs-${version}.tar.gz
> > >  fi;
> > >  
> > > +mail_file=$(mktemp)
> > > +subject=""
> > > +if [ -n "$LAST_HEAD" ]; then
> > > +	subject="[ANNOUNCE] xfsprogs $(git describe --abbrev=0) released"
> > > +
> > > +	cat << EOF > $mail_file
> > > +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
> > 
> > Looks pretty similar to my git-announce tool. ;)
> > 
> > > +
> > >  echo ""
> > > -echo "Done. Please remember to push out tags and the branch."
> > > +echo "Done."
> > > +echo "Please remember to push out tags and the branch."
> > >  printf "\tgit push origin v${version}\n"
> > >  printf "\tgit push origin master\n"
> > > +if [ -n "$LAST_HEAD" ]; then
> > > +	echo "Command to send ANNOUNCE email"
> > > +	printf "\tneomutt linux-xfs@vger.kernel.org -s \"$subject\" -i $mail_file\n"
> > 
> > Note: if you put the headers in $mail_file, like this:
> > 
> > cat << EOF > $mail_file
> > To: linux-xfs@vger.kernel.org
> > Subject: $subject
> > 
> > Hi folks,
> > ...
> > ENDL
> > 
> > then you can do:
> > 
> > 	neomutt -H $mail_file
> 
> Neat, will update this
> 
> > 
> > to edit the message and send it out.  I also wonder if you'd like a copy
> > of my git-contributors script that spits out a list of emails to cc
> > based on the git diff?
> 
> sure, is it small enough to be a part of this file?

Er.... maybe part of the patch, but it's a python script:

--D

#!/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())
diff mbox series

Patch

diff --git a/release.sh b/release.sh
index c34efcbcdfcaf50a08853e65542e8f16214cfb4e..40ecfaff66c3e9f8d794e7543750bd9579b7c6c9 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,7 +128,45 @@  if [ $KUP -eq 1 ]; then
 		pub/linux/utils/fs/xfs/xfsprogs/xfsprogs-${version}.tar.gz
 fi;
 
+mail_file=$(mktemp)
+subject=""
+if [ -n "$LAST_HEAD" ]; then
+	subject="[ANNOUNCE] xfsprogs $(git describe --abbrev=0) released"
+
+	cat << EOF > $mail_file
+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."
+echo "Done."
+echo "Please remember to push out tags and the branch."
 printf "\tgit push origin v${version}\n"
 printf "\tgit push origin master\n"
+if [ -n "$LAST_HEAD" ]; then
+	echo "Command to send ANNOUNCE email"
+	printf "\tneomutt linux-xfs@vger.kernel.org -s \"$subject\" -i $mail_file\n"
+fi