PR flags: adds support for running/pending state

This patch adds support for runinng state for Fedora CI.

It keeps only the recent flag around, so running transitions nicely
to complete/error state and vice versa (for reruns).

Resolves https://pagure.io/fedora-ci/general/issue/3

Signed-off-by: Miroslav Vadkerti <mvadkert@redhat.com>
This commit is contained in:
Miroslav Vadkerti 2019-01-09 14:29:06 +01:00
parent e42c8ddf0a
commit e803bad648
4 changed files with 49 additions and 18 deletions

View file

@ -1,5 +1,5 @@
--- ---
- name: buildsys.build.state.change - name: ci.pipeline.allpackages-pr.complete
hosts: localhost hosts: localhost
gather_facts: false gather_facts: false
@ -10,5 +10,5 @@
- debug: var=msg - debug: var=msg
roles: roles:
- {role: flag_ci_pr, msg: msg} - {role: flag_ci_pr, msg: msg, state: "running", seed_flag_ci_pr: seed_flag_ci_pr}

View file

@ -0,0 +1,14 @@
---
- name: ci.pipeline.allpackages-pr.package.running
hosts: localhost
gather_facts: false
vars_files:
- "/srv/private/vars_loopabull.yml"
tasks:
- debug: var=msg
roles:
- {role: flag_ci_pr, msg: msg, state: "running", seed_flag_ci_pr: seed_flag_ci_pr}

View file

@ -12,6 +12,7 @@ Authors: Pierre-Yves Chibon <pingou@pingoured.fr>
""" """
from __future__ import unicode_literals from __future__ import unicode_literals
import hashlib
import json import json
import os import os
import sys import sys
@ -19,11 +20,13 @@ import sys
import requests import requests
from requests.packages.urllib3.util import retry from requests.packages.urllib3.util import retry
def main(msg, pipeline_state='complete', seed='empty'):
def main(msg):
""" Check if the build was successful and if so, flag the commit in """ Check if the build was successful and if so, flag the commit in
pagure. pagure.
:param str msg: the fedmsg message body
:param str pipeline_state: state of the testing, one of 'complete'
or 'running'
""" """
timeout = (30, 30) timeout = (30, 30)
@ -37,16 +40,30 @@ def main(msg):
requests_session.mount( requests_session.mount(
'https://', requests.adapters.HTTPAdapter(max_retries=retry_conf)) 'https://', requests.adapters.HTTPAdapter(max_retries=retry_conf))
done_states = { if pipeline_state not in ['complete', 'running']:
'SUCCESS': {'api': 'success', 'human': 'passed'}, print("Pipeline state is not 'complete' or 'running'.")
'UNSTABLE': {'api': 'failure', 'human': 'failed'},
'FAILURE': {'api': 'error', 'human': 'errored'},
}
state = msg['status']
if state not in done_states:
print('Build is not in one of the expected status, ignoring')
return return
# test complete messages
if pipeline_state == 'complete':
done_states = {
'SUCCESS': {'api': 'success', 'human': 'passed'},
'UNSTABLE': {'api': 'failure', 'human': 'failed'},
'FAILURE': {'api': 'error', 'human': 'errored'},
}
state = msg['status']
if state not in done_states:
print('Build is not in one of the expected status, ignoring')
return
status = done_states[state]['api']
human_status = done_states[state]['human']
# test running messages
elif pipeline_state == 'running':
status = 'pending'
human_status = 'running'
pr_id = msg['rev'].partition('PR-')[2] pr_id = msg['rev'].partition('PR-')[2]
if not pr_id: if not pr_id:
print( print(
@ -54,12 +71,12 @@ def main(msg):
msg['rev']) msg['rev'])
return return
data = { data = {
'username': 'Fedora CI', 'username': 'Fedora CI',
'status': done_states[state]['api'], 'status': status,
'comment': 'Package tests: %s' % (done_states[state]['human']), 'comment': 'Package tests: %s' % human_status,
'url': msg['build_url'], 'url': msg['build_url'],
'uid': hashlib.md5(pr_id + seed).hexdigest()
} }
pagure_url = 'https://src.fedoraproject.org' pagure_url = 'https://src.fedoraproject.org'
@ -107,4 +124,4 @@ def main(msg):
if __name__ == '__main__': if __name__ == '__main__':
msg = sys.argv[1] msg = sys.argv[1]
msg = json.loads(msg) msg = json.loads(msg)
sys.exit(main(msg)) sys.exit(main(msg, sys.argv[2], sys.argv[3]))

View file

@ -5,7 +5,7 @@
mode: 0755 mode: 0755
- name: Run the script - name: Run the script
command: /usr/local/bin/flag_ci_pr.py {{ msg | to_json | quote }} command: /usr/local/bin/flag_ci_pr.py {{ msg | to_json | quote }} {{ state | quote }} {{ seed_flag_pr_ci | quote }}
register: output register: output
environment: environment:
API_TOKEN: "{{ api_token_flag_pr_ci }}" API_TOKEN: "{{ api_token_flag_pr_ci }}"