JiHu (JH) Edition 관련 Merge Request 검토 지침

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

  • jh/ 내부
    • 이것은 EE 리포지터리를 넘어서며, 이 문서의 취지와 일치하지 않습니다.
  • jh/ 외부
    • 이러한 변경 사항은 EE 리포지터리에 있어야 하므로, EE 리포지터리의 리뷰어와 유지보수자가 리뷰하고 유지보수해야 합니다.
      • 이에는 Gitlab.jh?와 같이 jh/ 아래 코드를 로드하려는 코드가 포함됩니다. 우리가 ee/ 아래 코드를 로드하는 것처럼, jh/ 아래 코드를 로드하기 위해 필요한 변경 사항을 이 문서가 안내합니다.
    • 우리는 EE 및 JH 모두가 동일한 메커니즘을 공유할 수 있도록 이를 일반화할 것입니다. 그러면 둘을 다르게 다룰 필요가 없게 됩니다.
    • JH 에디션 실행을 지원하기 위해 필요한 데이터베이스 마이그레이션 및 데이터베이스 스키마 변경에 대해 자세한 내용은 JiHu 데이터베이스 변경 지침을 참조하세요.

필요한 경우, JH 리포지터리에 있는 해당 JH Merge Request을 확인하세요.

파일을 GitLab Inc. 리포지터리에 Merge하는 시점

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

GitLab Inc. 리포지터리에 추가된 코드가 (예: render_if_exists) 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 구성이 포함됩니다. 때로는 JH를 위해 EE CI 구성을 업데이트해야 할 필요가 있습니다.

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 모듈에 대한 링크를 추가하세요. 우연히 JH를 깨뜨리지 않도록 하기 위해 우리가 사용하지 않기 때문에 삭제하지 마세요. 이에 대한 예시:
# JiHu를 위해 추가됨
# https://jihulab.com/gitlab-cn/gitlab/-/blob/main-jh/jh/lib/jh/api/integrations.rb에서 사용됨
API::Integrations.prepend_mod

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

일반적인 지침은 기업용 기능 구현 지침을 참조하세요.