|
name: Python checks |
|
|
|
on: |
|
push: |
|
branches: [ master, development, ci-test* ] |
|
paths: |
|
- '.github/workflows/lint-ci.yml' |
|
- 'autogpt/**' |
|
- 'forge/**' |
|
- 'benchmark/**' |
|
- '**.py' |
|
- '!forge/tests/vcr_cassettes' |
|
pull_request: |
|
branches: [ master, development, release-* ] |
|
paths: |
|
- '.github/workflows/lint-ci.yml' |
|
- 'autogpt/**' |
|
- 'forge/**' |
|
- 'benchmark/**' |
|
- '**.py' |
|
- '!forge/tests/vcr_cassettes' |
|
|
|
concurrency: |
|
group: ${{ format('lint-ci-{0}', github.head_ref && format('{0}-{1}', github.event_name, github.event.pull_request.number) || github.sha) }} |
|
cancel-in-progress: ${{ startsWith(github.event_name, 'pull_request') }} |
|
|
|
defaults: |
|
run: |
|
shell: bash |
|
|
|
jobs: |
|
get-changed-parts: |
|
runs-on: ubuntu-latest |
|
steps: |
|
- name: Checkout repository |
|
uses: actions/checkout@v4 |
|
|
|
- id: changes-in |
|
name: Determine affected subprojects |
|
uses: dorny/paths-filter@v3 |
|
with: |
|
filters: | |
|
autogpt: |
|
- autogpt/autogpt/** |
|
- autogpt/tests/** |
|
- autogpt/poetry.lock |
|
forge: |
|
- forge/forge/** |
|
- forge/tests/** |
|
- forge/poetry.lock |
|
benchmark: |
|
- benchmark/agbenchmark/** |
|
- benchmark/tests/** |
|
- benchmark/poetry.lock |
|
outputs: |
|
changed-parts: ${{ steps.changes-in.outputs.changes }} |
|
|
|
lint: |
|
needs: get-changed-parts |
|
runs-on: ubuntu-latest |
|
env: |
|
min-python-version: "3.10" |
|
|
|
strategy: |
|
matrix: |
|
sub-package: ${{ fromJson(needs.get-changed-parts.outputs.changed-parts) }} |
|
fail-fast: false |
|
|
|
steps: |
|
- name: Checkout repository |
|
uses: actions/checkout@v4 |
|
with: |
|
fetch-depth: 0 |
|
|
|
- name: Set up Python ${{ env.min-python-version }} |
|
uses: actions/setup-python@v5 |
|
with: |
|
python-version: ${{ env.min-python-version }} |
|
|
|
- name: Set up Python dependency cache |
|
uses: actions/cache@v4 |
|
with: |
|
path: ~/.cache/pypoetry |
|
key: ${{ runner.os }}-poetry-${{ hashFiles(format('{0}/poetry.lock', matrix.sub-package)) }} |
|
|
|
- name: Install Poetry |
|
run: curl -sSL https://install.python-poetry.org | python3 - |
|
|
|
|
|
|
|
- name: Install Python dependencies |
|
run: poetry -C ${{ matrix.sub-package }} install |
|
|
|
|
|
|
|
- name: Lint (isort) |
|
run: poetry run isort --check . |
|
working-directory: ${{ matrix.sub-package }} |
|
|
|
- name: Lint (Black) |
|
if: success() || failure() |
|
run: poetry run black --check . |
|
working-directory: ${{ matrix.sub-package }} |
|
|
|
- name: Lint (Flake8) |
|
if: success() || failure() |
|
run: poetry run flake8 . |
|
working-directory: ${{ matrix.sub-package }} |
|
|
|
types: |
|
needs: get-changed-parts |
|
runs-on: ubuntu-latest |
|
env: |
|
min-python-version: "3.10" |
|
|
|
strategy: |
|
matrix: |
|
sub-package: ${{ fromJson(needs.get-changed-parts.outputs.changed-parts) }} |
|
fail-fast: false |
|
|
|
steps: |
|
- name: Checkout repository |
|
uses: actions/checkout@v4 |
|
with: |
|
fetch-depth: 0 |
|
|
|
- name: Set up Python ${{ env.min-python-version }} |
|
uses: actions/setup-python@v5 |
|
with: |
|
python-version: ${{ env.min-python-version }} |
|
|
|
- name: Set up Python dependency cache |
|
uses: actions/cache@v4 |
|
with: |
|
path: ~/.cache/pypoetry |
|
key: ${{ runner.os }}-poetry-${{ hashFiles(format('{0}/poetry.lock', matrix.sub-package)) }} |
|
|
|
- name: Install Poetry |
|
run: curl -sSL https://install.python-poetry.org | python3 - |
|
|
|
|
|
|
|
- name: Install Python dependencies |
|
run: poetry -C ${{ matrix.sub-package }} install |
|
|
|
|
|
|
|
- name: Typecheck |
|
if: success() || failure() |
|
run: poetry run pyright |
|
working-directory: ${{ matrix.sub-package }} |
|
|