aiwg
Version:
Cognitive architecture for AI-augmented software development with structured memory, ensemble validation, and closed-loop correction. FAIR-aligned artifacts, 84% cost reduction via human-in-the-loop, standards adopted by 100+ organizations.
141 lines (118 loc) • 4.47 kB
YAML
# AIWG Test Generation with Cursor Agent
#
# Automated test generation using Cursor CLI with AIWG standards.
# This workflow can be triggered manually to generate tests for changed files.
#
# Prerequisites:
# - CURSOR_API_KEY secret configured
# - Cursor CLI installed
#
# Usage:
# Copy this file to .github/workflows/aiwg-cursor-tests.yml
name: AIWG Test Generation (Cursor)
on:
workflow_dispatch:
inputs:
target_path:
description: 'Path to generate tests for (e.g., src/auth)'
required: false
default: ''
test_type:
description: 'Type of tests to generate'
required: true
default: 'unit'
type: choice
options:
- unit
- integration
- e2e
pull_request:
types: [opened, synchronize]
paths:
- 'src/**/*.ts'
- 'src/**/*.tsx'
- 'src/**/*.js'
- 'src/**/*.jsx'
permissions:
contents: write
pull-requests: write
jobs:
generate-tests:
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
ref: ${{ github.head_ref || github.ref }}
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install dependencies
run: npm ci || yarn install || pnpm install || echo "No lock file"
- name: Install Cursor CLI
run: |
curl https://cursor.com/install -fsS | bash
echo "$HOME/.cursor/bin" >> $GITHUB_PATH
- name: Configure git
run: |
git config user.name "Cursor Agent"
git config user.email "cursoragent@cursor.com"
- name: Determine target files
id: target
run: |
if [ -n "${{ github.event.inputs.target_path }}" ]; then
echo "path=${{ github.event.inputs.target_path }}" >> $GITHUB_OUTPUT
else
# Get changed source files
CHANGED=$(git diff --name-only origin/${{ github.base_ref }}...HEAD | grep -E '\.(ts|tsx|js|jsx)$' | grep -v '\.test\.' | grep -v '\.spec\.' | head -10 | tr '\n' ' ')
echo "path=$CHANGED" >> $GITHUB_OUTPUT
fi
- name: Generate Tests
env:
CURSOR_API_KEY: ${{ secrets.CURSOR_API_KEY }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
TEST_TYPE="${{ github.event.inputs.test_type || 'unit' }}"
TARGET="${{ steps.target.outputs.path }}"
cursor-agent -p --force --output-format text "Generate $TEST_TYPE tests for the following files/paths:
$TARGET
Requirements:
1. Follow existing test patterns in this repository
2. Use the testing framework already configured (jest, vitest, mocha, etc.)
3. Achieve high coverage of edge cases and error paths
4. Include descriptive test names
5. Mock external dependencies appropriately
For each source file, create a corresponding test file:
- src/module.ts -> test/unit/module.test.ts (or similar pattern)
Do NOT modify source files, only create test files.
After creating tests, run them to verify they pass."
- name: Check for new tests
id: changes
run: |
if git diff --name-only | grep -E '\.(test|spec)\.(ts|tsx|js|jsx)$'; then
echo "has_changes=true" >> $GITHUB_OUTPUT
else
echo "has_changes=false" >> $GITHUB_OUTPUT
fi
- name: Commit and push tests
if: steps.changes.outputs.has_changes == 'true' && github.event_name == 'pull_request'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
git add -A '*.test.*' '*.spec.*'
git commit -m "test: add generated tests for changed files
Generated by AIWG Cursor Agent"
git push
- name: Post PR comment
if: steps.changes.outputs.has_changes == 'true' && github.event_name == 'pull_request'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
gh pr comment ${{ github.event.pull_request.number }} --body "## Test Generation Complete
New test files have been generated and committed to this branch.
Please review the generated tests and ensure they meet your standards.
---
*Generated by [AIWG](https://aiwg.io) + Cursor Agent*"