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

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

  • jh/ 내부
    • 이는 EE 저장소를 초과하며 이 문서의 의도가 아닙니다.
  • jh/ 외부
    • 이것들은 EE 저장소에 있어야 하므로 EE 저장소의 리뷰어와 유지 보수자가 리뷰하고 유지보수해야 합니다. Gitlab.jh?와 같은 코드들과 ee/ 아래 코드를 로드하는 방식을 로드하는 코드와 같이 여기에 속합니다.
    • 이 문서는 jh/ 아래 코드를 찾아야 하는 경우 필요한 변경 사항을 이해할 수 있게 하는 것이 목적입니다.
    • 이것을 일반화하여 EE 및 JH가 동일한 메커니즘을 공유할 수 있게 하면 처리하는 방법이 다르지 않아도 됩니다.
    • JH 에디션 실행에 필요한 데이터베이스 마이그레이션 및 데이터베이스 스키마 변경 사항. 자세한 내용은 JiHu 데이터베이스 변경 가이드 을 참조하세요.

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

GitLab Inc. 저장소로 파일 병합 시기

jh/ 외부에서 GitLab 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 기능과 일치합니다.

더 자세한 내용은 Extend CE features with EE backend code를 참조하세요.

예를 들어, ‘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 모듈을 사용하는 링크를 명시하세요. 이렇게 함으로써 어디에서 사용되는지 알 수 있으며, 우리가 더 이상 필요하지 않은 경우에는 그것을 제거하기 위한 것이 아니기에 실수로 JH를 망가뜨리지 않게 됩니다. 이에 대한 예제는 다음과 같습니다:

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

JH 확장 기능 작성을 위한 일반 지침

일반적인 지침은 Enterprise Edition 기능 구현 가이드라인을 참조하세요.