xref: /openbmc/openbmc-build-scripts/jenkins/userid-validation (revision 3c88e2d1b057226b3d6b3312bc253a4151d07022)
1*3c88e2d1SAndrew Geissler#!/bin/bash -e
2*3c88e2d1SAndrew Geissler#
3*3c88e2d1SAndrew Geissler# Purpose:
4*3c88e2d1SAndrew Geissler#  This script is responsible for determining the owner of a gerrit
5*3c88e2d1SAndrew Geissler#  commit, verifying they are within an approved gerrit group, and
6*3c88e2d1SAndrew Geissler#  then updating gerrit with that verification info.
7*3c88e2d1SAndrew Geissler#
8*3c88e2d1SAndrew Geissler# Note: It is assumed this script is run as a part of a jenkins job triggered
9*3c88e2d1SAndrew Geissler#       by the gerrit plugin. Therefore it assumes certain env variables
10*3c88e2d1SAndrew Geissler#       provided by that plugin are avialable (i.e. GERRIT_PROJECT, ...)
11*3c88e2d1SAndrew Geissler#
12*3c88e2d1SAndrew Geissler# Required Inputs:
13*3c88e2d1SAndrew Geissler#  SSH_KEY:  Path to private ssh key used to post messages to gerrit
14*3c88e2d1SAndrew Geissler
15*3c88e2d1SAndrew GeisslerGERRIT_COMMAND="curl -s --anyauth -n https://gerrit.openbmc-project.xyz"
16*3c88e2d1SAndrew Geissler
17*3c88e2d1SAndrew Geisslerecho "Checking ${GERRIT_PROJECT}:${GERRIT_BRANCH}:${GERRIT_CHANGE_ID}:${GERRIT_PATCHSET_REVISION}"
18*3c88e2d1SAndrew Geissler
19*3c88e2d1SAndrew GeisslerCOMMITTER_EMAIL=`${GERRIT_COMMAND}/a/changes/${GERRIT_PROJECT/\//%2F}~${GERRIT_BRANCH}~${GERRIT_CHANGE_ID}/revisions/${GERRIT_PATCHSET_REVISION}/commit | python2 -c "import sys, json; sys.stdin.read(4); print json.load(sys.stdin)['committer']['email']"`
20*3c88e2d1SAndrew Geisslerif [ "x${COMMITTER_EMAIL}" == "x" ]; then
21*3c88e2d1SAndrew Geissler    echo "Unable to find committer."
22*3c88e2d1SAndrew Geissler        ssh -o 'StrictHostKeyChecking no' -i $SSH_KEY -p 29418 jenkins-openbmc-ci@gerrit.openbmc-project.xyz gerrit review \
23*3c88e2d1SAndrew Geissler  ${GERRIT_CHANGE_NUMBER},${GERRIT_PATCHSET_NUMBER} --label=Ok-To-Test=0 --message=\'Unable to determine committer\'
24*3c88e2d1SAndrew Geissler    exit -1
25*3c88e2d1SAndrew Geisslerfi
26*3c88e2d1SAndrew Geissler
27*3c88e2d1SAndrew Geissler#echo "Commit by '${COMMITTER_EMAIL}'"
28*3c88e2d1SAndrew GeisslerCOMMITTER_USERNAME=`${GERRIT_COMMAND}/a/accounts/${COMMITTER_EMAIL} | python2 -c "import sys, json; sys.stdin.read(4); print json.load(sys.stdin)['username']"`
29*3c88e2d1SAndrew Geissler#COMMITTER_USERNAME=`${GERRIT_COMMAND}/a/accounts/${COMMITTER_EMAIL}`
30*3c88e2d1SAndrew Geisslerecho "USERNAME: $COMMITTER_USERNAME"
31*3c88e2d1SAndrew Geisslerif [ "x${COMMITTER_USERNAME}" == "x" ]; then
32*3c88e2d1SAndrew Geissler    echo "Unable to determine github user for ${COMMITTER_EMAIL}."
33*3c88e2d1SAndrew Geissler    ssh -o 'StrictHostKeyChecking no' -i $SSH_KEY -p 29418 jenkins-openbmc-ci@gerrit.openbmc-project.xyz gerrit review \
34*3c88e2d1SAndrew Geissler  ${GERRIT_CHANGE_NUMBER},${GERRIT_PATCHSET_NUMBER} --label=Ok-To-Test=0 --message=\'Unable to determine github user\'
35*3c88e2d1SAndrew Geissler    exit -1
36*3c88e2d1SAndrew Geisslerfi
37*3c88e2d1SAndrew Geissler
38*3c88e2d1SAndrew Geissler# Reset the vote to 0 so jenkins will detect a new +1 on retriggers
39*3c88e2d1SAndrew Geisslerssh -o 'StrictHostKeyChecking no' -i $SSH_KEY -p 29418 jenkins-openbmc-ci@gerrit.openbmc-project.xyz gerrit review \
40*3c88e2d1SAndrew Geissler  ${GERRIT_CHANGE_NUMBER},${GERRIT_PATCHSET_NUMBER} --label=Ok-To-Test=0 -t autogenerated:jenkins
41*3c88e2d1SAndrew Geissler
42*3c88e2d1SAndrew Geissler# Write full list of users to a file
43*3c88e2d1SAndrew Geisslerssh -o 'StrictHostKeyChecking no' -i $SSH_KEY -p 29418 jenkins-openbmc-ci@gerrit.openbmc-project.xyz gerrit \
44*3c88e2d1SAndrew Geissler    ls-members openbmc/ci-authorized --recursive > $WORKSPACE/users.txt
45*3c88e2d1SAndrew Geissler
46*3c88e2d1SAndrew Geisslerssh -o 'StrictHostKeyChecking no' -i $SSH_KEY -p 29418 jenkins-openbmc-ci@gerrit.openbmc-project.xyz gerrit \
47*3c88e2d1SAndrew Geissler    ls-members ampere/ci-authorized --recursive >> $WORKSPACE/users.txt
48*3c88e2d1SAndrew Geissler
49*3c88e2d1SAndrew Geisslerssh -o 'StrictHostKeyChecking no' -i $SSH_KEY -p 29418 jenkins-openbmc-ci@gerrit.openbmc-project.xyz gerrit \
50*3c88e2d1SAndrew Geissler    ls-members facebook/ci-authorized --recursive >> $WORKSPACE/users.txt
51*3c88e2d1SAndrew Geissler
52*3c88e2d1SAndrew Geisslerssh -o 'StrictHostKeyChecking no' -i $SSH_KEY -p 29418 jenkins-openbmc-ci@gerrit.openbmc-project.xyz gerrit \
53*3c88e2d1SAndrew Geissler    ls-members google/ci-authorized --recursive >> $WORKSPACE/users.txt
54*3c88e2d1SAndrew Geissler
55*3c88e2d1SAndrew Geisslerssh -o 'StrictHostKeyChecking no' -i $SSH_KEY -p 29418 jenkins-openbmc-ci@gerrit.openbmc-project.xyz gerrit \
56*3c88e2d1SAndrew Geissler    ls-members ibm/ci-authorized --recursive >> $WORKSPACE/users.txt
57*3c88e2d1SAndrew Geissler
58*3c88e2d1SAndrew Geisslerssh -o 'StrictHostKeyChecking no' -i $SSH_KEY -p 29418 jenkins-openbmc-ci@gerrit.openbmc-project.xyz gerrit \
59*3c88e2d1SAndrew Geissler    ls-members intel/ci-authorized --recursive >> $WORKSPACE/users.txt
60*3c88e2d1SAndrew Geissler
61*3c88e2d1SAndrew Geisslerssh -o 'StrictHostKeyChecking no' -i $SSH_KEY -p 29418 jenkins-openbmc-ci@gerrit.openbmc-project.xyz gerrit \
62*3c88e2d1SAndrew Geissler    ls-members inventec/ci-authorized --recursive >> $WORKSPACE/users.txt
63*3c88e2d1SAndrew Geissler
64*3c88e2d1SAndrew Geisslerssh -o 'StrictHostKeyChecking no' -i $SSH_KEY -p 29418 jenkins-openbmc-ci@gerrit.openbmc-project.xyz gerrit \
65*3c88e2d1SAndrew Geissler    ls-members nuvoton/ci-authorized --recursive >> $WORKSPACE/users.txt
66*3c88e2d1SAndrew Geissler
67*3c88e2d1SAndrew Geisslerssh -o 'StrictHostKeyChecking no' -i $SSH_KEY -p 29418 jenkins-openbmc-ci@gerrit.openbmc-project.xyz gerrit \
68*3c88e2d1SAndrew Geissler    ls-members quanta/ci-authorized --recursive >> $WORKSPACE/users.txt
69*3c88e2d1SAndrew Geissler
70*3c88e2d1SAndrew Geisslerssh -o 'StrictHostKeyChecking no' -i $SSH_KEY -p 29418 jenkins-openbmc-ci@gerrit.openbmc-project.xyz gerrit \
71*3c88e2d1SAndrew Geissler    ls-members yadro/ci-authorized --recursive >> $WORKSPACE/users.txt
72*3c88e2d1SAndrew Geissler
73*3c88e2d1SAndrew Geisslerssh -o 'StrictHostKeyChecking no' -i $SSH_KEY -p 29418 jenkins-openbmc-ci@gerrit.openbmc-project.xyz gerrit \
74*3c88e2d1SAndrew Geissler    ls-members inspur/ci-authorized --recursive >> $WORKSPACE/users.txt
75*3c88e2d1SAndrew Geissler
76*3c88e2d1SAndrew Geisslerssh -o 'StrictHostKeyChecking no' -i $SSH_KEY -p 29418 jenkins-openbmc-ci@gerrit.openbmc-project.xyz gerrit \
77*3c88e2d1SAndrew Geissler    ls-members wistron/ci-authorized --recursive >> $WORKSPACE/users.txt
78*3c88e2d1SAndrew Geissler
79*3c88e2d1SAndrew Geisslerssh -o 'StrictHostKeyChecking no' -i $SSH_KEY -p 29418 jenkins-openbmc-ci@gerrit.openbmc-project.xyz gerrit \
80*3c88e2d1SAndrew Geissler    ls-members hcl/ci-authorized --recursive >> $WORKSPACE/users.txt
81*3c88e2d1SAndrew Geissler
82*3c88e2d1SAndrew Geisslerssh -o 'StrictHostKeyChecking no' -i $SSH_KEY -p 29418 jenkins-openbmc-ci@gerrit.openbmc-project.xyz gerrit \
83*3c88e2d1SAndrew Geissler    ls-members rcs/ci-authorized --recursive >> $WORKSPACE/users.txt
84*3c88e2d1SAndrew Geissler
85*3c88e2d1SAndrew Geisslerssh -o 'StrictHostKeyChecking no' -i $SSH_KEY -p 29418 jenkins-openbmc-ci@gerrit.openbmc-project.xyz gerrit \
86*3c88e2d1SAndrew Geissler    ls-members wiwynn/ci-authorized --recursive >> $WORKSPACE/users.txt
87*3c88e2d1SAndrew Geissler
88*3c88e2d1SAndrew Geisslerssh -o 'StrictHostKeyChecking no' -i $SSH_KEY -p 29418 jenkins-openbmc-ci@gerrit.openbmc-project.xyz gerrit \
89*3c88e2d1SAndrew Geissler    ls-members hpe/ci-authorized --recursive >> $WORKSPACE/users.txt
90*3c88e2d1SAndrew Geissler
91*3c88e2d1SAndrew Geisslerssh -o 'StrictHostKeyChecking no' -i $SSH_KEY -p 29418 jenkins-openbmc-ci@gerrit.openbmc-project.xyz gerrit \
92*3c88e2d1SAndrew Geissler    ls-members individual/ci-authorized --recursive >> $WORKSPACE/users.txt
93*3c88e2d1SAndrew Geissler
94*3c88e2d1SAndrew Geisslerssh -o 'StrictHostKeyChecking no' -i $SSH_KEY -p 29418 jenkins-openbmc-ci@gerrit.openbmc-project.xyz gerrit \
95*3c88e2d1SAndrew Geissler    ls-members gager-in/ci-authorized --recursive >> $WORKSPACE/users.txt
96*3c88e2d1SAndrew Geissler
97*3c88e2d1SAndrew Geisslerssh -o 'StrictHostKeyChecking no' -i $SSH_KEY -p 29418 jenkins-openbmc-ci@gerrit.openbmc-project.xyz gerrit \
98*3c88e2d1SAndrew Geissler    ls-members amd/ci-authorized --recursive >> $WORKSPACE/users.txt
99*3c88e2d1SAndrew Geissler
100*3c88e2d1SAndrew Geisslerssh -o 'StrictHostKeyChecking no' -i $SSH_KEY -p 29418 jenkins-openbmc-ci@gerrit.openbmc-project.xyz gerrit \
101*3c88e2d1SAndrew Geissler    ls-members nvidia/ci-authorized --recursive >> $WORKSPACE/users.txt
102*3c88e2d1SAndrew Geissler
103*3c88e2d1SAndrew Geisslerssh -o 'StrictHostKeyChecking no' -i $SSH_KEY -p 29418 jenkins-openbmc-ci@gerrit.openbmc-project.xyz gerrit \
104*3c88e2d1SAndrew Geissler    ls-members bytedance/ci-authorized --recursive >> $WORKSPACE/users.txt
105*3c88e2d1SAndrew Geissler
106*3c88e2d1SAndrew Geisslerssh -o 'StrictHostKeyChecking no' -i $SSH_KEY -p 29418 jenkins-openbmc-ci@gerrit.openbmc-project.xyz gerrit \
107*3c88e2d1SAndrew Geissler    ls-members alibaba/ci-authorized --recursive >> $WORKSPACE/users.txt
108*3c88e2d1SAndrew Geissler
109*3c88e2d1SAndrew Geisslerssh -o 'StrictHostKeyChecking no' -i $SSH_KEY -p 29418 jenkins-openbmc-ci@gerrit.openbmc-project.xyz gerrit \
110*3c88e2d1SAndrew Geissler    ls-members supermicro/ci-authorized --recursive >> $WORKSPACE/users.txt
111*3c88e2d1SAndrew Geissler
112*3c88e2d1SAndrew Geissler# grep for the specific username word in the file
113*3c88e2d1SAndrew Geisslerif grep -q -w ${COMMITTER_USERNAME} $WORKSPACE/users.txt; then
114*3c88e2d1SAndrew Geissler    ssh -o 'StrictHostKeyChecking no' -i $SSH_KEY -p 29418 jenkins-openbmc-ci@gerrit.openbmc-project.xyz gerrit review \
115*3c88e2d1SAndrew Geissler      ${GERRIT_CHANGE_NUMBER},${GERRIT_PATCHSET_NUMBER} --label=Ok-To-Test=1 -t autogenerated:jenkins --message=\'User approved, CI ok to start\'
116*3c88e2d1SAndrew Geissler    exit 0
117*3c88e2d1SAndrew Geisslerfi
118*3c88e2d1SAndrew Geissler
119*3c88e2d1SAndrew Geisslerecho "${COMMITTER_USERNAME} is not on the approved list."
120*3c88e2d1SAndrew Geisslerssh -o 'StrictHostKeyChecking no' -i $SSH_KEY -p 29418 jenkins-openbmc-ci@gerrit.openbmc-project.xyz gerrit review \
121*3c88e2d1SAndrew Geissler  ${GERRIT_CHANGE_NUMBER},${GERRIT_PATCHSET_NUMBER} --label=Ok-To-Test=0 -t autogenerated:jenkins --message=\'User not approved, see admin, no CI\'
122*3c88e2d1SAndrew Geissler
123*3c88e2d1SAndrew Geisslerexit 0
124