name: CI on: push: branches: [main] pull_request: branches: [main] workflow_dispatch: concurrency: group: ci-${{ github.ref }} cancel-in-progress: true jobs: lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: "3.11" - run: pip install ruff - run: ruff check . - run: ruff format --check . test-linux: runs-on: ubuntu-latest strategy: fail-fast: false matrix: python-version: ["3.11", "3.12"] steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - name: Install dependencies run: | pip install -e ".[pdf]" pip install pytest pytest-asyncio pytest-cov - name: Run tests run: pytest --cov=. --cov-report=xml --cov-report=term-missing -v - name: Upload coverage if: matrix.python-version == '3.11' uses: actions/upload-artifact@v4 with: name: coverage-report path: coverage.xml test-windows: # Windows leg exercises the mocked-COM suite on the platform the COM # backend actually targets (pywin32 installs; no live AutoCAD needed). runs-on: windows-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: "3.11" - name: Install dependencies run: | pip install -e ".[full]" pip install pytest pytest-asyncio pytest-cov - name: Run tests run: pytest -v package: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: "3.11" - name: Build sdist and wheel run: | pip install build twine python -m build twine check dist/* - name: Install wheel in a clean venv and smoke test run: | python -m venv /tmp/smoke /tmp/smoke/bin/pip install dist/*.whl /tmp/smoke/bin/autocad-mcp --help /tmp/smoke/bin/python -c "import server, config, security, version, backends, engineering; print('wheel ok', version.__version__)" - name: Upload distributions uses: actions/upload-artifact@v4 with: name: dist path: dist/ docker: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Build image run: docker build -t autocad-mcp:ci . - name: Smoke test image run: docker run --rm autocad-mcp:ci python -c "import server, engineering.gear, version; print('docker ok', version.__version__)" registry-validate: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: "3.11" - name: Validate server.json against MCP registry schema if: ${{ hashFiles('server.json') != '' }} run: | pip install check-jsonschema check-jsonschema --schemafile https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json server.json