mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-05-15 11:16:34 +00:00
Merge pull request #9937 from Jafaral/rel-script
This commit is contained in:
commit
d64d20fcd4
@ -9,6 +9,10 @@ FRR Release Procedure
|
||||
Stage 1 - Preparation
|
||||
---------------------
|
||||
|
||||
#. Prepare changelog for the new release
|
||||
|
||||
Note: use ``tools/release_notes.py`` to help draft release notes changelog
|
||||
|
||||
#. Checkout the existing ``dev/<version>`` branch.
|
||||
|
||||
.. code-block:: console
|
||||
|
93
tools/release_notes.py
Executable file
93
tools/release_notes.py
Executable file
@ -0,0 +1,93 @@
|
||||
#!/usr/bin/python3
|
||||
#
|
||||
# 2021 Jafar Al-Gharaibeh, ATCorp
|
||||
#
|
||||
# Generate a draft FRR release notes
|
||||
#
|
||||
|
||||
import sys
|
||||
import os
|
||||
import getopt
|
||||
import subprocess
|
||||
|
||||
def run(cmd):
|
||||
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE)
|
||||
rv = proc.communicate("")[0].decode("UTF-8")
|
||||
proc.wait()
|
||||
return rv
|
||||
|
||||
|
||||
def usage(n):
|
||||
print(os.path.basename(__file__), " [-b <branch>] [-t <tag> ]")
|
||||
print(" Generate one line logs for non merge commits")
|
||||
print(" -branch: branch name to use, default to HEAD")
|
||||
print(" -tag : generate logs up to this tag, default to latest tag")
|
||||
sys.exit(n)
|
||||
|
||||
|
||||
def main(argv):
|
||||
branch = tag = None
|
||||
try:
|
||||
opts, args = getopt.getopt(argv, "hb:t:", ["branch=", "tag="])
|
||||
except getopt.GetoptError:
|
||||
usage(2)
|
||||
for opt, arg in opts:
|
||||
if opt == "-h":
|
||||
usage(0)
|
||||
elif opt in ("-b", "--branch"):
|
||||
branch = arg
|
||||
elif opt in ("-t", "--tag"):
|
||||
tag = arg
|
||||
|
||||
if branch is None:
|
||||
branch = "HEAD"
|
||||
if tag is None:
|
||||
tag = run(["git", "describe", "--abbrev=0"]).strip("\n")
|
||||
|
||||
chnglog = run(
|
||||
["git", "log", "--no-merges", "--pretty=format:'%s%d'", tag + ".." + branch]
|
||||
)
|
||||
chnglog = chnglog.split("\n")
|
||||
|
||||
chnglist = []
|
||||
daemons = [
|
||||
"babel",
|
||||
"bgp",
|
||||
"eigrp",
|
||||
"nhrp",
|
||||
"ospf",
|
||||
"ospf6",
|
||||
"pbr",
|
||||
"pim",
|
||||
"rip",
|
||||
"ripng",
|
||||
"sharp",
|
||||
"vrrp",
|
||||
"zebra",
|
||||
]
|
||||
|
||||
for line in chnglog:
|
||||
line = line.strip("'")
|
||||
colon = line.partition(":")
|
||||
label = colon[0].strip().lower()
|
||||
if label in daemons:
|
||||
label = label + "d"
|
||||
comment = colon[2].strip().capitalize()
|
||||
chnglist.append(label + ":" + comment)
|
||||
|
||||
chnglist.sort()
|
||||
lastlabel = ""
|
||||
for line in chnglist:
|
||||
colon = line.partition(":")
|
||||
label = colon[0]
|
||||
comment = colon[2]
|
||||
if label != lastlabel:
|
||||
print("")
|
||||
print(label)
|
||||
lastlabel = label
|
||||
|
||||
print(" ", comment)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main(sys.argv[1:])
|
Loading…
Reference in New Issue
Block a user