public inbox for linux-xfs@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/7] Update release.sh
@ 2025-01-22 15:01 Andrey Albershteyn
  2025-01-22 15:01 ` [PATCH v2 1/7] release.sh: add signing and fix outdated commands Andrey Albershteyn
                   ` (6 more replies)
  0 siblings, 7 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

To: linux-xfs@vger.kernel.org

The release.sh seems to be last updated in 2015. Every one seems to have
their own script to release. This patchset updates release.sh to the do
the basic stuff as updating version files, committing them, creating
tag, creating release tarball, uploading tarball (optional).

-- 
Andrey

---
Changes in v2:
- Added git-contributors.py from Darrick
- A bit better/shorter commands for maintainer to run
- Link to v1: https://lore.kernel.org/r/20250110-update-release-v1-0-61e40b8ffbac@kernel.org

---
Andrey Albershteyn (7):
      release.sh: add signing and fix outdated commands
      release.sh: add --kup to upload release tarball to kernel.org
      release.sh: update version files make commit optional
      release.sh: generate ANNOUNCE email
      Add git-contributors script to notify about merges
      git-contributors: make revspec required and shebang fix
      release.sh: use git-contributors to --cc contributors

 release.sh                | 159 ++++++++++++++++++++++++++++++++++++++++++----
 tools/git-contributors.py |  93 +++++++++++++++++++++++++++
 2 files changed, 240 insertions(+), 12 deletions(-)
---
base-commit: 67297671cbae3043e495312964470d31f4b9e5e7
change-id: 20241111-update-release-13ef17c008a5

Best regards,
-- 
Andrey Albershteyn <aalbersh@kernel.org>


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [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

* [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

* [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

* [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

* [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

* [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 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

* 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

* 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

* 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

* 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

* 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

end of thread, other threads:[~2025-01-28 18:01 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
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-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
2025-01-28 17:38   ` Darrick J. Wong
2025-01-22 15:01 ` [PATCH v2 4/7] release.sh: generate ANNOUNCE email 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
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-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
2025-01-28 18:01   ` Darrick J. Wong

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox