Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
73 changes: 73 additions & 0 deletions .github/workflows/check_api_changes.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
name: API Contract Test

permissions:
contents: read
pull-requests: write

on:
pull_request:
types: [opened, synchronize, reopened]
push:
branches: [main]

jobs:
check-contract:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # Fetch all history for git diff

- name: Check for Contract Changes
if: github.event_name == 'pull_request'
id: check_changes
run: |
# Check if the API contract test file was modified
if git diff --name-only ${{ github.event.pull_request.base.sha }}..HEAD | grep -q "src/__tests__/api_contract.test.ts"; then
echo "contract_changed=true" >> $GITHUB_OUTPUT
echo "API contract test file was modified in this PR"
else
echo "contract_changed=false" >> $GITHUB_OUTPUT
echo "API contract test file was not modified"
fi

- name: Request Changes if Contract Changed
if: github.event_name == 'pull_request' && steps.check_changes.outputs.contract_changed == 'true'
uses: actions/github-script@v6
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const body = `## ⚠️ API Contract Change Detected

This PR modifies the public API contract of the CyborgDB JS SDK.

**Please provide an explanation for this change:**
- Why is this change necessary?
- Is this a breaking change or backward compatible?
- Have you updated the documentation?

**This review must be dismissed or addressed before the PR can be merged.**`;

// Check if we already have a review requesting changes
const { data: reviews } = await github.rest.pulls.listReviews({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: context.issue.number,
});

const existingReview = reviews.find(review =>
review.user.type === 'Bot' &&
review.body.includes('API Contract Change Detected')
);

if (!existingReview) {
// Create a review requesting changes
await github.rest.pulls.createReview({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: context.issue.number,
body: body,
event: 'REQUEST_CHANGES'
});
}
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@
"sideEffects": false,
"scripts": {
"build": "npm run clean && npm run build:cjs && npm run build:esm && npm run build:types",
"build:cjs": "esbuild src/index.ts --bundle --platform=node --format=cjs --outfile=dist/index.js --external:fs --external:path --external:crypto --external:http --external:https --external:url --external:stream --external:querystring",
"build:esm": "esbuild src/index.ts --bundle --platform=node --format=esm --outfile=dist/index.esm.js --external:fs --external:path --external:crypto --external:http --external:https --external:url --external:stream --external:querystring",
"build:cjs": "esbuild src/index.ts --bundle --platform=node --format=cjs --outfile=dist/index.js --external:fs --external:path --external:crypto --external:http --external:https --external:url --external:stream --external:querystring --external:@langchain/core",
"build:esm": "esbuild src/index.ts --bundle --platform=node --format=esm --outfile=dist/index.esm.js --external:fs --external:path --external:crypto --external:http --external:https --external:url --external:stream --external:querystring --external:@langchain/core",
"build:types": "tsc --emitDeclarationOnly --outDir dist",
"clean": "rm -rf dist",
"lint": "eslint 'src/*.ts' 'src/__tests__/**/*.ts'",
Expand Down
Loading
Loading