33 workflow_dispatch :
44 inputs :
55 reason :
6- description : ' Reason for running the workflow '
6+ description : ' Reason for deploying Express API '
77 required : true
88 default : ' Manual trigger'
99jobs :
@@ -13,39 +13,90 @@ jobs:
1313 - run : echo "🎉 The job was triggered by a ${{ github.event_name }} on commit ${{ github.SHA }}"
1414 - name : Check out repository code
1515 uses : actions/checkout@v4
16+
1617 - name : Set up Node.js
17- uses : actions/setup-node@v3
18+ uses : actions/setup-node@v4
1819 with :
1920 node-version : 18
2021 cache : ' yarn'
21- - name : SSH to DO
22+ - name : Enable Corepack
23+ run : corepack enable
24+
25+ - name : Configure SSH key
2226 uses : shimataro/ssh-key-action@v2
2327 with :
2428 key : ${{ secrets.DO_SSH_KEY }}
2529 name : id_rsa
2630 known_hosts : ${{ secrets.KNOWN_HOSTS }}
27- - name : Build
28- env :
29- YARN_IGNORE_NODE : 1
31+
32+ - name : Install dependencies
33+ run : yarn install
34+
35+ - name : Build workspace dependencies
36+ run : |
37+ # Build common package if it exists
38+ if [ -d "./packages/common" ]; then
39+ echo "Building @vue-skuilder/common package..."
40+ cd ./packages/common
41+ yarn build
42+ cd ../..
43+ fi
44+
45+ # Build db package if it exists
46+ if [ -d "./packages/db" ]; then
47+ echo "Building @vue-skuilder/db package..."
48+ cd ./packages/db
49+ yarn build
50+ cd ../..
51+ fi
52+
53+ - name : Build Express API
3054 run : |
31- npm install -g yarn@1.22.19
32- npm install -g lerna@3.22.1
33- lerna bootstrap
3455 cd ./packages/express
35- yarn remove @types/jest
36- # yarn remove @types/pouchdb
3756 yarn build
57+
3858 - name : Deploy and run
3959 run : |
4060 # Create necessary directories
41- ssh ${{ secrets.DO_USERNAME }}@eduquilt.com mkdir -p /home/skuilder/dist/express/${{github.SHA }}
42- ssh ${{ secrets.DO_USERNAME }}@eduquilt.com mkdir -p /home/skuilder/dist/express/${{github.SHA }}/assets
61+ ssh ${{ secrets.DO_USERNAME }}@eduquilt.com mkdir -p /home/skuilder/dist/express/${{github.sha }}
62+ ssh ${{ secrets.DO_USERNAME }}@eduquilt.com mkdir -p /home/skuilder/dist/express/${{github.sha }}/assets
4363
4464 # Copy build artifacts and dependencies
45- rsync -rl ./packages/express/dist/ ${{ secrets.DO_USERNAME }}@eduquilt.com:/home/skuilder/dist/express/${{github.SHA}}
46- rsync -rl ./packages/express/assets/ ${{ secrets.DO_USERNAME }}@eduquilt.com:/home/skuilder/dist/express/${{github.SHA}}/assets
47- rsync -rl ./packages/express/package.json ${{ secrets.DO_USERNAME }}@eduquilt.com:/home/skuilder/dist/express/${{github.SHA}}
48- rsync -rl ./packages/express/node_modules/ ${{ secrets.DO_USERNAME }}@eduquilt.com:/home/skuilder/dist/express/${{github.SHA}}/node_modules
65+ rsync -rl ./packages/express/dist/ ${{ secrets.DO_USERNAME }}@eduquilt.com:/home/skuilder/dist/express/${{github.sha}}
66+ rsync -rl ./packages/express/assets/ ${{ secrets.DO_USERNAME }}@eduquilt.com:/home/skuilder/dist/express/${{github.sha}}/assets
67+ rsync -rl ./packages/express/package.json ${{ secrets.DO_USERNAME }}@eduquilt.com:/home/skuilder/dist/express/${{github.sha}}
68+
69+ # Handle workspace dependencies by copying them to the server
70+ if [ -d "./packages/common" ]; then
71+ echo "Copying @vue-skuilder/common package..."
72+ ssh ${{ secrets.DO_USERNAME }}@eduquilt.com mkdir -p /home/skuilder/dist/common/dist
73+ rsync -rl ./packages/common/dist/ ${{ secrets.DO_USERNAME }}@eduquilt.com:/home/skuilder/dist/common/dist
74+ rsync -rl ./packages/common/package.json ${{ secrets.DO_USERNAME }}@eduquilt.com:/home/skuilder/dist/common/
75+ fi
76+
77+ if [ -d "./packages/db" ]; then
78+ echo "Copying @vue-skuilder/db package..."
79+ ssh ${{ secrets.DO_USERNAME }}@eduquilt.com mkdir -p /home/skuilder/dist/db/dist
80+ rsync -rl ./packages/db/dist/ ${{ secrets.DO_USERNAME }}@eduquilt.com:/home/skuilder/dist/db/dist
81+ rsync -rl ./packages/db/package.json ${{ secrets.DO_USERNAME }}@eduquilt.com:/home/skuilder/dist/db/
82+ fi
83+
84+ # Replace workspace references with file paths
85+ TMP_PKG=$(cat ./packages/express/package.json | sed 's|"@vue-skuilder/common": "workspace:^"|"@vue-skuilder/common": "file:/home/skuilder/dist/common"|g' | sed 's|"@vue-skuilder/db": "workspace:^"|"@vue-skuilder/db": "file:/home/skuilder/dist/db"|g')
86+ echo "$TMP_PKG" > ./packages/express/temp-package.json
87+ rsync -rl ./packages/express/temp-package.json ${{ secrets.DO_USERNAME }}@eduquilt.com:/home/skuilder/dist/express/${{github.sha}}/package.json
88+
89+ # Install dependencies on the server
90+ ssh ${{ secrets.DO_USERNAME }}@eduquilt.com "cd /home/skuilder/dist/express/${{github.sha}} && yarn install --production"
91+
92+ # Install dependencies for workspace packages
93+ if [ -d "./packages/common" ]; then
94+ ssh ${{ secrets.DO_USERNAME }}@eduquilt.com "cd /home/skuilder/dist/common && yarn install --production"
95+ fi
96+
97+ if [ -d "./packages/db" ]; then
98+ ssh ${{ secrets.DO_USERNAME }}@eduquilt.com "cd /home/skuilder/dist/db && yarn install --production"
99+ fi
49100
50101 # Update symlink to new version
51102 ssh ${{ secrets.DO_USERNAME }}@eduquilt.com ln -sfn /home/skuilder/dist/express/${{github.SHA}} /home/skuilder/api
65116 sleep 10s
66117 - name : Verify deployment
67118 run : |
119+ echo "Verifying Express API deployment..."
68120 max_retries=3
69121 retry_count=0
70122 while [ $retry_count -lt $max_retries ]; do
@@ -80,9 +132,15 @@ jobs:
80132 exit 1
81133 fi
82134 fi
83-
135+
84136 if echo "$response" | grep -q "${{ github.SHA }}"; then
85137 echo "Success. Current version found in production"
138+
139+ # Log deployment success
140+ echo "✅ Express API deployed successfully with version ${{ github.SHA }}"
141+ echo "✅ Deployment triggered by: ${{ github.event.inputs.reason }}"
142+ echo "✅ Deployment timestamp: $(date -u)"
143+
86144 exit 0
87145 else
88146 echo "Current version not found in production. Retrying..."
0 commit comments