diff --git a/.github/workflows/pr-checks.yml b/.github/workflows/pr-checks.yml new file mode 100644 index 0000000..6f45626 --- /dev/null +++ b/.github/workflows/pr-checks.yml @@ -0,0 +1,43 @@ +name: PR checks + +on: + pull_request: + branches: + - main + +jobs: + lint: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v7.0.1 + + - name: Install ruff + run: python3 -m pip install ruff + + - name: Lint scripts + run: ruff check scripts/ + + validate-data: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v7.0.1 + + - name: Install catalog tools + run: python3 -m pip install -r requirements.txt + + - name: Validate chemistry catalog + run: | + python3 scripts/validate_chemistry_catalog.py \ + --catalog data/chemistry-catalog.json + + - name: Validate equipment catalog + run: | + python3 scripts/validate_equipment_catalog.py \ + --catalog data/equipment-catalog.json \ + --index data/equipment-index.json \ + --config config/equipment-sources.yml \ + --sprites data/equipment-sprites diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7a60b85 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +__pycache__/ +*.pyc diff --git a/ruff.toml b/ruff.toml new file mode 100644 index 0000000..0b46ce0 --- /dev/null +++ b/ruff.toml @@ -0,0 +1,6 @@ +target-version = "py311" + +[lint] +# Только реальные ошибки (неопределённые имена, неиспользуемые импорты/переменные и т.п.), +# без стилистических правил — они не про баги, а про вкус. +select = ["F"] diff --git a/scripts/build_equipment_catalog.py b/scripts/build_equipment_catalog.py index e853fba..db7a41e 100644 --- a/scripts/build_equipment_catalog.py +++ b/scripts/build_equipment_catalog.py @@ -2365,7 +2365,8 @@ def build_public_catalog( if item_id in visited: continue visited.add(item_id) - item = items[item_id] + if item_id not in items: + raise RuntimeError(f"Unknown item id reachable from public roots: {item_id}") public_candidates.add(item_id) # Every configured product and every reachable content item is public. # Boxes/crates are no longer silently replaced with their contents.