From da1e842171112e08f5044838cf3de4fac2ab7239 Mon Sep 17 00:00:00 2001 From: Lam Wei Li Date: Tue, 4 Oct 2022 02:59:57 +0800 Subject: [PATCH] ci: added ci --- .github/workflows/node.js.yml | 40 +++++++++++++++++++++++++++++++++++ ci/remove-deps-4-old-node.js | 22 +++++++++++++++++++ package.json | 2 +- 3 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/node.js.yml create mode 100644 ci/remove-deps-4-old-node.js diff --git a/.github/workflows/node.js.yml b/.github/workflows/node.js.yml new file mode 100644 index 0000000..b7bf26c --- /dev/null +++ b/.github/workflows/node.js.yml @@ -0,0 +1,40 @@ +# This workflow will do a clean installation of node dependencies, cache/restore them, build the source code and run tests across different versions of node +# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions + +name: Node.js CI + +on: [push, pull_request] + +jobs: + build: + + runs-on: ubuntu-latest + + strategy: + matrix: + include: + - node-version: 10.x + test-on-old-node: 1 + - node-version: 12.x + test-on-old-node: 1 + - node-version: 14.x + - node-version: 16.x + - node-version: 18.x + + steps: + - uses: actions/checkout@v3 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node-version }} + cache: 'npm' + - name: Install Dependencies On Old Node ${{ matrix.node-version }} + if: ${{ matrix.test-on-old-node == '1' }} + run: node ci/remove-deps-4-old-node.js && yarn install --ignore-scripts + - name: Install Dependencies On Node ${{ matrix.node-version }} + if: ${{ matrix.test-on-old-node != '1' }} + run: yarn install + - run: npm test + - name: Coverage On Node ${{ matrix.node-version }} + run: + npm run coverage diff --git a/ci/remove-deps-4-old-node.js b/ci/remove-deps-4-old-node.js new file mode 100644 index 0000000..ca1368b --- /dev/null +++ b/ci/remove-deps-4-old-node.js @@ -0,0 +1,22 @@ +const fs = require('fs'); +const path = require('path'); +const package = require('../package.json'); + +const UNSUPPORT_DEPS_4_OLD = { + 'eslint': undefined, + 'mocha': '6.x' +}; + +const deps = Object.keys(UNSUPPORT_DEPS_4_OLD); +for (const item in package.devDependencies) { + if (deps.includes(item)) { + package.devDependencies[item] = UNSUPPORT_DEPS_4_OLD[item]; + } +} + +delete package.scripts.lint; + +fs.writeFileSync( + path.join(__dirname, '../package.json'), + JSON.stringify(package, null, 2) +); diff --git a/package.json b/package.json index 49a2fda..426ad89 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "scripts": { "lint": "eslint lib/**/*.js test/**/*.js index.js", "lint:fix": "eslint --fix lib/**/*.js test/**/*.js index.js", - "pretest": "npm run lint", + "pretest": "npm run lint --if-present", "test": "nyc --reporter=html --reporter=text mocha --exit --require should --reporter spec --check-leaks", "coverage": "nyc report --reporter=text-lcov | coveralls" },