ci: Fix running all jobs on merge requests
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