Skip to content

fix(release): Maven 메타데이터를 MIT 라이선스로 통일 - #52

Merged
HuitaePark merged 1 commit into
mainfrom
feat/issue-29-mit-license-metadata
Jul 27, 2026
Merged

fix(release): Maven 메타데이터를 MIT 라이선스로 통일#52
HuitaePark merged 1 commit into
mainfrom
feat/issue-29-mit-license-metadata

Conversation

@HuitaePark

Copy link
Copy Markdown
Member

변경 사항

  • 저장소의 MIT 라이선스에 맞춰 JReleaser와 7개 공개 모듈의 Maven POM 라이선스를 MIT로 통일했습니다.
  • 각 공개 아티팩트에 실제 역할을 반영한 설명을 지정했습니다.
  • 생성된 POM을 XML로 파싱해 라이선스, 프로젝트 URL, 조직·개발자, SCM 정보를 검증하는 verifyPublicationMetadata 태스크를 추가했습니다.
  • 공개 모듈 집합을 고정해 sample app이 publication에 포함되면 빌드가 실패하도록 했습니다.
  • README와 AGENTS의 라이선스 안내를 현재 상태에 맞췄습니다.

원인

루트 LICENSE와 README는 MIT였지만 공통 Maven publishing 설정은 Apache License 2.0을 선언해, 모든 배포 아티팩트의 POM에 잘못된 라이선스가 전파되고 있었습니다.

영향

Maven 소비자가 확인하는 라이선스와 저장소의 실제 라이선스가 일치합니다. 이후 metadata가 회귀하면 일반 checkbuild 단계에서 탐지됩니다.

검증

  • ./gradlew verifyPublicationMetadata
  • ./gradlew clean build jreleaserConfig
  • 테스트 98개, 실패 0개
  • 공개 모듈 7개 생성 POM의 MIT 라이선스와 모듈별 설명 확인

Closes #29

@coderabbitai

coderabbitai Bot commented Jul 27, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Summary by CodeRabbit

  • 문서

    • README의 라이선스 안내를 MIT License 링크와 함께 명확히 표시했습니다.
    • 릴리스 및 배포 메타데이터 기준을 문서화했습니다.
  • 개선 사항

    • 공개 모듈의 배포 정보와 라이선스 표기를 MIT 기준으로 통일했습니다.
    • 모듈별 설명과 릴리스 메타데이터를 일관되게 제공합니다.
    • 샘플 앱이 배포 대상에 포함되지 않도록 확인 절차를 강화했습니다.
  • 버그 수정

    • 잘못되거나 누락된 배포 메타데이터로 릴리스가 진행되는 문제를 자동 검증으로 방지합니다.

Walkthrough

Changes

MIT publication metadata alignment

Layer / File(s) Summary
MIT metadata contract
build.gradle, AGENTS.md, README.md
모듈별 POM description과 MIT 라이선스, organization, developer, 프로젝트 메타데이터를 갱신하고 관련 릴리스 문서와 README 라이선스 링크를 정리합니다.
Publication metadata verification
build.gradle
verifyPublicationMetadata가 7개 공개 모듈, 루트 LICENSE, 생성된 POM 필드와 샘플 앱의 비퍼블리시 상태를 검증하며 Gradle check에 연결됩니다.

Suggested reviewers: chokyungjin0504

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed 제목이 Maven POM 메타데이터를 MIT 라이선스로 정리한다는 핵심 변경을 정확히 요약합니다.
Description check ✅ Passed 설명은 라이선스 통일, POM 검증 태스크, 샘플 앱 제외, README/AGENTS 갱신 등 변경사항과 일치합니다.
Linked Issues check ✅ Passed 이슈 #29의 MIT 메타데이터 정합성, 7개 공개 모듈 적용, 구조화 검증, sample app 제외 요구를 모두 충족합니다.
Out of Scope Changes check ✅ Passed README와 AGENTS 갱신은 이슈 범위에 포함되며, 배포 메타데이터 정합성 외의 명백한 변경은 보이지 않습니다.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

Comment @coderabbitai help to get the list of available commands.

@gemini-code-assist

Copy link
Copy Markdown

Caution

The consumer version of Gemini Code Assist on GitHub has been sunset. All code review activity has officially ceased.

@HuitaePark
HuitaePark marked this pull request as ready for review July 27, 2026 02:01
@gemini-code-assist

Copy link
Copy Markdown

Caution

The consumer version of Gemini Code Assist on GitHub has been sunset. All code review activity has officially ceased.

@coderabbitai
coderabbitai Bot requested a review from chokyungjin0504 July 27, 2026 02:02
@HuitaePark
HuitaePark merged commit 922c0bf into main Jul 27, 2026
1 of 2 checks passed

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
build.gradle (1)

154-159: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

공개 대상 판단을 positive allowlist로 통일 권장.

현재 154행은 name != 'token-pilot-sample-app'(샘플 앱만 제외)로 maven-publish 적용 대상을 결정하고, 별도로 publishedModuleDescriptions 맵(7개 공개 모듈)을 진실의 원천으로 사용합니다. 두 판단 기준이 분리되어 있어, 향후 비공개용 서브프로젝트(예: 통합 테스트 모듈)가 추가되면 155-158행의 GradleException으로 빌드가 즉시 실패하는데, 이를 해결하는 가장 손쉬운 방법이 publishedModuleDescriptions에 설명을 추가하는 것이 되어버려 의도치 않게 해당 모듈이 실제로 배포되어 버릴 수 있습니다(274-347행의 verifyPublicationMetadata는 이 상태를 통과시킵니다). 조건을 publishedModuleDescriptions.containsKey(name) 기반으로 바꾸면 "공개 모듈 목록"의 단일 진실 공급원이 되어 이런 드리프트를 방지할 수 있습니다.

♻️ 제안 리팩터
-    if (name != 'token-pilot-sample-app') {
+    if (publishedModuleDescriptions.containsKey(name)) {
         description = publishedModuleDescriptions[name]
-        if (!description) {
-            throw new GradleException("Missing publication description for ${project.path}")
-        }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@build.gradle` around lines 154 - 159, Update the publication-target condition
in the Gradle configuration to use publishedModuleDescriptions.containsKey(name)
as the positive allowlist. Keep the existing description lookup and
missing-description validation for allowed modules, while ensuring projects
absent from the map are not configured for publication.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@build.gradle`:
- Around line 154-159: Update the publication-target condition in the Gradle
configuration to use publishedModuleDescriptions.containsKey(name) as the
positive allowlist. Keep the existing description lookup and missing-description
validation for allowed modules, while ensuring projects absent from the map are
not configured for publication.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: fd36065f-89cb-4533-848f-7ea21f8d28e7

📥 Commits

Reviewing files that changed from the base of the PR and between f0d196a and 51a217f.

📒 Files selected for processing (3)
  • AGENTS.md
  • README.md
  • build.gradle

@HuitaePark
HuitaePark removed the request for review from chokyungjin0504 July 27, 2026 04:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Release] MIT LICENSE와 Maven POM metadata 정합성 수정

1 participant