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