Files
blackroad-operating-system/.github/workflows/deploy-multi-cloud.yml
Alexa Louise c00b6ee2a1 fix: Add Railway deployment configs and GitHub workflows
- Add Railway configuration (railway.toml)
- Add GitHub Actions workflows
  - Railway deployment automation
  - Python/Node.js testing
  - Health check monitoring
- Add GitHub templates (CODEOWNERS, PR template)
- Add requirements files if missing
- Standardize deployment across all services

This ensures consistent deployment patterns across the entire
BlackRoad OS infrastructure.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-10 15:35:09 -06:00

155 lines
4.2 KiB
YAML

name: 🌍 Deploy Multi-Cloud
on:
push:
branches: [master, main]
workflow_dispatch:
env:
NODE_VERSION: '20'
jobs:
deploy-cloudflare:
name: ☁️ Cloudflare Pages
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Deploy changed domains
run: |
# Will be triggered by main deploy-cloudflare-all.yml workflow
echo "✅ Cloudflare deployment handled by deploy-cloudflare-all.yml"
deploy-vercel:
name: ▲ Vercel
runs-on: ubuntu-latest
if: github.event_name == 'push'
strategy:
matrix:
domain:
- math-blackroad-io
- blackroadai
- lucidia-earth
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
- name: Install Vercel CLI
run: npm install -g vercel
- name: Deploy to Vercel
working-directory: domains/${{ matrix.domain }}
run: |
if [ -f "package.json" ]; then
npm ci
npm run build || true
fi
vercel --prod --yes --token=${{ secrets.VERCEL_TOKEN }}
env:
VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }}
VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }}
VERCEL_PROJECT_ID: blackroad-${{ matrix.domain }}
deploy-railway:
name: 🚂 Railway
runs-on: ubuntu-latest
if: github.event_name == 'push'
steps:
- uses: actions/checkout@v4
- name: Install Railway CLI
run: npm install -g @railway/cli
- name: Deploy to Railway
run: |
railway up --detach
env:
RAILWAY_TOKEN: ${{ secrets.RAILWAY_TOKEN }}
deploy-digitalocean:
name: 🌊 DigitalOcean
runs-on: ubuntu-latest
if: github.event_name == 'push'
steps:
- uses: actions/checkout@v4
- name: Setup SSH
run: |
mkdir -p ~/.ssh
echo "${{ secrets.DIGITALOCEAN_SSH_KEY }}" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan -H 159.65.43.12 >> ~/.ssh/known_hosts
- name: Deploy to Droplet
run: |
rsync -avz --exclude='.git' --exclude='node_modules' \
./ root@159.65.43.12:/opt/blackroad/
ssh root@159.65.43.12 'cd /opt/blackroad && ./deploy.sh restart'
deploy-pis:
name: 🥧 Raspberry Pi Fleet
runs-on: ubuntu-latest
if: github.event_name == 'push'
steps:
- name: Trigger Pi deployment workflow
run: |
# This will trigger the deploy-to-pis.yml workflow
echo "✅ Pi deployment handled by deploy-to-pis.yml"
update-notion:
name: 📝 Update Notion
runs-on: ubuntu-latest
needs: [deploy-cloudflare, deploy-vercel, deploy-railway, deploy-digitalocean]
if: always()
steps:
- uses: actions/checkout@v4
- name: Log deployment to Notion
run: |
# TODO: Use Notion API to create deployment log page
echo "Deployment completed at $(date)"
echo "Platforms: Cloudflare, Vercel, Railway, DigitalOcean, Pis"
env:
NOTION_TOKEN: ${{ secrets.NOTION_TOKEN }}
update-asana:
name: 📊 Update Asana
runs-on: ubuntu-latest
needs: [deploy-cloudflare, deploy-vercel, deploy-railway, deploy-digitalocean]
if: always()
steps:
- uses: actions/checkout@v4
- name: Update Asana tasks
run: |
# TODO: Use Asana API to mark deployment task complete
echo "Deployment task updated in Asana"
env:
ASANA_TOKEN: ${{ secrets.ASANA_TOKEN }}
notify-success:
name: ✅ Multi-Cloud Deploy Complete
runs-on: ubuntu-latest
needs: [deploy-vercel, deploy-railway, deploy-digitalocean, update-notion, update-asana]
if: always()
steps:
- name: Summary
run: |
echo "🎉 Multi-Cloud Deployment Complete!"
echo ""
echo "Deployed to:"
echo " ☁️ Cloudflare Pages"
echo " ▲ Vercel"
echo " 🚂 Railway"
echo " 🌊 DigitalOcean"
echo " 🥧 Raspberry Pi Fleet"
echo ""
echo "Updated:"
echo " 📝 Notion documentation"
echo " 📊 Asana project tasks"