CI Job: 检测 MR 中只包含 jh/ 目录的代码修改

极狐GitLab 的源码都统一放置在极狐GitLab 仓库(即:JH repo)中的 jh 目录下。类似于 GitLab EE 是对 CE 的扩展一样,极狐GitLab 是对 GitLab CE/EE 的扩展。

为了避免 JH repo 中 CE/EE 部分的代码和 Upstream repo 分叉,在 JH repo 中创建的 MR(即:JH MR)只能向 main-jh 分支中的 jh 目录提交代码,如需修改jh 目录之外的代码,则需要在 Upstream repo 中创建 MR(Upstream MR)来完成。

在 JH 的 Pipeline 有专门 job 检查 只改动了 jh/ 目录下的代码,该 job 只在 JH MR 里面运行,巧妙的通过 git diff 命令检测代码改动,代码如下:

only-jh-check:
  stage: test
  extends:
    - .minimal-job
  rules:
    - if: $CI_MERGE_REQUEST_IID
  script:
    - git fetch origin ${CI_DEFAULT_BRANCH}
    - git diff --name-only origin/${CI_DEFAULT_BRANCH}... -- jh > jh-changes
    - git diff --name-only origin/${CI_DEFAULT_BRANCH}... > all-changes
    - non_jh_changes=$(diff jh-changes all-changes | sed 's/> /* /' | grep '* ') || true
    - |
      if test -n "${non_jh_changes}"; then
        echo -e "\e[31mChanges in the following files should be brought to upstream:\e[0m"
        echo "${non_jh_changes}"
        exit $(echo "${non_jh_changes}" | wc -l - | cut -f1 -d' ')
      fi