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

on:
push:
branches: [main]

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- 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.head_commit.message }}
target-branch: ${{ github.ref_name }}
- name: Test get variable exported by push-to-another-repository
run: echo $DESTINATION_CLONED_DIRECTORY
113 changes: 113 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
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옵션을 적용하도록 하겠습니다 구욷 ( ̄︶ ̄*))

continue-on-error: true
# 프로젝트 빌드
- 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.check_step.outcome == 'failure' || 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"
}
]
}