Merge pull request #337 from PromptPlace/feat/#335 #264
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: deploy-main | |
| on: | |
| push: | |
| branches: [ main ] | |
| workflow_dispatch: | |
| jobs: | |
| deploy: | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Check prisma has changes | |
| id: paths-filter | |
| uses: dorny/paths-filter@v3 | |
| with: | |
| filters: | | |
| prisma: ["prisma/**"] | |
| - name: Configure SSH | |
| env: | |
| EC2_USER: ubuntu | |
| EC2_HOST: ${{ secrets.EC2_HOST }} | |
| EC2_SSH_KEY: ${{ secrets.EC2_SSH_KEY }} | |
| run: | | |
| set -euo pipefail | |
| mkdir -p ~/.ssh | |
| printf "%s" "$EC2_SSH_KEY" > ~/.ssh/id_rsa | |
| chmod 600 ~/.ssh/id_rsa | |
| cat >>~/.ssh/config <<END | |
| Host prod | |
| HostName $EC2_HOST | |
| User $EC2_USER | |
| IdentityFile ~/.ssh/id_rsa | |
| StrictHostKeyChecking no | |
| END | |
| - name: Prepare target dir | |
| run: | | |
| ssh prod 'sudo mkdir -p /opt/app-backup && sudo chown ubuntu:ubuntu /opt/app-backup' | |
| - name: Sync workspace (rsync --delete) | |
| run: | | |
| rsync -az --delete --exclude ".git" --exclude "node_modules" ./ prod:/opt/app-backup/ | |
| - name: Write .env on EC2 | |
| run: | | |
| ssh prod 'cat > /opt/app-backup/.env <<EOF | |
| ${{ secrets.ENV_CONTENT }} | |
| EOF' | |
| - name: Install, Generate & Build on server | |
| run: | | |
| ssh prod 'cd /opt/app-backup && pnpm install --frozen-lockfile && pnpm exec prisma generate && rm -rf dist && pnpm build' | |
| - name: Prisma migrate (only when schema changed) | |
| if: steps.paths-filter.outputs.prisma == 'true' | |
| run: | | |
| ssh prod 'cd /opt/app-backup && pnpm exec prisma migrate deploy' | |
| - name: Restart PM2 Application (promptplace-api) | |
| run: | | |
| ssh prod 'export PATH=$PATH:/home/ubuntu/.local/share/pnpm && pm2 restart promptplace-api' | |
| - name: Stop PM2 app (one-time) | |
| run: | | |
| ssh prod 'pm2 delete promptplace || true' |