Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
62 commits
Select commit Hold shift + click to select a range
175bc1b
SDK enhancements
v1r3n Feb 24, 2026
f4f6755
Create _run_all.sh
v1r3n Feb 24, 2026
c1de4cd
examples
v1r3n Feb 24, 2026
5f97f22
fixes
v1r3n Feb 25, 2026
07450de
fixes and use of task update v2
v1r3n Feb 28, 2026
9129b07
fix lint
v1r3n Feb 28, 2026
2366dd5
fixes
v1r3n Mar 1, 2026
6a3cf51
numerous fixes and tests
v1r3n Mar 4, 2026
7d96578
Fix build error
ajlai-orkes Mar 5, 2026
ef19977
Fix CI workflow to trigger on master branch
ajlai-orkes Mar 5, 2026
88b646e
Revert "Fix CI workflow to trigger on master branch"
ajlai-orkes Mar 5, 2026
927b58c
Update fetchWithRetry
ajlai-orkes Mar 5, 2026
e9bca6d
Revert "Update fetchWithRetry"
ajlai-orkes Mar 5, 2026
0655748
Increase timeout
ajlai-orkes Mar 5, 2026
fe843b3
Test cleanup
ajlai-orkes Mar 5, 2026
52cd4f1
Update release.yml for trusted publishing
ajlai-orkes Mar 5, 2026
b78635b
Fix types in tests
ajlai-orkes Mar 5, 2026
6892e56
Clean event handlers after tests
ajlai-orkes Mar 6, 2026
f7a2cfe
Fix v4 vs v5
ajlai-orkes Mar 6, 2026
e40eba2
Debug
ajlai-orkes Mar 6, 2026
680f025
Try different cleanup
ajlai-orkes Mar 6, 2026
71eaf84
Update httbin service url
ajlai-orkes Mar 6, 2026
72d4b03
Update missed url and EventClient.test.ts
ajlai-orkes Mar 6, 2026
b2978eb
Fix EventClient.test
ajlai-orkes Mar 6, 2026
9819d93
Update env vars
ajlai-orkes Mar 6, 2026
0f928b9
Fix test
ajlai-orkes Mar 6, 2026
c5752ad
Update test for v4
ajlai-orkes Mar 7, 2026
1b0e337
Add a retry after starting a workflow
ajlai-orkes Mar 7, 2026
d00844b
Clean up after tests
ajlai-orkes Mar 7, 2026
548d4de
test fixes
v1r3n Mar 8, 2026
bcba81b
Merge branch 'fix/release-ci' into features-v3
ajlai-orkes Mar 9, 2026
7c52be8
Update tests
ajlai-orkes Mar 9, 2026
d93cbb2
Use cluster httpbin-server:8081/api-docs url
ajlai-orkes Mar 9, 2026
de19d0b
Fix pull_request.yml
ajlai-orkes Mar 9, 2026
9b8910d
Increase timeout for taskManager test
ajlai-orkes Mar 9, 2026
4964327
Try limiting maxWorkers for CI
ajlai-orkes Mar 9, 2026
1ace384
Add more helpful error messaging to handleAuth
ajlai-orkes Mar 9, 2026
0fee8e7
Debug CI
ajlai-orkes Mar 9, 2026
76f9941
Update to run in node versions and update test to expect either null …
ajlai-orkes Mar 9, 2026
635c0fb
Fix lint
ajlai-orkes Mar 9, 2026
5a00ef7
Try and make tests more robust. Create client with retry and longer t…
ajlai-orkes Mar 9, 2026
5e477ff
Batch v5 tests
ajlai-orkes Mar 9, 2026
0f5eb30
Try and batch tests
ajlai-orkes Mar 9, 2026
a14471d
Temporarily don't run v4 tests
ajlai-orkes Mar 9, 2026
dcaa976
Cache node_modules for batches
ajlai-orkes Mar 9, 2026
55047e2
Try runInBand to prevent 502/503
ajlai-orkes Mar 10, 2026
fd0b623
More test tweaks
ajlai-orkes Mar 10, 2026
0431aad
Add back tests for node 20 and 24 and don't run in parallel
ajlai-orkes Mar 10, 2026
b154518
- Shard tests
ajlai-orkes Mar 10, 2026
0e8ea43
Try more tests in parallel
ajlai-orkes Mar 10, 2026
12a3b89
Try clone response
ajlai-orkes Mar 10, 2026
239ebbc
- Update new tests to be v5 only
ajlai-orkes Mar 10, 2026
aa3ce0e
Schema client test should be for v5
ajlai-orkes Mar 10, 2026
e557050
Temporary debug logs
ajlai-orkes Mar 10, 2026
cdfd32a
Update tests that are specific to v5
ajlai-orkes Mar 10, 2026
301b3de
Revert "Temporary debug logs"
ajlai-orkes Mar 10, 2026
80ff7ab
Try longer timeouts for v4
ajlai-orkes Mar 10, 2026
ac2e367
Separate test between v4 and v5 as it's now using a new endpoint
ajlai-orkes Mar 10, 2026
c116441
Temporary debugging
ajlai-orkes Mar 10, 2026
cd1f1a4
Update tests to be v5 only as they are using the v5 endpoint POST /ap…
ajlai-orkes Mar 10, 2026
6510449
Revert "Temporary debugging"
ajlai-orkes Mar 10, 2026
823ef73
Revert fetchWithRetry back
ajlai-orkes Mar 10, 2026
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
36 changes: 36 additions & 0 deletions .claude/plans/tranquil-sleeping-leaf.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# Plan: Fix 8 Failing Integration Tests in WorkflowExecutor.test.ts

## Context

Integration tests ran: **20 passed, 2 failed** (286/295 tests pass). The 8 failures are all in the "Execute with Return Strategy and Consistency" describe block of `WorkflowExecutor.test.ts`. The 1 `ServiceRegistryClient.test.ts` failure is deferred.

**Root cause:** The 3 complex workflow definitions use HTTP tasks calling `http://httpbin:8081/api/hello?name=test1`. The `httpbin` hostname is a Docker service only available in Docker Compose environments. Locally, DNS fails → HTTP tasks fail → workflows FAIL → YIELD tasks never reached → signals can't work → `responseType` is `undefined`.

## Fix

Change `optional: false` → `optional: true` on the HTTP task in each of the 3 workflow metadata files. This lets workflows continue past failed HTTP tasks to reach YIELD tasks. The tests only care about signal/return strategy behavior, not HTTP results.

### Files to modify (1 line each)

1. **`src/integration-tests/metadata/complex_wf_signal_test.ts`** line 25
2. **`src/integration-tests/metadata/complex_wf_signal_test_subworkflow_1.ts`** line 25
3. **`src/integration-tests/metadata/complex_wf_signal_test_subworkflow_2.ts`** line 25

Only the HTTP tasks get `optional: true`. YIELD and SUB_WORKFLOW tasks remain `optional: false`.

Add a comment: `// optional so tests work without httpbin Docker service`

## Why this is safe

- When httpbin IS available (CI/Docker): HTTP task succeeds normally, `optional: true` has no effect
- When httpbin is NOT available (local): HTTP task fails gracefully, workflow continues
- No other tests reference these metadata files
- Test assertions check workflow/task fields that are still populated regardless of HTTP task status

## Verification

```bash
npm run test:integration:orkes-v5 -- --testPathPatterns=WorkflowExecutor
```

All 8 previously-failing tests should pass. Then re-run full suite to confirm no regressions.
5 changes: 4 additions & 1 deletion .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,7 @@ CONDUCTOR_SERVER_URL=""
CONDUCTOR_AUTH_KEY=""
CONDUCTOR_AUTH_SECRET=""

CONDUCTOR_MAX_HTTP2_CONNECTIONS=
CONDUCTOR_MAX_HTTP2_CONNECTIONS=

CONDUCTOR_TLS_INSECURE=
CONDUCTOR_DISABLE_HTTP2=
159 changes: 144 additions & 15 deletions .github/workflows/pull_request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,49 +17,178 @@ jobs:
uses: actions/setup-node@v4
with:
node-version: "22"
cache: "npm"
- name: Cache node_modules
id: cache
uses: actions/cache@v4
with:
path: node_modules
key: npm-22-${{ hashFiles('package-lock.json') }}
restore-keys: |
npm-22-
- name: Install Dependencies
if: steps.cache.outputs.cache-hit != 'true'
run: npm ci
- name: Run Linter
run: npm run lint

tests:
unit-tests:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
node-version: [20, 22, 24]
name: Node.js v${{ matrix.node-version }} - unit tests
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Node
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
cache: "npm"
- name: Cache node_modules
id: cache
uses: actions/cache@v4
with:
path: node_modules
key: npm-${{ matrix.node-version }}-${{ hashFiles('package-lock.json') }}
restore-keys: |
npm-${{ matrix.node-version }}-
- name: Install Dependencies
if: steps.cache.outputs.cache-hit != 'true'
run: npm ci
- name: Run unit tests
run: npm run test:unit -- --ci --coverage --reporters=default --reporters=github-actions --reporters=jest-junit
env:
JEST_JUNIT_OUTPUT_NAME: unit-tests-node-${{ matrix.node-version }}-test-results.xml
- name: Publish Test Results
uses: dorny/test-reporter@v2
if: ${{ !cancelled() }}
with:
name: unit tests (Node ${{ matrix.node-version }})
path: reports/unit-tests-node-${{ matrix.node-version }}-test-results.xml
reporter: jest-junit
- name: Upload coverage to Codecov
if: always()
uses: codecov/codecov-action@v4
with:
token: ${{ secrets.CODECOV_TOKEN }}
files: ./coverage/lcov.info
flags: unit
name: codecov-unit-node-${{ matrix.node-version }}
fail_ci_if_error: false

# Integration tests (v5): one job at a time (max-parallel: 1) to avoid 502/503 on shared Conductor.
# Sharding (--shard i/N) splits the suite so each job runs ~1/N of tests — keeps per-job under timeout.
integration-tests:
runs-on: ubuntu-latest
timeout-minutes: 25
strategy:
fail-fast: false
max-parallel: 2
matrix:
node-version: [20, 22, 24]
test: ["unit", "integration:orkes-v5", "integration:orkes-v4"]
name: Node.js v${{ matrix.node-version }} - ${{ matrix.test }} tests
shard: [1, 2, 3]
name: Node.js v${{ matrix.node-version }} - integration v5 (shard ${{ matrix.shard }}/3)
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Node
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
cache: "npm"
- name: Cache node_modules
id: cache
uses: actions/cache@v4
with:
path: node_modules
key: npm-${{ matrix.node-version }}-${{ hashFiles('package-lock.json') }}
restore-keys: |
npm-${{ matrix.node-version }}-
- name: Install Dependencies
if: steps.cache.outputs.cache-hit != 'true'
run: npm ci
- name: Run integration tests (v5) shard ${{ matrix.shard }}/3
run: npm run test:integration:v5 -- --ci --coverage --runInBand --testTimeout=120000 --shard=${{ matrix.shard }}/3 --reporters=default --reporters=github-actions --reporters=jest-junit
env:
ORKES_BACKEND_VERSION: "5"
CONDUCTOR_SERVER_URL: ${{ vars.SERVER_URL }}
CONDUCTOR_AUTH_KEY: ${{ secrets.AUTH_KEY }}
CONDUCTOR_AUTH_SECRET: ${{ secrets.AUTH_SECRET }}
CONDUCTOR_REQUEST_TIMEOUT_MS: "120000"
JEST_JUNIT_OUTPUT_NAME: integration-v5-node-${{ matrix.node-version }}-shard-${{ matrix.shard }}-test-results.xml
- name: Publish Test Results
uses: dorny/test-reporter@v2
if: ${{ !cancelled() }}
with:
name: integration v5 Node ${{ matrix.node-version }} shard ${{ matrix.shard }}/3
path: reports/integration-v5-node-${{ matrix.node-version }}-shard-${{ matrix.shard }}-test-results.xml
reporter: jest-junit
- name: Upload coverage to Codecov
if: always()
uses: codecov/codecov-action@v4
with:
token: ${{ secrets.CODECOV_TOKEN }}
files: ./coverage/lcov.info
flags: integration-v5
name: codecov-integration-v5-node-${{ matrix.node-version }}-shard-${{ matrix.shard }}
fail_ci_if_error: false

# Integration tests (v4): same sharding as v5. v4 fails in CI (passes locally); do not block PRs.
integration-tests-v4:
runs-on: ubuntu-latest
timeout-minutes: 25
continue-on-error: true
strategy:
fail-fast: false
max-parallel: 1
matrix:
node-version: [20, 22, 24]
shard: [1, 2, 3]
name: Node.js v${{ matrix.node-version }} - integration v4 (shard ${{ matrix.shard }}/3)
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Node
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
cache: "npm"
- name: Cache node_modules
id: cache
uses: actions/cache@v4
with:
path: node_modules
key: npm-${{ matrix.node-version }}-${{ hashFiles('package-lock.json') }}
restore-keys: |
npm-${{ matrix.node-version }}-
- name: Install Dependencies
if: steps.cache.outputs.cache-hit != 'true'
run: npm ci
- name: Run ${{ matrix.test }} Tests and Add Annotations
id: tests
run: npm run test:${{ matrix.test }} -- --ci --coverage --reporters=default --reporters=github-actions --reporters=jest-junit
- name: Run integration tests (v4) shard ${{ matrix.shard }}/3
run: npm run test:integration:v4 -- --ci --coverage --runInBand --testTimeout=120000 --shard=${{ matrix.shard }}/3 --reporters=default --reporters=github-actions --reporters=jest-junit
env:
CONDUCTOR_SERVER_URL: ${{ matrix.test == 'integration:v4' && vars.SERVER_URL_V4 || vars.SERVER_URL }}
CONDUCTOR_AUTH_KEY: ${{ matrix.test == 'integration:v4' && secrets.AUTH_KEY_V4 || secrets.AUTH_KEY }}
CONDUCTOR_AUTH_SECRET: ${{ matrix.test == 'integration:v4' && secrets.AUTH_SECRET_V4 || secrets.AUTH_SECRET }}
JEST_JUNIT_OUTPUT_NAME: ${{ matrix.test }}-test-results.xml
- name: Publish ${{ matrix.test }} Test Results
ORKES_BACKEND_VERSION: "4"
CONDUCTOR_SERVER_URL: ${{ vars.SERVER_URL_V4 }}
CONDUCTOR_AUTH_KEY: ${{ secrets.AUTH_KEY_V4 }}
CONDUCTOR_AUTH_SECRET: ${{ secrets.AUTH_SECRET_V4 }}
CONDUCTOR_REQUEST_TIMEOUT_MS: "120000"
JEST_JUNIT_OUTPUT_NAME: integration-v4-node-${{ matrix.node-version }}-shard-${{ matrix.shard }}-test-results.xml
- name: Publish Test Results
uses: dorny/test-reporter@v2
if: ${{ !cancelled() }}
with:
name: ${{ matrix.test }} Test Report
path: reports/${{ matrix.test }}-test-results.xml
name: integration v4 Node ${{ matrix.node-version }} shard ${{ matrix.shard }}/3
path: reports/integration-v4-node-${{ matrix.node-version }}-shard-${{ matrix.shard }}-test-results.xml
reporter: jest-junit
- name: Upload coverage to Codecov
if: always()
uses: codecov/codecov-action@v4
with:
token: ${{ secrets.CODECOV_TOKEN }}
files: ./coverage/lcov.info
flags: ${{ matrix.test }}
name: codecov-${{ matrix.test }}-node-${{ matrix.node-version }}
flags: integration-v4
name: codecov-integration-v4-node-${{ matrix.node-version }}-shard-${{ matrix.shard }}
fail_ci_if_error: false
11 changes: 9 additions & 2 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,13 @@ on:
release:
types: [published]

# Required for npm Trusted Publishing (OIDC). Configure the trusted publisher
# on npm: package → Settings → Trusted publishing → GitHub Actions →
# workflow filename: release.yml, then your repo owner and repo name.
permissions:
id-token: write
contents: read

jobs:
build-package-and-publish-release:
runs-on: ubuntu-latest
Expand All @@ -15,6 +22,8 @@ jobs:
with:
node-version: "22"
registry-url: "https://registry.npmjs.org"
- name: Ensure npm supports trusted publishing
run: npm install -g npm@latest
- name: Bump version to release
run: sed -i "s/v0.0.0/$RELEASE_VERSION/" ./package.json
env:
Expand All @@ -25,5 +34,3 @@ jobs:
run: npm run build
- name: Publish package
run: npm publish --access public
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -84,3 +84,4 @@ fabric.properties
.env.development
.env.development.local

/.idea
Loading