name: CI (Lint + Format Checks) on: pull_request: jobs: lint: runs-on: alpine container: node:20-alpine steps: - name: Checkout uses: actions/checkout@v4 - name: Install tools run: | apk add --no-cache \ bash \ git \ python3 \ py3-pip \ rust edge_main="https://dl-cdn.alpinelinux.org/alpine/edge/main" edge_community="https://dl-cdn.alpinelinux.org/alpine/edge/community" apk add --no-cache -X "$edge_main" -X "$edge_community" qt6-qtdeclarative-dev-tools || \ apk add --no-cache -X "$edge_main" -X "$edge_community" qt6-qtdeclarative-dev || \ apk add --no-cache -X "$edge_main" -X "$edge_community" qt6-qtdeclarative || \ echo "::warning::qmllint not available" - name: Python lint run: | python3 -m venv .venv . .venv/bin/activate pip install --no-cache-dir ruff if ! ruff check .; then echo "::warning::ruff reported issues" fi - name: JS lint run: | if [ -n "$(find . -name "*.js" -o -name "*.jsx" -o -name "*.ts" -o -name "*.tsx" -o -name "*.mjs" -o -name "*.cjs" -print -quit)" ]; then if [ -f package.json ]; then npm install --no-audit --no-fund fi if [ -f eslint.config.js ] || [ -f eslint.config.mjs ] || [ -f eslint.config.cjs ] || [ -f .eslintrc ] || [ -f .eslintrc.js ] || [ -f .eslintrc.cjs ] || [ -f .eslintrc.json ] || [ -f .eslintrc.yaml ] || [ -f .eslintrc.yml ]; then if ! npx --yes eslint .; then echo "::warning::eslint reported issues" fi else echo "No eslint config found" fi else echo "No JS/TS files found" fi - name: JS format (prettier) run: | if [ -n "$(find . -name "*.js" -o -name "*.jsx" -o -name "*.ts" -o -name "*.tsx" -o -name "*.mjs" -o -name "*.cjs" -print -quit)" ]; then if ! npx --yes prettier --check "**/*.{js,jsx,ts,tsx,mjs,cjs}" --ignore-path .gitignore; then echo "::warning::prettier reported issues" fi else echo "No JS/TS files found" fi - name: Rust lint run: | if [ -f Cargo.toml ]; then if ! cargo fmt --check; then echo "::warning::rustfmt reported issues" fi else echo "No Rust project found" fi - name: QML lint run: | export PATH="$PATH:/usr/lib/qt6/bin:/usr/lib/qt6/libexec" if command -v qmllint >/dev/null 2>&1; then if [ -n "$(find . -name "*.qml" -print -quit)" ]; then if ! find . -name "*.qml" -print0 | xargs -0 qmllint; then echo "::warning::qmllint reported issues" fi else echo "No QML files found" fi else echo "No qmllint in PATH" fi