Daniel P. Berrangé <[email protected]> writes: > It is desirable to be able to discover the GitLab account handle > assocaited with a real name in the MAINTAINERS file. > > Rather that duplicating the same account handle multiple times, > inline with the MAINTAINERS file entries, this introduces mapping > files: > > * .gitlab-map-auto - data automatically queried from GitLab > using the 'glab' tool and REST API > * .gitlab-map-manual - manual overrides/augmentation for > cases where the MAINTAINERS real name does not match the > GitLab account real name > > The former would need refreshing when we add new MAINTAINERS > entries, if the person had to be added as a GitLab account > member. For this purpose scripts/gitlab-map-update can be > used, assuming the user has the 'glab' client tool present > and configured with an access token. > > To audit how many maintainers have GitLab handles present/missing > scripts/gitlab-map-check can run a report. > > $ ./scripts/gitlab-map-check > Missing GitLab handle for maintainer 'Akihiko Odaki' > Missing GitLab handle for maintainer 'Albert Esteve' > .... > Missing GitLab handle for maintainer 'Zhenzhong Duan' > Missing GitLab handle for maintainer 'Zhuoying Cai' > GitLab handles missing: 158 / present: 68 > > Signed-off-by: Daniel P. Berrangé <[email protected]> > --- > .gitlab-map-auto | 93 +++++++++++++++++++++++++++++++++++++++ > .gitlab-map-manual | 18 ++++++++ > scripts/gitlab-map-check | 51 +++++++++++++++++++++ > scripts/gitlab-map-update | 45 +++++++++++++++++++ > 4 files changed, 207 insertions(+) > create mode 100644 .gitlab-map-auto > create mode 100644 .gitlab-map-manual > create mode 100755 scripts/gitlab-map-check > create mode 100755 scripts/gitlab-map-update > > diff --git a/.gitlab-map-auto b/.gitlab-map-auto > new file mode 100644 > index 0000000000..28ce448f1b > --- /dev/null > +++ b/.gitlab-map-auto > @@ -0,0 +1,93 @@ > +# This file is auto-generated by scripts/gitlab-map-update > +# > +# This GitLab map associates GitLab account handles > +# with real names, in order to allow mapping from > +# MAINTAINERS entries. The format of entries is > +# > +# {gitlab-handle}<tab>{real name} > +# > +# Manual overrides must be placed in .gitlab-map-manual > +TaoTang Tao Tang > +a1xndr Alexander Bulekov > +adi-g15-ibm Aditya Gupta > +agraf Alexander Graf > +alex.williamson Alex Williamson > +aliang1 Aihua Liang > +alistair23 Alistair Francis > +anisinha Ani Sinha > +anthony-linaro Anthony Roberts > +anthonyper Anthony PERARD > +berrange Daniel P. Berrangé > +birkelund Klaus Jensen > +bonzini Paolo Bonzini > +brian-cain Brian Cain > +bsdimp Warner Losh > +cborntra Christian Borntraeger > +chao23.liu Chao Liu (Zevorn) > +cleber.gnu Cleber Rosa > +clegoate Cédric Le Goater > +cohuck Cornelia Huck > +cota_ Emilio Cota > +dagrh Dr. David Alan Gilbert > +danielhb Daniel Henrique Barboza > +davidhildenbrand David Hildenbrand > +dgibson dgibson > +dwmw2 David Woodhouse > +eauger1 Eric Auger > +ebblake Eric Blake > +edgar.iglesias Edgar E. Iglesias > +ehabkost Eduardo Habkost > +eldondev Eldon > +epilys Manos Pitsidianakis > +famzheng Fam Zheng > +farosas Fabiano Rosas > +gautammenghani Gautam Menghani > +gkurz Greg Kurz > +gusbromero Gustavo Romero > +harshpb Harsh Prateek Bora > +hdeller Helge Deller > +hreitz Hanna Czenczek > +imammedo Igor Mammedov > +jasowang Jason Wang > +jmacarthur Jim MacArthur > +jsnow John Snow > +juan.quintela Juan Quintela > +kbastian-qemu Bastian Koppelmann > +kmwolf Kevin Wolf > +kostyanf14 Kostiantyn Kostiuk > +kraxel Gerd Hoffmann > +lbmeng Bin Meng > +legoater Cédric Le Goater > +lvivier Laurent Vivier > +lygstate Yonggang Luo > +maciejsszmigiero Maciej S. Szmigiero > +marcandre.lureau Marc-André Lureau > +marcandre.lureau-rh Marc-André Lureau > +mauromatteo.cascella Mauro Matteo Cascella > +mcayland Mark Cave-Ayland > +mdroth Michael Roth > +mediouni-m M. Mediouni > +mjt0k Michael Tokarev > +mstredhat MST > +npiggin npiggin > +p-b-o Pierrick Bouvier > +pauldzim Paul Zimmerman > +peterx Peter Xu > +philmd Philippe Mathieu-Daudé > +pierrick.bouvier Pierrick Bouvier > +pipo.sk Peter Krempa > +pkrempa Peter Krempa (work) > +pm215 Peter Maydell > +qemu-janitor Qemu Janitor > +rathc Chinmay Rath > +rth7680 Richard Henderson > +schoenebeck Christian Schoenebeck > +sgarzarella Stefano Garzarella > +sstabellini Stefano Stabellini > +stefanberger Stefan Berger > +stefanha Stefan Hajnoczi > +stsquad Alex Bennée > +stweil Stefan Weil > +thuth Thomas Huth > +vsementsov Vladimir Sementsov-Ogievskiy > +xcancerberox Joaquin de Andres > diff --git a/.gitlab-map-manual b/.gitlab-map-manual > new file mode 100644 > index 0000000000..f605a540e9 > --- /dev/null > +++ b/.gitlab-map-manual > @@ -0,0 +1,18 @@ > +# This GitLab map associates GitLab account handles > +# with real names, in order to allow mapping from > +# MAINTAINERS entries. The format of entries is > +# > +# {gitlab-handle}<tab>{real name} > +# > +# This file is manually written, to augment the > +# auto-generated data in .gitlab-map-auto. This > +# is needed where a GitLab account real name does > +# not exactly match the MAINTAINERS file real > +# name. > +# > +berrange Daniel P. Berrange > +dgibson David Gibson > +hreitz Hanna Reitz > +mstredhat Michael S. Tsirkin > +npiggin Nicholas Piggin > +mediouni-m Mohamed Mediouni > diff --git a/scripts/gitlab-map-check b/scripts/gitlab-map-check > new file mode 100755 > index 0000000000..f72a06756d > --- /dev/null > +++ b/scripts/gitlab-map-check > @@ -0,0 +1,51 @@ > +#!/bin/sh > +# SPDX-License-Identifier: GPL-2.0-or-later > + > +missing=0 > +present=0 > + > +grep -E '^(R|M):' MAINTAINERS | \ > +sed -E -e 's/^(M|R): //' -e 's/ <.*//' | \ > +sort | uniq > names.txt > +while IFS= read -r NAME > +do > + grep "$NAME" .gitlab-map-{auto,manual} > /dev/null > + if test $? != 0 > + then > + echo "Missing GitLab handle for maintainer '$NAME'" > + missing=$(($missing + 1)) > + else > + present=$(($present + 1)) > + fi > +done < names.txt > +rm -f names.txt > + > +echo "GitLab handles missing: $missing / present: $present" > + > +# .gitlab-map-manual is to provide alternate real names > +# for cases where name in MAINTAINERS does not match > +# the GitLab account real name. As such... > + > +# ...all gitlab handles in .gitlab-map-manual must also exist > +# in .gitlab-map-auto and .... > +for HANDLE in $(grep -v '^#' .gitlab-map-manual | awk '{print $1}') > +do > + grep -E "^$HANDLE\s" .gitlab-map-auto >/dev/null > + if test $? != 0 > + then > + echo "Unexpected GitLab handle '$HANDLE' is not a member" > + fi > +done > + > +# ...and all realnames in .gitlab-map-manual must also > +# exist in MAINTAINERS > +grep -v '^#' .gitlab-map-manual | \ > +awk '{ $1 = ""; print substr($0, 2) }' | \ > +while IFS= read -r NAME > +do > + grep -E "\s$NAME\s" MAINTAINERS >/dev/null > + if test $? != 0 > + then > + echo "Unexpected real name '$NAME' is not a maintainer" > + fi > +done > diff --git a/scripts/gitlab-map-update b/scripts/gitlab-map-update > new file mode 100755 > index 0000000000..c134c226aa > --- /dev/null > +++ b/scripts/gitlab-map-update > @@ -0,0 +1,45 @@ > +#!/bin/sh > +# SPDX-License-Identifier: GPL-2.0-or-later > + > +echo "Checking authentication token status" > +glab auth status > + > +if test $? != 0 > +then > + echo "ERROR: not authenticated with gitlab.com" > + exit 1 > +fi > + > +if ! test -f .gitlab-map-auto > +then > + echo "ERROR: cannot find existing '.gitlab-map-auto file'" > + echo "ERROR: this must be executed from the root of the" > + echo "ERROR: git repository checkout" > + exit 1 > +fi > + > +fail=0 > +echo "Updating member list from qemu-project" > +glab api --paginate /groups/qemu-project/members | \ > + jq -r -c '.[] | [.username, .name] | @tsv' | \ > + grep -v '^group_3038080_bot' > \ > + .gitlab-map-auto.tmp > +test $? != 0 && fail=1 > + > +echo "Updating member list from qemu-project/qemu" > +glab api --paginate /projects/qemu-project%2fqemu/members | \ > + jq -r -c '.[] | [.username, .name] | @tsv' | \ > + grep -v 'Duo Developer' >> \ > + .gitlab-map-auto.tmp > +test $? != 0 && fail=1 > + > +if test $fail == 0 > +then > + grep '^#' .gitlab-map-auto > .gitlab-map-auto.new > + LC_ALL=C sort .gitlab-map-auto.tmp | uniq >> .gitlab-map-auto.new > + mv .gitlab-map-auto.new .gitlab-map-auto > + echo "OK: GitLab member list updated" > +else > + echo "ERROR: Updating member list failed" > +fi > +rm -f .gitlab-map-auto.tmp
Reviewed-by: Fabiano Rosas <[email protected]>
