--- name: CI on: push: branches: [main] pull_request: # If another push to the same PR or branch happens while this workflow is still running, # cancel the earlier run in favor of the next run. # # There's no point in testing an outdated version of the code. GitHub only allows # a limited number of job runners to be active at the same time, so it's better to cancel # pointless jobs early so that more useful jobs can run sooner. concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true env: POETRY_VERSION: "1.7.1" jobs: changes: runs-on: ubuntu-latest outputs: python: ${{ steps.filter.outputs.python }} sdk-js: ${{ steps.filter.outputs.sdk-js }} steps: - uses: actions/checkout@v4 - uses: dorny/paths-filter@v3 id: filter with: filters: | python: - 'libs/langgraph/**' - 'libs/sdk-py/**' - 'libs/cli/**' - 'libs/checkpoint/**' - 'libs/checkpoint-sqlite/**' - 'libs/checkpoint-postgres/**' - 'libs/scheduler-kafka/**' sdk-js: - 'libs/sdk-js/**' lint: needs: changes name: cd ${{ matrix.working-directory }} strategy: matrix: working-directory: [ "libs/langgraph", "libs/sdk-py", "libs/cli", "libs/checkpoint", "libs/checkpoint-sqlite", "libs/checkpoint-postgres", "libs/scheduler-kafka", ] if: needs.changes.outputs.python == 'true' uses: ./.github/workflows/_lint.yml with: working-directory: ${{ matrix.working-directory }} secrets: inherit test: needs: changes name: cd ${{ matrix.working-directory }} strategy: matrix: working-directory: [ "libs/cli", "libs/checkpoint", "libs/checkpoint-sqlite", "libs/checkpoint-postgres", ] if: needs.changes.outputs.python == 'true' uses: ./.github/workflows/_test.yml with: working-directory: ${{ matrix.working-directory }} secrets: inherit # NOTE: we're testing langgraph separately because it requires a different matrix test-langgraph: needs: changes if: needs.changes.outputs.python == 'true' name: "cd libs/langgraph" uses: ./.github/workflows/_test_langgraph.yml secrets: inherit # NOTE: we're testing scheduler-kafka separately because it requires a different matrix test-scheduler-kafka: needs: changes if: needs.changes.outputs.python == 'true' name: "cd libs/scheduler-kafka" uses: ./.github/workflows/_test_scheduler_kafka.yml secrets: inherit check-sdk-methods: needs: changes if: needs.changes.outputs.python == 'true' name: "Check SDK methods matching" runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v5 with: python-version: "3.11" - name: Run check_sdk_methods script run: python .github/scripts/check_sdk_methods.py integration-test: needs: changes if: needs.changes.outputs.python == 'true' name: CLI integration test uses: ./.github/workflows/_integration_test.yml secrets: inherit lint-js: needs: changes if: needs.changes.outputs.sdk-js == 'true' runs-on: ubuntu-latest strategy: matrix: working-directory: - "libs/sdk-js" defaults: run: working-directory: ${{ matrix.working-directory }} steps: - uses: actions/checkout@v3 - name: Setup Node.js (LTS) uses: actions/setup-node@v3 with: node-version: "20" cache: "yarn" cache-dependency-path: ${{ matrix.working-directory }}/yarn.lock - name: Install dependencies run: yarn install - name: Run lint run: yarn lint - name: Build run: yarn build test-js: needs: changes if: needs.changes.outputs.sdk-js == 'true' runs-on: ubuntu-latest strategy: matrix: working-directory: - "libs/sdk-js" defaults: run: working-directory: ${{ matrix.working-directory }} steps: - uses: actions/checkout@v3 - name: Setup Node.js (LTS) uses: actions/setup-node@v3 with: node-version: "20" cache: "yarn" cache-dependency-path: ${{ matrix.working-directory }}/yarn.lock - name: Install dependencies run: yarn install - name: Run tests run: yarn test ci_success: name: "CI Success" needs: [ lint, lint-js, test, test-langgraph, test-scheduler-kafka, integration-test, test-js, ] if: | always() runs-on: ubuntu-latest env: JOBS_JSON: ${{ toJSON(needs) }} RESULTS_JSON: ${{ toJSON(needs.*.result) }} EXIT_CODE: ${{!contains(needs.*.result, 'failure') && !contains(needs.*.result, 'cancelled') && '0' || '1'}} steps: - name: "CI Success" run: | echo $JOBS_JSON echo $RESULTS_JSON echo "Exiting with $EXIT_CODE" exit $EXIT_CODE