-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add production deployment GH actions workflow
- Loading branch information
1 parent
bdbd3af
commit ed3ee58
Showing
2 changed files
with
75 additions
and
2 deletions.
There are no files selected for viewing
This file contains 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
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
name: Deploy to Production | ||
|
||
on: | ||
push: | ||
branches: [main] | ||
|
||
jobs: | ||
deploy: | ||
name: Deploy Process | ||
runs-on: ubuntu-latest | ||
environment: production | ||
steps: | ||
- name: Checkout Code | ||
uses: actions/checkout@v3 | ||
- name: Set up Node.js 18.x | ||
uses: actions/setup-node@v3 | ||
with: | ||
node-version: 18.x | ||
- name: Install Dependencies | ||
run: corepack enable && yarn install --immutable | ||
- name: Run unit tests | ||
run: yarn test | ||
- name: Build | ||
run: yarn build | ||
- name: Generate .env file | ||
run: | | ||
touch .env | ||
echo NODE_ENV=production >> .env | ||
echo GOOGLE_ACCOUNT_CLIENT=${{ secrets.GOOGLE_ACCOUNT_CLIENT }} >> .env | ||
echo GOOGLE_ACCOUNT_SECRET=${{ secrets.GOOGLE_ACCOUNT_SECRET }} >> .env | ||
echo GOOGLE_ACCOUNT_TOKEN=${{ secrets.GOOGLE_ACCOUNT_TOKEN }} >> .env | ||
echo GOOGLE_ACCOUNT_OAUTH_REDIRECT=${{ vars.GOOGLE_ACCOUNT_OAUTH_REDIRECT }} >> .env | ||
echo SLACK_APP_TOKEN=${{ secrets.SLACK_APP_TOKEN }} >> .env | ||
echo SLACK_OAUTH_TOKEN=${{ secrets.SLACK_OAUTH_TOKEN }} >> .env | ||
echo SLACK_SIGNING_SECRET=${{ secrets.SLACK_SIGNING_SECRET }} >> .env | ||
echo DEPLOY_COMMIT_SHA=${{ github.sha }} >> .env | ||
- name: Move files to dist | ||
run: | | ||
mv .env ./dist/ | ||
mv ./deploy/production/ecosystem.config.js ./dist/ | ||
- name: Copy files to server | ||
uses: appleboy/scp-action@master | ||
with: | ||
host: ${{ secrets.REMOTE_HOST }} | ||
username: ${{ secrets.REMOTE_USER }} | ||
key: ${{ secrets.REMOTE_KEY }} | ||
source: dist/ | ||
target: ~/minerva/ | ||
strip_components: 1 | ||
- name: Start pm2 process and monitor startup | ||
uses: appleboy/ssh-action@master | ||
with: | ||
host: ${{ secrets.REMOTE_HOST }} | ||
username: ${{ secrets.REMOTE_USER }} | ||
key: ${{ secrets.REMOTE_KEY }} | ||
script: | | ||
cd ~/minerva | ||
echo "Starting the application with PM2." | ||
pm2 start ecosystem.config.js | ||
echo "Waiting for the application to stabilize." | ||
sleep 10 | ||
# Check if PM2 started the application successfully | ||
echo "Checking PM2 process status..." | ||
if pm2 jlist | jq -e 'any(.[]; .name == "minerva" and .pm2_env.status == "online")' > /dev/null; then | ||
echo "PM2 application is running." | ||
exit 0 | ||
else | ||
echo "PM2 application has failed to start." | ||
exit 1 | ||
fi |