From b05f820b2d8275f8730be056df67e3f89cc4bb7e Mon Sep 17 00:00:00 2001 From: AI Agent Bot Date: Sat, 21 Feb 2026 04:26:33 -0600 Subject: [PATCH] fix: remove duplicate CI pipeline that ran on every push to main ci.yml and main-ci.yml both triggered on push to main with identical CI steps, causing every merge to run the full suite twice. main-ci.yml already covers all CI checks plus release handling, making ci.yml entirely redundant. Co-Authored-By: Claude Opus 4.6 --- .github/workflows/ci.yml | 108 --------------------------------------- CLAUDE.md | 5 +- 2 files changed, 2 insertions(+), 111 deletions(-) delete mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml deleted file mode 100644 index cc95d78..0000000 --- a/.github/workflows/ci.yml +++ /dev/null @@ -1,108 +0,0 @@ ---- -name: CI - -on: - push: - branches: [main] - workflow_dispatch: - -concurrency: - group: ci-${{ github.ref }} - cancel-in-progress: true - -env: - DOCKER_BUILDKIT: 1 - COMPOSE_DOCKER_CLI_BUILD: 1 - -jobs: - ci: - name: Rust PSP CI - runs-on: self-hosted - timeout-minutes: 30 - - steps: - - name: Pre-checkout cleanup - run: | - # Remove root-owned files left by Docker containers from previous runs. - # Without this, actions/checkout fails with EACCES on self-hosted runners. - for item in outputs target/psp-std-sysroot psp_output_file.log .git/index.lock; do - if [ -d "$item" ] || [ -f "$item" ]; then - docker run --rm -v "$(pwd):/workspace" busybox:1.36.1 sh -c \ - "rm -rf /workspace/$item" 2>/dev/null || \ - sudo rm -rf "$item" 2>/dev/null || true - fi - done - - - name: Checkout - uses: actions/checkout@v4 - - - name: Set UID/GID - run: | - echo "USER_ID=$(id -u)" >> $GITHUB_ENV - echo "GROUP_ID=$(id -g)" >> $GITHUB_ENV - - # ── Formatting ────────────────────────────────────────────── - - name: Format check (cargo-psp) - run: docker compose --profile ci run --rm rust-ci cargo fmt --manifest-path cargo-psp/Cargo.toml --all -- --check - - - name: Format check (psp workspace) - run: docker compose --profile ci run --rm rust-ci cargo +nightly fmt --all -- --check - - # ── Linting ───────────────────────────────────────────────── - - name: Clippy (cargo-psp) - run: docker compose --profile ci run --rm rust-ci cargo clippy --manifest-path cargo-psp/Cargo.toml --all-targets -- -D warnings - - # ── Tests ─────────────────────────────────────────────────── - - name: Test (cargo-psp) - run: docker compose --profile ci run --rm rust-ci cargo test --manifest-path cargo-psp/Cargo.toml - - # ── Build ─────────────────────────────────────────────────── - - name: Build cargo-psp (release) - run: docker compose --profile ci run --rm rust-ci cargo build --manifest-path cargo-psp/Cargo.toml --release - - - name: Build with kernel feature - run: | - docker compose --profile ci run --rm -w /app/examples/kernel-mode rust-ci \ - bash -c 'export PATH="/app/cargo-psp/target/release:$PATH" && cargo +nightly psp' - - - name: Build CI test EBOOT - run: | - docker compose --profile ci run --rm -w /app/ci/tests rust-ci \ - bash -c 'export PATH="/app/cargo-psp/target/release:$PATH" && cargo +nightly psp' - - # ── License / Advisory ────────────────────────────────────── - - name: cargo-deny (psp workspace) - run: docker compose --profile ci run --rm rust-ci cargo deny check - - - name: cargo-deny (cargo-psp) - run: docker compose --profile ci run --rm rust-ci cargo deny --manifest-path cargo-psp/Cargo.toml check - - # ── PSP Emulator Test ─────────────────────────────────────── - - name: Run test EBOOT in PPSSPPHeadless - run: | - docker compose --profile psp run --rm ppsspp \ - /roms/debug/test_cases.EBOOT.PBP --timeout=10 2>/dev/null || true - - if [ -f psp_output_file.log ]; then - cat psp_output_file.log - if [ "$(tail -n 1 psp_output_file.log)" = "FINAL_SUCCESS" ]; then - echo "PSP tests passed" - else - echo "PSP tests failed" - exit 1 - fi - else - echo "No output log -- headless exited without crash (TIMEOUT ok)" - fi - - # ── Cleanup ──────────────────────────────────────────────────── - - name: Fix Docker file ownership - if: always() - run: | - # Fix root-owned files so the next run's checkout can clean them - for dir in target outputs; do - if [ -d "$dir" ]; then - docker run --rm -v "$(pwd)/$dir:/workspace" busybox:1.36.1 \ - chown -Rh "$(id -u):$(id -g)" /workspace 2>/dev/null || true - fi - done diff --git a/CLAUDE.md b/CLAUDE.md index b710cc0..c355ed7 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -118,9 +118,8 @@ Enables privileged PSP APIs: kernel memory partitions, interrupt handlers, PRX m ## CI/CD -Three GitHub Actions workflows: -- **`ci.yml`**: Push to main — fmt, clippy, test, build, deny, emulator test -- **`main-ci.yml`**: Main + version tags — full CI plus release binary creation +Two GitHub Actions workflows: +- **`main-ci.yml`**: Push to main + version tags — full CI (fmt, clippy, test, build, deny, emulator test) plus release binary creation and GitHub Release on tags/manual trigger - **`pr-validation.yml`**: PRs — full CI plus AI code reviews (Gemini/Codex), agent auto-fix (max 5 iterations) CI runs in Docker containers (`docker/rust-ci.Dockerfile` based on `rust:1.93-slim`). PSP tests run in PPSSPPHeadless emulator container.