/ .forgejo / workflows / ci.yml
ci.yml
  1  # Forgejo CI/CD for ACDC CLI
  2  name: CLI CI
  3  
  4  on:
  5    push:
  6      branches: [main, develop]
  7    pull_request:
  8      branches: [main]
  9  
 10  env:
 11    CARGO_TERM_COLOR: always
 12  
 13  jobs:
 14    build-test:
 15      name: Build & Test
 16      runs-on: native
 17      steps:
 18        - uses: actions/checkout@v4
 19  
 20        - name: Build
 21          run: cargo build --release
 22  
 23        - name: Test
 24          run: cargo test
 25  
 26        - name: Clippy
 27          run: cargo clippy -- -D warnings
 28  
 29        - name: Format
 30          run: cargo fmt --check
 31  
 32    release:
 33      name: Build Release
 34      runs-on: native
 35      needs: build-test
 36      if: github.ref == 'refs/heads/main'
 37      steps:
 38        - uses: actions/checkout@v4
 39  
 40        - name: Build release
 41          run: cargo build --release
 42  
 43        - name: Verify binary
 44          run: |
 45            ls -la target/release/acdc
 46            ./target/release/acdc --version || echo "Binary built successfully"
 47  
 48    radicle-sync:
 49      name: Radicle Sync
 50      runs-on: native
 51      if: github.ref == 'refs/heads/main' && github.event_name == 'push'
 52      steps:
 53        - name: Checkout from Forgejo
 54          uses: actions/checkout@v4
 55          with:
 56            fetch-depth: 0
 57            path: forgejo-src
 58  
 59        - name: Sync to Radicle
 60          run: |
 61            set -e
 62            export PATH=$HOME/.radicle/bin:$PATH
 63            RID="rad:z48nry8LJst7bU1qYQXnBM4Ngbmzb"
 64  
 65            rm -rf radicle-repo
 66            NODE_ID=$(rad self --nid 2>/dev/null || rad self | grep -oP 'Node ID \(NID\): \K[a-z0-9]+')
 67            echo "Local node ID: $NODE_ID"
 68  
 69            if ! rad clone "$RID" radicle-repo 2>&1; then
 70              echo "rad clone failed, initializing from Forgejo source"
 71              rm -rf radicle-repo
 72              mkdir -p radicle-repo
 73              cd radicle-repo
 74              git init
 75              git remote add rad "rad://${RID#rad:}/$NODE_ID"
 76              git remote add forgejo ../forgejo-src
 77              git fetch forgejo main
 78              git checkout -b main forgejo/main
 79              git push rad main
 80              echo "Radicle sync complete (initialized)"
 81              exit 0
 82            fi
 83  
 84            cd radicle-repo
 85            git remote add forgejo ../forgejo-src 2>/dev/null || git remote set-url forgejo ../forgejo-src
 86            git fetch forgejo main
 87            git checkout main 2>/dev/null || git checkout -b main
 88  
 89            if ! git merge --ff-only forgejo/main 2>/dev/null; then
 90              echo "Fast-forward failed, forcing sync to Forgejo state"
 91              git reset --hard forgejo/main
 92            fi
 93  
 94            EXPECTED_COMMIT=$(git rev-parse HEAD)
 95            echo "Expected commit: $EXPECTED_COMMIT"
 96  
 97            git push rad main || echo "Push command returned error (may be broken pipe)"
 98  
 99            sleep 2
100            RADICLE_HEAD=$(git -C ~/.radicle/storage/${RID#rad:} rev-parse --short=7 HEAD 2>/dev/null)
101            if [ "${EXPECTED_COMMIT:0:7}" = "$RADICLE_HEAD" ]; then
102              echo "Radicle sync verified: $RADICLE_HEAD"
103            else
104              echo "ERROR: Radicle sync verification failed"
105              echo "Expected: ${EXPECTED_COMMIT:0:7}, Got: $RADICLE_HEAD"
106              exit 1
107            fi
108  
109        - name: Cleanup artifacts
110          if: always()
111          run: |
112            # Clone alpha-delta-context to get cleanup script
113            if [ ! -d "../alpha-delta-context" ]; then
114              cd ..
115              git clone --depth 1 https://source.ac-dc.network/AlphaDeltaNetwork/alpha-delta-context.git || true
116              cd -
117            fi
118            
119            # Run cleanup from alpha-delta-context/tools
120            if [ -f "../alpha-delta-context/tools/cleanup-ci-artifacts.sh" ]; then
121              cd forgejo-src
122              bash ../alpha-delta-context/tools/cleanup-ci-artifacts.sh
123            else
124              echo "⚠️  Cleanup script not found, skipping"
125            fi