JiHu (JH) Edition 관련 병합 요청 검토 지침

JH와 관련된 두 가지 종류의 변경 사항이 있습니다.

  • jh/ 내부
    • 이는 EE 저장소를 벗어나 이 문서의 목적이 아닙니다.
  • jh/ 외부
    • 이러한 변경 사항은 EE 저장소에 있어야 하므로 EE 저장소의 리뷰어 및 유지보수자가 리뷰하고 유지해야 합니다.
    • 이에는 Gitlab.jh?와 같은 코드도 포함되며, 이는 마치 ee/ 하위의 코드를 로드하는 것처럼 jh/ 하위의 코드를 로드하도록 하는 방법입니다.
    • 이 문서는 jh/ 하위의 코드 검색에 필요한 변경 사항을 안내하기 위한 것으로, EE 및 JH가 동일한 메커니즘을 공유할 수 있도록 합니다.
    • JH 에디션 실행을 지원하기 위해 필요한 데이터베이스 마이그레이션 및 데이터베이스 스키마 변경사항에 대해 자세히는 JiHu 데이터베이스 변경 지침을 참조하세요.

필요한 경우, JH 저장소에 위치한 해당 JH 병합 요청을 검토하세요.

파일을 GitLab Inc. 저장소에 병합하는 시기

jh/ 외부에 추가된 파일은 반드시 GitLab Inc. 저장소에 반영되어야 합니다.

GitLab Inc. 저장소에 추가된 코드가 (예: render_if_exists) GitLab Inc. 코드베이스에 존재하지 않는 GitLab JH 파일을 참조하는 경우, JiHu 병합 요청 또는 파일에 대한 링크가 포함된 주석을 추가하세요. 이는 참조가 누락된 부분으로 오해되어 이후 gitlab 코드베이스에서 실수로 삭제되는 것을 방지하기 위한 것입니다.

프로세스 개요

다음 프로세스 가이드를 참조하세요:

jh/가 존재하지 않거나 EE_ONLY=1일 때 EE로서 동작

  • EE 저장소의 경우 jh/가 존재하지 않으므로 EE처럼 동작해야 합니다(라이선스가 없는 경우 CE로 동작).
  • JH 저장소의 경우 jh/가 존재하지만 EE_ONLY 환경 변수를 설정하여 EE 모드에서 실행될 수 있습니다.

FOSS_ONLY=1일 때 FOSS로서 동작

  • JH 저장소의 경우 jh/가 존재하지만 FOSS_ONLY 환경 변수를 설정하여 FOSS(CE) 모드에서 실행될 수 있습니다.

JH 컨텍스트의 CI 파이프라인

EE 저장소에는 jh/ 디렉토리가 없으므로 EE 저장소에서 JH 파이프라인을 실행할 수 있는 방법이 없습니다. 모든 JH 테스트는 JH 저장소로 이동해야 합니다.

최상위 JH CI 구성은 jh/.gitlab-ci.yml에 있으며(EE 저장소에는 없음) 이것은 EE CI 구성을 포함할 것입니다. 때로는 JH를 위해 EE CI 구성을 더 쉽게 사용하도록 업데이트하는 것이 필요합니다.

CE 또는 EE 기능을 기반으로 하는 JH 기능

기존 CE/EE 기능을 기반으로 하는 기능에 대해선 CE/EE 클래스/모듈에 주입된 JH 네임스페이스의 모듈이 필요합니다. 이는 EE 기능과 일치합니다.

자세한 내용은 EE 백엔드 코드로 CE 기능 확장을 참조하세요.

예를 들어, User 클래스에 모듈을 앞쪽에 추가하려면 다음과 같은 방법을 사용합니다:

class User < ActiveRecord::Base
  # ... 여기에 많은 코드가 있습니다 ...
end

User.prepend_mod

EE 환경에서 User.prepend_mod는 다음을 시도할 것입니다:

  • EE 모듈을 로드

JH 환경에서 User.prepend_mod는 다음을 시도할 것입니다:

  • EE 모듈을 로드하고:
  • JH 모듈을 로드

prepend, extend, include와 같은 메서드를 사용하지 마세요. 대신 prepend_mod, extend_mod, 또는 include_mod를 사용하세요. 이러한 메서드는 수신 모듈의 이름으로 관련된 EE 및 JH 모듈을 찾으려고 할 것입니다.

해당 JH 파일을 검토해야 하는 경우, JH 저장소에서 찾을 수 있어야 합니다.

참고: 일부 경우에 JH에서는 우리가 필요로 하지 않은 것을 재정의해야 하는 경우가 있으며, 이 경우 해당 모듈에 prepend_mod를 추가하는 것도 괜찮습니다. 이렇게 하면 우리가 그것을 사용하지 않을 때만 삭제하지 않고 실수로 JH를 망가뜨리지 않게 됩니다. 이에 대한 예시:

# JiHu에서 추가됨
# https://jihulab.com/gitlab-cn/gitlab/-/blob/main-jh/jh/lib/jh/api/integrations.rb에서 사용됨
API::Integrations.prepend_mod

JH 확장을 작성하는 일반 지침

일반적인 안내에 대해서는 기업용 에디션 기능 구현 가이드라인을 참조하세요.