77 lines
2.5 KiB
YAML
77 lines
2.5 KiB
YAML
name: CI/CD
|
|
|
|
on:
|
|
push:
|
|
branches: [main]
|
|
pull_request:
|
|
branches: [main]
|
|
|
|
jobs:
|
|
test:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: 저장소 체크아웃
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Python 3.13 설치
|
|
uses: actions/setup-python@v5
|
|
with:
|
|
python-version: '3.13'
|
|
|
|
- name: 테스트용 .env 준비
|
|
run: |
|
|
cat > .env <<'EOF'
|
|
SECRET_KEY=ci-dummy-secret-key
|
|
DATABASE_URL=sqlite:///./ci.db
|
|
EOF
|
|
|
|
- name: 의존성 설치
|
|
run: pip install -e ".[dev]"
|
|
|
|
- name: pytest 실행
|
|
run: pytest
|
|
|
|
deploy:
|
|
needs: test
|
|
if: gitea.ref == 'refs/heads/main'
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: 저장소 체크아웃
|
|
uses: actions/checkout@v4
|
|
|
|
- name: ssh/rsync 설치
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y --no-install-recommends openssh-client rsync
|
|
|
|
- name: SSH 키 준비
|
|
run: |
|
|
mkdir -p ~/.ssh
|
|
echo "${{ secrets.DEPLOY_SSH_KEY }}" | base64 -d > ~/.ssh/id_ed25519
|
|
chmod 600 ~/.ssh/id_ed25519
|
|
ssh-keyscan -p ${{ vars.DEPLOY_SSH_PORT }} ${{ vars.DEPLOY_SSH_HOST }} >> ~/.ssh/known_hosts
|
|
# 키가 깨진 채로 저장됐다면 여기서 바로 에러가 나서 원인을 알 수 있음
|
|
ssh-keygen -y -f ~/.ssh/id_ed25519 > /dev/null
|
|
|
|
- name: SSH 연결 테스트 (디버그)
|
|
run: |
|
|
ssh -vv -o BatchMode=yes -p ${{ vars.DEPLOY_SSH_PORT }} \
|
|
${{ vars.DEPLOY_SSH_USER }}@${{ vars.DEPLOY_SSH_HOST }} echo ok
|
|
|
|
- name: 소스 동기화
|
|
run: |
|
|
rsync -avzP \
|
|
--exclude='.env' --exclude='media' --exclude='__pycache__' \
|
|
-e "ssh -vvv -i ~/.ssh/id_ed25519 -o BatchMode=yes -o IdentitiesOnly=yes -p ${{ vars.DEPLOY_SSH_PORT }}" \
|
|
pyproject.toml alembic.ini Dockerfile docker-compose.yml app migrations scripts \
|
|
${{ vars.DEPLOY_SSH_USER }}@${{ vars.DEPLOY_SSH_HOST }}:${{ vars.DEPLOY_REMOTE_PATH }}/
|
|
|
|
- name: 컨테이너 재빌드 & 재시작
|
|
run: |
|
|
ssh -p ${{ vars.DEPLOY_SSH_PORT }} ${{ vars.DEPLOY_SSH_USER }}@${{ vars.DEPLOY_SSH_HOST }} \
|
|
"export PATH=\$PATH:/usr/local/bin && cd ${{ vars.DEPLOY_REMOTE_PATH }} && docker compose build && docker compose up -d"
|
|
|
|
- name: 안 쓰는 이미지 정리
|
|
run: |
|
|
ssh -p ${{ vars.DEPLOY_SSH_PORT }} ${{ vars.DEPLOY_SSH_USER }}@${{ vars.DEPLOY_SSH_HOST }} \
|
|
"export PATH=\$PATH:/usr/local/bin && docker image prune -f" |