Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
7c70cda
feat: n8n node v2, English overlay, docs and CI
lookinway Apr 2, 2026
0c076b6
chore: update .gitignore for AI tooling files
lookinway Apr 2, 2026
a194a12
fix: add overlay step to n8n CI and update .gitignore
lookinway Apr 2, 2026
415f079
fix: resolve build warnings (Swift codegen, turbo outputs, Next.js root)
lookinway Apr 2, 2026
13469c5
chore: remove unused x-n8n-file-upload extension from spec
lookinway Apr 2, 2026
24074ca
docs: add n8n Node v2 to updates page
lookinway Apr 2, 2026
67380bb
fix: remove forms from n8n v2 updates (existed in v1)
lookinway Apr 2, 2026
7f2290d
docs: clean up n8n v2 update entry
lookinway Apr 2, 2026
4f3a68f
chore: update n8n v2.0.0 release date to 2026-04-03
lookinway Apr 2, 2026
e62e71b
feat: add GitHub Release with tgz to n8n CI
lookinway Apr 2, 2026
ec8c406
docs: update root README — add n8n section, CI table, structure, remo…
lookinway Apr 2, 2026
2a7659f
docs: add n8n badge and mention to README header
lookinway Apr 2, 2026
821e88c
feat(n8n): v2 audit fixes — retry bug, webhook trigger, error tests
lookinway Apr 3, 2026
53bc17b
chore: remove C# build artifacts from git tracking
lookinway Apr 3, 2026
eb58c5e
feat(n8n): bug fixes, 77 new tests, SDK docs cleanup
lookinway Apr 3, 2026
2cba32c
docs(n8n): add security features, bug fixes to docs and changelog
lookinway Apr 3, 2026
c33405a
feat: cursor-based pagination across SDK, CLI, n8n and docs
lookinway Apr 6, 2026
f1d5854
more more fixes
lookinway Apr 6, 2026
d6a7ff2
fix: remove form templates from n8n, add CLI avatars and sorting defa…
lookinway Apr 6, 2026
1de6ad8
fix(ci): turbo dependency race, concurrency, bun pinning, provenance
lookinway Apr 6, 2026
b648dd5
fix(ci): auto-increment generator version from npm
lookinway Apr 6, 2026
cb8a61e
fix(ci): auto-increment n8n version from npm, remove changelog gate
lookinway Apr 6, 2026
2a274b6
ci(n8n): auto-versioning and smart change detection for publish
lookinway Apr 6, 2026
0bdbb36
docs: update n8n setup guide, images, llms, navigation
lookinway Apr 6, 2026
48f74fb
fix(ci): skip isolated-vm native build with trustedDependencies
lookinway Apr 6, 2026
a9eb7ad
fix(ci): allow lifecycle scripts for esbuild, sharp, unrs-resolver
lookinway Apr 6, 2026
967179d
fix(n8n): use formatDisplayName for enum options (Id → ID)
lookinway Apr 6, 2026
5e9d945
fix(ci): use bun run tsc instead of n8n-node build
lookinway Apr 6, 2026
440308e
fix(ci): copy static assets (icons) after tsc build
lookinway Apr 6, 2026
ce10487
fix(ci): scope asset copy to nodes/icons/credentials only
lookinway Apr 6, 2026
4166b5d
fix(cli): correct changelog version to 2026.4.0
lookinway Apr 6, 2026
685e057
feat(generator): add native datetime support for Python and Kotlin
aenadgrleey Apr 6, 2026
c4a5109
fix(generator): Kotlin datetime fixes for unions, client imports, que…
aenadgrleey Apr 6, 2026
60c2c84
chore(sdk): regenerate all SDKs with datetime support
aenadgrleey Apr 6, 2026
69ba238
feat(examples): add get chat step to verify datetime deserialization
aenadgrleey Apr 6, 2026
1bc869b
fix: update dates to 2026-04-07 and CLI version to 2026.4.0
lookinway Apr 7, 2026
383d67e
fix(n8n): repack release archive so tar extracts to n8n-nodes-pachca/
lookinway Apr 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 4 additions & 0 deletions .github/workflows/check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@ on:
branches:
- main

concurrency:
group: check-${{ github.ref }}
cancel-in-progress: true

jobs:
check:
name: Lint, typecheck, format
Expand Down
4 changes: 4 additions & 0 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@ on:
branches:
- main

concurrency:
group: deploy
cancel-in-progress: false

jobs:
build-site:
name: Build & push image
Expand Down
53 changes: 34 additions & 19 deletions .github/workflows/generator.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,19 +18,15 @@ on:

concurrency:
group: generator-${{ github.ref }}
cancel-in-progress: true
cancel-in-progress: ${{ github.event_name == 'pull_request' }}

jobs:
snapshot-tests:
name: Snapshot tests
runs-on: ubuntu-latest
outputs:
changed: ${{ steps.check.outputs.changed }}
steps:
- name: Checkout repo
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Setup Bun
uses: oven-sh/setup-bun@v2
Expand All @@ -48,15 +44,8 @@ jobs:
working-directory: packages/generator
run: bun test

- name: Check for generator changes
if: github.event_name == 'push'
id: check
run: |
CHANGED=$(git diff --name-only HEAD~1 HEAD -- packages/generator/ packages/openapi-parser/ | grep -q . && echo true || echo false)
echo "changed=$CHANGED" >> $GITHUB_OUTPUT

publish-generator:
if: github.event_name == 'push' && needs.snapshot-tests.outputs.changed == 'true'
if: github.event_name == 'push'
needs: snapshot-tests
runs-on: ubuntu-latest
concurrency:
Expand Down Expand Up @@ -84,14 +73,40 @@ jobs:
working-directory: packages/generator
run: bun run build

- name: Set version (auto-increment patch)
id: version
working-directory: packages/generator
run: |
VERSION=$(node -e "
const { execSync } = require('child_process');
const base = require('./package.json').version.split('.').slice(0, 2).join('.');
let versions = [];
try {
const raw = execSync('npm view @pachca/generator versions --json', { stdio: ['pipe', 'pipe', 'pipe'] }).toString().trim();
const parsed = JSON.parse(raw);
versions = Array.isArray(parsed) ? parsed : [parsed];
} catch {}
const matching = versions.filter(v => v.startsWith(base + '.'));
const lastPatch = matching.length > 0
? Math.max(...matching.map(v => parseInt(v.split('.')[2])))
: -1;
console.log(base + '.' + (lastPatch + 1));
")
echo "version=$VERSION" >> $GITHUB_OUTPUT
node -e "const fs=require('fs'),p=JSON.parse(fs.readFileSync('package.json'));p.version='$VERSION';fs.writeFileSync('package.json',JSON.stringify(p,null,2)+'\n')"
echo "Publishing @pachca/generator@$VERSION"

- name: Publish to npm
working-directory: packages/generator
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
run: |
VERSION=$(node -e "console.log(require('./package.json').version)")
if npm view "@pachca/generator@${VERSION}" version 2>/dev/null; then
echo "Version ${VERSION} already published, skipping"
else
npm publish --access public --provenance
fi
OUTPUT=$(npm publish --access public --provenance 2>&1) || {
CODE=$?
if echo "$OUTPUT" | grep -q "E409\|already exists"; then
echo "Version ${{ steps.version.outputs.version }} already published, skipping"
else
echo "$OUTPUT"
exit $CODE
fi
}
4 changes: 4 additions & 0 deletions .github/workflows/gitlab.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@ on:
branches:
- main

concurrency:
group: gitlab-sync
cancel-in-progress: false

jobs:
sync_gitlab:
name: push github/main to gitlab/main
Expand Down
204 changes: 204 additions & 0 deletions .github/workflows/n8n.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,204 @@
name: n8n Node

on:
push:
branches: [main]
paths:
- 'integrations/n8n/**'
- 'packages/spec/openapi.yaml'
- 'packages/spec/workflows.ts'
- 'packages/spec/examples.ts'
- 'packages/openapi-parser/src/**'
- 'packages/generator/src/naming.ts'
- 'apps/docs/lib/openapi/mapper.ts'
- 'apps/docs/lib/openapi/example-generator.ts'
- 'packages/spec/overlay.en.yaml'
- 'packages/spec/scripts/**'
pull_request:
branches: [main]
paths:
- 'integrations/n8n/**'
- 'packages/spec/openapi.yaml'
- 'packages/spec/workflows.ts'
- 'packages/spec/examples.ts'
- 'packages/openapi-parser/src/**'
- 'packages/generator/src/naming.ts'
- 'apps/docs/lib/openapi/mapper.ts'
- 'apps/docs/lib/openapi/example-generator.ts'
- 'packages/spec/overlay.en.yaml'
- 'packages/spec/scripts/**'
workflow_dispatch:

concurrency:
group: n8n-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}

jobs:
generate-and-build:
name: Generate & Build
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@v4
- uses: oven-sh/setup-bun@v2
with:
bun-version: 1.3.4
- uses: actions/setup-node@v4
with:
node-version: 22

- name: Install dependencies
run: bun install --frozen-lockfile

- name: Build parser
working-directory: packages/openapi-parser
run: bun run build

- name: Apply English overlay
working-directory: packages/spec
run: bun run scripts/apply-overlay.ts

- name: Generate n8n node
run: bun run integrations/n8n/scripts/generate-n8n.ts

- name: Type check
working-directory: integrations/n8n
run: bun run tsc --noEmit

- name: Lint
working-directory: integrations/n8n
run: bun run lint

- name: Test
working-directory: integrations/n8n
run: bun run test

- name: Build n8n node
working-directory: integrations/n8n
run: |
bun run tsc
find nodes icons credentials \( -name '*.png' -o -name '*.svg' \) | while read f; do mkdir -p "dist/$(dirname "$f")" && cp "$f" "dist/$f"; done

publish:
if: github.event_name == 'push'
needs: generate-and-build
runs-on: ubuntu-latest
concurrency:
group: publish-n8n
cancel-in-progress: false
permissions:
contents: write
id-token: write
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: oven-sh/setup-bun@v2
with:
bun-version: 1.3.4
- uses: actions/setup-node@v4
with:
node-version: 22
registry-url: "https://registry.npmjs.org"

- name: Install dependencies
run: bun install --frozen-lockfile

- name: Build parser
working-directory: packages/openapi-parser
run: bun run build

- name: Apply English overlay
working-directory: packages/spec
run: bun run scripts/apply-overlay.ts

- name: Generate n8n node
run: bun run integrations/n8n/scripts/generate-n8n.ts

- name: Check for publishable changes
id: changes
run: |
# Check committed source changes (exclude tests, scripts, docs, config)
COMMITTED=$(git diff --name-only HEAD~1 HEAD -- integrations/n8n/ \
| grep -v -E '^integrations/n8n/(tests/|scripts/|docs/|e2e/|eslint|tsconfig|\.gitignore|\.npmrc|vitest)' \
| grep -q . && echo true || echo false)
# Check if generation produced different files (spec/generator changed)
GENERATED=$(git diff --name-only -- integrations/n8n/nodes/ integrations/n8n/credentials/ \
| grep -q . && echo true || echo false)
if [ "$COMMITTED" = "true" ] || [ "$GENERATED" = "true" ]; then
echo "changed=true" >> $GITHUB_OUTPUT
echo "Publishable changes detected (committed=$COMMITTED, generated=$GENERATED)"
else
echo "changed=false" >> $GITHUB_OUTPUT
echo "No publishable changes, skipping publish"
fi

- name: Set version (auto-increment patch)
if: steps.changes.outputs.changed == 'true'
id: version
working-directory: integrations/n8n
run: |
VERSION=$(node -e "
const { execSync } = require('child_process');
const base = require('./package.json').version.split('.').slice(0, 2).join('.');
let versions = [];
try {
const raw = execSync('npm view n8n-nodes-pachca versions --json', { stdio: ['pipe', 'pipe', 'pipe'] }).toString().trim();
const parsed = JSON.parse(raw);
versions = Array.isArray(parsed) ? parsed : [parsed];
} catch {}
const matching = versions.filter(v => v.startsWith(base + '.'));
const lastPatch = matching.length > 0
? Math.max(...matching.map(v => parseInt(v.split('.')[2])))
: -1;
console.log(base + '.' + (lastPatch + 1));
")
echo "version=$VERSION" >> $GITHUB_OUTPUT
node -e "const fs=require('fs'),p=JSON.parse(fs.readFileSync('package.json'));p.version='$VERSION';fs.writeFileSync('package.json',JSON.stringify(p,null,2)+'\n')"
echo "Publishing n8n-nodes-pachca@$VERSION"

- name: Build n8n node
if: steps.changes.outputs.changed == 'true'
working-directory: integrations/n8n
run: |
bun run tsc
find nodes icons credentials \( -name '*.png' -o -name '*.svg' \) | while read f; do mkdir -p "dist/$(dirname "$f")" && cp "$f" "dist/$f"; done

- name: Scan community package
if: steps.changes.outputs.changed == 'true'
working-directory: integrations/n8n
run: bun x @n8n/scan-community-package .

- name: Publish to npm
if: steps.changes.outputs.changed == 'true'
working-directory: integrations/n8n
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
run: |
OUTPUT=$(npm publish --access public --provenance 2>&1) || {
CODE=$?
if echo "$OUTPUT" | grep -q "E409\|already exists"; then
echo "Version ${{ steps.version.outputs.version }} already published, skipping"
else
echo "$OUTPUT"
exit $CODE
fi
}

- name: Create GitHub Release
if: steps.changes.outputs.changed == 'true'
working-directory: integrations/n8n
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
npm pack
mkdir n8n-nodes-pachca
tar -xzf n8n-nodes-pachca-*.tgz --strip-components=1 -C n8n-nodes-pachca
rm n8n-nodes-pachca-*.tgz
tar -czf n8n-nodes-pachca.tgz n8n-nodes-pachca
gh release create "n8n-v${{ steps.version.outputs.version }}" \
n8n-nodes-pachca.tgz \
--title "n8n-nodes-pachca v${{ steps.version.outputs.version }}" \
--notes "See [CHANGELOG](integrations/n8n/CHANGELOG.md) for details." \
--latest
Loading
Loading