CCOR-13193 - test against oss server in ci #571
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Continuous Integration | |
| on: | |
| push: | |
| branches: | |
| - main | |
| pull_request: | |
| workflow_dispatch: | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| linter: | |
| # TEMP: disabled while iterating on integration-tests-oss. Remove this line to re-enable. | |
| if: false | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Set up Node | |
| 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 | |
| unit-tests: | |
| # TEMP: disabled while iterating on integration-tests-oss. Remove this line to re-enable. | |
| if: false | |
| 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 sdkdev): mirrors integration-tests but targets the sdkdev environment. | |
| integration-tests-v5-sdkdev: | |
| # TEMP: disabled while iterating on integration-tests-oss. Remove this line to re-enable. | |
| if: false | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 25 | |
| strategy: | |
| fail-fast: false | |
| max-parallel: 3 | |
| matrix: | |
| node-version: [20, 22, 24] | |
| shard: [1, 2, 3] | |
| name: Node.js v${{ matrix.node-version }} - integration v5 sdkdev (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 sdkdev) 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.SDKDEV_V5_SERVER_URL }} | |
| CONDUCTOR_AUTH_KEY: ${{ vars.SDKDEV_V5_AUTH_KEY }} | |
| CONDUCTOR_AUTH_SECRET: ${{ secrets.SDKDEV_V5_AUTH_SECRET }} | |
| CONDUCTOR_REQUEST_TIMEOUT_MS: "120000" | |
| CONDUCTOR_RETRY_SERVER_ERRORS: "true" | |
| HTTPBIN_SERVICE_HOSTNAME: "httpbin" | |
| JEST_JUNIT_OUTPUT_NAME: integration-v5-sdkdev-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 sdkdev Node ${{ matrix.node-version }} shard ${{ matrix.shard }}/3 | |
| path: reports/integration-v5-sdkdev-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-sdkdev | |
| name: codecov-integration-v5-sdkdev-node-${{ matrix.node-version }}-shard-${{ matrix.shard }} | |
| fail_ci_if_error: false | |
| # Integration tests (v4 sm): mirrors integration-tests-v4 but targets the sm environment. | |
| integration-tests-v4-sm: | |
| # TEMP: disabled while iterating on integration-tests-oss. Remove this line to re-enable. | |
| if: false | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 25 | |
| 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 sm (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 (v4 sm) 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: | |
| ORKES_BACKEND_VERSION: "4" | |
| CONDUCTOR_SERVER_URL: ${{ vars.SM_V4_SERVER_URL }} | |
| CONDUCTOR_AUTH_KEY: ${{ vars.SM_V4_AUTH_KEY }} | |
| CONDUCTOR_AUTH_SECRET: ${{ secrets.SM_V4_AUTH_SECRET }} | |
| CONDUCTOR_REQUEST_TIMEOUT_MS: "120000" | |
| CONDUCTOR_RETRY_SERVER_ERRORS: "true" | |
| JEST_JUNIT_OUTPUT_NAME: integration-v4-sm-node-${{ matrix.node-version }}-shard-${{ matrix.shard }}-test-results.xml | |
| - name: Publish Test Results | |
| uses: dorny/test-reporter@v2 | |
| if: ${{ !cancelled() }} | |
| with: | |
| name: integration v4 sm Node ${{ matrix.node-version }} shard ${{ matrix.shard }}/3 | |
| path: reports/integration-v4-sm-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-v4-sm | |
| name: codecov-integration-v4-sm-node-${{ matrix.node-version }}-shard-${{ matrix.shard }} | |
| fail_ci_if_error: false | |
| # Integration tests (OSS): spins up Conductor OSS + Postgres via | |
| # scripts/docker-compose-oss.yaml and runs the integration suite unauthenticated, | |
| # with Orkes-only tests gated out via CONDUCTOR_SERVER_TYPE=oss (see | |
| # test:integration:oss). The same stack can be run locally with | |
| # scripts/run-integration-oss.sh. | |
| integration-tests-oss: | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 30 | |
| name: Node.js v22 - integration oss | |
| env: | |
| CONDUCTOR_SERVER_URL: http://localhost:8080/api | |
| CONDUCTOR_SERVER_TYPE: oss | |
| CONDUCTOR_REQUEST_TIMEOUT_MS: "120000" | |
| CONDUCTOR_RETRY_SERVER_ERRORS: "true" | |
| HTTPBIN_SERVICE_HOSTNAME: httpbin | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Set up Node | |
| 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: Start Conductor OSS stack | |
| run: docker compose -f scripts/docker-compose-oss.yaml up -d | |
| - name: Wait for Conductor to be healthy | |
| run: timeout 120 bash -c 'until curl -sf http://localhost:8080/health; do sleep 5; done' | |
| - name: Run integration tests (OSS) | |
| run: npm run test:integration:oss -- --ci --runInBand --testTimeout=120000 --reporters=default --reporters=github-actions --reporters=jest-junit | |
| env: | |
| JEST_JUNIT_OUTPUT_NAME: integration-oss-test-results.xml | |
| - name: Dump Conductor logs | |
| if: failure() | |
| run: docker compose -f scripts/docker-compose-oss.yaml logs conductor-server | |
| - name: Publish Test Results | |
| uses: dorny/test-reporter@v2 | |
| if: ${{ !cancelled() }} | |
| with: | |
| name: integration oss | |
| path: reports/integration-oss-test-results.xml | |
| reporter: jest-junit |