diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..ef16883 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,12 @@ +version: 2 +updates: + - package-ecosystem: npm + directory: / + schedule: + interval: weekly + open-pull-requests-limit: 5 + + - package-ecosystem: github-actions + directory: / + schedule: + interval: monthly diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 57f9bb6..9b234fc 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,34 +1,38 @@ name: CI on: + pull_request: push: branches: [main] - pull_request: permissions: contents: read +concurrency: + group: ci-${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + jobs: - test: + quality: + name: Lint, test, build, and audit runs-on: ubuntu-latest + timeout-minutes: 15 + steps: - - name: Checkout - uses: actions/checkout@v5 + - name: Check out repository + uses: actions/checkout@v4 - - name: Setup Node - uses: actions/setup-node@v6 + - name: Set up Node.js + uses: actions/setup-node@v4 with: - node-version: 24 + node-version-file: .nvmrc cache: npm - - name: Install + - name: Install dependencies run: npm ci - - name: Check + - name: Check project run: npm run check - - name: Install Playwright Chromium - run: npx playwright install chromium --with-deps - - - name: Browser Tests - run: npm run test:e2e + - name: Audit dependencies + run: npm audit --audit-level=moderate diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000..2bd5a0a --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +22 diff --git a/README.md b/README.md index 21644b7..d8c4fd5 100644 --- a/README.md +++ b/README.md @@ -36,6 +36,8 @@ npm run test:e2e LaunchDeck uses system Google Chrome for Playwright in this repo so local e2e tests do not require downloading a bundled browser when Chrome is already installed. +GitHub Actions runs linting, unit tests, a production build, and a dependency audit on every pull request and push to `main`. Dependabot keeps npm and workflow dependencies visible. + ## Safety Model LaunchDeck is intentionally local-first: