Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
112 commits
Select commit Hold shift + click to select a range
d7872f7
[FEAT] 메인 레이아웃 구현
DDINGJOO Jan 6, 2026
5f8211e
Merge pull request #19 from Language-Study-Prooject/feature/1/2/6/log…
DDINGJOO Jan 6, 2026
c0f1a72
[FEAT] Sidebar 메뉴 계층 구조 개선
DDINGJOO Jan 6, 2026
3de5b6b
[FEAT] 면접 시뮬레이션 메뉴 제거
DDINGJOO Jan 6, 2026
6bdb2b5
[FEAT] 프리토킹(사람들과) 채팅방 리스트 페이지 구현
DDINGJOO Jan 6, 2026
7b29d50
Merge pull request #27 from Language-Study-Prooject/feature/24/25/26/…
DDINGJOO Jan 6, 2026
6f3ed4e
[FEAT] Sidebar 메뉴 카테고리 구조 변경
DDINGJOO Jan 6, 2026
3c7d786
[FEAT] Dashboard 카드 카테고리 구조 변경
DDINGJOO Jan 6, 2026
aeb3e5e
[FEAT] Dashboard 카드 호버 시 하위 카테고리 표시
DDINGJOO Jan 6, 2026
c3e1729
[FIX] Dashboard 카드 레이아웃 Grid로 변경
DDINGJOO Jan 6, 2026
0c9a8cc
Merge pull request #30 from Language-Study-Prooject/feature/28/menu-c…
DDINGJOO Jan 6, 2026
b5ee18f
[FEAT] ChatRoomCard 높이 일정하게 변경
DDINGJOO Jan 6, 2026
26ce9b0
[FIX] ChatRoomCard 가로/세로 크기 통일
DDINGJOO Jan 6, 2026
37ea06a
[FIX] ChatRoomCard 고정 높이 적용
DDINGJOO Jan 6, 2026
4402051
[FIX] ChatRoomCard 참여자 프로필 제거 및 너비 고정
DDINGJOO Jan 6, 2026
db07f45
[FIX] ChatRoomCard 레이아웃 개선
DDINGJOO Jan 6, 2026
f06bfae
[FIX] 생성일 라벨 추가
DDINGJOO Jan 6, 2026
34dc7dd
[FEAT] ChatRoomCard UI 개선
DDINGJOO Jan 6, 2026
c758b49
[FEAT] 채팅방 입장 모달 및 필터 추가
DDINGJOO Jan 6, 2026
0a47451
Merge pull request #32 from Language-Study-Prooject/fix/31/chatroom-c…
DDINGJOO Jan 6, 2026
d59ea7f
[FEAT] Chat API 연동 기반 구축
DDINGJOO Jan 6, 2026
379820f
[FEAT] 채팅방 목록/생성/입장 API 연동 및 채팅 UI 구현
DDINGJOO Jan 6, 2026
4d1cc2a
[FEAT] 전역 채팅 모달 및 TTS 기능 구현
DDINGJOO Jan 6, 2026
1a0bf22
Merge pull request #46 from Language-Study-Prooject/feature/40/41/42/…
DDINGJOO Jan 6, 2026
9792cd3
[FIX] 채팅 모달 최소화 시 우측 하단 이동
DDINGJOO Jan 6, 2026
bc76986
Merge pull request #48 from Language-Study-Prooject/fix/47/chat-modal…
DDINGJOO Jan 6, 2026
c9b4e35
[FEAT] TTS 음성 선택 기능 구현
DDINGJOO Jan 6, 2026
7fa39ad
Merge pull request #50 from Language-Study-Prooject/feature/49/tts-vo…
DDINGJOO Jan 6, 2026
6185619
[CR] TTS API 변경 대응 (#53)
DDINGJOO Jan 7, 2026
442a8e5
Merge pull request #54 from Language-Study-Prooject/feature/53/tts-ap…
DDINGJOO Jan 7, 2026
03ac906
[FIX] 채팅 모달 최소화 후 펼칠 때 스크롤 맨 아래로 유지 (#55)
DDINGJOO Jan 7, 2026
74cb7aa
Merge pull request #56 from Language-Study-Prooject/fix/55/chat-modal…
DDINGJOO Jan 7, 2026
002b09d
[FEAT] Vocab API 서비스 레이어 구축 (#58) (#99)
DDINGJOO Jan 7, 2026
6407921
[FEAT] 단어 학습 대시보드 구현 (#59) (#100)
DDINGJOO Jan 7, 2026
d47a214
[FEAT] 일일 학습 (플래시카드) 구현 (#60) (#101)
DDINGJOO Jan 7, 2026
839a8f8
[FEAT] 단어 시험 기능 구현 (#61) (#102)
DDINGJOO Jan 7, 2026
677cbe6
[FEAT] 단어장 (Word List) 기능 구현 (#62) (#104)
DDINGJOO Jan 7, 2026
cc202b3
[FEAT] 학습 통계 페이지 구현 (#63) (#105)
DDINGJOO Jan 7, 2026
b12178a
[FEAT] 단어장 학습 통계 및 UI/UX 개선 (#57, #63) (#106)
DDINGJOO Jan 13, 2026
13e07ad
feat(grammar): 문법 검사 페이지 UI 구현 (#120)
DDINGJOO Jan 14, 2026
e7b58b4
[FEAT] 배지 시스템 구현 (#121, #122) (#126)
DDINGJOO Jan 14, 2026
2c62035
[FEAT] 문법 교정 채팅 스트리밍 UI 구현 (#128) (#130)
DDINGJOO Jan 14, 2026
98fbd24
[FEAT] Grammar WebSocket 스트리밍 서비스 구현 (#127) (#129)
DDINGJOO Jan 14, 2026
541cb4c
feature : jira issue, PR 연동 workflow 작성 (#131)
hye-inA Jan 14, 2026
8dd84c1
refactor : jira issue, pr workflow refactorting (#133)
hye-inA Jan 14, 2026
4478095
[REFACTOR] Adjust code formatting for improved readability and consis…
DDINGJOO Jan 15, 2026
c8f53c2
feat : issue 수정/병합시 JIra에 반영 workflow 코드 추가 (#134)
hye-inA Jan 15, 2026
7232732
refactor : Update Jira Issue 단계 환경변수 설정 리팩토링 (#140)
hye-inA Jan 15, 2026
659fc05
Merge branch 'main' into develop
hye-inA Jan 15, 2026
edee86b
refactor : issue 본문 특수문자 에러 수정 (#145)
hye-inA Jan 15, 2026
3450857
feat(freetalk): 채팅방 투명도 조절 기능 구현 (#150) (#152)
DDINGJOO Jan 15, 2026
8d8dd16
feat(freetalk): 채팅방 투명도 조절 기능 구현 (#154)
DDINGJOO Jan 15, 2026
2ab86ed
feat : 로그인 기능 구현 및 JWT 토큰 관리 (#155)
hye-inA Jan 16, 2026
020817c
refactor : 본문에 특수문자 에러 처리 (#156)
hye-inA Jan 16, 2026
3e22587
feat : 회원가입 UI 구현 (#157)
hye-inA Jan 16, 2026
db0fafc
[FEAT] Real-time chat WebSocket integration and related enhancements …
DDINGJOO Jan 16, 2026
67326e8
[FIX] 채팅 메시지 중복 표시 버그 수정 (#161)
DDINGJOO Jan 16, 2026
036cec1
[FIX] 게임 시작 버튼이 WebSocket 명령어와 동일하게 동작하도록 수정 (#160)
DDINGJOO Jan 16, 2026
d290c1d
feat : 회원가입, 이메일 인증 UI 및 기능, 상태관리 추가 (#162)
hye-inA Jan 16, 2026
4634b58
fix : 회원가입 페이지 에러 수정 (#163)
hye-inA Jan 16, 2026
3f380e9
[REFACTOR] Standardize import formatting and spacing across components
DDINGJOO Jan 16, 2026
92cff27
[FIX] 캐치마인드 게임 라운드 전환 및 WebSocket 이벤트 처리 개선 (#165) (#166)
DDINGJOO Jan 20, 2026
74fcd7a
[FIX] Update game state management and remove redundant `/skip` logic
DDINGJOO Jan 20, 2026
0b0706e
[STYLE] Update color scheme for consistency and better visual appeal
DDINGJOO Jan 20, 2026
f7a55db
[FEAT] Implement lobby and gameplay pages for Catchmind (#187)
DDINGJOO Jan 21, 2026
4e00acd
[FEAT] Implement lobby and gameplay pages for Catchmind
DDINGJOO Jan 21, 2026
6f1b59b
[STYLE] Add comprehensive dark mode CSS support
DDINGJOO Jan 22, 2026
c8d4ca6
[STYLE] Adjust dark theme colors for better contrast
DDINGJOO Jan 22, 2026
43b06b1
[STYLE] Add dark mode background support to MainLayout
DDINGJOO Jan 22, 2026
bb30b47
[STYLE] Unify header dark mode background color
DDINGJOO Jan 22, 2026
5dff41e
[STYLE] Unify navigation dropdown dark mode colors
DDINGJOO Jan 22, 2026
9258795
[STYLE] Add dark mode support to Footer
DDINGJOO Jan 22, 2026
79da057
[STYLE] Add dark mode support to GameChat component
DDINGJOO Jan 22, 2026
df055cd
[STYLE] Add dark mode support to WaitingChat component
DDINGJOO Jan 22, 2026
de9c889
[FIX] Add client-side filtering for game room list
DDINGJOO Jan 22, 2026
c82ced3
[REFACTOR] Remove game features from chat room page
DDINGJOO Jan 22, 2026
d6bb517
[FIX] Clear error state on successful WebSocket connection
DDINGJOO Jan 22, 2026
cc2450b
[STYLE] Improve dark mode support in VocabDashboard
DDINGJOO Jan 22, 2026
5ba00d0
[FEAT] Implement lobby and gameplay pages for Catchmind
DDINGJOO Jan 22, 2026
2dae08d
[REFACTOR] Remove hardcoded fallback URLs from services
DDINGJOO Jan 22, 2026
f790d36
[FIX] Add fallback to VITE_API_URL for chat and vocab APIs (#188)
DDINGJOO Jan 22, 2026
c059442
Release: 뉴스 영어 학습 및 주요 기능 업데이트 (#192)
DDINGJOO Jan 23, 2026
bc58205
[Feat] : AI 프리토킹(Speaking) 기능 구현 (#195)
hye-inA Jan 23, 2026
e05a12b
[Feat] : AI 프리토킹(Speaking) 기능 구현 (#195) (#196)
hye-inA Jan 23, 2026
52ceba7
[FEAT] SSE 기반 실시간 알림 시스템 연동 (#197) (#198)
DDINGJOO Jan 24, 2026
232f3c9
fix : 연속 선언된 변수 t 제거 (#199)
hye-inA Jan 24, 2026
39c2c5d
Merge branch 'prod' into develop
hye-inA Jan 24, 2026
6e55ec1
fix : 연속 선언된 변수 t 제거 (#201)
hye-inA Jan 24, 2026
05e7928
refactor : AI 말하기 routing 페이지 수정 (#202)
hye-inA Jan 24, 2026
f4114e0
Merge branch 'prod' into develop
hye-inA Jan 24, 2026
3944fc1
refactor : AI 말하기 routing 페이지 수정 (#203)
hye-inA Jan 24, 2026
02ebaa2
refactor : AI 말하기 routing 페이지 수정 (#203)
hye-inA Jan 24, 2026
f8ea2ed
[FEAT] 채팅 슬래시 명령어 시스템 구현 (#200) (#204)
DDINGJOO Jan 24, 2026
ba1cc05
[FEAT] 영어 끝말잇기(Word Chain) 게임 구현 (#205) (#206)
DDINGJOO Jan 24, 2026
d979845
[FIX] 채팅 슬래시 명령어 버그 수정 (#207)
DDINGJOO Jan 24, 2026
44fa7d9
refactor : 로그인/인증 로직 정상화 및 채팅 서버 연결 및 메인 화면 헤더 프로필 상태 표시 (#208)
hye-inA Jan 25, 2026
100c283
[FIX] 끝말잇기 게임 버그 수정 및 UI 개선 (#210)
DDINGJOO Jan 25, 2026
36d3c01
[FIX] 끝말잇기 게임 버그 수정 및 UI 개선 (#211)
DDINGJOO Jan 25, 2026
74f6fa3
[FIX] 끝말잇기 게임 버그 수정 및 UI 개선 (#211)
DDINGJOO Jan 25, 2026
ee93158
feat : 사용자 프로필 닉네임 표시 구현 (#212)
hye-inA Jan 25, 2026
83a9a18
feature : 채팅 화면 컴포넌트에 닉네임 필드 추가 (#213)
hye-inA Jan 26, 2026
43eb0f5
Feature : OPIc 모의고사 테스트 진행(녹음/제출) 및 세션 완료 기능 구현 (#216)
hye-inA Jan 27, 2026
956b6e0
featrue : OPIC 말하기연습 전체 세션에 대한 피드백 리포트 화면 구현 (#218)
hye-inA Jan 27, 2026
7cc571b
[STYLE] Adjust formatting for improved readability and consistency
DDINGJOO Jan 28, 2026
e092df6
Merge origin/prod into develop - resolve conflicts
DDINGJOO Jan 28, 2026
eb3dda8
Release: develop → prod 배포 (#219)
DDINGJOO Jan 28, 2026
59bbfc9
fix: 채팅 시스템 명령어 및 투표 UI 표시 버그 수정
DDINGJOO Jan 28, 2026
2d3ff35
fix: 투표 결과 및 투표 알림 메시지 표시 추가
DDINGJOO Jan 28, 2026
00bc0e0
debug: 시스템 명령어 로그 추가 및 displayText 추출 개선
DDINGJOO Jan 28, 2026
5009ae2
debug: system_command 케이스 로그 추가
DDINGJOO Jan 28, 2026
089c88d
debug: poll end 메시지 추가 로그
DDINGJOO Jan 28, 2026
7d5d2ec
Merge branch 'prod' into develop - resolve conflicts
DDINGJOO Jan 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 84 additions & 0 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
name: Deploy to AWS S3 + CloudFront

on:
push:
branches:
- prod
pull_request:
branches:
- prod
types: [closed]
workflow_dispatch: # 수동 실행 가능

env:
AWS_REGION: ap-northeast-2
S3_BUCKET: ${{ secrets.S3_BUCKET_NAME }}
CLOUDFRONT_DISTRIBUTION_ID: ${{ secrets.CLOUDFRONT_DISTRIBUTION_ID }}

jobs:
build-and-deploy:
runs-on: ubuntu-latest
# PR이 머지되었을 때만 실행 (closed + merged)
if: github.event_name == 'push' || github.event_name == 'workflow_dispatch' || (github.event_name == 'pull_request' && github.event.pull_request.merged == true)

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'

- name: Install dependencies
run: npm ci

- name: Build project
run: npm run build
env:
VITE_API_URL: ${{ secrets.VITE_API_URL }}
VITE_WS_URL: ${{ secrets.VITE_WS_URL }}
VITE_GRAMMAR_WS_URL: ${{ secrets.VITE_GRAMMAR_WS_URL }}
VITE_AWS_REGION: ${{ secrets.VITE_AWS_REGION }}
VITE_COGNITO_REGION: ${{ secrets.VITE_AWS_REGION }}
VITE_USER_POOL_ID: ${{ secrets.VITE_USER_POOL_ID }}
VITE_USER_POOL_CLIENT_ID: ${{ secrets.VITE_USER_POOL_CLIENT_ID }}
VITE_COGNITO_POOL_ID: ${{ secrets.VITE_USER_POOL_ID }}
VITE_COGNITO_CLIENT_ID: ${{ secrets.VITE_USER_POOL_CLIENT_ID }}
VITE_APP_ENV: production
VITE_USE_MOCK: false

- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ env.AWS_REGION }}

- name: Deploy to S3
run: |
aws s3 sync dist/ s3://${{ env.S3_BUCKET }} \
--delete \
--cache-control "public, max-age=31536000" \
--exclude "index.html" \
--exclude "*.json"

# index.html과 JSON은 캐시하지 않음
aws s3 cp dist/index.html s3://${{ env.S3_BUCKET }}/index.html \
--cache-control "no-cache, no-store, must-revalidate"

# manifest.json 등
aws s3 sync dist/ s3://${{ env.S3_BUCKET }} \
--exclude "*" \
--include "*.json" \
--cache-control "no-cache"

- name: Invalidate CloudFront cache
run: |
aws cloudfront create-invalidation \
--distribution-id ${{ env.CLOUDFRONT_DISTRIBUTION_ID }} \
--paths "/*"

- name: Deployment complete
run: echo "Deployment to S3 and CloudFront completed successfully!"
81 changes: 49 additions & 32 deletions .github/workflows/github-jira-issue-sync.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ name: Issue-Jira Sync

on:
issues:
types: [opened, reopened, edited, closed ]
types: [ opened, reopened, edited, closed ]

workflow_dispatch:
inputs:
process_all_open_issues:
Expand Down Expand Up @@ -126,34 +126,51 @@ jobs:
if: steps.check-jira.outputs.result == 'false'
id: description
uses: actions/github-script@v7
env:
TEMPLATE_TYPE: ${{ steps.parse.outputs.template_type }}
ISSUE_URL: ${{ github.event.issue.html_url }}
ISSUE_AUTHOR: ${{ github.event.issue.user.login }}
FIELD_GOAL: ${{ steps.parse.outputs.goal }}
FIELD_SCOPE: ${{ steps.parse.outputs.scope }}
FIELD_BREAKDOWN: ${{ steps.parse.outputs.breakdown }}
FIELD_BACKGROUND: ${{ steps.parse.outputs.background }}
FIELD_AC: ${{ steps.parse.outputs.ac }}
FIELD_DESIGN: ${{ steps.parse.outputs.design }}
FIELD_PARENT: ${{ steps.parse.outputs.parent }}
FIELD_CHANGE: ${{ steps.parse.outputs.change }}
FIELD_IMPACT: ${{ steps.parse.outputs.impact }}
FIELD_TIMEBOX: ${{ steps.parse.outputs.timebox }}
FIELD_QUESTIONS: ${{ steps.parse.outputs.questions }}
with:
script: |
const templateType = '${{ steps.parse.outputs.template_type }}';
const templateType = process.env.TEMPLATE_TYPE || 'task';
const issueUrl = process.env.ISSUE_URL || '';
const author = process.env.ISSUE_AUTHOR || '';

let desc = `h3. GitHub Issue\n${{ github.event.issue.html_url }}\n\nh3. Author\n${{ github.event.issue.user.login }}\n\n`;
let desc = 'h3. GitHub Issue\n' + issueUrl + '\n\nh3. Author\n' + author + '\n\n';

switch (templateType) {
case 'epic':
desc += `h3. 목표\n${{ steps.parse.outputs.goal }}\n\n`;
desc += `h3. 범위\n${{ steps.parse.outputs.scope }}\n\n`;
desc += `h3. 하위 스토리\n${{ steps.parse.outputs.breakdown }}\n`;
desc += 'h3. 목표\n' + (process.env.FIELD_GOAL || '-') + '\n\n';
desc += 'h3. 범위\n' + (process.env.FIELD_SCOPE || '-') + '\n\n';
desc += 'h3. 하위 스토리\n' + (process.env.FIELD_BREAKDOWN || '-') + '\n';
break;
case 'story':
desc += `h3. 배경\n${{ steps.parse.outputs.background }}\n\n`;
desc += `h3. 수용 기준(AC)\n${{ steps.parse.outputs.ac }}\n\n`;
desc += `h3. 디자인\n${{ steps.parse.outputs.design }}\n`;
desc += 'h3. 배경\n' + (process.env.FIELD_BACKGROUND || '-') + '\n\n';
desc += 'h3. 수용 기준(AC)\n' + (process.env.FIELD_AC || '-') + '\n\n';
desc += 'h3. 디자인\n' + (process.env.FIELD_DESIGN || '-') + '\n';
break;
case 'cr':
desc += `h3. 제안 변경 사항\n${{ steps.parse.outputs.change }}\n\n`;
desc += `h3. 영향도\n${{ steps.parse.outputs.impact }}\n`;
desc += 'h3. 제안 변경 사항\n' + (process.env.FIELD_CHANGE || '-') + '\n\n';
desc += 'h3. 영향도\n' + (process.env.FIELD_IMPACT || '-') + '\n';
break;
case 'spike':
desc += `h3. 타임박스\n${{ steps.parse.outputs.timebox }}\n\n`;
desc += `h3. 핵심 질문\n${{ steps.parse.outputs.questions }}\n`;
desc += 'h3. 타임박스\n' + (process.env.FIELD_TIMEBOX || '-') + '\n\n';
desc += 'h3. 핵심 질문\n' + (process.env.FIELD_QUESTIONS || '-') + '\n';
break;
default: // task
desc += `h3. 연결된 Story/Epic\n${{ steps.parse.outputs.parent }}\n\n`;
desc += `h3. 작업 범위\n${{ steps.parse.outputs.scope }}\n`;
default:
desc += 'h3. 연결된 Story/Epic\n' + (process.env.FIELD_PARENT || '-') + '\n\n';
desc += 'h3. 작업 범위\n' + (process.env.FIELD_SCOPE || '-') + '\n';
}

core.setOutput('content', desc);
Expand Down Expand Up @@ -289,11 +306,12 @@ jobs:
JIRA_BASE_URL: ${{ secrets.JIRA_BASE_URL }}
JIRA_API_TOKEN: ${{ secrets.JIRA_API_TOKEN }}
JIRA_USER_EMAIL: ${{ secrets.JIRA_USER_EMAIL }}
DESC_JSON: ${{ steps.parse.outputs.description }}
with:
script: |
const jiraKey = '${{ steps.get-jira-key.outputs.jira_key }}';
const issue = context.payload.issue;
const descContent = ${{ steps.parse.outputs.description }};
const descContent = JSON.parse(process.env.DESC_JSON);

const response = await fetch(
`${process.env.JIRA_BASE_URL}/rest/api/3/issue/${jiraKey}`,
Expand Down Expand Up @@ -456,7 +474,7 @@ jobs:
})
}
);

# 기존 이슈 일괄 처리
sync-all-open-issues:
if: github.event_name == 'workflow_dispatch'
Expand Down Expand Up @@ -486,45 +504,45 @@ jobs:
repo: context.repo.repo,
issue_number: issue.number
});

const hasJiraLink = comments.data.some(c => c.body.includes('Jira:'));
if (hasJiraLink) {
console.log(`Issue #${issue.number} already has Jira link, skipping`);
continue;
}

console.log(`Processing Issue #${issue.number}: ${issue.title}`);

const labels = issue.labels.map(l => l.name);
const title = issue.title;
const body = issue.body || '';

// Jira Type 결정
let jiraType = 'Task';
if (labels.includes('epic') || /^\[EPIC\]/i.test(title)) jiraType = 'Epic';
else if (labels.includes('story') || /^\[STORY\]/i.test(title)) jiraType = 'Story';
else if (labels.includes('bug') || /^\[BUG\]/i.test(title)) jiraType = 'Bug';

// 템플릿 타입 판단
let templateType = 'task';
if (labels.includes('epic') || /^\[EPIC\]/i.test(title)) templateType = 'epic';
else if (labels.includes('story') || /^\[STORY\]/i.test(title)) templateType = 'story';
else if (labels.includes('change-request') || /^\[CR\]/i.test(title)) templateType = 'cr';
else if (labels.includes('spike') || /^\[SPIKE\]/i.test(title)) templateType = 'spike';

// 섹션 파싱
const parseSection = (label) => {
const regex = new RegExp(`### ${label}\\s*\\n([\\s\\S]*?)(?=###|$)`);
const match = body.match(regex);
return match ? match[1].trim() : '-';
};

// description 구성
const descContent = [
{ type: 'paragraph', content: [{ type: 'text', text: `GitHub Issue: ${issue.html_url}` }] },
{ type: 'paragraph', content: [{ type: 'text', text: `Author: ${issue.user.login}` }] }
];

switch (templateType) {
case 'epic':
descContent.push(
Expand Down Expand Up @@ -566,7 +584,7 @@ jobs:
{ type: 'paragraph', content: [{ type: 'text', text: parseSection('작업 범위') }] }
);
}

const jiraResponse = await fetch(
`${process.env.JIRA_BASE_URL}/rest/api/3/issue`,
{
Expand All @@ -589,9 +607,9 @@ jobs:
})
}
);

const jiraData = await jiraResponse.json();

if (jiraData.key) {
await github.rest.issues.createComment({
owner: context.repo.owner,
Expand All @@ -603,7 +621,6 @@ jobs:
} else {
console.log(`Failed to create Jira for Issue #${issue.number}:`, jiraData);
}

await new Promise(resolve => setTimeout(resolve, 1000));
}

6 changes: 4 additions & 2 deletions .github/workflows/github-jira-pr-sync.yml
Original file line number Diff line number Diff line change
Expand Up @@ -204,11 +204,13 @@ jobs:
JIRA_BASE_URL: ${{ secrets.JIRA_BASE_URL }}
JIRA_API_TOKEN: ${{ secrets.JIRA_API_TOKEN }}
JIRA_USER_EMAIL: ${{ secrets.JIRA_USER_EMAIL }}
DESC_JSON: ${{ steps.parse.outputs.description }}

with:
script: |
const jiraKey = '${{ steps.get-jira-key.outputs.jira_key }}';
const pr = context.payload.pull_request;
const descContent = ${{ steps.parse.outputs.description }};
const descContent = JSON.parse(process.env.DESC_JSON);

const response = await fetch(
`${process.env.JIRA_BASE_URL}/rest/api/3/issue/${jiraKey}`,
Expand Down Expand Up @@ -486,4 +488,4 @@ jobs:
}

await new Promise(resolve => setTimeout(resolve, 1000));
}
}
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -80,3 +80,9 @@ workbox-*.js
.claude/
CLAUDE.md
.claudeignore

# Terraform
infra/.terraform/
infra/*.tfstate
infra/*.tfstate.backup
infra/*.tfvars
Loading