ci: Wait for cerbero pipeline to finish
authorThibault Saunier <tsaunier@igalia.com>
Mon, 27 Sep 2021 22:37:18 +0000 (19:37 -0300)
committerThibault Saunier <tsaunier@igalia.com>
Tue, 28 Sep 2021 13:58:25 +0000 (10:58 -0300)
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: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/946>

.gitlab-ci.yml
.indentignore
ci/gitlab/trigger_cerbero_pipeline.py [new file with mode: 0755]

index d47f619..a4a090c 100644 (file)
@@ -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/**/*
index 11ffdb9..cbbefa0 100644 (file)
@@ -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 (executable)
index 0000000..5e89135
--- /dev/null
@@ -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(".")
+