Skip to content

Merge pull request #1 from PythonTilk/backend #1

Merge pull request #1 from PythonTilk/backend

Merge pull request #1 from PythonTilk/backend #1

Workflow file for this run

name: Deploy
on:
push:
branches: [ main, demo ]
workflow_run:
workflows: ["Test Suite"]
types:
- completed
branches: [ main, demo ]
jobs:
deploy-staging:
runs-on: ubuntu-latest
name: Deploy to Staging
if: github.ref == 'refs/heads/demo' && github.event.workflow_run.conclusion == 'success'
environment:
name: staging
url: https://staging.notevault.app
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '18'
cache: 'npm'
- name: Install dependencies
run: |
npm ci
cd server
npm ci
- name: Run tests before deploy
run: npm run test:unit
- name: Build frontend
run: npm run build
- name: Build backend
run: |
cd server
# Backend doesn't need building for Node.js, but we can run prep tasks
echo "✅ Backend ready for deployment"
- name: Create deployment package
run: |
# Create deployment archive
tar -czf notevault-staging.tar.gz \
--exclude=node_modules \
--exclude=.git \
--exclude=.github \
--exclude=*.tar.gz \
.
- name: Upload deployment artifact
uses: actions/upload-artifact@v4
with:
name: staging-deployment
path: notevault-staging.tar.gz
retention-days: 7
- name: Simulate deployment
run: |
echo "🚀 Deploying to staging environment..."
echo "✅ Staging deployment completed"
# In a real deployment, you would:
# 1. Upload to your server
# 2. Run database migrations
# 3. Restart services
# 4. Run health checks
deploy-production:
runs-on: ubuntu-latest
name: Deploy to Production
if: github.ref == 'refs/heads/main' && github.event.workflow_run.conclusion == 'success'
environment:
name: production
url: https://notevault.app
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '18'
cache: 'npm'
- name: Install dependencies
run: |
npm ci
cd server
npm ci
- name: Run full test suite
run: |
npm run test:unit
npm run build
- name: Security check before production
run: |
npm audit --audit-level=high
cd server
npm audit --audit-level=high
- name: Build for production
env:
NODE_ENV: production
run: |
npm run build
cd server
echo "✅ Backend ready for production"
- name: Create production package
run: |
# Create production deployment archive
tar -czf notevault-production.tar.gz \
--exclude=node_modules \
--exclude=.git \
--exclude=.github \
--exclude=src \
--exclude=*.tar.gz \
.svelte-kit/output server package.json
- name: Upload production artifact
uses: actions/upload-artifact@v4
with:
name: production-deployment
path: notevault-production.tar.gz
retention-days: 30
- name: Simulate production deployment
run: |
echo "🚀 Deploying to production environment..."
echo "✅ Production deployment completed"
# In a real deployment, you would:
# 1. Create backup of current deployment
# 2. Upload to production server
# 3. Run database migrations carefully
# 4. Restart services with zero downtime
# 5. Run comprehensive health checks
# 6. Rollback if health checks fail
post-deploy-tests:
runs-on: ubuntu-latest
name: Post-Deploy Health Check
needs: [deploy-staging, deploy-production]
if: always() && (needs.deploy-staging.result == 'success' || needs.deploy-production.result == 'success')
steps:
- name: Health check staging
if: needs.deploy-staging.result == 'success'
run: |
echo "🔍 Running post-deploy health checks for staging..."
# curl -f https://staging.notevault.app/health || exit 1
echo "✅ Staging health check passed"
- name: Health check production
if: needs.deploy-production.result == 'success'
run: |
echo "🔍 Running post-deploy health checks for production..."
# curl -f https://notevault.app/health || exit 1
echo "✅ Production health check passed"
- name: Notify deployment status
run: |
echo "# Deployment Summary" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
if [[ "${{ needs.deploy-staging.result }}" == "success" ]]; then
echo "🚀 **Staging deployment:** ✅ Success" >> $GITHUB_STEP_SUMMARY
fi
if [[ "${{ needs.deploy-production.result }}" == "success" ]]; then
echo "🚀 **Production deployment:** ✅ Success" >> $GITHUB_STEP_SUMMARY
fi
echo "" >> $GITHUB_STEP_SUMMARY
echo "_Deployed at: $(date)_" >> $GITHUB_STEP_SUMMARY