diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..c5b53ff --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,70 @@ +# Run formatting on all PRs + +name: CI + +on: + push: + branches: ["main"] + pull_request: + workflow_dispatch: # Allows triggering the workflow manually in GitHub UI + +# If another push to the same PR or branch happens while this workflow is still running, +# cancel the earlier run in favor of the next run. +# +# There's no point in testing an outdated version of the code. GitHub only allows +# a limited number of job runners to be active at the same time, so it's better to cancel +# pointless jobs early so that more useful jobs can run sooner. +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + format: + name: Check formatting + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Use Node.js 18.x + uses: actions/setup-node@v3 + with: + node-version: 18.x + cache: "pnpm" + - name: Install dependencies + run: pnpm install + - name: Check formatting + run: pnpm format:check + + lint: + name: Check linting + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Use Node.js 18.x + uses: actions/setup-node@v3 + with: + node-version: 18.x + cache: "pnpm" + - name: Install dependencies + run: pnpm install + - name: Check linting + run: pnpm lint + + readme-spelling: + name: Check README spelling + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: codespell-project/actions-codespell@v2 + with: + ignore_words_file: .codespellignore + path: README.md + + check-spelling: + name: Check code spelling + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: codespell-project/actions-codespell@v2 + with: + ignore_words_file: .codespellignore + path: src diff --git a/package.json b/package.json index aaf2e3a..a65eec3 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "build": "tsc -b && vite build", "lint": "eslint .", "format": "prettier --write .", + "format:check": "prettier --check .", "preview": "vite preview" }, "dependencies": {