ci.yml
1 # AC/DC Home Website CI Pipeline 2 3 name: CI 4 5 on: 6 push: 7 branches: [main] 8 pull_request: 9 branches: [main] 10 11 jobs: 12 build: 13 name: Build & Test 14 runs-on: native 15 steps: 16 - name: Checkout 17 uses: actions/checkout@v4 18 19 - name: Setup Node.js 20 uses: actions/setup-node@v4 21 with: 22 node-version: '20' 23 24 - name: Setup acdc-design dependency 25 run: | 26 # Use pre-built acdc-design from shared CI directory 27 # This avoids build issues with Forgejo version being out of sync 28 DESIGN_SRC="/opt/ci/acdc-design" 29 if [ -d "$DESIGN_SRC" ]; then 30 cp -r "$DESIGN_SRC" ../acdc-design 31 echo "Using pre-built acdc-design from $DESIGN_SRC" 32 else 33 echo "ERROR: Pre-built acdc-design not found at $DESIGN_SRC" 34 exit 1 35 fi 36 37 - name: Install dependencies 38 run: npm ci --legacy-peer-deps || npm install --legacy-peer-deps 39 40 - name: Type check 41 run: npm run typecheck 42 43 - name: Lint 44 run: npm run lint 45 46 - name: Build 47 run: npm run build 48 49 - name: Upload build artifacts 50 uses: https://code.forgejo.org/forgejo/upload-artifact@v4 51 with: 52 name: dist 53 path: dist/ 54 retention-days: 7 55 56 deploy: 57 name: Deploy 58 runs-on: native 59 needs: build 60 if: github.ref == 'refs/heads/main' 61 steps: 62 - name: Download artifacts 63 uses: https://code.forgejo.org/forgejo/download-artifact@v4 64 with: 65 name: dist 66 path: dist/ 67 68 - name: Deploy to server 69 run: | 70 SERVER="devops@source.ac-dc.network" 71 DEPLOY_DIR="/var/www/home" 72 73 echo "=== Deploying to $DEPLOY_DIR ===" 74 75 # Create directory if needed 76 ssh $SERVER "sudo mkdir -p $DEPLOY_DIR && sudo chown devops:devops $DEPLOY_DIR" 77 78 # Sync files 79 rsync -avz --delete dist/ $SERVER:$DEPLOY_DIR/ 80 81 echo "=== Deployment complete ===" 82 echo "URL: https://ac-dc.network" 83 84 # Sync to Radicle after successful build 85 radicle-sync: 86 runs-on: native 87 needs: build 88 if: github.ref == 'refs/heads/main' 89 steps: 90 - name: Checkout from Forgejo 91 uses: actions/checkout@v4 92 with: 93 fetch-depth: 0 94 path: forgejo-src 95 96 - name: Sync to Radicle 97 run: | 98 set -e 99 # Use system radicle installation 100 export RAD_HOME="/home/devops/.radicle" 101 export PATH="$RAD_HOME/bin:$PATH" 102 RID="rad:z3t7JJ92qigRsAsb6s4sLrUgMbvQK" 103 104 rm -rf radicle-repo 105 NODE_ID=$(rad self --nid 2>/dev/null || rad self | grep -oP 'Node ID \(NID\): \K[a-z0-9]+') 106 echo "Local node ID: $NODE_ID" 107 108 if ! rad clone "$RID" radicle-repo 2>&1; then 109 echo "rad clone failed, initializing from Forgejo source" 110 rm -rf radicle-repo 111 mkdir -p radicle-repo 112 cd radicle-repo 113 git init 114 git remote add rad "rad://${RID#rad:}/${NODE_ID}" 115 git remote add forgejo ../forgejo-src 116 git fetch forgejo main 117 git checkout -b main forgejo/main 118 rad push || echo "Initial push may require manual seeding" 119 else 120 cd radicle-repo 121 git remote add forgejo ../forgejo-src 2>/dev/null || git remote set-url forgejo ../forgejo-src 122 git fetch forgejo 123 git checkout main 2>/dev/null || git checkout -b main 124 git merge --ff-only forgejo/main || git reset --hard forgejo/main 125 git push rad main 2>/dev/null || rad push 126 fi 127