name: lint on: workflow_call: inputs: working-directory: required: true type: string description: "From which folder this pipeline executes" env: POETRY_VERSION: "1.7.1" # This env var allows us to get inline annotations when ruff has complaints. RUFF_OUTPUT_FORMAT: github jobs: build: runs-on: ubuntu-latest strategy: matrix: # Only lint on the min and max supported Python versions. # It's extremely unlikely that there's a lint issue on any version in between # that doesn't show up on the min or max versions. # # GitHub rate-limits how many jobs can be running at any one time. # Starting new jobs is also relatively slow, # so linting on fewer versions makes CI faster. python-version: - "3.9" - "3.11" name: "lint #${{ matrix.python-version }}" steps: - uses: actions/checkout@v4 - name: Get changed files id: changed-files uses: Ana06/get-changed-files@v2.2.0 with: filter: "${{ inputs.working-directory }}/**" - name: Set up Python ${{ matrix.python-version }} + Poetry ${{ env.POETRY_VERSION }} if: steps.changed-files.outputs.all uses: "./.github/actions/poetry_setup" with: python-version: ${{ matrix.python-version }} poetry-version: ${{ env.POETRY_VERSION }} working-directory: ${{ inputs.working-directory }} cache-key: lint-with-extras - name: Check Poetry File if: steps.changed-files.outputs.all shell: bash working-directory: ${{ inputs.working-directory }} run: poetry check - name: Check lock file if: steps.changed-files.outputs.all shell: bash working-directory: ${{ inputs.working-directory }} run: poetry lock --check - name: Install dependencies if: steps.changed-files.outputs.all # Also installs dev/lint/test/typing dependencies, to ensure we have # type hints for as many of our libraries as possible. # This helps catch errors that require dependencies to be spotted, for example: # https://github.com/langchain-ai/langchain/pull/10249/files#diff-935185cd488d015f026dcd9e19616ff62863e8cde8c0bee70318d3ccbca98341 # # If you change this configuration, make sure to change the `cache-key` # in the `poetry_setup` action above to stop using the old cache. # It doesn't matter how you change it, any change will cause a cache-bust. working-directory: ${{ inputs.working-directory }} run: poetry install --with dev - name: Get .mypy_cache to speed up mypy if: steps.changed-files.outputs.all uses: actions/cache@v3 env: SEGMENT_DOWNLOAD_TIMEOUT_MIN: "2" with: path: | ${{ inputs.working-directory }}/.mypy_cache key: mypy-lint-${{ runner.os }}-${{ runner.arch }}-py${{ matrix.python-version }}-${{ inputs.working-directory }}-${{ hashFiles(format('{0}/poetry.lock', inputs.working-directory)) }} - name: Analysing package code with our lint if: steps.changed-files.outputs.all working-directory: ${{ inputs.working-directory }} run: | if make lint_package > /dev/null 2>&1; then make lint_package else echo "lint_package command not found, using lint instead" make lint fi - name: Install test dependencies if: steps.changed-files.outputs.all # Also installs dev/lint/test/typing dependencies, to ensure we have # type hints for as many of our libraries as possible. # This helps catch errors that require dependencies to be spotted, for example: # https://github.com/langchain-ai/langchain/pull/10249/files#diff-935185cd488d015f026dcd9e19616ff62863e8cde8c0bee70318d3ccbca98341 # # If you change this configuration, make sure to change the `cache-key` # in the `poetry_setup` action above to stop using the old cache. # It doesn't matter how you change it, any change will cause a cache-bust. working-directory: ${{ inputs.working-directory }} run: | poetry install --with dev - name: Get .mypy_cache_test to speed up mypy if: steps.changed-files.outputs.all uses: actions/cache@v3 env: SEGMENT_DOWNLOAD_TIMEOUT_MIN: "2" with: path: | ${{ inputs.working-directory }}/.mypy_cache_test key: mypy-test-${{ runner.os }}-${{ runner.arch }}-py${{ matrix.python-version }}-${{ inputs.working-directory }}-${{ hashFiles(format('{0}/poetry.lock', inputs.working-directory)) }} - name: Analysing tests with our lint if: steps.changed-files.outputs.all working-directory: ${{ inputs.working-directory }} run: | if make lint_tests > /dev/null 2>&1; then make lint_tests else echo "lint_tests command not found, skipping step" fi