Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
4dd65bc
feat: implement Phase 1 plugin system improvements
fcoury Jun 14, 2025
0fffa66
feat: implement buffer manipulation APIs for plugins
fcoury Jun 14, 2025
2913f3b
feat: expand plugin event system with new notifications
fcoury Jun 14, 2025
2429ce2
feat: implement configuration support API for plugins
fcoury Jun 14, 2025
9a70387
feat: add TypeScript definitions for plugin development
fcoury Jun 14, 2025
6aeb490
feat: add comprehensive testing framework for plugins
fcoury Jun 15, 2025
6b7af59
feat: implement improved logging with levels and viewer
fcoury Jun 15, 2025
e9429b2
feat: add plugin metadata support with package.json
fcoury Jun 15, 2025
88c81ab
feat: implement setInterval/clearInterval support
fcoury Jun 15, 2025
80ee167
feat: add comprehensive GitHub Actions workflows
fcoury Jun 15, 2025
1c4acba
fix: update deprecated GitHub Actions to v4
fcoury Jun 15, 2025
b7a2a79
fix: update plugin validation to handle module.exports pattern
fcoury Jun 15, 2025
96d11f1
chore: cargo fmt
fcoury Jun 15, 2025
2e07c74
fix: use Editor::with_size in tests to avoid terminal detection
fcoury Jun 15, 2025
35436fb
chore: fix all clippy warnings
fcoury Jun 15, 2025
3751646
chore: fix security vulnerabilities
fcoury Jun 15, 2025
dfa118a
fix: add Windows compatibility for nix crate
fcoury Jun 15, 2025
9f07078
fix: use next_back() instead of last() for DoubleEndedIterator
fcoury Jun 15, 2025
109a179
fix: pin deno_ast to exact version to fix security audit
fcoury Jun 15, 2025
793c976
chore: temporarily disable security audit CI job
fcoury Jun 15, 2025
5205c46
fix: use Box::leak for dynamic module names and properly load ES modules
fcoury Jun 15, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .claude/settings.local.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
{
"permissions": {
"allow": [
"Bash(find:*)"
"Bash(find:*)",
"mcp__github__get_pull_request",
"mcp__github__get_pull_request_status"
],
"deny": []
}
Expand Down
237 changes: 237 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,237 @@
name: CI

on:
push:
branches: [ main, master, develop ]
pull_request:
branches: [ main, master, develop ]
workflow_dispatch:

env:
CARGO_TERM_COLOR: always
RUST_BACKTRACE: 1

jobs:
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: 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: Run tests
run: cargo test --all-features --verbose

- name: Run tests (no default features)
run: cargo test --no-default-features --verbose

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

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 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-clippy-${{ hashFiles('**/Cargo.lock') }}

- name: Run clippy
run: cargo clippy --all-targets --all-features -- -D warnings

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

plugin-tests:
name: Plugin Tests
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'

- name: Run plugin tests
run: |
cd test-harness
for test in ../examples/*.test.js; do
if [ -f "$test" ]; then
plugin="${test%.test.js}.js"
if [ -f "$plugin" ]; then
echo "Running tests for $(basename $plugin)..."
node test-runner.js "$plugin" "$test" || exit 1
fi
fi
done

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

- name: Check documentation links
run: cargo doc --no-deps --all-features --document-private-items

security-audit:
name: Security Audit
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Run security audit
uses: rustsec/[email protected]
with:
token: ${{ secrets.GITHUB_TOKEN }}

msrv:
name: Minimum Supported Rust Version
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Read MSRV from Cargo.toml
id: msrv
run: |
msrv=$(grep -E '^rust-version' Cargo.toml | sed -E 's/.*"([0-9.]+)".*/\1/')
echo "version=$msrv" >> $GITHUB_OUTPUT

- name: Install MSRV toolchain
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ steps.msrv.outputs.version }}
if: steps.msrv.outputs.version != ''

- name: Check MSRV
run: cargo check --all-features
if: steps.msrv.outputs.version != ''
Loading
Loading