name: CLI integration test on: workflow_call: permissions: contents: read concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: detect_changes: runs-on: ubuntu-latest outputs: cli_changed: ${{ steps.filter.outputs.cli_changed }} steps: - uses: actions/checkout@v5 with: fetch-depth: 0 - id: filter uses: dorny/paths-filter@v3 with: filters: | cli_changed: - 'libs/cli/**' base: 'main' build_matrix: needs: detect_changes if: ${{ needs.detect_changes.outputs.cli_changed == 'true' }} runs-on: ubuntu-latest strategy: matrix: python-version: - "3.10" - "3.14" example: - name: A workdir: libs/cli/examples tag: langgraph-test-a - name: B workdir: libs/cli/examples/graphs tag: langgraph-test-b - name: C workdir: libs/cli/examples/graphs_reqs_a tag: langgraph-test-c - name: D workdir: libs/cli/examples/graphs_reqs_b tag: langgraph-test-d steps: - uses: actions/checkout@v5 - uses: ./.github/actions/setup-cli with: python-version: ${{ matrix.python-version }} - name: Build and test service ${{ matrix.example.name }} working-directory: ${{ matrix.example.workdir }} env: LANGSMITH_API_KEY: ${{ secrets.LANGSMITH_API_KEY }} run: | langgraph build -t ${{ matrix.example.tag }} if [ -f .env.example ]; then cp .env.example .env elif [ -f ../.env.example ]; then cp ../.env.example .env && cp ../.env.example ../.env fi if [ -n "${{ secrets.LANGSMITH_API_KEY }}" ]; then echo "LANGSMITH_API_KEY=${{ secrets.LANGSMITH_API_KEY }}" >> .env if [ -f ../.env ]; then echo "LANGSMITH_API_KEY=${{ secrets.LANGSMITH_API_KEY }}" >> ../.env; fi fi REPO_ROOT=$(git rev-parse --show-toplevel) timeout 60 python "$REPO_ROOT/.github/scripts/run_langgraph_cli_test.py" -t ${{ matrix.example.tag }} build_js_service: needs: detect_changes if: ${{ needs.detect_changes.outputs.cli_changed == 'true' }} runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 - uses: ./.github/actions/setup-cli with: python-version: "3.11" - name: Build JS service working-directory: libs/cli/js-examples run: langgraph build -t langgraph-test-e build_js_monorepo_service: needs: detect_changes if: ${{ needs.detect_changes.outputs.cli_changed == 'true' }} runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 - uses: ./.github/actions/setup-cli with: python-version: "3.11" - name: Build JS monorepo service working-directory: libs/cli/js-monorepo-example run: | langgraph build -t langgraph-test-f -c apps/agent/langgraph.json \ --build-command "yarn run turbo build" \ --install-command "yarn install" build_python_monorepo_service: needs: detect_changes if: ${{ needs.detect_changes.outputs.cli_changed == 'true' }} runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 - uses: ./.github/actions/setup-cli with: python-version: "3.11" - name: Build Python monorepo service working-directory: libs/cli/python-monorepo-example run: | langgraph build -t langgraph-test-g -c apps/agent/langgraph.json cp apps/agent/.env.example apps/agent/.env if [ -n "${{ secrets.LANGSMITH_API_KEY }}" ]; then echo "LANGSMITH_API_KEY=${{ secrets.LANGSMITH_API_KEY }}" >> apps/agent/.env fi timeout 60 python ../../../.github/scripts/run_langgraph_cli_test.py -t langgraph-test-g -c apps/agent/langgraph.json build_and_test_prerelease_reqs_service: needs: detect_changes if: ${{ needs.detect_changes.outputs.cli_changed == 'true' }} runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 - uses: ./.github/actions/setup-cli with: python-version: "3.11" - name: Build and test prerelease reqs service working-directory: libs/cli/examples/graph_prerelease_reqs run: | langgraph build -t langgraph-test-h cp ../.env.example .env if [ -n "${{ secrets.LANGSMITH_API_KEY }}" ]; then echo "LANGSMITH_API_KEY=${{ secrets.LANGSMITH_API_KEY }}" >> .env; fi timeout 60 python ../../../../.github/scripts/run_langgraph_cli_test.py -t langgraph-test-h echo "Finished initial test. Checking versions..." LANGGRAPH_VERSION=$(docker run --rm --entrypoint "" langgraph-test-h python -c "from importlib.metadata import version; print(version('langgraph'))") test "$LANGGRAPH_VERSION" = "1.0.2" LANGCHAIN_OPENAI_VERSION=$(docker run --rm --entrypoint "" langgraph-test-h python -c "from importlib.metadata import version; print(version('langchain-openai'))") test "$LANGCHAIN_OPENAI_VERSION" = "1.0.1" LANGCHAIN_ANTHROPIC_VERSION=$(docker run --rm --entrypoint "" langgraph-test-h python -c "from importlib.metadata import version; print(version('langchain-anthropic'))") test "$LANGCHAIN_ANTHROPIC_VERSION" = "1.0.0a5" build_and_test_prerelease_reqs_fail_service: needs: detect_changes if: ${{ needs.detect_changes.outputs.cli_changed == 'true' }} runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 - uses: ./.github/actions/setup-cli with: python-version: "3.11" - name: Build and test prerelease reqs fail service working-directory: libs/cli/examples/graph_prerelease_reqs_fail run: | langgraph build -t langgraph-test-i || [ $? -eq 1 ]