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,37 +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
3255 cd ./packages/express
33- yarn remove @types/jest
34- # yarn remove @types/pouchdb
3556 yarn build
57+
3658 - name : Deploy and run
3759 run : |
3860 # Create necessary directories
39- ssh ${{ secrets.DO_USERNAME }}@eduquilt.com mkdir -p /home/skuilder/dist/express/${{github.SHA }}
40- 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
4163
4264 # Copy build artifacts and dependencies
43- rsync -rl ./packages/express/dist/ ${{ secrets.DO_USERNAME }}@eduquilt.com:/home/skuilder/dist/express/${{github.SHA}}
44- rsync -rl ./packages/express/assets/ ${{ secrets.DO_USERNAME }}@eduquilt.com:/home/skuilder/dist/express/${{github.SHA}}/assets
45- rsync -rl ./packages/express/package.json ${{ secrets.DO_USERNAME }}@eduquilt.com:/home/skuilder/dist/express/${{github.SHA}}
46- 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
47100
48101 # Update symlink to new version
49102 ssh ${{ secrets.DO_USERNAME }}@eduquilt.com ln -sfn /home/skuilder/dist/express/${{github.SHA}} /home/skuilder/api
63116 sleep 10s
64117 - name : Verify deployment
65118 run : |
119+ echo "Verifying Express API deployment..."
66120 max_retries=3
67121 retry_count=0
68122 while [ $retry_count -lt $max_retries ]; do
@@ -81,6 +135,12 @@ jobs:
81135
82136 if echo "$response" | grep -q "${{ github.SHA }}"; then
83137 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+
84144 exit 0
85145 else
86146 echo "Current version not found in production. Retrying..."
0 commit comments