feat(agent): show waiting status in conversation pane #241
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: CI | |
| on: | |
| push: | |
| branches: [main, master, develop] | |
| pull_request: | |
| branches: [main, master, develop] | |
| workflow_dispatch: | |
| permissions: | |
| contents: read | |
| security-events: write | |
| actions: read | |
| issues: write # Sometimes needed | |
| pull-requests: write # Sometimes needed | |
| env: | |
| CARGO_TERM_COLOR: always | |
| RUST_BACKTRACE: 1 | |
| jobs: | |
| workflow-lint: | |
| name: Workflow lint | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Validate GitHub Actions workflows | |
| uses: raven-actions/actionlint@3d39aea434753780c3b3d4a1a31c854b4dbf49d7 # v2.2.0 | |
| with: | |
| version: 1.7.12 | |
| test: | |
| name: Test Suite | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [ubuntu-latest, macos-latest, windows-latest] | |
| rust: [stable, nightly] | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Install Rust toolchain | |
| uses: dtolnay/rust-toolchain@master | |
| with: | |
| toolchain: ${{ matrix.rust }} | |
| components: rustfmt, clippy | |
| - name: Install ripgrep (Linux) | |
| if: runner.os == 'Linux' | |
| run: sudo apt-get update && sudo apt-get install --yes ripgrep | |
| - name: Install ripgrep (macOS) | |
| if: runner.os == 'macOS' | |
| run: brew install ripgrep | |
| - name: Install ripgrep (Windows) | |
| if: runner.os == 'Windows' | |
| run: choco install ripgrep --yes --no-progress | |
| - name: Cache cargo registry | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.cargo/registry | |
| key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }} | |
| - name: Cache cargo index | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.cargo/git | |
| key: ${{ runner.os }}-cargo-git-${{ hashFiles('**/Cargo.lock') }} | |
| - name: Cache cargo build | |
| uses: actions/cache@v4 | |
| with: | |
| path: target | |
| key: ${{ runner.os }}-cargo-build-${{ matrix.rust }}-${{ hashFiles('**/Cargo.lock') }} | |
| - name: Limit Windows test concurrency | |
| if: runner.os == 'Windows' | |
| shell: bash | |
| run: echo "RUST_TEST_THREADS=1" >> "$GITHUB_ENV" | |
| - name: Run tests | |
| run: cargo test --all-targets --all-features --verbose | |
| - name: Run tests (no default features) | |
| run: cargo test --all-targets --no-default-features --verbose | |
| clippy: | |
| name: Clippy | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Install Rust toolchain | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| components: clippy | |
| - name: Cache Rust build artifacts | |
| uses: Swatinem/rust-cache@v2 | |
| - name: Deny every Clippy warning | |
| run: cargo clippy --all-targets --all-features -- -D warnings | |
| perf: | |
| name: Deterministic performance gate | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Install Rust toolchain | |
| uses: dtolnay/rust-toolchain@stable | |
| - name: Cache Rust build artifacts | |
| uses: Swatinem/rust-cache@v2 | |
| - name: Check bundled Husk callback budget | |
| run: cargo run --locked --release --example husk_cursor_bench -- --assert | |
| fmt: | |
| name: Rustfmt | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Install Rust toolchain | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| components: rustfmt | |
| - name: Check formatting | |
| run: cargo fmt --all -- --check | |
| self-check: | |
| name: Bundled Runtime Self-Check | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Install Rust toolchain | |
| uses: dtolnay/rust-toolchain@stable | |
| - name: Cache cargo registry | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.cargo/registry | |
| key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }} | |
| - name: Cache cargo index | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.cargo/git | |
| key: ${{ runner.os }}-cargo-git-${{ hashFiles('**/Cargo.lock') }} | |
| - name: Cache cargo build | |
| uses: actions/cache@v4 | |
| with: | |
| path: target | |
| key: ${{ runner.os }}-cargo-build-self-check-${{ hashFiles('**/Cargo.lock') }} | |
| - name: Initialize bundled runtime | |
| run: cargo run --locked -- --self-check | |
| changelog: | |
| name: Changelog | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Validate git-cliff configuration | |
| uses: orhun/git-cliff-action@f50e11560dce63f7c33227798f90b924471a88b5 | |
| with: | |
| version: v2.13.1 | |
| config: cliff.toml | |
| args: --unreleased | |
| env: | |
| OUTPUT: changelog-preview.md | |
| - name: Read release PR version | |
| if: startsWith(github.head_ref, 'release/v') | |
| id: release | |
| shell: bash | |
| env: | |
| HEAD_REF: ${{ github.head_ref }} | |
| run: echo "version=${HEAD_REF#release/v}" >> "$GITHUB_OUTPUT" | |
| - name: Regenerate release PR changelog | |
| if: startsWith(github.head_ref, 'release/v') | |
| uses: orhun/git-cliff-action@f50e11560dce63f7c33227798f90b924471a88b5 | |
| with: | |
| version: v2.13.1 | |
| config: cliff.toml | |
| args: --unreleased --tag v${{ steps.release.outputs.version }} --strip all | |
| env: | |
| OUTPUT: generated-release-changes.md | |
| - name: Verify release PR changelog | |
| if: startsWith(github.head_ref, 'release/v') | |
| shell: bash | |
| env: | |
| VERSION: ${{ steps.release.outputs.version }} | |
| run: | | |
| set -euo pipefail | |
| awk -v heading="## [$VERSION]" ' | |
| index($0, heading) == 1 { found = 1 } | |
| found && /^## \[/ && index($0, heading) != 1 { exit } | |
| found { print } | |
| ' CHANGELOG.md > committed-release-changes.md | |
| test -s committed-release-changes.md | |
| normalize_markdown() { | |
| awk ' | |
| NF { | |
| if (pending_blank && wrote) print "" | |
| wrote = 1 | |
| pending_blank = 0 | |
| next | |
| } | |
| wrote { pending_blank = 1 } | |
| ' "$1" | |
| } | |
| normalize_markdown committed-release-changes.md > normalized-committed-release-changes.md | |
| normalize_markdown generated-release-changes.md > normalized-generated-release-changes.md | |
| diff -u normalized-committed-release-changes.md normalized-generated-release-changes.md | |
| build: | |
| name: Build | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [ubuntu-latest, macos-latest, windows-latest] | |
| include: | |
| - os: ubuntu-latest | |
| target: x86_64-unknown-linux-gnu | |
| - os: macos-latest | |
| target: x86_64-apple-darwin | |
| - os: windows-latest | |
| target: x86_64-pc-windows-msvc | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Install Rust toolchain | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| targets: ${{ matrix.target }} | |
| - name: Cache cargo registry | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.cargo/registry | |
| key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }} | |
| - name: Cache cargo index | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.cargo/git | |
| key: ${{ runner.os }}-cargo-git-${{ hashFiles('**/Cargo.lock') }} | |
| - name: Cache cargo build | |
| uses: actions/cache@v4 | |
| with: | |
| path: target | |
| key: ${{ runner.os }}-cargo-build-release-${{ hashFiles('**/Cargo.lock') }} | |
| - name: Build release binary | |
| run: cargo build --release --target ${{ matrix.target }} | |
| - name: Upload artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: red-${{ matrix.target }} | |
| path: | | |
| target/${{ matrix.target }}/release/red | |
| target/${{ matrix.target }}/release/red.exe | |
| docs: | |
| name: Documentation | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Install Rust toolchain | |
| uses: dtolnay/rust-toolchain@stable | |
| - name: Cache cargo registry | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.cargo/registry | |
| key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }} | |
| - name: Build documentation | |
| run: cargo doc --no-deps --all-features --document-private-items | |
| - name: Check documentation links | |
| run: | | |
| python3 scripts/check_markdown_links.py --self-test | |
| python3 scripts/check_markdown_links.py | |
| security-audit: | |
| name: Security Audit | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read | |
| checks: write | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Run security audit | |
| uses: rustsec/audit-check@v2.0.0 | |
| with: | |
| token: ${{ secrets.GITHUB_TOKEN }} |