Skip to content

Commit

Permalink
[release] dev -> main 브랜치 merge / 1.1.0version upgrade (#39)
Browse files Browse the repository at this point in the history
* 🔨 refactor: Docker 이미지 최적화를 위한 코드 리팩토링

* 🙀 chore: 오타 수정

* 🐛 fix: COPY 경로 수정

* 🐛 fix: swagger-auto 명령어 추가

* 🙀 chore: 오타수정

* 🐛 fix: backend 이미지가 base-image를 사용하지 않으므로 새로운 패키지 매니저 설치 및 추가 파일 복사하는 로직 추가

* 🐛 fix: pnpm-lock 복사 코드 추가

* 🐛 fix: 서버 패키지 설치 안되는 오류 해결하기 위해 코드 수정

* 🐛 fix: eslint 경로 체크용 package 폴더 추가 복사

* 🐛 fix: 의존성을 복사해오고 dev용을 지우는 방식으로 수정

* 🐛 fix: pnpm-workspace 파일 복사

* 🙀 chore: cicd 스크립트 오타 수정

* 🙀 chore: copy 명령어 합침

* 🙀 chore: 코드 구조 변경

* 🐛 fix: COPY 경로 수정

* 🙀 chore: 경로 오타 수정

* 🔨 refactor: 배포시 swagger-auto 안 하게 로직 수정 및 prod 종속성에 필요한 패키지 dev 종속성에서 이동

* 🙀 chore: 경로 오타 수정

* 🙀 chore: 안쓰는 라이브러리 삭제

* 🚨 !HOTFIX!: env 설정 누락된 코드 추가

* 🚨 !HOTFIX!: env 설정 누락된 코드 추가

* [#10] 홈페이지 가상스크롤 적용 (#14)

* ✨ feat: scroll의 Y 좌표를 리턴하는 useScroll 커스텀 훅 추가

* 🚚 rename: hooks/css에 있던 useWindowSize 훅 폴더 위치 변경

* ✨ feat: 가상스크롤 구현 중

* 🙀 chore: 함수명 오타 수정

* ✨ feat: 가상스크롤 커스텀훅 추가

* ✨ feat: WorkspaceGrid 컴포넌트에 가상스크롤 적용

* 🙀 chore: grid의 총 높이 계산할 때 반올림   적용

* [#11] Google Analytics 적용 (#15)

* ✨ feat: ga4 코드 추가

* 🔨 refactor: 로컬 환경 디버깅용 코드로 전환

* 🙀 chore: GA 디버깅 코드 삭제

* 🔨 refactor: workflow 에 dockerhub 사용하는 코드 제거

* ✨ feat: 이벤트 트레이싱

* 🔨 refactor: docker hub 로그인 부분 삭제

* 🔨 refactor: workflow와 compose 파일 dockerhub 쓰는 스크립트로 수정

* 🐛 fix: dockerhub 쓰는 버전에서는 build단계에서 pnpm 설치가 필요 없으니 해당 코드 삭제

* 🔨 refactor: deploy단계에서 docker hub 로그인 하는 부분 이동

* 🙀 chore: git 상태 확인하는 코드 추가

* 🙀 chore: docker compose cache_from 부분 삭제(dockerhub에서 가져올 땐 필요 없음)

* 🙀 chore: docker hub 로그인 방식 수정

* 🙀 chore: 안쓰는 옵션 삭제

* 🐛 fix: base-image 이름 변경

* 🙀 chore: 언더바 하이픈으로 수정

* 🙀 chore: 안쓰는 코드 삭제

* 🐛 fix: dockercompose 코드에서 build내에 image 잘 못 넣은 코드 수정

* 🙀 chore: docker 로그인 확인을 위한 docker info 코드 추가

* 🔨 refactor: docker compose에서 base 이미지 가져오는 것을 명시적으로 표시

* 🙀 chore: docker compose config 확인을 위한 코드 추가

* 🙀 chore: docker compose 체크를 위한 경로 수정

* 🙀 chore: 필요없는 코드 삭제

* 🐛 fix: compose 파일에서 base 부분 삭제

* 🔨 refactor: docker 캐시 이용하는 방법으로 변경

* 🔨 refactor: docker tag 설정해주는 코드 추가

* 🙀 chore: 코드 변경

* 🔨 refactor: github actions 캐시사용하는 방식으로 변경

* 🔨 refactor: docker build 코드 cache 가져오게 수정

* 🔨 refactor: buildx 코드 추가

* 🔨 refactor: docker buildx 사용하는 방식 수정

* 🔨 refactor: base 이미지에 로컬태그를 붙여주는 방식 대신 레지스트리 경로를 명시적으로 표시하는 방식으로 수정

* 🔨 refactor: docker 이미지 빌드 때 사용하는 cache from-to 원격주소로 변경

* 🔨 refactor: github action 캐싱키 변경 및 docker 이미지 빌드 시 cache 주소 잘못 쓴 것 수정

* 🙀 chore: docker image output 명시적으로 작성

* 🔨 refactor: base image를 hub에 push하지 않고 로컬에서 빌드해서 그대로 사용하는 방식으로 수정

* 🙀 chore: latest 태그 제거

* 🙀 chore: 베이스 이미지 빌드할 때 load: true 옵션 추가

* 🔨 refactor: base-image도 docker hub에 올리는 방법으로 재수정

* 🙀 chore: username 잘 나오는지 확인

* 🙀 chore: set up docker buildx 에서 with 설정 추가

* 🙀 chore: 캐시 초기화 코드 추가

* 🙀 chore: build-args 넣어주는 방식 수정

* 🙀 chore: build-args 넣어주는 방식 수정

* Update boolock-dev-cicd.yml

* Update boolock-dev-cicd.yml

* 🙀 chore: 디버깅용 코드 추가

* 🔨 refactor: base image 로컬 빌드 및 사용으로 방법 변경

* 🔨 refactor: cache-from 타입 inline으로 변경

* 🙀 chore: github actions 로컬에 base-image가 잘 남겨져 있는지 확인하는 코드 추가

* [#18] useQuery, useInfiniteQuery -> useSuspenseQuery, useSuspenseInfiniteQuery 교체 (#19)

* 🔨 refactor: useQuery를 useSuspenseQuery로 교체 및 error 처러 코드 삭제

* 🔨 refactor: 로딩 UI 및 에러 처리 코드 삭제

* 🔨 refactor: suspense 적용 및 error boundy fallback에 workspace 에러 페이지 설정

* 🔨 refactor: useInfinityQuery -> useSuspenseQuery로 교체

* 🙀 chore: 400 에러와 404에러의 에러 코드 및 상태 메세지가 잘못 설정 되어 있어 올바르게 수정

* 🐛 fix: 기존 에러 발생 시 500 에러로만 응답하는 문제 해결

* 🔨 refactor: workspaceContainer에서 워크스페이스 데이터를 렌더링하고 페칭하는 부분을 분리함

* 🙀 chore: 컴포넌트 분리에 따른 코드 수정

* 🙀 chore: github action 에서 파일명 변경을 감지하지 못한 문제로 인해 파일명 변경

* 🙀 chore: 불필요한 console.log 삭제

* 🔨 refactor: base-image cache 루트 변경

* 🔨 refactor: type=local로 재변경

* 🔨 refactor: base-image load단계 추가

* 🙀 chore: 이미지 태그 삭제

* 🙀 chore: 이전 코드에서 캐싱 잘 되는지 확인용

* 🙀 chore: dockerhub_username arg 추가

* 🔨 refactor: 이전버전에 cache 경로만 수정

* 🙀 chore: build-args 추가

* 🔨 refactor: buildx 플러그인 초기화 옵션 + cache에서 이미지 사용시 모든 캐시 데이터를 최대한 활용하는 mode=max 옵션 추가

* 🙀 chore: base-image 캐싱 추가

* 🔨 refactor: base image 로컬 저장 및 hub push 둘 다 되게 수정

* 🙀 chore: verify 스텝 추가

* [#21] 홈페이지 로딩 시 스켈레톤UI에 그리드가 적용되지 않는 문제 해결, 워크스페이스 로딩 화면 조건부 렌더링 (#22)

* 🐛 fix: 스켈레톤UI에 그리드가 안되는 문제 해결

* ✨ feat: 워크스페이스 로딩 시간이 0.05초 이상일 때만 로딩 화면이 렌더링되도록 변경

* 🙀 chore: 오타 수정

* 🙀 chore: 아ㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏ

* 🔨 refactor: 원격에서 base-image 가져와서 load하는 방식으로 수정

* 🙀 chore: 경로 명시적으로 쓰기

* 🙀 chore: docker 네트워크 연결 테스트 코드 추가

* 🙀 chore: docker login 스텝 이동

* 🙀 chore: 토큰 코드 추가

* 🙀 chore: token 발급받는 부분 추가

* 🚨 !HOTFIX!: error가 발생할 때 return 해야하는데 그렇지 않을 때 return 하여 workspace가 초기화되지않는 문제 해결

* 🙀 chore: dockerfile FROM base image 경로를 직접적으로 입력하는 버전

* 🙀 chore: base-image outputs 타입을 oci로 변경

* 🙀 chore: docker 이미지 빌드 platform을 linux/amd64로 명시

* 🙀 chore: 타입 명시

* 🚨 !HOTFIX!: workflow on 설정 main push 일 경우로 수정

* ✨ feat: 서버 분할로 인해 cicd dev버전과 main 버전 분리 및 배포를 위한 설정 이분할

* 🙀 chore: 워크플로우 이름 변경

* 🙀 chore: 병합하면서 사라진 dev cicd의 on 조건 추가

* 🙀 chore: docker hub password token으로 변경

* 🙀 chore: client dockerfile 오타 수정

* 🙀 chore: dockerfile.test 오타 수정

* 🔨 refactor: cache type gha로 변경

* 🙀 chore: compose 배포 명령어 수정

* 🙀 chore: 두번 쓴 명령어 삭제

* 🙀 chore: env 설정 확인용 스크립트 추가

* 🙀 chore: cache docker layers 단계 없어도 동작하는지 확인

* 🙀 chore: 주석 제거

* 🔨 refactor: cache-from/to registry type으로 변경

* 🙀 chore: docker chche 타입 gha 타입으로 변경

* 🔨 refactor: github action deploy 과정 push에서만 사용되게 코드 추가

* 🔨 refactor: 브랜치별 워크플로우 시나리오 분리

* 🙀 chore: docker arg 선언 줄분리

* 🔨 refactor: docker compose 파일 type env 설정에 따른 port 설정해주는 코드 추가

* 🔨 refactor: HTTP/1.1 -> HTTP/2.0 개선 설정 추가

* 🔨 refactor: HTTP/2.0 -> HTTP/3.0 개선 설정 추가

* [HOTFIX] cicd 및 docker-compose 코드 수정 (#29)

* 🙀 chore: compose 코드 수정

* 🙀 chore: 현재 브랜치에서 deploy 체크하게 브랜치 설정코드 수정

* 🙀 chore: ssl_port 빈칸 표시

* 🙀 chore: # 처리 삭제

* 🙀 chore: 아예 SSL_PORT 설정 없애보기

* 🙀 chore: 우회방식 사용

* 🔨 refactor: docker compose 파일 test 버전 추가 및 cicd 코드 수정

* 🙀 chore: 합치기 전 설정 수정

* [#31] “Code 하이라이팅” 코드 품질 개선 (#36)

* 🔨 refactor: 변수 유틸함수로 분리

* 🔨 refactor: 애니메이션 코드 커스텀 훅으로 분리

* 🙀 chore: 훅에 주석 처리

* 🔨 refactor: 애니메이션 지속 시간 (매직넘버) 상수화

* 🙀 chore: 오타 수정

* 🔨 refactor: 클래스명 계산 로직 추상화

* 🔨 refactor: 마우스 호버 이벤트 훅 관리 + 라인클래스이름 추상화

* 🔨 refactor: 파싱 코드 추상화 + 함수 설명 주석 추가

* 🔨 refactor: Props Drilling이 나타나는 컴포넌트를 삭제하고 부모 컴포넌트로 이전.

* 🔨 refactor: viewer 클래스명 생성 함수 분리

* 🔨 refactor: 타입 분리 + index.ts로 import 문 간소화하여 가독성 개선

* [#26] 워크스페이스 페이지의 불필요한 리렌더링 개선 (#35)

* ✨ feat: css 속성 물음표 아이콘 좌표를 전역 상태로 관리하는 것이 아닌 local 상태 변수를 통해 관리하도록 변경

* Revert "✨ feat: css 속성 물음표 아이콘 좌표를 전역 상태로 관리하는 것이 아닌 local 상태 변수를 통해 관리하도록 변경"

This reverts commit b4409ef.

* 🔨 refactor: css속성 물음표 아이콘 좌표를 전역상태가 아닌 local 상태로 관리

* 🔨 refactor: 기존에 사용하던 매직넘버를 삭제하고 useLayoutEffect를 통해 툴팁의 높이를 직접 측정하고 툴팁의 좌표를 계산하는 방식으로 변경

* 🔨 refactor: css item 물음표 아이콘 위치를 전역 상태가 아닌 로컬 상태변수로 관리하도록 변경, 불필요한 cssTooltiptore 삭제

* 🔨 refactor: useCssTooltip 훅을 통해 좌표 계산을 하도록 변경

* 🙀 chore: 타입 단언 대신 타입 선언으로 변경경

* 🙀 chore: 불필요한 변수 및 반환값 삭제

* 🙀 chore: 커스텀 select에서 사용하는 type 및 enum type 폴더로 분리

* 🔨 refactor: css 클래스 리스트를 만드는 로직을 커스텀 훅으로 분리

* 🔨 refactor: useCssPropsStore에서 각 상태를 구조분해할당으로 사용하여 모든 상태를 구독하여 불필요한 리렌더링이 발생하는 문제를 해결함

* 🎨 style: 불필요한 스타일 코드 삭제

* 🙀 chore: 변경된 props 반영

* [#25] 사용자가이드 단계 이동시 헤더 내 모든 요소 리렌더링 개선 (#37)

* 🎨 style: 도움말버튼 컴포넌트 분리 (HelpButton)

* 🔨 refactor: 코치마크 단계 이동시 도움말버튼 리렌더링 개선

* 🔨 refactor: 헤더 상단 버튼 각각 메모이제이션

* 🔨 refactor: 코치마크 4단계로 이동하거나 4단계 였던 경우에만 HeaderButtons 리렌더링 되도록  메모이제이션

* 🔨 refactor: 워크스페이스 헤더 리렌더링 개선 완료

* 🐛 fix: 대소문자 오타 수정

* 📝 docs: README 수정

* [#34] 수동 저장 -> 자동 저장으로 변경 (#38)

* 🙀 chore: build시 오류 생기는 코드 제거

---------

Co-authored-by: YEONGJAE LEE <[email protected]>
Co-authored-by: Gyeungil Choi <[email protected]>
Co-authored-by: Yujin <[email protected]>
Co-authored-by: lee0jae330 <[email protected]>
Co-authored-by: chichoc <[email protected]>
  • Loading branch information
6 people authored Jan 28, 2025
1 parent f2d576c commit 43ce570
Show file tree
Hide file tree
Showing 67 changed files with 901 additions and 576 deletions.
138 changes: 59 additions & 79 deletions .github/workflows/boolock-dev-cicd.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: ci/cd action
name: dev ci/cd action

on:
push:
Expand All @@ -10,110 +10,90 @@ jobs:

steps:
- uses: actions/checkout@v4
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: '20.x'

- name: Install Pnpm
run: npm install -g pnpm

- name: Package install with pnpm
run: pnpm install:all
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
with:
buildkitd-flags: --debug

- name: Set BE .env
run: |
echo "MONGO_URI=${{ secrets.MONGO_URI }}" > apps/server/.env
echo "SSH_HOST=${{ secrets.SSH_HOST }}" >> apps/server/.env
echo "SSH_PORT=${{ secrets.SSH_PORT }}" >> apps/server/.env
echo "SSH_USER=${{ secrets.SSH_USER }}" >> apps/server/.env
echo "SSH_PASSWORD=${{ secrets.SSH_PASSWORD }}" >> apps/server/.env
echo "SSH_DATABASE_HOST=${{ secrets.SSH_DATABASE_HOST }}" >> apps/server/.env
echo "SSH_DATABASE_PORT=${{ secrets.SSH_DATABASE_PORT }}" >> apps/server/.env
echo "LOCAL_PORT=${{ secrets.LOCAL_PORT }}" >> apps/server/.env
echo "IS_LOCAL=true" >> apps/server/.env
echo "SERVER_CORS_ACCEPT=http://localhost:5173" >> apps/server/.env
echo "MONGO_URI=${{ secrets.TEST_MONGO_URI }}" > apps/server/.env
echo "IS_LOCAL=false" >> apps/server/.env
echo "SERVER_CORS_ACCEPT=${{ secrets.TEST_SERVER_CORS_ACCEPT }}" >> apps/server/.env
echo "S3_ACCESS_KEY=${{ secrets.S3_ACCESS_KEY }}" >> apps/server/.env
echo "S3_SECRET_KEY=${{ secrets.S3_SECRET_KEY }}" >> apps/server/.env
echo "S3_BUCKET_NAME=${{ secrets.S3_BUCKET_NAME }}" >> apps/server/.env
echo "NODE_ENV=production" >> apps/server/.env
- name: Set FE .env
run: |
echo "VITE_SERVER_URL=http://localhost:3000" > apps/client/.env
echo "VITE_SERVER_URL=${{ secrets.DEPLOY_VITE_SERVER_URL }}" > apps/client/.env
echo "VITE_MIXPANEL_TOKEN=${{ secrets.VITE_MIXPANEL_TOKEN }}" >> apps/client/.env
echo "VITE_STATIC_STORAGE_URL=${{ secrets.VITE_STATIC_STORAGE_URL }}" >> apps/client/.env
- name: Set Nginx SSL files
run: |
mkdir -p apps/client/ssl
echo "${{ secrets.SSL_FULLCHAIN }}" > apps/client/ssl/fullchain.pem
echo "${{ secrets.SSL_PRIVKEY }}" > apps/client/ssl/privkey.pem
- name: Buld Frontend
run: |
cd apps/client
pnpm run build
- name: Build Backend
run: |
cd apps/server
pnpm run swagger-auto
pnpm run build
- name: Build base image
run: |
docker build . --file Dockerfile.base --tag ${{ secrets.DOCKERHUB_USERNAME }}/boolock_base_test:1.0
docker tag ${{ secrets.DOCKERHUB_USERNAME }}/boolock_base_test:1.0 base-image
- name: Build frontend and backend images
run: |
docker build . --file apps/client/Dockerfile --tag ${{ secrets.DOCKERHUB_USERNAME }}/boolock_client_test:1.0
docker build . --file apps/server/Dockerfile --tag ${{ secrets.DOCKERHUB_USERNAME }}/boolock_server_test:1.0
- name: Login to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}
password: ${{ secrets.DOCKERHUB_ACCESS_TOKEN }}

- name: Docker Hub push
run: |
docker push ${{ secrets.DOCKERHUB_USERNAME }}/boolock_base_test:1.0
docker push ${{ secrets.DOCKERHUB_USERNAME }}/boolock_client_test:1.0
docker push ${{ secrets.DOCKERHUB_USERNAME }}/boolock_server_test:1.0
- name: Build and Push Base Image
uses: docker/build-push-action@v4
with:
context: .
file: Dockerfile.base
push: true
tags: ${{ secrets.DOCKERHUB_USERNAME }}/base-image-test:latest
cache-from: type=gha,scope=base-image-test
cache-to: type=gha,mode=max,scope=base-image-test

- name: Build and Push Frontend Image
uses: docker/build-push-action@v4
with:
context: .
file: apps/client/Dockerfile.test
push: true
tags: ${{ secrets.DOCKERHUB_USERNAME }}/boolock_client_test:latest
cache-from: type=gha,scope=frontend-test
cache-to: type=gha,mode=max,scope=frontend-test
build-args: |
DOCKERHUB_USERNAME=${{ secrets.DOCKERHUB_USERNAME }}
TYPE=test
- name: Build and Push Backend Image
uses: docker/build-push-action@v4
with:
context: .
file: apps/server/Dockerfile
push: true
tags: ${{ secrets.DOCKERHUB_USERNAME }}/boolock_server_test:latest
cache-from: type=gha,scope=backend-test
cache-to: type=gha,mode=max,scope=backend-test
build-args: |
DOCKERHUB_USERNAME=${{ secrets.DOCKERHUB_USERNAME }}
TYPE=test
deploy:
if: github.event_name == 'push'
needs: build
runs-on: ubuntu-latest
steps:
- name: Login to Docker Hub
run: sudo docker login -u ${{ secrets.DOCKERHUB_USERNAME }} -p ${{ secrets.DOCKERHUB_PASSWORD }}

- name: Deploy with docker
uses: appleboy/[email protected]
with:
host: ${{ secrets.SSH_HOST }}
username: ${{ secrets.SSH_USER }}
password: ${{ secrets.SSH_PASSWORD }}
port: ${{ secrets.SSH_PORT }}
host: ${{ secrets.TEST_SSH_HOST }}
username: ${{ secrets.TEST_SSH_USER }}
password: ${{ secrets.TEST_SSH_PASSWORD }}
port: ${{ secrets.TEST_SSH_PORT }}
script: |
cd boolock/refactor-web31-BooLock
git checkout main
git pull origin main
echo "MONGO_URI=${{ secrets.DEPLOY_MONGO_URI }}" > apps/server/.env
echo "IS_LOCAL=false" >> apps/server/.env
echo "SERVER_CORS_ACCEPT=${{ secrets.DEPLOY_SERVER_CORS_ACCEPT }}" >> apps/server/.env
echo "S3_ACCESS_KEY=${{ secrets.S3_ACCESS_KEY }}" >> apps/server/.env
echo "S3_SECRET_KEY=${{ secrets.S3_SECRET_KEY }}" >> apps/server/.env
echo "S3_BUCKET_NAME=${{ secrets.S3_BUCKET_NAME }}" >> apps/server/.env
echo "NODE_ENV=production" >> apps/server/.env
git fetch origin
git checkout dev
git pull origin dev
echo "VITE_SERVER_URL=${{ secrets.DEPLOY_VITE_SERVER_URL }}" > apps/client/.env
echo "VITE_MIXPANEL_TOKEN=${{ secrets.VITE_MIXPANEL_TOKEN }}" >> apps/client/.env
echo "VITE_STATIC_STORAGE_URL=${{ secrets.VITE_STATIC_STORAGE_URL }}" >> apps/client/.env
echo "DOCKERHUB_USERNAME=${{ secrets.DOCKERHUB_USERNAME }}" > .env
echo "${{ secrets.DOCKERHUB_ACCESS_TOKEN }}" | docker login -u ${{ secrets.DOCKERHUB_USERNAME }} --password-stdin
sudo docker compose pull
sudo docker compose down
sudo docker compose up -d --build
sudo docker image prune -f
sudo docker compose -f docker-compose.test.yml pull
sudo docker compose -f docker-compose.test.yml up -d --force-recreate --remove-orphans
107 changes: 107 additions & 0 deletions .github/workflows/boolock-main-cicd.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
name: main ci/cd action

on:
push:
branches: ['main']

jobs:
build:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
with:
buildkitd-flags: --debug

- name: Set BE .env
run: |
echo "MONGO_URI=${{ secrets.DEPLOY_MONGO_URI }}" > apps/server/.env
echo "IS_LOCAL=false" >> apps/server/.env
echo "SERVER_CORS_ACCEPT=${{ secrets.DEPLOY_SERVER_CORS_ACCEPT }}" >> apps/server/.env
echo "S3_ACCESS_KEY=${{ secrets.S3_ACCESS_KEY }}" >> apps/server/.env
echo "S3_SECRET_KEY=${{ secrets.S3_SECRET_KEY }}" >> apps/server/.env
echo "S3_BUCKET_NAME=${{ secrets.S3_BUCKET_NAME }}" >> apps/server/.env
echo "NODE_ENV=production" >> apps/server/.env
- name: Set FE .env
run: |
echo "VITE_SERVER_URL=${{ secrets.DEPLOY_VITE_SERVER_URL }}" > apps/client/.env
echo "VITE_MIXPANEL_TOKEN=${{ secrets.VITE_MIXPANEL_TOKEN }}" >> apps/client/.env
echo "VITE_STATIC_STORAGE_URL=${{ secrets.VITE_STATIC_STORAGE_URL }}" >> apps/client/.env
- name: Set Nginx SSL files
run: |
mkdir -p apps/client/ssl
echo "${{ secrets.SSL_FULLCHAIN }}" > apps/client/ssl/fullchain.pem
echo "${{ secrets.SSL_PRIVKEY }}" > apps/client/ssl/privkey.pem
- name: Login to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_ACCESS_TOKEN }}

- name: Build and Push Base Image
uses: docker/build-push-action@v4
with:
context: .
file: Dockerfile.base
push: true
tags: ${{ secrets.DOCKERHUB_USERNAME }}/base-image-prod:latest
cache-from: type=gha,scope=base-image-prod
cache-to: type=gha,mode=max,scope=base-image-prod

- name: Build and Push Frontend Image
uses: docker/build-push-action@v4
with:
context: .
file: apps/client/Dockerfile
push: true
tags: ${{ secrets.DOCKERHUB_USERNAME }}/boolock_client_prod:latest
cache-from: type=gha,scope=frontend
cache-to: type=gha,mode=max,scope=frontend
build-args: |
DOCKERHUB_USERNAME=${{ secrets.DOCKERHUB_USERNAME }}
TYPE=prod
- name: Build and Push Backend Image
uses: docker/build-push-action@v4
with:
context: .
file: apps/server/Dockerfile
push: true
tags: ${{ secrets.DOCKERHUB_USERNAME }}/boolock_server_prod:latest
cache-from: type=gha,scope=backend
cache-to: type=gha,mode=max,scope=backend
build-args: |
DOCKERHUB_USERNAME=${{ secrets.DOCKERHUB_USERNAME }}
TYPE=prod
deploy:
needs: build
runs-on: ubuntu-latest
steps:
- name: Login to Docker Hub
run: sudo docker login -u ${{ secrets.DOCKERHUB_USERNAME }} -p ${{ secrets.DOCKERHUB_PASSWORD }}

- name: Deploy with docker
uses: appleboy/[email protected]
with:
host: ${{ secrets.SSH_HOST }}
username: ${{ secrets.SSH_USER }}
password: ${{ secrets.SSH_PASSWORD }}
port: ${{ secrets.SSH_PORT }}
script: |
cd boolock/refactor-web31-BooLock
git fetch origin
git checkout main
git pull origin main
echo "DOCKERHUB_USERNAME=${{ secrets.DOCKERHUB_USERNAME }}" > .env
echo "${{ secrets.DOCKERHUB_ACCESS_TOKEN }}" | docker login -u ${{ secrets.DOCKERHUB_USERNAME }} --password-stdin
sudo docker compose pull
sudo docker compose up -d --force-recreate --remove-orphans
6 changes: 2 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
<h1>BooLock</h1>

<img width="1704" alt="Frame 2016" src="https://github.com/user-attachments/assets/74cc69d6-7d6f-48ed-9e06-1d6d5f6a5c43">

</div>
![image](https://github.com/user-attachments/assets/c58af651-8a5d-4b09-a98e-04ce50f27fca)

<br/>

<p align="center"> <br/>
<strong>웹 개발, 블록으로 쉽고 즐겁게!</strong> <br />
<strong>웹 개발, 블록 조립으로 쉽고 재밌게!</strong> <br />
<strong>HTML과 CSS를 배우는 블록코딩 플랫폼</strong> <br /> <br />
나만의 창작물을 완성하고, 새로운 웹 개발의 가능성을 경험해보세요. ♥️ <br /> <br />
<strong>👇 배포 사이트</strong> <br />
Expand Down
7 changes: 5 additions & 2 deletions apps/client/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
FROM base-image AS frontend-build

ARG DOCKERHUB_USERNAME
ARG TYPE
FROM ${DOCKERHUB_USERNAME}/base-image-${TYPE} AS frontend-build

WORKDIR /app/apps/client
COPY ./apps/client .
Expand All @@ -7,7 +10,7 @@ RUN pnpm install --offline --frozen-lockfile &&\

FROM nginx:alpine AS frontend

COPY /apps/client/nginx.conf /etc/nginx/conf.d/default.conf
COPY /apps/client/production/nginx.conf /etc/nginx/conf.d/default.conf
COPY /apps/client/ssl /etc/nginx/ssl
RUN chmod 644 /etc/nginx/ssl/fullchain.pem &&\
chmod 600 /etc/nginx/ssl/privkey.pem &&\
Expand Down
19 changes: 19 additions & 0 deletions apps/client/Dockerfile.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
ARG DOCKERHUB_USERNAME
ARG TYPE
FROM ${DOCKERHUB_USERNAME}/base-image-${TYPE} AS frontend-build

WORKDIR /app/apps/client
COPY ./apps/client .
RUN pnpm install --offline --frozen-lockfile &&\
pnpm run build

FROM nginx:alpine AS frontend

COPY /apps/client/test/nginx.conf /etc/nginx/conf.d/default.conf
RUN chown -R nginx:nginx /usr/share/nginx/html

COPY --from=frontend-build /app/apps/client/dist /usr/share/nginx/html/
RUN chmod -R 755 /usr/share/nginx/html

EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
8 changes: 8 additions & 0 deletions apps/client/nginx.conf → apps/client/production/nginx.conf
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,18 @@ server {

server {
listen 443 ssl;
http2 on;
http3 on;
quic_retry off;

server_name boolock.site;

ssl_certificate /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/privkey.pem;
ssl_protocols TLSv1.3;
ssl_prefer_server_ciphers off;

add_header Alt-Svc 'h3-23=":443"; ma=86400';

location / {
root /usr/share/nginx/html;
Expand Down
1 change: 1 addition & 0 deletions apps/client/src/entities/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,4 @@ export { ImageTagModalImg } from './workspace/ImageTagModalImg/ImageTagModalImg'
export { ImageTagModalButton } from './workspace/ImageTagModalButton/ImageTagModalButton';
export { ImageTagModalListItem } from './workspace/ImageTagModalListItem/ImageTagModalListItem';
export { CodeExportButton } from './workspace/CodeExportButton/CodeExportButton';
export { HelpButton } from './workspace/HelpButton/HelpButton';
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import { Spinner } from '@/shared/ui';
import { exportPreviewHtml } from '@/shared/utils';
import toast from 'react-hot-toast';
import { useState } from 'react';
import { memo, useState } from 'react';

export const CodeExportButton = () => {
export const CodeExportButton = memo(() => {
const [isLoading, setIsLoading] = useState(false);

const handleClick = () => {
Expand Down Expand Up @@ -32,4 +32,4 @@ export const CodeExportButton = () => {
)}
</button>
);
};
});
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import { TCssCategory } from '@/shared/types';
import { useCssPropsStore } from '@/shared/store';

type CssCategoryButtonProps = {
cssCategory: TCssCategory;
};
Expand All @@ -11,7 +10,8 @@ type CssCategoryButtonProps = {
* CSS 카테고리를 선택할 수 있는 버튼 컴포넌트
*/
export const CssCategoryButton = ({ cssCategory }: CssCategoryButtonProps) => {
const { selectedCssCategory, setSelectedCssCategory } = useCssPropsStore();
const selectedCssCategory = useCssPropsStore((state) => state.selectedCssCategory);
const setSelectedCssCategory = useCssPropsStore((state) => state.setSelectedCssCategory);

return (
<button
Expand Down
Loading

0 comments on commit 43ce570

Please sign in to comment.