Skip to content
This repository was archived by the owner on Mar 25, 2026. It is now read-only.
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
3d66e6f
feat: convert all components to headless architecture
ryanrozich Jul 11, 2025
4a7cca2
feat: Add SavedViewsManager headless component with complete function…
ryanrozich Jul 12, 2025
ed23e5c
fix: Add default categories to SavedViewsManager
ryanrozich Jul 12, 2025
450b429
fix: Update CategorySelector imports after removing duplicate file
ryanrozich Jul 12, 2025
1fb04e6
test: Fix all SavedViewsManager E2E tests
ryanrozich Jul 12, 2025
339c7bb
fix: Improve CategorySelector styling and server-side demo layout
ryanrozich Jul 13, 2025
e1430ca
fix(components): fix avatar rendering and component page logic
ryanrozich Jul 13, 2025
5090d12
fix(SavedViewsManager): fix export button disabled state and improve …
ryanrozich Jul 13, 2025
c00d852
fix(demo): remove results count from server-side demo
ryanrozich Jul 13, 2025
0881c75
feat(QuickFilterDropdown): add extensible loader architecture
ryanrozich Jul 13, 2025
9427329
feat(components): add ViewManagementMenu and ViewManagementModal
ryanrozich Jul 13, 2025
5ca5025
feat(integration): implement SavedViewsDropdown with integrated view …
ryanrozich Jul 13, 2025
5d6af0c
refactor: simplify SavedViewsDropdown to show views directly in dropdown
ryanrozich Jul 13, 2025
315df6c
chore: initialize release/v0.2.0-rc3 branch
ryanrozich Jul 15, 2025
56f04db
docs: update RC3 migration plan with user feedback
ryanrozich Jul 15, 2025
6d9f5cf
refactor: reorganize scripts directory for better organization
ryanrozich Jul 15, 2025
d748761
feat(api): port API enhancements from RC2
ryanrozich Jul 15, 2025
a8d1818
fix: grand total row overlapping with date filter dropdown (#6)
ryanrozich Jul 15, 2025
1e52d80
feat: port GitHub Actions improvements from RC2
ryanrozich Jul 15, 2025
17056c4
chore: fix whitespace issues and remove backup files
ryanrozich Jul 15, 2025
7bda2c0
docs: add comprehensive cleanup plan to migration document
ryanrozich Jul 15, 2025
426c335
fix: resolve TypeScript build errors in SavedViews components
ryanrozich Jul 15, 2025
9db4cc3
test: fix all failing tests for RC3 release
ryanrozich Jul 15, 2025
1cc96ea
Fix timezone issues in ActiveFilters test
ryanrozich Jul 15, 2025
b68ad18
Fix deploy script paths after scripts reorganization
ryanrozich Jul 15, 2025
121e2bc
Update GitHub workflows to use correct script path
ryanrozich Jul 15, 2025
3ff8fef
docs: enhance demo with comprehensive headless architecture documenta…
ryanrozich Jul 15, 2025
cd25358
docs: add comprehensive headless components and SavedViewsDropdown do…
ryanrozich Jul 15, 2025
017f005
docs: fix SavedViewsDropdown routing and add live headless examples
ryanrozich Jul 15, 2025
b90611e
docs: consolidate headless architecture sections and fix navigation
ryanrozich Jul 15, 2025
a145ba5
feat(demo): implement server-side grouping with aggregations
ryanrozich Aug 12, 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
2 changes: 1 addition & 1 deletion .github/workflows/add-pr-to-project.yml
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ jobs:

} catch (error) {
console.error('Failed to add PR to project:', error.message);

// If it fails because it's already in the project, that's fine
if (error.message.includes('already exists')) {
console.log('PR already in project');
Expand Down
263 changes: 263 additions & 0 deletions .github/workflows/bot-ci-integration.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,263 @@
name: Bot CI Integration

on:
pull_request:
types: [opened, synchronize]
check_suite:
types: [completed]
workflow_run:
workflows: ["CI"]
types: [completed]

permissions:
contents: write
pull-requests: write
checks: read

jobs:
monitor-ci-for-bots:
name: Monitor CI for Bot PRs
runs-on: ubuntu-latest
# Only run for bot-created PRs
if: |
(github.event_name == 'pull_request' && contains(github.event.pull_request.labels.*.name, 'bot-created')) ||
(github.event_name == 'check_suite' && github.event.check_suite.pull_requests[0] && contains(github.event.check_suite.pull_requests[0].labels.*.name, 'bot-created')) ||
(github.event_name == 'workflow_run' && github.event.workflow_run.pull_requests[0])

steps:
- name: Get PR details
id: pr-details
uses: actions/github-script@v7
with:
script: |
let prNumber;

if (context.eventName === 'pull_request') {
prNumber = context.payload.pull_request.number;
} else if (context.eventName === 'check_suite') {
prNumber = context.payload.check_suite.pull_requests[0]?.number;
} else if (context.eventName === 'workflow_run') {
prNumber = context.payload.workflow_run.pull_requests[0]?.number;
}

if (!prNumber) {
console.log('No PR number found');
return null;
}

// Get PR details
const pr = await github.rest.pulls.get({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: prNumber
});

// Check if this is a bot PR
const labels = pr.data.labels.map(l => l.name);
const isBotPR = labels.includes('bot-created') || labels.includes('agent:wip') || labels.includes('agent:needs-review');

core.setOutput('pr_number', prNumber);
core.setOutput('is_bot_pr', isBotPR);
core.setOutput('branch', pr.data.head.ref);

return {
prNumber,
isBotPR,
branch: pr.data.head.ref,
labels
};

- name: Check CI status
if: steps.pr-details.outputs.is_bot_pr == 'true'
id: ci-status
uses: actions/github-script@v7
with:
script: |
const prNumber = ${{ steps.pr-details.outputs.pr_number }};

// Get check runs for the PR
const checkRuns = await github.rest.checks.listForRef({
owner: context.repo.owner,
repo: context.repo.repo,
ref: '${{ steps.pr-details.outputs.branch }}'
});

const checks = checkRuns.data.check_runs;
const failedChecks = checks.filter(c => c.conclusion === 'failure');
const pendingChecks = checks.filter(c => c.status === 'in_progress' || c.status === 'queued');

console.log(`Total checks: ${checks.length}`);
console.log(`Failed: ${failedChecks.length}`);
console.log(`Pending: ${pendingChecks.length}`);

core.setOutput('has_failures', failedChecks.length > 0);
core.setOutput('all_complete', pendingChecks.length === 0);
core.setOutput('failed_count', failedChecks.length);

// Get failure details
const failures = failedChecks.map(c => ({
name: c.name,
conclusion: c.conclusion,
detailsUrl: c.details_url
}));

return {
totalChecks: checks.length,
failedChecks: failedChecks.length,
pendingChecks: pendingChecks.length,
failures
};

- name: Notify bot of CI failures
if: |
steps.pr-details.outputs.is_bot_pr == 'true' &&
steps.ci-status.outputs.has_failures == 'true' &&
steps.ci-status.outputs.all_complete == 'true'
uses: actions/github-script@v7
with:
script: |
const prNumber = ${{ steps.pr-details.outputs.pr_number }};
const failedCount = ${{ steps.ci-status.outputs.failed_count }};

// Check if we've already notified about these failures
const comments = await github.rest.issues.listComments({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: prNumber
});

const recentBotComments = comments.data.filter(c =>
c.user.type === 'Bot' &&
c.body.includes('CI Failure Detected') &&
(new Date() - new Date(c.created_at)) < 3600000 // Within last hour
);

if (recentBotComments.length === 0) {
// Post notification comment
const comment = `🚨 **CI Failure Detected**

${failedCount} CI check(s) have failed on this PR.

**Bot Actions Available:**
1. Attempt automatic fixes: \`node scripts/bot-workflow/utils/bot-fix-ci.js ${prNumber}\`
2. Analyze failures: \`gh pr checks ${prNumber}\`
3. Request human help: \`/bot handoff "CI failures need manual intervention"\`

The bot can attempt to fix common issues like:
- Formatting errors
- Linting issues
- Whitespace problems

For test failures or type errors, human intervention may be required.`;

await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: prNumber,
body: comment
});

// Add label to indicate CI issues
await github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: prNumber,
labels: ['bot:ci-failure']
});
}

- name: Auto-trigger bot CI fix
if: |
steps.pr-details.outputs.is_bot_pr == 'true' &&
steps.ci-status.outputs.has_failures == 'true' &&
steps.ci-status.outputs.all_complete == 'true' &&
github.event_name == 'workflow_run'
uses: actions/github-script@v7
with:
script: |
const prNumber = ${{ steps.pr-details.outputs.pr_number }};

// Check if this is the first CI failure
const labels = await github.rest.issues.listLabelsOnIssue({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: prNumber
});

const hasAutoFixed = labels.data.some(l => l.name === 'bot:ci-auto-fixed');

if (!hasAutoFixed) {
// Add comment to trigger bot fix
const comment = `🤖 **Auto-triggering CI fix**

/bot fix-ci

The bot will attempt to automatically fix CI failures.`;

await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: prNumber,
body: comment
});

// Add label to prevent multiple attempts
await github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: prNumber,
labels: ['bot:ci-auto-fixed']
});
}

- name: Celebrate CI success
if: |
steps.pr-details.outputs.is_bot_pr == 'true' &&
steps.ci-status.outputs.has_failures == 'false' &&
steps.ci-status.outputs.all_complete == 'true'
uses: actions/github-script@v7
with:
script: |
const prNumber = ${{ steps.pr-details.outputs.pr_number }};

// Remove CI failure labels if present
try {
await github.rest.issues.removeLabel({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: prNumber,
name: 'bot:ci-failure'
});
} catch (e) {
// Label might not exist
}

// Check if we should add success comment
const labels = await github.rest.issues.listLabelsOnIssue({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: prNumber
});

const needsReview = labels.data.some(l => l.name === 'agent:needs-review');

if (needsReview) {
// Add success comment
const comment = `✅ **All CI Checks Passed!**

This PR is ready for human review.

- All tests are passing
- Code quality checks passed
- No type errors
- Build successful

@${context.repo.owner} - This bot PR is ready for your review.`;

await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: prNumber,
body: comment
});
}
12 changes: 6 additions & 6 deletions .github/workflows/deploy-demo-preview-smart.yml
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ jobs:
DEPLOY_PATH: ag-grid-react-components-pr-${{ github.event.pull_request.number }}
run: |
# Generate version info
node scripts/generate-version-info.js
node scripts/build/generate-version-info.js

# Build demo
PR_NUMBER=${{ github.event.pull_request.number }}
Expand Down Expand Up @@ -221,8 +221,8 @@ jobs:
issue_number: prNumber
});

const botComment = comments.data.find(comment =>
comment.user.type === 'Bot' &&
const botComment = comments.data.find(comment =>
comment.user.type === 'Bot' &&
comment.body.includes('Demo Preview Ready!')
);

Expand Down Expand Up @@ -300,10 +300,10 @@ jobs:
console.log(`Updating project "${project.title}"`);

// Find the Preview URL field
const previewUrlField = project.fields.nodes.find(f =>
const previewUrlField = project.fields.nodes.find(f =>
f.name === 'Preview URL' && f.dataType === 'TEXT'
);

if (!previewUrlField) {
console.log('Preview URL field not found in project');
continue;
Expand Down Expand Up @@ -331,7 +331,7 @@ jobs:
fieldId: previewUrlField.id,
value: { text: previewUrl }
});

console.log(`✅ Updated Preview URL field to: ${previewUrl}`);
}
} catch (error) {
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/deploy-demo-preview.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ jobs:
DEPLOY_PATH: ag-grid-react-components-pr-${{ github.event.pull_request.number }}
run: |
# Generate version info
node scripts/generate-version-info.js
node scripts/build/generate-version-info.js

# Build demo
PR_NUMBER=${{ github.event.pull_request.number }}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/deploy-demo.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ jobs:
VITE_BASE_PATH: /ag-grid-react-components/
run: |
# Generate version info
node scripts/generate-version-info.js
node scripts/build/generate-version-info.js

# Build demo
npm run build:demo
Expand Down
Loading
Loading