|
69 | 69 | subjectPatternError: | |
70 | 70 | The subject "{subject}" doesn't match the expected format. |
71 | 71 | Please use a descriptive subject line. |
72 | | -
|
73 | | - deploy: |
74 | | - name: Deploy to VPS |
75 | | - runs-on: ubuntu-latest |
76 | | - needs: lint-and-build |
77 | | - if: github.ref == 'refs/heads/main' && github.event_name == 'push' |
78 | | - |
79 | | - steps: |
80 | | - - name: Checkout |
81 | | - uses: actions/checkout@v4 |
82 | | - |
83 | | - - name: Setup Node.js |
84 | | - uses: actions/setup-node@v4 |
85 | | - with: |
86 | | - node-version: 20.x |
87 | | - cache: 'npm' |
88 | | - |
89 | | - - name: Install dependencies |
90 | | - run: npm ci |
91 | | - |
92 | | - - name: Build application |
93 | | - run: npm run build |
94 | | - env: |
95 | | - MONGODB_URI: ${{ secrets.MONGODB_URI }} |
96 | | - JWT_SECRET: ${{ secrets.JWT_SECRET }} |
97 | | - ADMIN_ACCESS_CODE: ${{ secrets.ADMIN_ACCESS_CODE }} |
98 | | - MENTOR_ACCESS_CODE: ${{ secrets.MENTOR_ACCESS_CODE }} |
99 | | - AMBASSADOR_ACCESS_CODE: ${{ secrets.AMBASSADOR_ACCESS_CODE }} |
100 | | - NEXT_PUBLIC_GA_ID: ${{ secrets.NEXT_PUBLIC_GA_ID }} |
101 | | - NEXT_PUBLIC_BASE_URL: https://devweekends.com |
102 | | - |
103 | | - - name: Setup SSH key |
104 | | - run: | |
105 | | - mkdir -p ~/.ssh |
106 | | - echo "${{ secrets.VPS_SSH_KEY }}" > ~/.ssh/deploy_key |
107 | | - chmod 600 ~/.ssh/deploy_key |
108 | | - ssh-keyscan -H ${{ secrets.VPS_HOST }} >> ~/.ssh/known_hosts |
109 | | -
|
110 | | - - name: Deploy to VPS |
111 | | - run: | |
112 | | - # Rsync the standalone build, static files, and public assets |
113 | | - rsync -azP --delete \ |
114 | | - -e "ssh -i ~/.ssh/deploy_key" \ |
115 | | - .next/standalone/ \ |
116 | | - ${{ secrets.VPS_USERNAME }}@${{ secrets.VPS_HOST }}:/home/${{ secrets.VPS_USERNAME }}/web-platform/ |
117 | | -
|
118 | | - rsync -azP --delete \ |
119 | | - -e "ssh -i ~/.ssh/deploy_key" \ |
120 | | - .next/static/ \ |
121 | | - ${{ secrets.VPS_USERNAME }}@${{ secrets.VPS_HOST }}:/home/${{ secrets.VPS_USERNAME }}/web-platform/.next/static/ |
122 | | -
|
123 | | - rsync -azP --delete \ |
124 | | - -e "ssh -i ~/.ssh/deploy_key" \ |
125 | | - public/ \ |
126 | | - ${{ secrets.VPS_USERNAME }}@${{ secrets.VPS_HOST }}:/home/${{ secrets.VPS_USERNAME }}/web-platform/public/ |
127 | | -
|
128 | | - - name: Restart application |
129 | | - uses: appleboy/ssh-action@v1 |
130 | | - with: |
131 | | - host: ${{ secrets.VPS_HOST }} |
132 | | - username: ${{ secrets.VPS_USERNAME }} |
133 | | - key: ${{ secrets.VPS_SSH_KEY }} |
134 | | - script: | |
135 | | - cd /home/${{ secrets.VPS_USERNAME }}/web-platform |
136 | | - # Create .env file with runtime secrets |
137 | | - cat > .env << 'ENVEOF' |
138 | | - NODE_ENV=production |
139 | | - PORT=3000 |
140 | | - HOSTNAME=0.0.0.0 |
141 | | - MONGODB_URI=${{ secrets.MONGODB_URI }} |
142 | | - JWT_SECRET=${{ secrets.JWT_SECRET }} |
143 | | - ADMIN_ACCESS_CODE=${{ secrets.ADMIN_ACCESS_CODE }} |
144 | | - MENTOR_ACCESS_CODE=${{ secrets.MENTOR_ACCESS_CODE }} |
145 | | - AMBASSADOR_ACCESS_CODE=${{ secrets.AMBASSADOR_ACCESS_CODE }} |
146 | | - CLOUDINARY_CLOUD_NAME=${{ secrets.CLOUDINARY_CLOUD_NAME }} |
147 | | - CLOUDINARY_API_KEY=${{ secrets.CLOUDINARY_API_KEY }} |
148 | | - CLOUDINARY_API_SECRET=${{ secrets.CLOUDINARY_API_SECRET }} |
149 | | - NEXT_PUBLIC_GA_ID=${{ secrets.NEXT_PUBLIC_GA_ID }} |
150 | | - NEXT_PUBLIC_BASE_URL=https://devweekends.com |
151 | | - ENVEOF |
152 | | - # Restart the app with PM2 |
153 | | - pm2 restart web-platform --update-env || pm2 start server.js --name web-platform |
154 | | - pm2 save |
155 | | -
|
0 commit comments