/ .forgejo / workflows / ci.yml
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