name: validation on: push: branches: - main pull_request: workflow_dispatch: env: PYTHON_VERSION: '>=3.10' jobs: lint: name: Code Quality (Ruff & Mypy) runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v5 with: python-version: ${{env.PYTHON_VERSION}} - name: Install dependencies run: | python -m pip install --upgrade pip pip install . pip install ruff mypy - name: Run Ruff linter run: | ruff check --fix src/ echo "✅ Ruff checks passed!" - name: Run Mypy type checker run: | mypy src/ echo "✅ Mypy checks passed!" continue-on-error: true # Don't fail CI on mypy errors yet validate: name: Validate Language Files runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v5 with: python-version: ${{env.PYTHON_VERSION}} - name: Validate language files run: | failed=() for file in "lang/"*.json; do if err="$(python -m json.tool "${file}" 2>&1 >/dev/null)"; then echo "[OK] ${file}" else echo "[ERROR] ${file} ${err}" failed+=("${file}") fi done if [ "${#failed[@]}" -gt 0 ]; then echo -e "\nFailed to validate the following language file(s): ${failed[@]}" exit 1 fi docker: name: Docker Build Validation runs-on: ubuntu-latest permissions: contents: read needs: [lint, validate] steps: - name: Checkout code uses: actions/checkout@v5 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Build Docker image uses: docker/build-push-action@v6 with: context: . platforms: linux/amd64,linux/arm64 push: false cache-from: type=gha cache-to: type=gha,mode=max