system-config/playbooks/zuul/bootstrap-test-review.yaml
Clark Boylan d14c8492b6 Switch Gerrit test Verified label function to NoBlock
After reading through the Gerrit code I'm beginning to think that not
setting a function has it default to MaxWithBlock and this doesn't get
rejected like an explicit setting of MaxWith Block. This means we may
not be properly exercising our new submit requirement rule for Verified.
Switch it to NoBlock explicitly to exercise the submit requirements.

Change-Id: I3296ba650c0c58326499604f1117916a990f0cf1
2023-03-08 00:18:05 +00:00

272 lines
9.7 KiB
YAML

- hosts: "review"
tasks:
- name: Wait for Gerrit to be up
uri:
url: http://localhost:8081/a/accounts/admin/sshkeys
method: GET
user: admin
password: secret
register: result
until: result.status == 200 and not result.redirected
delay: 1
retries: 120
- name: Create openstack-project-creator user
uri:
url: http://localhost:8081/a/accounts/openstack-project-creator
method: PUT
user: admin
password: secret
body_format: json
body:
username: 'openstack-project-creator'
name: 'Project Creator'
email: 'project.creator@example.com'
http_password: 'secret'
groups:
- Administrators
status_code: 201
- name: Create CI group
uri:
url: 'http://localhost:8081/a/groups/CI-tools'
method: PUT
user: admin
password: secret
body_format: json
body:
description: 'Continuous Integration Tools'
status_code: 201
- name: Create Zuul user
uri:
url: http://localhost:8081/a/accounts/zuul
method: PUT
user: admin
password: secret
body_format: json
body:
name: 'Zuul'
email: 'zuul@example.com'
http_password: 'secret'
status_code: 201
- name: Add Zuul to group
uri:
url: 'http://localhost:8081/a/groups/CI-tools/members/zuul'
method: PUT
user: admin
password: secret
status_code: 201
- name: Get group UUID
uri:
url: 'http://localhost:8081/a/groups/CI-tools'
method: GET
user: admin
password: secret
status_code: 200
return_content: yes
register: group_raw
- name: Debug serialized json
debug:
var: group_raw
- name: Deserialize returned data to internal variable.
set_fact:
# The first 4 bytes of the returned data are )]}' which is
# invalid json.
group_json: '{{ group_raw.content | regex_replace("^....", "") | from_json }}'
- name: Debug deserialized json
debug:
var: group_json
- name: Setup key and initial gerrit config
shell:
executable: /bin/bash
cmd: |
set -xe
ssh-keygen -t ed25519 -f /root/.ssh/id_25519 -P ""
curl -X POST --user "admin:secret" -H "Content-Type: text/plain" -d@/root/.ssh/id_25519.pub http://localhost:8081/a/accounts/admin/sshkeys
git config --global user.name "Admin"
git config --global user.email "admin@example.com"
git clone http://admin:secret@localhost:8081/a/All-Projects
pushd All-Projects
echo "{{ group_json.id }} CI-tools" >> groups # noqa 203
git commit -a -m "Add CI-tools group"
git push origin HEAD:refs/meta/config
cat >> project.config << EOF
[label "Verified"]
function = NoBlock
value = -2 Fails
value = -1 Doesn't seem to work
value = 0 No score
value = +1 Works for me
value = +2 Verified
[submit-requirement "Verified"]
description = CI result votes. Maximum required to merge and is provided by the Zuul's gate queue.
submittableIf = label:Verified=MAX AND -label:Verified=MIN
canOverrideInChildProjects = false
[access "refs/heads/*"]
label-Verified = -2..+2 group CI-tools
EOF
git commit -a -m 'Update All-Project configuration'
git push origin HEAD:refs/meta/config
popd
# openstack-project-creator bootstrapping
curl -X POST --user "openstack-project-creator:secret" -H "Content-Type: text/plain" -d@/home/gerrit2/review_site/etc/ssh_project_rsa_key.pub http://localhost:8081/a/accounts/openstack-project-creator/sshkeys
# This is helpful on a held node when you're trying to fix/enhance
# the Zuul summary plugin. You can build it locally, scp the new
# .jar to /tmp and run this to deploy your changes.
- name: Create summary plugin helper script
shell:
executable: /bin/bash
cmd: |
set -xe
cat > /root/deploy-zuul-results-summary.sh << EOF
#!/bin/bash
echo "Copying plugin"
docker cp /tmp/zuul-results-summary.jar \
gerrit-compose_gerrit_1:/var/gerrit/plugins/
echo "Reloading"
ssh -i /root/.ssh/id_25519 -p 29418 admin@localhost \
gerrit plugin reload zuul-results-summary
echo "Done"
EOF
chmod a+x /root/deploy-zuul-results-summary.sh
- name: Create temp dir for project creation
shell: mktemp -d
register: project_tmp
- name: Create project project in Gerrit
uri:
url: http://localhost:8081/a/projects/y%2Ftestproject
method: PUT
user: admin
password: secret
status_code: 201
- name: Create initial commit and change in testproject
shell:
executable: /bin/sh
chdir: "{{ project_tmp.stdout }}"
cmd: |
set -x
git init .
cat >.gitreview <<EOF
[gerrit]
host=localhost
port=29418
project=y/testproject
EOF
git add .gitreview
git commit -m "Initial commit"
git remote add gerrit http://admin:secret@localhost:8081/y/testproject
git push -f --set-upstream gerrit +HEAD:master
curl -Lo .git/hooks/commit-msg http://localhost:8081/tools/hooks/commit-msg
chmod u+x .git/hooks/commit-msg
cat >file-1.txt <<EOF
Hello, this is a file
EOF
git add file-1.txt
git commit -m "Sample review 1"
git push gerrit HEAD:refs/for/master
cat >file-2.txt <<EOF
Hello, this is a file
EOF
git add file-2.txt
git commit -m "Sample review 2"
git push gerrit HEAD:refs/for/master
cat >file-3.txt <<EOF
Hello, this is a file
EOF
git add file-3.txt
git commit -m "Sample review 3"
git push gerrit HEAD:refs/for/master
- name: Post a sample failure review
uri:
url: 'http://localhost:8081/a/changes/{{ item }}/revisions/1/review'
method: POST
user: zuul
password: secret
body_format: json
body:
tag: 'autogenerated:zuul:check'
labels:
'Verified': -2
message: |
Build failed (check pipeline). For information on how to proceed, see
https://docs.opendev.org/opendev/infra-manual/latest/developers.html#automated-testing
- test-success https://zuul.opendev.org/t/openstack/build/00b1ce7d5d994339a54dd8142a6813a6 : SUCCESS in {{ range(1, 59) | random }}m 22s
- test-failure https://zuul.opendev.org/t/openstack/build/00b1ce7d5d994339a54dd8142a6813a6 : FAILURE in {{ range(1, 59) | random }}m 22s
- test-retry-limit https://zuul.opendev.org/t/openstack/build/20efbb1b6983453884103e9628a70942 : RETRY_LIMIT in {{ range(1, 59) | random }}m 24s
- test-skipped https://zuul.opendev.org/t/openstack/build/None : SKIPPED
- test-aborted https://zuul.opendev.org/t/openstack/build/bc4a4559645b4088a9f8586c043c4764 : ABORTED in {{ range(1, 59) | random }}m 19s
- test-merger-failure https://zuul.opendev.org/t/openstack/build/cb469750b250430b95a02697931d6030 : MERGER_FAILURE in {{ range(1, 59) | random }}m 14s
- test-node-failure https://zuul.opendev.org/t/openstack/build/0897fafc9652480794652fc49e3c9baf : NODE_FAILURE in {{ range(1, 59) | random }}m 48s
- test-timed-out https://zuul.opendev.org/t/openstack/build/57c4eb5174554cbfbb06fd9118eb1ae4 : TIMED_OUT in {{ range(1, 59) | random }}m 37s (non-voting)
- test-post-failure https://zuul.opendev.org/t/openstack/build/30afb96669fe4f19b6215e79615ecd90 : POST_FAILURE in {{ range(1, 59) | random }}m 58s
- test-config-error https://zuul.opendev.org/t/openstack/build/76c69b8062284d959a85b55bc460f822 : CONFIG_ERROR in {{ range(1, 59) | random }}m 27s
- test-disk-full https://zuul.opendev.org/t/openstack/build/0897fafc9743580794652fc49e3c9baf : DISK_FULL in {{ range(1, 59) | random }}m 48s
- test-error https://zuul.opendev.org/t/openstack/build/0897bedc9743580794652fc49e3c1234 : ERROR This is an error message in {{ range(1, 59) | random }}m 32s
loop:
- 1
- 2
- 3
- name: Post a sample good review in another pipeline
uri:
url: 'http://localhost:8081/a/changes/{{ item }}/revisions/1/review'
method: POST
user: zuul
password: secret
body_format: json
body:
tag: 'autogenerated:zuul:check-secondary'
message: |
Build succeeded (Secondary pipeline).
- test-second-ci https://zuul.opendev.org/t/openstack/build/f9c14856bf4e485089ca8fc8f00f324b : SUCCESS in {{ range(1, 59) | random}}m 11s
loop:
- 1
- 2
- 3
# NOTE(ianw) we do an add/delete/add cycle as we've seen issues
# with duplicate updates causing problems before; e.g.
# https://gerrit-review.googlesource.com/c/gerrit/+/312602
- name: Post a file review to confirm accountPatchDb connection
uri:
url: 'http://localhost:8081/a/changes/y%2Ftestproject~1/revisions/1/files/file-1.txt/reviewed'
method: '{{ item[0] }}'
user: admin
password: secret
status_code: '{{ item[1] }}'
loop:
- [ PUT, 201 ]
- [ DELETE, 204 ]
- [ PUT, 201 ]