JiHu (JH) Edition에 대한 Merge Request 검토 지침

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

  • jh/ 내부
    • 이는 EE 리포지터리를 넘어서는 내용으로, 이 문서의 목적은 아닙니다.
  • jh/ 외부
    • 이러한 변경 사항은 EE 리포지터리에 있어야 하므로 EE 리포지터리의 리뷰어 및 유지 관리자가 리뷰하고 유지해야 합니다.
    • 이에는 Gitlab.jh?와 같은 코드가 들어 있으며, 이 코드는 ee/ 아래의 코드를 로드하는 방식과 유사하게 jh/ 아래의 코드를 로드하려고 시도합니다.
    • 이 문서는 jh/ 아래의 코드가 어떻게 보이는지에 대한 가이드이므로, jh/ 아래의 코드를 검색하기 위해 필요한 변경 사항을 더 잘 이해할 수 있도록합니다.
    • EE와 JH가 동일한 메커니즘을 공유할 수 있도록 하여 둘을 다르게 다룰 필요가 없게 합니다.
    • JH 에디션 실행을 지원하기 위해 필요한 데이터베이스 마이그레이션과 데이터베이스 스키마 변경에 대해 자세한 내용은 JiHu 데이터베이스 변경 가이드를 참조하십시오.

필요한 경우 JH 리포지터리에 위치한 해당 JH Merge Request을 검토하십시오.

GitLab Inc. 리포지터리에 파일 Merge 시기

jh/ 외부에 추가된 파일은 GitLab JH 리포지터리에 반영되어야 합니다.

GitLab Inc. 리포지터리에 추가된 코드가 (예: render_if_exists) GitLab Inc. 코드베이스에 존재하지 않는 GitLab JH 파일을 참조하는 경우, JiHu Merge Request 또는 파일 링크가 포함된 코멘트를 추가하십시오. 이는 해당 참조가 누락된 부분으로 오인되어 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 구성이 포함됩니다. 가끔씩 EE CI 구성을 업데이트하여 JH를 더 쉽게 사용자화해야 할 필요가 있습니다.

CE 또는 EE 특징을 기반으로 하는 JH 특징

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

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

예를 들어, 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 리포지터리에서 해당 파일을 찾을 수 있어야 합니다.

note
JH가 사용하지 않아야 하는 것을 덮어쓸 경우가 있고, 이 경우 해당 모듈에 prepend_mod를 추가하는 것도 괜찮습니다. 이 경우 해당 사용 여부와 더 이상 필요하지 않은 경우를 알 수 있도록 코멘트와 해당 JH 모듈 링크도 추가하십시오. 이렇게하면 사용되는 곳과 우리가 더 이상 필요하지 않을 수도 있는 때를 알 수 있으며, 우연히 JH를 깨뜨리지 않고 사용되지 않을 때만 제거하지 않게 됩니다. 이에 대한 예시는 다음과 같습니다.
# JiHu용으로 추가함
# https://jihulab.com/gitlab-cn/gitlab/-/blob/main-jh/jh/lib/jh/api/integrations.rb에서 사용됨
API::Integrations.prepend_mod

JiHu 확장 작성에 대한 일반 지침

일반적인 지침은 Enterprise Edition 기능 구현 가이드라인를 참조하십시오.