diff options
-rw-r--r-- | .github/workflows/bench.yml | 2 | ||||
-rw-r--r-- | .github/workflows/broken-links.yml | 2 | ||||
-rw-r--r-- | .github/workflows/ci.yml | 99 | ||||
-rw-r--r-- | .github/workflows/create-prerelease-on-tag.yml | 2 | ||||
-rw-r--r-- | README.md | 2 | ||||
-rw-r--r-- | benches/jsconfig.json | 3 | ||||
-rw-r--r-- | docs/development/npm-scripts.md | 86 | ||||
-rw-r--r-- | package.json | 40 |
8 files changed, 181 insertions, 55 deletions
diff --git a/.github/workflows/bench.yml b/.github/workflows/bench.yml index 775e94a7..004e806b 100644 --- a/.github/workflows/bench.yml +++ b/.github/workflows/bench.yml @@ -22,7 +22,7 @@ jobs: run: npm ci - name: Build Libs - run: npm run build-libs + run: npm run build:libs - name: Run Benchmarks uses: CodSpeedHQ/action@v2 diff --git a/.github/workflows/broken-links.yml b/.github/workflows/broken-links.yml index 4cea3b06..b5d296ea 100644 --- a/.github/workflows/broken-links.yml +++ b/.github/workflows/broken-links.yml @@ -20,7 +20,7 @@ jobs: - name: Install dependencies run: npm ci - name: Build Legal - run: npm run license-report + run: npm run license-report:html - uses: lycheeverse/lychee-action@c053181aa0c3d17606addfe97a9075a32723548a with: fail: true diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ea42aab4..a9c56cdc 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -10,9 +10,72 @@ on: merge_group: jobs: - test: + static-analysis: + name: Static Analysis runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup node + uses: actions/setup-node@v4 + with: + node-version-file: "package.json" + + - name: Install dependencies + run: npm ci + + - name: Build third-party libraries + run: npm run build:libs + + - name: Run static analysis tests + run: npm run test:static-analysis + + static-analysis-json: + name: Static Analysis (JSON) + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup node + uses: actions/setup-node@v4 + with: + node-version-file: "package.json" + + - name: Install dependencies + run: npm ci + + - name: Build third-party libraries + run: npm run build:libs + + - name: Run static analysis tests + run: npm run test:json + + unit-tests: + name: Unit Tests + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Setup node + uses: actions/setup-node@v4 + with: + node-version-file: "package.json" + + - name: Install dependencies + run: npm ci + + - name: Build third-party libraries + run: npm run build:libs + + - name: Run unit tests + run: npm run test:unit + + test-build: + name: Test Build + runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 @@ -26,40 +89,10 @@ jobs: run: npm ci - name: Build Libs - run: npm run build-libs - - - name: Lint JS - run: npm run test-lint-js - env: - CI: true - - - name: Validate JS Types - run: npm run test-ts - env: - CI: true - - - name: Lint CSS - run: npm run test-lint-css - env: - CI: true - - - name: Lint HTML - run: npm run test-lint-html - env: - CI: true - - - name: Tests - run: npm run test-code - env: - CI: true - - - name: Test JSON - run: npm run test-json - env: - CI: true + run: npm run build:libs - name: Build Legal - run: npm run license-report + run: npm run license-report:html - name: Build run: npm run build diff --git a/.github/workflows/create-prerelease-on-tag.yml b/.github/workflows/create-prerelease-on-tag.yml index 6f82a85e..884d7902 100644 --- a/.github/workflows/create-prerelease-on-tag.yml +++ b/.github/workflows/create-prerelease-on-tag.yml @@ -26,7 +26,7 @@ jobs: run: npm ci - name: Build Legal - run: npm run license-report + run: npm run license-report:html - name: Build run: npm run-script build -- --all --version ${{ github.ref_name }} @@ -115,7 +115,7 @@ Required licensing notices for this project follow below: Yomitan uses several third-party libraries to function. -<!-- The following table is generated using the command `npm run license-report-markdown`. --> +<!-- The following table is generated using the command `npm run license-report:markdown`. --> | Name | Installed version | License type | Link | | :------------------ | :---------------- | :----------- | :----------------------------------------------- | diff --git a/benches/jsconfig.json b/benches/jsconfig.json index 8743868a..eb7512c4 100644 --- a/benches/jsconfig.json +++ b/benches/jsconfig.json @@ -18,7 +18,8 @@ "test/*": ["../types/test/*"], "rollup/parseAst": ["../types/other/rollup-parse-ast"], "ext/json-schema": ["../types/ext/json-schema"], - "json-schema": ["json-schema"] + "json-schema": ["json-schema"], + "chai": ["../node_modules/@vitest/expect/dist/chai.d.cts"] }, "types": [ "chrome", diff --git a/docs/development/npm-scripts.md b/docs/development/npm-scripts.md new file mode 100644 index 00000000..522be174 --- /dev/null +++ b/docs/development/npm-scripts.md @@ -0,0 +1,86 @@ +# npm Scripts + +This file documents the scripts available in the [package.json](../../package.json) file. +Scripts can be executed by running `npm run <name>`. + +- `bench` + Runs performance benchmarks. + +- `build` + Builds packages for all of the primary build targets and outputs them to the builds folder in the root project directory. + +- `build:libs` + Rebuilds all of the third-party dependencies that the extension uses. + +- `test` + Runs all of the tests. + +- `test:fast` + Runs most of the tests that are used more frequently in the typical development process. + +- `test:static-analysis` + Runs all of the static analysis tests. + +- `test:js` + Runs [eslint](https://eslint.org/) on all of the JavaScript and TypeScript files in the project. + +- `test:json` + Runs all JSON tests. + +- `test:json:format` + Runs eslint on all of the JSON files in the project. + +- `test:json:types` + Performs type checking on all of the JSON files in the project. + Running this script often takes a long time since it has to validate a lot of files with complex types. + +- `test:css` + Runs [stylelint](https://stylelint.io/) on all of the CSS files in the project. + +- `test:html` + Runs [html-validate](https://html-validate.org/) on all of the HTML files in the project. + +- `test:md` + Runs [prettier](https://prettier.io/) on all of the Markdown files in the project. + +- `test:md:write` + Uses prettier to fix all issues it encounters with files. + +- `test:ts` + Runs [TypeScript](https://www.typescriptlang.org/) validation on all of the JavaScript and TypeScript files in the project. + +- `test:ts:main` + Runs [TypeScript](https://www.typescriptlang.org/) validation on the files in the [ext](../../ext/) folder. + +- `test:ts:dev` + Runs [TypeScript](https://www.typescriptlang.org/) validation on the files in the [dev](../../dev/) folder. + +- `test:ts:test` + Runs [TypeScript](https://www.typescriptlang.org/) validation on the files in the [test](../../test/) folder. + +- `test:ts:bench` + Runs [TypeScript](https://www.typescriptlang.org/) validation on the files in the [benches](../../benches/) folder. + +- `test:unit` + Runs all of the unit tests in the project using [vitest](https://vitest.dev/). + +- `test:unit:write` + Overwrites the expected test output data for some of the larger tests. + This usually only needs to be run when something modifies the format of dictionary entries or Anki data. + +- `test:unit:options` + Runs unit tests related to the extension's options and their upgrade process. + +- `test:build` + Performs a dry run of the build process without generating any files. + +- `license-report:html` + Generates a file containing license information about the third-party dependencies the extension uses. + The resulting file is located at ext/legal-npm.html. + +- `license-report:markdown` + Generates a Markdown table containing license information about the third-party dependencies the extension uses. + This table is located in the [README.md](../../README.md#third-party-libraries) file + +- `prepare` + Sets up [husky](https://typicode.github.io/husky/) for some git pre-commit tasks. diff --git a/package.json b/package.json index 715977f8..2012bc89 100644 --- a/package.json +++ b/package.json @@ -12,23 +12,29 @@ "scripts": { "bench": "vitest bench", "build": "node ./dev/bin/build.js", - "build-libs": "node ./dev/bin/build-libs.js", - "test": "npm run test-lint-js && npm run test-ts && npm run test-lint-css && npm run test-lint-html && npm run test-code && npm run test-json && npm run test-build", - "test-lint-js": "npx eslint .", - "test-lint-json": "npx eslint **/*.json", - "test-lint-css": "npx stylelint \"ext/**/*.css\" \"test/**/*.css\" \"dev/**/*.css\"", - "test-lint-html": "npx html-validate \"ext/**/*.html\" \"test/**/*.html\" \"dev/**/*.html\"", - "test-ts": "npm run test-ts-main && npm run test-ts-dev && npm run test-ts-test", - "test-ts-main": "npx tsc --noEmit --project jsconfig.json", - "test-ts-dev": "npx tsc --noEmit --project dev/jsconfig.json", - "test-ts-test": "npx tsc --noEmit --project test/jsconfig.json", - "test-code": "vitest run", - "test-code-write": "vitest run --config test/data/vitest.write.config.json", - "test-options-update": "vitest run --config test/data/vitest.options.config.json", - "test-json": "vitest run --config test/data/vitest.json.config.json", - "test-build": "node ./dev/bin/build.js --dryRun --all", - "license-report": "license-report --output=html --only=prod --fields=name --fields=installedVersion --fields=licenseType --fields=link --html.cssFile=dev/data/legal-npm.css > ext/legal-npm.html", - "license-report-markdown": "license-report --output=markdown --only=prod --fields=name --fields=installedVersion --fields=licenseType --fields=link", + "build:libs": "node ./dev/bin/build-libs.js", + "test": "npm run test:js && npm run test:ts && npm run test:css && npm run test:html && npm run test:unit && npm run test:json && npm run test:md && npm run test:build", + "test:fast": "npm run test:js && npm run test:ts && npm run test:unit && npm run test:json:format", + "test:static-analysis": "npm run test:js && npm run test:ts && npm run test:css && npm run test:html && npm run test:json && npm run test:md", + "test:js": "npx eslint . --ignore-pattern **/*.json", + "test:json": "npm run test:json:format && npm run test:json:types", + "test:json:format": "npx eslint **/*.json", + "test:json:types": "vitest run --config test/data/vitest.json.config.json", + "test:css": "npx stylelint \"ext/**/*.css\" \"test/**/*.css\" \"dev/**/*.css\"", + "test:html": "npx html-validate \"ext/**/*.html\" \"test/**/*.html\" \"dev/**/*.html\"", + "test:md": "prettier . --check", + "test:md:write": "prettier . --write", + "test:ts": "npm run test:ts:main && npm run test:ts:dev && npm run test:ts:test && npm run test:ts:bench", + "test:ts:main": "npx tsc --noEmit --project jsconfig.json", + "test:ts:dev": "npx tsc --noEmit --project dev/jsconfig.json", + "test:ts:test": "npx tsc --noEmit --project test/jsconfig.json", + "test:ts:bench": "npx tsc --noEmit --project benches/jsconfig.json", + "test:unit": "vitest run", + "test:unit:write": "vitest run --config test/data/vitest.write.config.json", + "test:unit:options": "vitest run --config test/data/vitest.options.config.json", + "test:build": "node ./dev/bin/build.js --dryRun --all", + "license-report:html": "license-report --output=html --only=prod --fields=name --fields=installedVersion --fields=licenseType --fields=link --html.cssFile=dev/data/legal-npm.css > ext/legal-npm.html", + "license-report:markdown": "license-report --output=markdown --only=prod --fields=name --fields=installedVersion --fields=licenseType --fields=link", "prepare": "husky install" }, "repository": { |