@samitouri / QOSamiQemu / commits / 4f7615789b

gitlab: introduce files mapping GitLab accounts to real names

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 Reviewed-by: Fabiano Rosas <farosas@suse.de> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>

Daniel P. Berrangé committed Jun 24, 2026 at 10:35 UTC 4f7615789bb1594335f23d404dff51b2841dfe96
4 files changed +207
.gitlab-map-auto new
+93
@@ -0,0 +1,93 @@
1 +# This file is auto-generated by scripts/gitlab-map-update
2 +#
3 +# This GitLab map associates GitLab account handles
4 +# with real names, in order to allow mapping from
5 +# MAINTAINERS entries. The format of entries is
6 +#
7 +# {gitlab-handle}<tab>{real name}
8 +#
9 +# Manual overrides must be placed in .gitlab-map-manual
10 +TaoTang Tao Tang
11 +a1xndr Alexander Bulekov
12 +adi-g15-ibm Aditya Gupta
13 +agraf Alexander Graf
14 +alex.williamson Alex Williamson
15 +aliang1 Aihua Liang
16 +alistair23 Alistair Francis
17 +anisinha Ani Sinha
18 +anthony-linaro Anthony Roberts
19 +anthonyper Anthony PERARD
20 +berrange Daniel P. Berrangé
21 +birkelund Klaus Jensen
22 +bonzini Paolo Bonzini
23 +brian-cain Brian Cain
24 +bsdimp Warner Losh
25 +cborntra Christian Borntraeger
26 +chao23.liu Chao Liu (Zevorn)
27 +cleber.gnu Cleber Rosa
28 +clegoate Cédric Le Goater
29 +cohuck Cornelia Huck
30 +cota_ Emilio Cota
31 +dagrh Dr. David Alan Gilbert
32 +danielhb Daniel Henrique Barboza
33 +davidhildenbrand David Hildenbrand
34 +dgibson dgibson
35 +dwmw2 David Woodhouse
36 +eauger1 Eric Auger
37 +ebblake Eric Blake
38 +edgar.iglesias Edgar E. Iglesias
39 +ehabkost Eduardo Habkost
40 +eldondev Eldon
41 +epilys Manos Pitsidianakis
42 +famzheng Fam Zheng
43 +farosas Fabiano Rosas
44 +gautammenghani Gautam Menghani
45 +gkurz Greg Kurz
46 +gusbromero Gustavo Romero
47 +harshpb Harsh Prateek Bora
48 +hdeller Helge Deller
49 +hreitz Hanna Czenczek
50 +imammedo Igor Mammedov
51 +jasowang Jason Wang
52 +jmacarthur Jim MacArthur
53 +jsnow John Snow
54 +juan.quintela Juan Quintela
55 +kbastian-qemu Bastian Koppelmann
56 +kmwolf Kevin Wolf
57 +kostyanf14 Kostiantyn Kostiuk
58 +kraxel Gerd Hoffmann
59 +lbmeng Bin Meng
60 +legoater Cédric Le Goater
61 +lvivier Laurent Vivier
62 +lygstate Yonggang Luo
63 +maciejsszmigiero Maciej S. Szmigiero
64 +marcandre.lureau Marc-André Lureau
65 +marcandre.lureau-rh Marc-André Lureau
66 +mauromatteo.cascella Mauro Matteo Cascella
67 +mcayland Mark Cave-Ayland
68 +mdroth Michael Roth
69 +mediouni-m M. Mediouni
70 +mjt0k Michael Tokarev
71 +mstredhat MST
72 +npiggin npiggin
73 +p-b-o Pierrick Bouvier
74 +pauldzim Paul Zimmerman
75 +peterx Peter Xu
76 +philmd Philippe Mathieu-Daudé
77 +pierrick.bouvier Pierrick Bouvier
78 +pipo.sk Peter Krempa
79 +pkrempa Peter Krempa (work)
80 +pm215 Peter Maydell
81 +qemu-janitor Qemu Janitor
82 +rathc Chinmay Rath
83 +rth7680 Richard Henderson
84 +schoenebeck Christian Schoenebeck
85 +sgarzarella Stefano Garzarella
86 +sstabellini Stefano Stabellini
87 +stefanberger Stefan Berger
88 +stefanha Stefan Hajnoczi
89 +stsquad Alex Bennée
90 +stweil Stefan Weil
91 +thuth Thomas Huth
92 +vsementsov Vladimir Sementsov-Ogievskiy
93 +xcancerberox Joaquin de Andres
.gitlab-map-manual new
+18
@@ -0,0 +1,18 @@
1 +# This GitLab map associates GitLab account handles
2 +# with real names, in order to allow mapping from
3 +# MAINTAINERS entries. The format of entries is
4 +#
5 +# {gitlab-handle}<tab>{real name}
6 +#
7 +# This file is manually written, to augment the
8 +# auto-generated data in .gitlab-map-auto. This
9 +# is needed where a GitLab account real name does
10 +# not exactly match the MAINTAINERS file real
11 +# name.
12 +#
13 +berrange Daniel P. Berrange
14 +dgibson David Gibson
15 +hreitz Hanna Reitz
16 +mstredhat Michael S. Tsirkin
17 +npiggin Nicholas Piggin
18 +mediouni-m Mohamed Mediouni
scripts/gitlab-map-check new
+51
@@ -0,0 +1,51 @@
1 +#!/bin/sh
2 +# SPDX-License-Identifier: GPL-2.0-or-later
3 +
4 +missing=0
5 +present=0
6 +
7 +grep -E '^(R|M):' MAINTAINERS | \
8 +sed -E -e 's/^(M|R): //' -e 's/ <.*//' | \
9 +sort | uniq > names.txt
10 +while IFS= read -r NAME
11 +do
12 + grep "$NAME" .gitlab-map-{auto,manual} > /dev/null
13 + if test $? != 0
14 + then
15 + echo "Missing GitLab handle for maintainer '$NAME'"
16 + missing=$(($missing + 1))
17 + else
18 + present=$(($present + 1))
19 + fi
20 +done < names.txt
21 +rm -f names.txt
22 +
23 +echo "GitLab handles missing: $missing / present: $present"
24 +
25 +# .gitlab-map-manual is to provide alternate real names
26 +# for cases where name in MAINTAINERS does not match
27 +# the GitLab account real name. As such...
28 +
29 +# ...all gitlab handles in .gitlab-map-manual must also exist
30 +# in .gitlab-map-auto and ....
31 +for HANDLE in $(grep -v '^#' .gitlab-map-manual | awk '{print $1}')
32 +do
33 + grep -E "^$HANDLE\s" .gitlab-map-auto >/dev/null
34 + if test $? != 0
35 + then
36 + echo "Unexpected GitLab handle '$HANDLE' is not a member"
37 + fi
38 +done
39 +
40 +# ...and all realnames in .gitlab-map-manual must also
41 +# exist in MAINTAINERS
42 +grep -v '^#' .gitlab-map-manual | \
43 +awk '{ $1 = ""; print substr($0, 2) }' | \
44 +while IFS= read -r NAME
45 +do
46 + grep -E "\s$NAME\s" MAINTAINERS >/dev/null
47 + if test $? != 0
48 + then
49 + echo "Unexpected real name '$NAME' is not a maintainer"
50 + fi
51 +done
scripts/gitlab-map-update new
+45
@@ -0,0 +1,45 @@
1 +#!/bin/sh
2 +# SPDX-License-Identifier: GPL-2.0-or-later
3 +
4 +echo "Checking authentication token status"
5 +glab auth status
6 +
7 +if test $? != 0
8 +then
9 + echo "ERROR: not authenticated with gitlab.com"
10 + exit 1
11 +fi
12 +
13 +if ! test -f .gitlab-map-auto
14 +then
15 + echo "ERROR: cannot find existing '.gitlab-map-auto file'"
16 + echo "ERROR: this must be executed from the root of the"
17 + echo "ERROR: git repository checkout"
18 + exit 1
19 +fi
20 +
21 +fail=0
22 +echo "Updating member list from qemu-project"
23 +glab api --paginate /groups/qemu-project/members | \
24 + jq -r -c '.[] | [.username, .name] | @tsv' | \
25 + grep -v '^group_3038080_bot' > \
26 + .gitlab-map-auto.tmp
27 +test $? != 0 && fail=1
28 +
29 +echo "Updating member list from qemu-project/qemu"
30 +glab api --paginate /projects/qemu-project%2fqemu/members | \
31 + jq -r -c '.[] | [.username, .name] | @tsv' | \
32 + grep -v 'Duo Developer' >> \
33 + .gitlab-map-auto.tmp
34 +test $? != 0 && fail=1
35 +
36 +if test $fail == 0
37 +then
38 + grep '^#' .gitlab-map-auto > .gitlab-map-auto.new
39 + LC_ALL=C sort .gitlab-map-auto.tmp | uniq >> .gitlab-map-auto.new
40 + mv .gitlab-map-auto.new .gitlab-map-auto
41 + echo "OK: GitLab member list updated"
42 +else
43 + echo "ERROR: Updating member list failed"
44 +fi
45 +rm -f .gitlab-map-auto.tmp