Skip to content
29 changes: 29 additions & 0 deletions .github/workflows/cd.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
name: cd

on:
push:
branches: [main]

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- name: Install mustache
run: sudo apt-get update && sudo apt-get install -y ruby && gem install mustache
Copy link
Collaborator

Choose a reason for hiding this comment

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

cd.yml에서 설치한 mustache가 현재 사용처가 보이지 않는 것 같은데, 실제로 템플릿 렌더링에 사용 중인지 궁금합니다! 아니라면 제거하는게 어떨까요! ☺️

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

허업 cd.yml 파일은 복사해서 가져오다보니 mustache 설치코드도 같이 가져와버렸네요..
말씀해주신대로 mustache는 CD 워크플로우 상에서 사용하지 않아 제거하도록 하겠습니다 🫶🏻

- name: creates output
run: sh ./build.sh
- name: Pushes to another repository
id: push_directory
uses: cpina/github-action-push-to-another-repository@main
env:
API_TOKEN_GITHUB: ${{ secrets.AUTO_ACTIONS }}
with:
source-directory: "output"
destination-github-username: odukong
destination-repository-name: COMFIT-CLIENT
user-email: ${{ secrets.EMAIL }}
commit-message: ${{ github.event.commits[0].message }}
target-branch: ${{ github.ref_name }}
Copy link
Collaborator

@u-zzn u-zzn Jan 1, 2026

Choose a reason for hiding this comment

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

cd.yml의 commit-message: github.event.commits[0].message는 다중 커밋 push 시 첫 메시지만 들어가는 이슈가 있을 수도 있을 것 같아서 head_commit.message로 수정하는건 어떨까용? ☺️

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

github.event.commits[0].message는 가장 예전의 커밋 메시지을 의미하고, github.event.head_commit.message는 push의 HEAD커밋 메시지를 뜻한다고 해서 head_commit으로 수정하는게 의미가 더 명확해질 것 같아 해당 방식으로 수정하도록 하겠습니당🙆🏻‍♀️

Copy link
Contributor

Choose a reason for hiding this comment

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

저도 합세해서 동일한 이슈가 있어서 수정했었는데 유진이가 잘 캐치해주었네요 ㅎ.ㅎ 최고 !!

- name: Test get variable exported by push-to-another-repository
run: echo $DESTINATION_CLONED_DIRECTORY
112 changes: 112 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
name: ci

on:
push:
branches: [main, dev]
pull_request:
branches: [main, dev]

permissions:
contents: read # 코드 읽기 권한
pull-requests: write # 자동리뷰어 설정을 위한 쓰기 권한

jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
# 저장소 코드 다운로드
- name: Checkout Code
uses: actions/checkout@v5
# pnpm 설치
- name: Install pnpm
uses: pnpm/action-setup@v4
with:
version: 10

# pnpm store 캐싱
- name: Get pnpm store directory
id: pnpm-cache
run: echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT

- uses: actions/cache@v5
with:
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
key: ${{ runner.os }}-pnpm-${{ hashFiles('pnpm-lock.yaml') }}
restore-keys: ${{ runner.os }}-pnpm-

# node.js 환경 설정
- name: Setup Node.js
uses: actions/setup-node@v5
with:
node-version: "24.x"
# 라이브러리 설치
- name: Install dependencies
run: pnpm install --frozen-lockfile
# 프로젝트 린트 검사 및 타입 검사
- name: Check project
id: check_step
run: pnpm run lint && pnpm exec tsc --noEmit
Comment on lines +45 to +48
Copy link
Collaborator

Choose a reason for hiding this comment

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

제가 ci/cd에 대해 잘 몰라서 한 번 찾아봤는데, Check project(lint/tsc) 단계에서 실패가 발생하면 기본 동작상 job이 이 지점에서 종료될 수 있어서 뒤에 있는 PR 결과 코멘트나 Discord 알림 스텝이 실행되지 않는 경우가 생길 수도 있다고 합니다ㅠ!!

PR 코멘트 / Discord 스텝에 always() 조건이 있긴 하지만, job 자체가 중간에 종료되면 해당 스텝까지 아예 도달하지 못하는 케이스가 있을 수도 있다고 하네요 🥲

그래서 check_step에도 continue-on-error를 두고, 마지막에 lint / tsc / build 결과(outcome)를 종합해서 exit 처리하도록 하면 좋을 것 같은데 이 방향에 대해서는 어떻게 생각하시는지 궁금합니다! 🤔

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

lint 검사 단계에 실패한 경우에는 비교적 무거운 build단계를 실행하지 않고, 바로 comment 스탭으로 넘어가기 위해 continue-on-error옵션을 작성해두지 않았는데, 검사 실패로 인한 comment 스탭에 아예 도달하지 못하는 경우도 고려해서 lint 검사 단계에서도 continue-on-error옵션을 적용하도록 하겠습니다 구욷 ( ̄︶ ̄*))

# 프로젝트 빌드
- name: Build project
id: build_step
run: pnpm run build
continue-on-error: true

# 빌드 결과
- name: Output build result
if: github.event_name == 'pull_request' && always()
uses: marocchino/sticky-pull-request-comment@v2
with:
header: build-result
message: |
### 🚀 빌드 결과
${{ steps.check_step.outcome == 'success' && '✅ **린트 검사 완료**' || '❌ **린트 검사 실패**'}}
${{ steps.build_step.outcome == 'success' && '✅ **빌드 성공**' || '❌ **빌드 실패**' }}

<details>
<summary>로그 확인하기</summary>
<br>
<a href="${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}">
Actions 탭에서 자세히 보기
</a>
</details>

# 빌드 결과 디스코드 알람 보내기
- name: Notify Discord Alarm
if: github.event_name == 'pull_request' && always()
run: |
PR_TITLE="${{ github.event.pull_request.title }}"
PR_USER="${{ github.event.pull_request.user.login }}"
PR_URL="${{ github.event.pull_request.html_url }}"

if [ "${{ steps.build_step.outcome }}" == "success" ]; then
COLOR=3066993
TITLE="✅ 빌드 성공"
else
COLOR=15158332
TITLE="❌ 빌드 실패"
fi

DESCRIPTION="**🚀 Title :** \`$PR_TITLE\`\n **👤작성자 :** \`$PR_USER\`\n\n**[🔎 PR보러가기]($PR_URL)**"
curl -H "Content-Type: application/json" \
-d "{
\"embeds\": [{
\"title\": \"$TITLE\",
\"description\": \"$DESCRIPTION\",
\"color\": $COLOR
}]
}" \
"${{ secrets.DISCORD_WEBHOOK_URL }}"
# 빌드 실패 시, 종료
- name: Check Build Status
if: steps.build_step.outcome == 'failure'
run: exit 1
assign:
runs-on: ubuntu-latest
steps:
- name: auto-assign-author-and-reviewer
if: github.event_name == 'pull_request'&&github.event.action=='opened'
uses: hkusu/review-assign-action@v1
with:
assignees: ${{github.actor}} # 담당자 설정
reviewers: hummingbbird, odukong, u-zzn, qowjdals23
5 changes: 5 additions & 0 deletions build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#!/bin/sh
cd ../
mkdir output
cp -R ./COMFIT-CLIENT/* ./output
cp -R ./output ./COMFIT-CLIENT/
8 changes: 8 additions & 0 deletions vercel.json
Copy link
Contributor

Choose a reason for hiding this comment

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

vercel 배포에 필요한 설정도 같이 해주는 꼼꼼함 .. 최고다오두콩

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

칭찬에 덩실덩실대는 오두콩이되....

Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"rewrites": [
{
"source": "/(.*)",
"destination": "/index.html"
}
]
}