Skip to content

feat: complete TextMate Extensions rendering layer #91

feat: complete TextMate Extensions rendering layer

feat: complete TextMate Extensions rendering layer #91

Workflow file for this run

# SPDX-License-Identifier: GPL-2.0-only
#
# Project: Ecli
# File: .github/workflows/ci.yml
# Website: https://www.ecli.io
# Repository: https://github.com/SSobol77/ecli
# PyPI: https://pypi.org/project/ecli-editor/0.0.1/
#
# Copyright (c) 2026 Siergej Sobolewski
#
# Licensed under the GNU General Public License version 2 only.
# See the LICENSE file in the project root for full license text.
name: CI
"on":
workflow_dispatch:
push:
branches: [main]
paths:
- ".github/workflows/ci.yml"
- "Makefile"
- "main.py"
- "pyproject.toml"
- "scripts/check_runtime_imports.py"
- "scripts/verify_release_assets.py"
- "scripts/verify_runtime.py"
- "src/**"
- "tests/**"
pull_request:
branches: [main]
paths:
- ".github/workflows/ci.yml"
- "Makefile"
- "main.py"
- "pyproject.toml"
- "scripts/check_runtime_imports.py"
- "scripts/verify_release_assets.py"
- "scripts/verify_runtime.py"
- "src/**"
- "tests/**"
permissions:
contents: read
concurrency:
group: ci-${{ github.ref }}
cancel-in-progress: true
jobs:
test:
runs-on: ubuntu-latest
env:
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }}
steps:
- uses: actions/checkout@v4
- name: Setup Python 3.11
uses: actions/setup-python@v5
with:
python-version: "3.11"
- name: Install uv
run: pipx install uv
- name: Sync deps
run: |
if [ -f uv.lock ]; then
uv sync --frozen --extra dev
else
uv sync --extra dev
fi
- name: Lint (ruff)
run: |
if [ -d tests ]; then
uv run ruff check src tests
else
uv run ruff check src
fi
- name: Lint extensions adapter (ruff)
# The imported upstream extension tree under src/ecli/extensions/ is
# excluded from the broad Ruff scan above (issue #98), but the ECLI-owned
# adapter package src/ecli/extensions/ecli_integration/ (issue #100) is
# real source and must be linted explicitly. This focused check does not
# scan the imported upstream tree.
run: |
uv run ruff check src/ecli/extensions/ecli_integration
uv run ruff format --check src/ecli/extensions/ecli_integration
- name: Format check (ruff)
run: |
if [ -d tests ]; then
uv run ruff format --check src tests
else
uv run ruff format --check src
fi
- name: Pytest with coverage
if: ${{ hashFiles('tests/**') != '' }}
run: uv run pytest --cov -q
- name: Release contract validation
run: uv run make PYTHON="uv run python" validate-release-contract
- name: SonarQube Scan
if: ${{ env.SONAR_TOKEN != '' && env.SONAR_HOST_URL != '' && hashFiles('coverage.xml') != '' }}
uses: sonarsource/sonarqube-scan-action@v2
with:
args: >
-Dsonar.projectKey=ecli
-Dsonar.sources=src
-Dsonar.tests=tests
-Dsonar.python.version=3.11
-Dsonar.exclusions=src/ecli/extensions/**
-Dsonar.python.coverage.reportPaths=coverage.xml