-
Notifications
You must be signed in to change notification settings - Fork 1
[Init] CI/CD 파이프라인 구축 #6
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 9 commits
ec33ff5
86d081b
2e47d52
c6b74dd
339baa9
9892587
8635bf1
f8304d1
7a72a4d
6dcc01e
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| 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: dev | ||
| - name: Test get variable exported by push-to-another-repository | ||
| run: echo $DESTINATION_CLONED_DIRECTORY | ||
| 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
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 제가 ci/cd에 대해 잘 몰라서 한 번 찾아봤는데, PR 코멘트 / Discord 스텝에 그래서
Collaborator
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. lint 검사 단계에 실패한 경우에는 비교적 무거운 build단계를 실행하지 않고, 바로 comment 스탭으로 넘어가기 위해 |
||
| 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 | ||
| 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/ |
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. vercel 배포에 필요한 설정도 같이 해주는 꼼꼼함 .. 최고다오두콩
Collaborator
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe 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" | ||
| } | ||
| ] | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
저는
dev브랜치는 개발용,main브랜치는 배포용(즉, 유저에게 제공되는 버전)이라고 생각해요. 그래서 수빈님 말씀대로 배포 후에 dev 브랜치로 push 되긴 하지만 브랜치를 분기한 목적을 고려했을 때target-branch: main이 더 적절하다고 생각합니다!