From 2daebc767415adc4cf2d2a391e17b75cc1590303 Mon Sep 17 00:00:00 2001 From: Philip Withnall Date: Wed, 27 Nov 2019 11:07:23 +0000 Subject: [PATCH] ci: Fix running all jobs on merge requests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Since we added `only: [merge_requests]` for the `style-check-diff` job, that started running detached pipelines only for merge requests and only containing that job, and not running the other jobs for merge requests (only for branches). That wasn’t the intention. Follow the guide on https://docs.gitlab.com/ee/ci/merge_request_pipelines/index.html#excluding-certain-jobs to ensure that all jobs (including `style-check-diff`) are run for merge requests. This means we can no longer unconditionally use `${CI_MERGE_REQUEST_TARGET_BRANCH_{NAME,SHA}}`, since they are only defined for jobs which are running against a merge request rather than a branch. Instead, use some `git rev-list` magic from https://stackoverflow.com/a/4991675/2931197 to find the newest common ancestor commit between the detached head that CI is running on, and the known or likely target branch. Do the style check against the diff between the newest common ancestor commit and the detached head. (Note that `${CI_MERGE_REQUEST_TARGET_BRANCH_SHA}` was never actually defined for any of our pipelines, since it’s only available for CI pipelines running on merged branches, which is a GitLab Premium feature. Oops, my bad.) In order to find the newest common ancestor commit, we need to pull the upstream remote, since the CI pipeline might be running on a fork of the main repository where various branches (particularly `master`) are out of date. Signed-off-by: Philip Withnall --- .gitlab-ci.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 367993c77..e3c18c952 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -21,13 +21,14 @@ variables: - tags style-check-diff: + <<: *only-default image: registry.gitlab.gnome.org/gnome/glib/debian-stable:v5 stage: style-check allow_failure: true - only: - - merge_request script: - - git diff -U0 --no-color ${CI_MERGE_REQUEST_TARGET_BRANCH_SHA} | ./clang-format-diff.py -binary "clang-format-7" -p1 + - git remote add upstream https://gitlab.gnome.org/GNOME/glib.git + - git fetch upstream + - git diff -U0 --no-color $(diff --old-line-format='' --new-line-format='' <(git rev-list --first-parent upstream/${CI_MERGE_REQUEST_TARGET_BRANCH_NAME:-${CI_DEFAULT_BRANCH}}) <(git rev-list --first-parent HEAD) | head -1) | ./clang-format-diff.py -binary "clang-format-7" -p1 fedora-x86_64: <<: *only-default