mirror of
https://github.com/blackboxprogramming/BlackRoad-Operating-System.git
synced 2026-03-17 07:57:19 -05:00
cleanup: remove unused workflow template
This commit is contained in:
@@ -1,292 +0,0 @@
|
|||||||
# Railway Deployment Workflow Template
|
|
||||||
# ======================================
|
|
||||||
#
|
|
||||||
# This template can be copied to any BlackRoad repository that deploys to Railway.
|
|
||||||
#
|
|
||||||
# How to use:
|
|
||||||
# -----------
|
|
||||||
# 1. Copy this file to .github/workflows/railway-deploy.yml in your repo
|
|
||||||
# 2. Update the service name and environment variables as needed
|
|
||||||
# 3. Add required GitHub secrets:
|
|
||||||
# - RAILWAY_TOKEN (get from: railway tokens create)
|
|
||||||
# - RAILWAY_SERVICE_ID (optional, for specific service targeting)
|
|
||||||
# 4. Push to main branch to trigger deployment
|
|
||||||
#
|
|
||||||
# Required GitHub Secrets:
|
|
||||||
# -----------------------
|
|
||||||
# RAILWAY_TOKEN - Railway API token for CLI authentication
|
|
||||||
#
|
|
||||||
# Optional GitHub Secrets/Variables:
|
|
||||||
# ---------------------------------
|
|
||||||
# RAILWAY_SERVICE_ID - Specific Railway service ID to deploy
|
|
||||||
# SENTRY_DSN - Sentry error monitoring DSN
|
|
||||||
#
|
|
||||||
# Customization:
|
|
||||||
# -------------
|
|
||||||
# - Change trigger branches (currently: main)
|
|
||||||
# - Add/remove build steps
|
|
||||||
# - Configure environment-specific variables
|
|
||||||
# - Add post-deploy notifications (Slack, Discord, etc.)
|
|
||||||
|
|
||||||
name: Deploy to Railway
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
paths-ignore:
|
|
||||||
- '**.md'
|
|
||||||
- 'docs/**'
|
|
||||||
- '.github/**'
|
|
||||||
- '!.github/workflows/railway-deploy.yml'
|
|
||||||
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
environment:
|
|
||||||
description: 'Deployment environment'
|
|
||||||
required: true
|
|
||||||
type: choice
|
|
||||||
options:
|
|
||||||
- production
|
|
||||||
- staging
|
|
||||||
default: 'production'
|
|
||||||
|
|
||||||
# Only allow one deployment at a time
|
|
||||||
concurrency:
|
|
||||||
group: railway-deploy-${{ github.ref }}
|
|
||||||
cancel-in-progress: false
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
deploy:
|
|
||||||
name: Deploy to Railway
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
timeout-minutes: 15
|
|
||||||
|
|
||||||
# Set deployment environment
|
|
||||||
environment:
|
|
||||||
name: ${{ github.event.inputs.environment || 'production' }}
|
|
||||||
url: https://os.blackroad.systems # Update with your actual URL
|
|
||||||
|
|
||||||
steps:
|
|
||||||
# ========================================
|
|
||||||
# 1. Checkout code
|
|
||||||
# ========================================
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
# ========================================
|
|
||||||
# 2. Install Railway CLI
|
|
||||||
# ========================================
|
|
||||||
- name: Install Railway CLI
|
|
||||||
run: |
|
|
||||||
curl -fsSL https://railway.app/install.sh | sh
|
|
||||||
echo "$HOME/.railway/bin" >> $GITHUB_PATH
|
|
||||||
|
|
||||||
- name: Verify Railway installation
|
|
||||||
run: railway --version
|
|
||||||
|
|
||||||
# ========================================
|
|
||||||
# 3. Set up environment
|
|
||||||
# ========================================
|
|
||||||
- name: Set up environment variables
|
|
||||||
run: |
|
|
||||||
echo "RAILWAY_TOKEN=${{ secrets.RAILWAY_TOKEN }}" >> $GITHUB_ENV
|
|
||||||
echo "GIT_SHA=${GITHUB_SHA::8}" >> $GITHUB_ENV
|
|
||||||
echo "DEPLOY_TIME=$(date -u +'%Y-%m-%d %H:%M:%S UTC')" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
# ========================================
|
|
||||||
# 4. Pre-deploy validation (optional)
|
|
||||||
# ========================================
|
|
||||||
- name: Validate environment variables
|
|
||||||
run: |
|
|
||||||
if [ -z "${{ secrets.RAILWAY_TOKEN }}" ]; then
|
|
||||||
echo "❌ Error: RAILWAY_TOKEN secret is not set"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
echo "✅ Environment variables validated"
|
|
||||||
|
|
||||||
# ========================================
|
|
||||||
# 5. Deploy to Railway
|
|
||||||
# ========================================
|
|
||||||
- name: Deploy to Railway
|
|
||||||
id: deploy
|
|
||||||
env:
|
|
||||||
RAILWAY_TOKEN: ${{ secrets.RAILWAY_TOKEN }}
|
|
||||||
run: |
|
|
||||||
echo "🚀 Deploying to Railway..."
|
|
||||||
echo "Environment: ${{ github.event.inputs.environment || 'production' }}"
|
|
||||||
echo "Commit: ${GITHUB_SHA::8}"
|
|
||||||
echo "Branch: ${GITHUB_REF_NAME}"
|
|
||||||
|
|
||||||
# Deploy using Railway CLI
|
|
||||||
# If RAILWAY_SERVICE_ID is set, deploy to specific service
|
|
||||||
if [ -n "${{ secrets.RAILWAY_SERVICE_ID }}" ]; then
|
|
||||||
railway up \
|
|
||||||
--service "${{ secrets.RAILWAY_SERVICE_ID }}" \
|
|
||||||
--detach
|
|
||||||
else
|
|
||||||
railway up --detach
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "✅ Deployment initiated"
|
|
||||||
|
|
||||||
# ========================================
|
|
||||||
# 6. Wait for deployment and health check
|
|
||||||
# ========================================
|
|
||||||
- name: Wait for deployment
|
|
||||||
id: wait
|
|
||||||
env:
|
|
||||||
RAILWAY_TOKEN: ${{ secrets.RAILWAY_TOKEN }}
|
|
||||||
run: |
|
|
||||||
echo "⏳ Waiting for deployment to complete..."
|
|
||||||
|
|
||||||
# Wait up to 5 minutes for deployment
|
|
||||||
MAX_WAIT=300
|
|
||||||
ELAPSED=0
|
|
||||||
INTERVAL=10
|
|
||||||
|
|
||||||
while [ $ELAPSED -lt $MAX_WAIT ]; do
|
|
||||||
# Check deployment status (simplified - adjust based on Railway CLI output)
|
|
||||||
STATUS=$(railway status --json 2>/dev/null || echo '{"status":"unknown"}')
|
|
||||||
|
|
||||||
echo "Status check at ${ELAPSED}s: Deployment in progress..."
|
|
||||||
|
|
||||||
# Sleep and increment
|
|
||||||
sleep $INTERVAL
|
|
||||||
ELAPSED=$((ELAPSED + INTERVAL))
|
|
||||||
done
|
|
||||||
|
|
||||||
echo "⏰ Deployment wait period completed"
|
|
||||||
|
|
||||||
# ========================================
|
|
||||||
# 7. Health check (optional but recommended)
|
|
||||||
# ========================================
|
|
||||||
- name: Health check
|
|
||||||
id: health
|
|
||||||
run: |
|
|
||||||
echo "🏥 Running health check..."
|
|
||||||
|
|
||||||
# Update with your actual health endpoint
|
|
||||||
HEALTH_URL="https://os.blackroad.systems/health"
|
|
||||||
|
|
||||||
# Try health check up to 5 times
|
|
||||||
MAX_ATTEMPTS=5
|
|
||||||
ATTEMPT=1
|
|
||||||
|
|
||||||
while [ $ATTEMPT -le $MAX_ATTEMPTS ]; do
|
|
||||||
echo "Health check attempt $ATTEMPT/$MAX_ATTEMPTS..."
|
|
||||||
|
|
||||||
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" "$HEALTH_URL" || echo "000")
|
|
||||||
|
|
||||||
if [ "$HTTP_CODE" = "200" ]; then
|
|
||||||
echo "✅ Health check passed (HTTP $HTTP_CODE)"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "⚠️ Health check returned HTTP $HTTP_CODE, retrying..."
|
|
||||||
sleep 10
|
|
||||||
ATTEMPT=$((ATTEMPT + 1))
|
|
||||||
done
|
|
||||||
|
|
||||||
echo "❌ Health check failed after $MAX_ATTEMPTS attempts"
|
|
||||||
exit 1
|
|
||||||
|
|
||||||
# ========================================
|
|
||||||
# 8. Post-deploy notifications (optional)
|
|
||||||
# ========================================
|
|
||||||
- name: Notify deployment success
|
|
||||||
if: success()
|
|
||||||
run: |
|
|
||||||
echo "✅ Deployment successful!"
|
|
||||||
echo "SHA: ${GITHUB_SHA::8}"
|
|
||||||
echo "Time: $(date -u +'%Y-%m-%d %H:%M:%S UTC')"
|
|
||||||
|
|
||||||
# Add Slack/Discord webhook here if needed
|
|
||||||
# Example:
|
|
||||||
# curl -X POST -H 'Content-type: application/json' \
|
|
||||||
# --data '{"text":"✅ Deployed to Railway: '"${GITHUB_SHA::8}"'"}' \
|
|
||||||
# ${{ secrets.SLACK_WEBHOOK_URL }}
|
|
||||||
|
|
||||||
# ========================================
|
|
||||||
# 9. Handle deployment failure
|
|
||||||
# ========================================
|
|
||||||
- name: Notify deployment failure
|
|
||||||
if: failure()
|
|
||||||
run: |
|
|
||||||
echo "❌ Deployment failed!"
|
|
||||||
echo "SHA: ${GITHUB_SHA::8}"
|
|
||||||
echo "Check Railway logs for details"
|
|
||||||
|
|
||||||
# Add Slack/Discord webhook here if needed
|
|
||||||
|
|
||||||
# ========================================
|
|
||||||
# 10. Send to Sentry (optional)
|
|
||||||
# ========================================
|
|
||||||
- name: Create Sentry release
|
|
||||||
if: success() && vars.SENTRY_DSN != ''
|
|
||||||
env:
|
|
||||||
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
|
|
||||||
SENTRY_ORG: blackroad
|
|
||||||
SENTRY_PROJECT: blackroad-os
|
|
||||||
run: |
|
|
||||||
# Install Sentry CLI
|
|
||||||
curl -sL https://sentry.io/get-cli/ | bash
|
|
||||||
|
|
||||||
# Create release
|
|
||||||
sentry-cli releases new "${GITHUB_SHA::8}"
|
|
||||||
sentry-cli releases set-commits "${GITHUB_SHA::8}" --auto
|
|
||||||
sentry-cli releases finalize "${GITHUB_SHA::8}"
|
|
||||||
sentry-cli releases deploys "${GITHUB_SHA::8}" new -e production
|
|
||||||
|
|
||||||
echo "✅ Sentry release created"
|
|
||||||
|
|
||||||
# ========================================
|
|
||||||
# Optional: Smoke tests after deployment
|
|
||||||
# ========================================
|
|
||||||
smoke-tests:
|
|
||||||
name: Smoke Tests
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
needs: deploy
|
|
||||||
if: success()
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Run smoke tests
|
|
||||||
run: |
|
|
||||||
echo "🧪 Running smoke tests..."
|
|
||||||
|
|
||||||
# Basic smoke tests
|
|
||||||
BASE_URL="https://os.blackroad.systems"
|
|
||||||
|
|
||||||
# Test 1: Health endpoint
|
|
||||||
echo "Test 1: Health endpoint"
|
|
||||||
curl -f "$BASE_URL/health" || exit 1
|
|
||||||
|
|
||||||
# Test 2: API documentation
|
|
||||||
echo "Test 2: API documentation"
|
|
||||||
curl -f "$BASE_URL/api/docs" || exit 1
|
|
||||||
|
|
||||||
# Test 3: Frontend loads
|
|
||||||
echo "Test 3: Frontend loads"
|
|
||||||
curl -f "$BASE_URL/" || exit 1
|
|
||||||
|
|
||||||
echo "✅ All smoke tests passed"
|
|
||||||
|
|
||||||
# ========================================
|
|
||||||
# Workflow Summary
|
|
||||||
# ========================================
|
|
||||||
#
|
|
||||||
# This workflow:
|
|
||||||
# 1. Triggers on push to main or manual dispatch
|
|
||||||
# 2. Installs Railway CLI
|
|
||||||
# 3. Validates environment
|
|
||||||
# 4. Deploys to Railway
|
|
||||||
# 5. Waits for deployment
|
|
||||||
# 6. Runs health checks
|
|
||||||
# 7. Sends notifications
|
|
||||||
# 8. Creates Sentry release (optional)
|
|
||||||
# 9. Runs smoke tests (optional)
|
|
||||||
#
|
|
||||||
# Customize as needed for your specific service!
|
|
||||||
Reference in New Issue
Block a user