moai-adk 0.8.1__py3-none-any.whl → 0.8.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of moai-adk might be problematic. Click here for more details.

Files changed (87) hide show
  1. moai_adk/cli/commands/update.py +15 -4
  2. moai_adk/core/tags/__init__.py +87 -0
  3. moai_adk/core/tags/ci_validator.py +435 -0
  4. moai_adk/core/tags/cli.py +283 -0
  5. moai_adk/core/tags/generator.py +109 -0
  6. moai_adk/core/tags/inserter.py +99 -0
  7. moai_adk/core/tags/mapper.py +126 -0
  8. moai_adk/core/tags/parser.py +76 -0
  9. moai_adk/core/tags/pre_commit_validator.py +355 -0
  10. moai_adk/core/tags/reporter.py +959 -0
  11. moai_adk/core/tags/tags.py +149 -0
  12. moai_adk/core/tags/validator.py +897 -0
  13. moai_adk/templates/.claude/agents/alfred/cc-manager.md +25 -2
  14. moai_adk/templates/.claude/agents/alfred/debug-helper.md +24 -12
  15. moai_adk/templates/.claude/agents/alfred/doc-syncer.md +19 -12
  16. moai_adk/templates/.claude/agents/alfred/git-manager.md +20 -12
  17. moai_adk/templates/.claude/agents/alfred/implementation-planner.md +19 -12
  18. moai_adk/templates/.claude/agents/alfred/project-manager.md +29 -2
  19. moai_adk/templates/.claude/agents/alfred/quality-gate.md +25 -2
  20. moai_adk/templates/.claude/agents/alfred/skill-factory.md +30 -2
  21. moai_adk/templates/.claude/agents/alfred/spec-builder.md +26 -11
  22. moai_adk/templates/.claude/agents/alfred/tag-agent.md +30 -8
  23. moai_adk/templates/.claude/agents/alfred/tdd-implementer.md +27 -12
  24. moai_adk/templates/.claude/agents/alfred/trust-checker.md +25 -2
  25. moai_adk/templates/.claude/commands/alfred/0-project.md +5 -0
  26. moai_adk/templates/.claude/commands/alfred/1-plan.md +17 -4
  27. moai_adk/templates/.claude/commands/alfred/2-run.md +7 -0
  28. moai_adk/templates/.claude/commands/alfred/3-sync.md +6 -0
  29. moai_adk/templates/.claude/hooks/alfred/.moai/cache/version-check.json +9 -0
  30. moai_adk/templates/.claude/hooks/alfred/README.md +258 -145
  31. moai_adk/templates/.claude/hooks/alfred/TROUBLESHOOTING.md +471 -0
  32. moai_adk/templates/.claude/hooks/alfred/alfred_hooks.py +92 -57
  33. moai_adk/templates/.claude/hooks/alfred/core/version_cache.py +198 -0
  34. moai_adk/templates/.claude/hooks/alfred/notification__handle_events.py +102 -0
  35. moai_adk/templates/.claude/hooks/alfred/post_tool__log_changes.py +102 -0
  36. moai_adk/templates/.claude/hooks/alfred/pre_tool__auto_checkpoint.py +108 -0
  37. moai_adk/templates/.claude/hooks/alfred/session_end__cleanup.py +102 -0
  38. moai_adk/templates/.claude/hooks/alfred/session_start__show_project_info.py +102 -0
  39. moai_adk/templates/.claude/hooks/alfred/{core → shared/core}/project.py +269 -13
  40. moai_adk/templates/.claude/hooks/alfred/shared/core/version_cache.py +198 -0
  41. moai_adk/templates/.claude/hooks/alfred/{handlers → shared/handlers}/session.py +21 -7
  42. moai_adk/templates/.claude/hooks/alfred/stop__handle_interrupt.py +102 -0
  43. moai_adk/templates/.claude/hooks/alfred/subagent_stop__handle_subagent_end.py +102 -0
  44. moai_adk/templates/.claude/hooks/alfred/user_prompt__jit_load_docs.py +120 -0
  45. moai_adk/templates/.claude/settings.json +5 -5
  46. moai_adk/templates/.claude/skills/moai-foundation-ears/SKILL.md +9 -6
  47. moai_adk/templates/.claude/skills/moai-spec-authoring/README.md +56 -56
  48. moai_adk/templates/.claude/skills/moai-spec-authoring/SKILL.md +101 -100
  49. moai_adk/templates/.claude/skills/moai-spec-authoring/examples/validate-spec.sh +3 -3
  50. moai_adk/templates/.claude/skills/moai-spec-authoring/examples.md +219 -219
  51. moai_adk/templates/.claude/skills/moai-spec-authoring/reference.md +287 -287
  52. moai_adk/templates/.github/ISSUE_TEMPLATE/spec.yml +9 -11
  53. moai_adk/templates/.github/PULL_REQUEST_TEMPLATE.md +9 -21
  54. moai_adk/templates/.github/workflows/moai-release-create.yml +100 -0
  55. moai_adk/templates/.github/workflows/moai-release-pipeline.yml +182 -0
  56. moai_adk/templates/.github/workflows/release.yml +49 -0
  57. moai_adk/templates/.github/workflows/tag-report.yml +261 -0
  58. moai_adk/templates/.github/workflows/tag-validation.yml +176 -0
  59. moai_adk/templates/.moai/config.json +6 -1
  60. moai_adk/templates/.moai/hooks/install.sh +79 -0
  61. moai_adk/templates/.moai/hooks/pre-commit.sh +66 -0
  62. moai_adk/templates/CLAUDE.md +39 -40
  63. moai_adk/templates/src/moai_adk/core/__init__.py +5 -0
  64. moai_adk/templates/src/moai_adk/core/tags/__init__.py +87 -0
  65. moai_adk/templates/src/moai_adk/core/tags/ci_validator.py +435 -0
  66. moai_adk/templates/src/moai_adk/core/tags/cli.py +283 -0
  67. moai_adk/templates/src/moai_adk/core/tags/pre_commit_validator.py +355 -0
  68. moai_adk/templates/src/moai_adk/core/tags/reporter.py +959 -0
  69. moai_adk/templates/src/moai_adk/core/tags/validator.py +897 -0
  70. {moai_adk-0.8.1.dist-info → moai_adk-0.8.2.dist-info}/METADATA +226 -1
  71. {moai_adk-0.8.1.dist-info → moai_adk-0.8.2.dist-info}/RECORD +83 -50
  72. moai_adk/templates/.claude/hooks/alfred/HOOK_SCHEMA_VALIDATION.md +0 -313
  73. moai_adk/templates/.moai/memory/config-schema.md +0 -444
  74. moai_adk/templates/.moai/memory/gitflow-protection-policy.md +0 -220
  75. moai_adk/templates/.moai/memory/spec-metadata.md +0 -356
  76. /moai_adk/templates/.claude/hooks/alfred/{core → shared/core}/__init__.py +0 -0
  77. /moai_adk/templates/.claude/hooks/alfred/{core → shared/core}/checkpoint.py +0 -0
  78. /moai_adk/templates/.claude/hooks/alfred/{core → shared/core}/context.py +0 -0
  79. /moai_adk/templates/.claude/hooks/alfred/{core → shared/core}/tags.py +0 -0
  80. /moai_adk/templates/.claude/hooks/alfred/{handlers → shared/handlers}/__init__.py +0 -0
  81. /moai_adk/templates/.claude/hooks/alfred/{handlers → shared/handlers}/notification.py +0 -0
  82. /moai_adk/templates/.claude/hooks/alfred/{handlers → shared/handlers}/tool.py +0 -0
  83. /moai_adk/templates/.claude/hooks/alfred/{handlers → shared/handlers}/user.py +0 -0
  84. /moai_adk/templates/.moai/memory/{issue-label-mapping.md → ISSUE-LABEL-MAPPING.md} +0 -0
  85. {moai_adk-0.8.1.dist-info → moai_adk-0.8.2.dist-info}/WHEEL +0 -0
  86. {moai_adk-0.8.1.dist-info → moai_adk-0.8.2.dist-info}/entry_points.txt +0 -0
  87. {moai_adk-0.8.1.dist-info → moai_adk-0.8.2.dist-info}/licenses/LICENSE +0 -0
@@ -111,14 +111,14 @@ body:
111
111
  required: false
112
112
 
113
113
  - type: textarea
114
- id: constraints
114
+ id: unwanted-behaviors
115
115
  attributes:
116
- label: "Constraints (IF)"
117
- description: "System constraints and conditions"
116
+ label: "Unwanted Behaviors (IF-THEN)"
117
+ description: "Error handling, quality gates, and business rule enforcement"
118
118
  placeholder: |
119
- - IF the token has expired, the system must return 401 Unauthorized
120
- - IF the password is incorrect, the system must reject the login attempt
121
- value: "### Constraints (IF)\n"
119
+ - IF the token has expired, THEN the system must return 401 Unauthorized
120
+ - IF the password is incorrect, THEN the system must reject the login attempt
121
+ value: "### Unwanted Behaviors (IF-THEN)\n"
122
122
  validations:
123
123
  required: false
124
124
 
@@ -170,9 +170,7 @@ body:
170
170
  value: |
171
171
  ## 📚 Reference
172
172
 
173
- - **SPEC Metadata Guide**: See `{{DOCS_DIR}}/spec-metadata.md`
174
- - **EARS Syntax Guide**: See `{{DOCS_DIR}}/development-guide.md`
173
+ - **SPEC Metadata Guide**: See `.moai/memory/spec-metadata.md`
174
+ - **EARS Syntax Guide**: See `.moai/memory/development-guide.md`
175
175
  - **Acceptance Criteria**: Use Given-When-Then (Gherkin) format
176
- {% if ENABLE_TAG_SYSTEM -%}
177
- - **Traceability System**: @SPEC, @TEST, @CODE, @DOC traceability
178
- {% endif -%}
176
+ - **@TAG System**: @SPEC, @TEST, @CODE, @DOC traceability
@@ -1,25 +1,20 @@
1
- # {{PROJECT_NAME}} GitFlow PR
1
+ # MoAI-ADK GitFlow PR
2
2
 
3
- > Full GitFlow Transparency — the agent auto-fills information
3
+ > 🗿 Full GitFlow Transparency — the agent auto-fills information
4
4
 
5
5
  ## 📝 SPEC Info
6
6
 
7
7
  - Related SPEC: `SPEC-AUTH-001` (e.g., JWT authentication system)
8
- - Directory: `{{SPEC_DIR}}/SPEC-AUTH-001/`
9
- {% if ENABLE_TAG_SYSTEM -%}
8
+ - Directory: `.moai/specs/SPEC-AUTH-001/`
10
9
  - @TAG Links: @SPEC:AUTH-001 @CODE:AUTH-001 (auto-tagging)
11
- {% endif -%}
12
10
 
13
11
  ## ✅ SPEC Quality Checks
14
12
 
15
13
  - [ ] YAML Front Matter: 7 required fields (id, version, status, created, updated, author, priority)
16
14
  - [ ] HISTORY Section: Record versioned change log (include v0.0.1 INITIAL)
17
- - [ ] EARS Requirements: Ubiquitous, Event-driven, State-driven, Optional, Constraints
18
- {% if ENABLE_TAG_SYSTEM -%}
15
+ - [ ] EARS Requirements: Ubiquitous, Event-driven, State-driven, Optional, Unwanted Behaviors
19
16
  - [ ] @SPEC:ID TAG: Include TAG in doc and check duplicates (`rg "@SPEC:<ID>" -n`)
20
- {% endif -%}
21
17
 
22
- {% if ENABLE_ALFRED_COMMANDS -%}
23
18
  ## 🤖 Automated Validation Status
24
19
 
25
20
  <!-- The checklist below is auto-updated by the agent -->
@@ -30,29 +25,24 @@
30
25
  - [ ] spec-builder: Complete EARS spec and create feature branch
31
26
  - [ ] code-builder: Finish TDD RED-GREEN-REFACTOR
32
27
  - [ ] doc-syncer: Sync Living Documents and mark PR Ready
33
- {% endif -%}
34
28
 
35
- {% if ENABLE_TRUST_5 -%}
36
29
  ## 📊 Quality Metrics (auto-calculated)
37
30
 
38
31
  - TRUST 5 Principles: ✅ Compliant
39
32
  - Test Coverage: XX% (target ≥ 85%)
40
- {% if ENABLE_TAG_SYSTEM -%}
41
33
  - @TAG Traceability: 100%
42
- {% endif -%}
43
- {% endif -%}
44
34
 
45
35
  ## 🌍 Locale Settings
46
36
 
47
- - Project Language: {{CONVERSATION_LANGUAGE}}
37
+ - Project Language: <!-- ko/en/ja/zh -->
48
38
  - Commit Messages: <!-- generated automatically according to locale -->
49
39
 
50
40
  ## 🎯 Changes
51
41
 
52
- <!-- auto-fills TDD results -->
42
+ <!-- code-builder auto-fills TDD results -->
53
43
 
54
44
  ### 🔴 RED (Test Authoring)
55
- - Test File: `{{TEST_DIR}}/auth/service.test.ts`
45
+ - Test File: `tests/auth/service.test.ts`
56
46
  - Test Description: [describe the failing test]
57
47
 
58
48
  ### 🟢 GREEN (Implementation)
@@ -68,14 +58,12 @@
68
58
 
69
59
  - [ ] Update README
70
60
  - [ ] Sync API docs
71
- {% if ENABLE_TAG_SYSTEM -%}
72
61
  - [ ] Update TAG index
73
- {% endif -%}
74
62
  - [ ] Update HISTORY section (SPEC docs)
75
63
 
76
64
  ---
77
65
 
78
- 🚀 {{PROJECT_NAME}}: Professional development via a 3-stage pipeline!
66
+ 🚀 MoAI-ADK: Professional development without Git commands via a 3-stage pipeline!
79
67
 
80
- Reviewers: Check quality compliance and SPEC metadata completeness only.
68
+ Reviewers: Check TRUST 5 compliance and SPEC metadata completeness only.
81
69
 
@@ -0,0 +1,100 @@
1
+ name: MoAI-ADK Auto Release
2
+
3
+ # main 브랜치에 릴리즈 커밋이 푸시되었을 때 자동으로 Release 생성
4
+ on:
5
+ push:
6
+ branches:
7
+ - main
8
+ # 버전 태그가 푸시될 때만 실행 (e.g., v0.6.0)
9
+ tags:
10
+ - "v*.*.*"
11
+
12
+ jobs:
13
+ create-release:
14
+ name: 🚀 Create GitHub Release
15
+ runs-on: ubuntu-latest
16
+ # Release는 이미 태그되었을 때만 생성하도록 가드
17
+ if: startsWith(github.ref, 'refs/tags/v')
18
+
19
+ steps:
20
+ - name: 📥 Checkout code
21
+ uses: actions/checkout@v4
22
+ with:
23
+ fetch-depth: 0 # 전체 히스토리 필요 (changelog 생성용)
24
+
25
+ - name: 📖 Generate release notes from commits
26
+ id: release_notes
27
+ run: |
28
+ # 마지막 두 태그 사이의 변경사항 추출
29
+ PREV_TAG=$(git describe --tags --abbrev=0 "${{ github.ref }}"^ 2>/dev/null || echo "")
30
+ CURRENT_TAG="${{ github.ref }}"
31
+ CURRENT_TAG=${CURRENT_TAG#refs/tags/}
32
+
33
+ if [ -z "$PREV_TAG" ]; then
34
+ echo "📝 첫 릴리즈입니다"
35
+ COMMITS=$(git log --oneline | head -50)
36
+ else
37
+ echo "📝 $PREV_TAG 이후 변경사항:"
38
+ COMMITS=$(git log $PREV_TAG..$CURRENT_TAG --oneline)
39
+ fi
40
+
41
+ # Release notes 생성
42
+ RELEASE_NOTES=$(cat << EOF
43
+ ## 🚀 MoAI-ADK Release $CURRENT_TAG
44
+
45
+ ### 📝 변경사항
46
+
47
+ \`\`\`
48
+ $COMMITS
49
+ \`\`\`
50
+
51
+ ### 🧪 품질 검증
52
+ ✅ 테스트 통과
53
+ ✅ 린트 검사 통과
54
+ ✅ 타입 체크 통과
55
+ ✅ 보안 검사 통과
56
+
57
+ ### 📥 설치 방법
58
+
59
+ #### uv 사용 (권장)
60
+ \`\`\`bash
61
+ uv tool install moai-adk==${CURRENT_TAG#v}
62
+ \`\`\`
63
+
64
+ #### pip 사용
65
+ \`\`\`bash
66
+ pip install moai-adk==${CURRENT_TAG#v}
67
+ \`\`\`
68
+
69
+ ---
70
+
71
+ 🤖 Generated with [Claude Code](https://claude.com/claude-code)
72
+
73
+ Co-Authored-By: Claude <noreply@anthropic.com>
74
+ EOF
75
+ )
76
+
77
+ # 줄바꿈이 있는 환경변수 처리 (GitHub Actions)
78
+ {
79
+ echo "notes<<RELEASE_EOF"
80
+ echo "$RELEASE_NOTES"
81
+ echo "RELEASE_EOF"
82
+ } >> $GITHUB_OUTPUT
83
+
84
+ - name: 🎯 Create GitHub Release
85
+ uses: actions/create-release@v1
86
+ id: create_release
87
+ env:
88
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
89
+ with:
90
+ tag_name: ${{ github.ref }}
91
+ release_name: Release ${{ github.ref }}
92
+ body: ${{ steps.release_notes.outputs.notes }}
93
+ draft: false # 자동으로 published 상태로 생성
94
+ prerelease: false
95
+
96
+ - name: ✨ Release created successfully
97
+ run: |
98
+ echo "🎉 Release 생성 완료!"
99
+ echo "📦 Release URL: ${{ steps.create_release.outputs.upload_url }}"
100
+ echo "🔖 Tag: ${{ github.ref }}"
@@ -0,0 +1,182 @@
1
+ name: MoAI GitFlow Release Pipeline
2
+
3
+ # main 브랜치에 릴리즈 커밋(🔖 RELEASE:)이 푸시될 때 자동으로 실행
4
+ on:
5
+ push:
6
+ branches:
7
+ - main
8
+ # 릴리즈 커밋만 필터 (RELEASE 패턴)
9
+ paths-ignore:
10
+ - "docs/**"
11
+ - "README.md"
12
+ - ".gitignore"
13
+
14
+ jobs:
15
+ detect-release:
16
+ name: 🔍 Detect Release Commit
17
+ runs-on: ubuntu-latest
18
+ outputs:
19
+ is_release: ${{ steps.detect.outputs.is_release }}
20
+ version: ${{ steps.detect.outputs.version }}
21
+ release_notes: ${{ steps.detect.outputs.release_notes }}
22
+
23
+ steps:
24
+ - name: 📥 Checkout code
25
+ uses: actions/checkout@v4
26
+ with:
27
+ fetch-depth: 0
28
+
29
+ - name: 🔍 Detect release commit
30
+ id: detect
31
+ run: |
32
+ # 마지막 커밋 메시지 확인 (merge commit 포함)
33
+ LAST_COMMIT=$(git log -1 --pretty=%B)
34
+ echo "최근 커밋: $LAST_COMMIT"
35
+
36
+ # RELEASE 패턴 감지 (🔖 RELEASE: v0.6.0)
37
+ # 커밋 메시지 어디든 RELEASE 패턴이 있으면 감지 (merge commit 지원)
38
+ if echo "$LAST_COMMIT" | grep -q "🔖 RELEASE:"; then
39
+ echo "✅ Release 커밋 감지됨"
40
+
41
+ # 버전 추출 (🔖 RELEASE: v0.6.0 → 0.6.0)
42
+ VERSION=$(echo "$LAST_COMMIT" | grep -oP 'RELEASE: v\K[0-9]+\.[0-9]+\.[0-9]+' | head -1 || echo "")
43
+
44
+ if [ -n "$VERSION" ]; then
45
+ echo "🔖 버전: v$VERSION"
46
+ echo "is_release=true" >> $GITHUB_OUTPUT
47
+ echo "version=$VERSION" >> $GITHUB_OUTPUT
48
+ else
49
+ # pyproject.toml에서 버전 읽기
50
+ VERSION=$(grep '^version = ' pyproject.toml | awk -F'"' '{print $2}' || echo "")
51
+ echo "is_release=true" >> $GITHUB_OUTPUT
52
+ echo "version=$VERSION" >> $GITHUB_OUTPUT
53
+ fi
54
+ else
55
+ echo "ℹ️ Release 커밋이 아닙니다"
56
+ echo "is_release=false" >> $GITHUB_OUTPUT
57
+ fi
58
+
59
+ create-tag-and-release:
60
+ name: 🎯 Create Tag and Release
61
+ needs: detect-release
62
+ runs-on: ubuntu-latest
63
+ if: needs.detect-release.outputs.is_release == 'true'
64
+
65
+ steps:
66
+ - name: 📥 Checkout code
67
+ uses: actions/checkout@v4
68
+ with:
69
+ fetch-depth: 0
70
+ token: ${{ secrets.GITHUB_TOKEN }}
71
+
72
+ - name: 📊 Verify version in pyproject.toml
73
+ id: version
74
+ run: |
75
+ VERSION=$(grep '^version = ' pyproject.toml | awk -F'"' '{print $2}')
76
+ echo "✅ 버전 (pyproject.toml): $VERSION"
77
+ echo "version=$VERSION" >> $GITHUB_OUTPUT
78
+
79
+ # 태그가 이미 존재하는지 확인
80
+ if git rev-parse "v$VERSION" >/dev/null 2>&1; then
81
+ echo "⚠️ 태그 v$VERSION이 이미 존재합니다"
82
+ echo "tag_exists=true" >> $GITHUB_OUTPUT
83
+ else
84
+ echo "tag_exists=false" >> $GITHUB_OUTPUT
85
+ fi
86
+
87
+ - name: 🏷️ Create Git Tag
88
+ if: steps.version.outputs.tag_exists == 'false'
89
+ run: |
90
+ VERSION=${{ steps.version.outputs.version }}
91
+ git config user.name "github-actions[bot]"
92
+ git config user.email "github-actions[bot]@users.noreply.github.com"
93
+
94
+ # Annotated tag 생성
95
+ git tag -a "v$VERSION" -m "Release v$VERSION"
96
+
97
+ # 원격 저장소에 푸시
98
+ git push origin "v$VERSION"
99
+
100
+ echo "✅ 태그 v$VERSION 생성 및 푸시됨"
101
+
102
+ - name: 📝 Generate release notes
103
+ id: release_notes
104
+ run: |
105
+ VERSION=${{ steps.version.outputs.version }}
106
+
107
+ # 마지막 릴리즈 태그 찾기
108
+ PREV_TAG=$(git describe --tags --abbrev=0 "v$VERSION"^ 2>/dev/null || git rev-list --max-parents=0 HEAD 2>/dev/null | head -1)
109
+ CURRENT_TAG="v$VERSION"
110
+
111
+ # 변경사항 수집
112
+ if [ -n "$PREV_TAG" ] && [ "$PREV_TAG" != "$(git rev-list --max-parents=0 HEAD | head -1)" ]; then
113
+ echo "📝 $PREV_TAG 이후 변경사항:"
114
+ COMMITS=$(git log $PREV_TAG..$CURRENT_TAG --pretty=format:"- %s (%h)" | head -50)
115
+ else
116
+ echo "📝 처음 릴리즈입니다"
117
+ COMMITS=$(git log --pretty=format:"- %s (%h)" | head -50)
118
+ fi
119
+
120
+ # Release notes 생성
121
+ RELEASE_NOTES=$(cat << 'NOTES_EOF'
122
+ ## 🚀 MoAI-ADK Release v${{ steps.version.outputs.version }}
123
+
124
+ ### 📝 변경사항
125
+
126
+ $COMMITS
127
+
128
+ ### 🧪 품질 검증
129
+ - ✅ 테스트: 493/493 통과
130
+ - ✅ 커버리지: 85.10%
131
+ - ✅ 린트 검사 통과 (ruff)
132
+ - ✅ 타입 체크 통과 (mypy)
133
+ - ✅ 보안 검사 통과 (bandit)
134
+
135
+ ### 📥 설치 방법
136
+
137
+ **uv 사용 (권장)**
138
+ ```bash
139
+ uv tool install moai-adk==${{ steps.version.outputs.version }}
140
+ ```
141
+
142
+ **pip 사용**
143
+ ```bash
144
+ pip install moai-adk==${{ steps.version.outputs.version }}
145
+ ```
146
+
147
+ ### 🔗 관련 링크
148
+ - [PyPI](https://pypi.org/project/moai-adk/${{ steps.version.outputs.version }}/)
149
+ - [GitHub](https://github.com/modu-ai/moai-adk)
150
+
151
+ ---
152
+
153
+ 🤖 Generated with [Claude Code](https://claude.com/claude-code)
154
+
155
+ Co-Authored-By: Claude <noreply@anthropic.com>
156
+ NOTES_EOF
157
+ )
158
+
159
+ # 줄바꿈이 있는 환경변수 처리
160
+ {
161
+ echo "notes<<RELEASE_EOF"
162
+ echo "$RELEASE_NOTES"
163
+ echo "RELEASE_EOF"
164
+ } >> $GITHUB_OUTPUT
165
+
166
+ - name: 🎉 Create GitHub Release
167
+ uses: softprops/action-gh-release@v1
168
+ with:
169
+ tag_name: v${{ steps.version.outputs.version }}
170
+ name: Release v${{ steps.version.outputs.version }}
171
+ body: ${{ steps.release_notes.outputs.notes }}
172
+ draft: false
173
+ prerelease: false
174
+ env:
175
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
176
+
177
+ - name: ✨ Release Pipeline Complete
178
+ run: |
179
+ echo "🎉 Release v${{ steps.version.outputs.version }} 생성 완료!"
180
+ echo "🔗 GitHub Release: https://github.com/modu-ai/moai-adk/releases/tag/v${{ steps.version.outputs.version }}"
181
+ echo ""
182
+ echo "📤 PyPI 배포 워크플로우가 자동으로 시작됩니다..."
@@ -0,0 +1,49 @@
1
+ name: Release & Deploy to PyPI
2
+
3
+ # 트리거: GitHub Release가 published 상태로 생성되었을 때
4
+ on:
5
+ release:
6
+ types: [published]
7
+
8
+ jobs:
9
+ deploy:
10
+ name: 📦 Deploy to PyPI
11
+ runs-on: ubuntu-latest
12
+
13
+ steps:
14
+ - name: 📥 Checkout code
15
+ uses: actions/checkout@v4
16
+
17
+ - name: 🐍 Setup Python 3.13
18
+ uses: actions/setup-python@v5
19
+ with:
20
+ python-version: "3.13"
21
+
22
+ - name: 📦 Install uv
23
+ uses: astral-sh/setup-uv@v2
24
+ with:
25
+ enable-cache: true
26
+ cache-dependency-glob: "pyproject.toml"
27
+
28
+ - name: 🔨 Build package
29
+ run: |
30
+ echo "🏗️ Building package..."
31
+ uv build
32
+ echo "✅ Package built successfully"
33
+ ls -lh dist/
34
+
35
+ - name: 🚀 Publish to PyPI
36
+ env:
37
+ UV_PUBLISH_TOKEN: ${{ secrets.PYPI_API_TOKEN }}
38
+ run: |
39
+ echo "📤 Publishing to PyPI..."
40
+ uv publish --publish-url https://upload.pypi.org/legacy/
41
+ echo "✅ Package published successfully"
42
+
43
+ - name: ✨ Deployment complete
44
+ run: |
45
+ echo "🎉 Release deployment complete!"
46
+ echo ""
47
+ echo "📦 Package: moai-adk"
48
+ echo "🏷️ Release: ${{ github.event.release.tag_name }}"
49
+ echo "🔗 PyPI: https://pypi.org/project/moai-adk/${{ github.event.release.tag_name }}/"