Skip to content

ci: Fix running all jobs on merge requests

Philip Withnall requested to merge pwithnall/glib:ci-fix into master

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 withnall@endlessm.com

Edited by Philip Withnall

Merge request reports