From 37d7e9a22d6501b432b3fa6dea361a61c77124a2 Mon Sep 17 00:00:00 2001 From: Thibault Saunier Date: Mon, 27 Sep 2021 19:37:18 -0300 Subject: [PATCH] ci: Wait for cerbero pipeline to finish So we are sure the pipeline is marked as failed if the cerbero sub pipeline fails See https://gitlab.com/gitlab-org/gitlab/-/issues/341737 for details Part-of: --- .gitlab-ci.yml | 14 ++++--- .indentignore | 1 + ci/gitlab/trigger_cerbero_pipeline.py | 59 +++++++++++++++++++++++++++ 3 files changed, 68 insertions(+), 6 deletions(-) create mode 100755 ci/gitlab/trigger_cerbero_pipeline.py diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index d47f619a44..a4a090c75a 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -891,15 +891,17 @@ cerbero trigger: stage: build image: $FEDORA_IMAGE script: - - curl --request POST - --form token=${CI_JOB_TOKEN} - --form ref=main - --form "variables[CI_GSTREAMER_URL]=$CI_PROJECT_URL" - --form "variables[CI_GSTREAMER_REF_NAME]=$CI_COMMIT_REF_NAME" - https://gitlab.freedesktop.org/api/v4/projects/1340/trigger/pipeline + - python3 -m pip install --user python-gitlab + - ci/gitlab/trigger_cerbero_pipeline.py + + variables: + # Use GST_UPSTREAM_BRANCH + UPSTREAM_BRANCH: 'main' + rules: - changes: - .gitlab-ci.yml + - ci/gitlab/tigger_cerbero_pipeline.py - subprojects/gst-devtools/**/* - subprojects/gst-editing-services/**/* - subprojects/gst-libav/**/* diff --git a/.indentignore b/.indentignore index 11ffdb987f..cbbefa0427 100644 --- a/.indentignore +++ b/.indentignore @@ -3,3 +3,4 @@ subprojects/gstreamer-rs/ subprojects/gstreamer-rs-sys/ subprojects/gst-plugins-rs/ subprojects/gstreamer-sharp/ +subprojects/gst-integration-testsuites/medias diff --git a/ci/gitlab/trigger_cerbero_pipeline.py b/ci/gitlab/trigger_cerbero_pipeline.py new file mode 100755 index 0000000000..5e89135da4 --- /dev/null +++ b/ci/gitlab/trigger_cerbero_pipeline.py @@ -0,0 +1,59 @@ +#!/usr/bin/python3 + +import time +import os +import sys +import gitlab + +CERBERO_ID = 1340 + +class Status: + FAILED = 'failed' + MANUAL = 'manual' + CANCELED = 'canceled' + SUCCESS = 'success' + SKIPPED = 'skipped' + CREATED = 'created' + + @classmethod + def is_finished(cls, state): + return state in [ + cls.FAILED, + cls.MANUAL, + cls.CANCELED, + cls.SUCCESS, + cls.SKIPPED, + ] + + +def fprint(msg): + print(msg, end="") + sys.stdout.flush() + +if __name__ == "__main__": + gl = gitlab.Gitlab( + "https://gitlab.freedesktop.org/", + private_token=os.environ.get('GITLAB_API_TOKEN'), + job_token=os.environ.get('CI_JOB_TOKEN') + ) + + cerbero = gl.projects.get(CERBERO_ID) + pipe = cerbero.trigger_pipeline( + token=os.environ['CI_JOB_TOKEN'], + ref=os.environ["UPSTREAM_BRANCH"], + variables={ + "CI_GSTREAMER_URL": os.environ["CI_PROJECT_URL"], + "CI_GSTREAMER_REF_NAME": os.environ["CI_COMMIT_REF_NAME"], + } + ) + + fprint(f'Cerbero pipeline running at {pipe.web_url} ') + while True: + time.sleep(15) + pipe.refresh() + if Status.is_finished(pipe.status): + fprint(f": {pipe.status}\n") + sys.exit(0 if pipe.status == Status.SUCCESS else 1) + else: + fprint(".") +