From 7c81ce3bec2bd4b79b8a06690846dbaad54fe5a1 Mon Sep 17 00:00:00 2001 From: Carlos Serrano Date: Wed, 29 May 2024 10:06:22 +0200 Subject: [PATCH] migrate ci pipeline to github actions --- .github/workflows/ci.yml | 213 +++++++++++++++++++++++++++++++++++++++ .travis.yml | 67 ------------ README.md | 27 +++-- package.json | 10 +- 4 files changed, 231 insertions(+), 86 deletions(-) create mode 100644 .github/workflows/ci.yml delete mode 100644 .travis.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..0f0e1c8 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,213 @@ +name: ci + +on: +- pull_request +- push + +jobs: + test: + runs-on: ubuntu-latest + strategy: + matrix: + name: + - Node.js 0.8 + - Node.js 0.10 + - Node.js 0.12 + - Node.js 4.x + - Node.js 5.x + - Node.js 6.x + - Node.js 7.x + - Node.js 8.x + - Node.js 9.x + - Node.js 10.x + - Node.js 11.x + - Node.js 12.x + - Node.js 13.x + - Node.js 14.x + - Node.js 15.x + - Node.js 16.x + - Node.js 17.x + - Node.js 18.x + - Node.js 19.x + - Node.js 20.x + - Node.js 21.x + - Node.js 22.x + + include: + - name: Node.js 0.8 + node-version: "0.8" + npm-i: mocha@2.5.3 + npm-rm: nyc + + - name: Node.js 0.10 + node-version: "0.10" + npm-i: mocha@3.5.3 nyc@10.3.2 + npm-rm: nyc + + - name: Node.js 0.12 + node-version: "0.12" + npm-i: mocha@3.5.3 nyc@10.3.2 + npm-rm: nyc + + - name: Node.js 4.x + node-version: "4" + npm-i: mocha@5.2.0 nyc@11.9.0 + npm-rm: nyc + + - name: Node.js 5.x + node-version: "5" + npm-i: mocha@5.2.0 nyc@11.9.0 + npm-rm: nyc + + - name: Node.js 6.x + node-version: "6" + npm-i: mocha@6.2.3 nyc@14.1.1 + npm-rm: nyc + + - name: Node.js 7.x + node-version: "7" + npm-i: mocha@6.2.3 nyc@14.1.1 + npm-rm: nyc + + - name: Node.js 8.x + node-version: "8" + npm-i: mocha@7.2.0 nyc@14.1.1 + npm-rm: nyc + + - name: Node.js 9.x + node-version: "9" + npm-i: mocha@7.2.0 nyc@14.1.1 + npm-rm: nyc + + - name: Node.js 10.x + node-version: "10" + npm-i: mocha@8.4.0 + npm-rm: nyc + + - name: Node.js 11.x + node-version: "11" + npm-i: mocha@8.4.0 + npm-rm: nyc + + - name: Node.js 12.x + node-version: "12" + + - name: Node.js 13.x + node-version: "13" + + - name: Node.js 14.x + node-version: "14" + + - name: Node.js 15.x + node-version: "15" + + - name: Node.js 16.x + node-version: "16" + + - name: Node.js 17.x + node-version: "17" + + - name: Node.js 18.x + node-version: "18" + + - name: Node.js 19.x + node-version: "19" + + - name: Node.js 20.x + node-version: "20" + + - name: Node.js 21.x + node-version: "21" + + - name: Node.js 22.x + node-version: "22" + + steps: + - uses: actions/checkout@v4 + + - name: Configure npm + run: | + if [[ "$(npm config get package-lock)" == "true" ]]; then + npm config set package-lock false + else + npm config set shrinkwrap false + fi + + - name: Setup Node.js version-specific dependencies + shell: bash + run: | + # eslint for linting + # - remove on Node.js < 12 + if [[ "$(cut -d. -f1 <<< "${{ matrix.node-version }}")" -lt 12 ]]; then + node -pe 'Object.keys(require("./package").devDependencies).join("\n")' | \ + grep -E '^eslint(-|$)' | \ + sort -r | \ + xargs -n1 npm rm --silent --save-dev + fi + + - name: Remove npm module(s) ${{ matrix.npm-rm }} + run: npm rm --silent --save-dev ${{ matrix.npm-rm }} + if: matrix.npm-rm != '' + + - name: Install npm module(s) ${{ matrix.npm-i }} + run: npm install --save-dev ${{ matrix.npm-i }} + if: matrix.npm-i != '' + + - name: Install Node.js dependencies + run: npm install + + - name: List environment + id: list_env + shell: bash + run: | + echo "node@$(node -v)" + echo "npm@$(npm -v)" + npm -s ls ||: + (npm -s ls --depth=0 ||:) | awk -F'[ @]' 'NR>1 && $2 { print $2 "=" $3 }' >> "$GITHUB_OUTPUT" + + - name: Run tests + shell: bash + run: | + if npm -ps ls nyc | grep -q nyc; then + npm run test-ci + else + npm test + fi + + - name: Lint code + if: steps.list_env.outputs.eslint != '' + run: npm run lint + + - name: Collect code coverage + run: | + mv ./coverage "./${{ matrix.node-version }}" + mkdir ./coverage + mv "./${{ matrix.node-version }}" "./coverage/${{ matrix.node-version }}" + + - name: Upload code coverage + uses: actions/upload-artifact@v3 + with: + name: coverage + path: ./coverage + retention-days: 1 + + coverage: + needs: test + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Install lcov + shell: bash + run: sudo apt-get -y install lcov + - name: Collect coverage reports + uses: actions/download-artifact@v3 + with: + name: coverage + path: ./coverage + - name: Merge coverage reports + shell: bash + run: find ./coverage -name lcov.info -exec printf '-a %q\n' {} \; | xargs lcov -o ./coverage/lcov.info + - name: Upload coverage report + uses: coverallsapp/github-action@master + with: + github-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index cbfd3bd..0000000 --- a/.travis.yml +++ /dev/null @@ -1,67 +0,0 @@ -language: node_js -node_js: - - "0.8" - - "0.10" - - "0.12" - - "1.8" - - "2.5" - - "3.3" - - "4.9" - - "5.12" - - "6.16" - - "7.10" - - "8.15" - - "9.11" - - "10.15" - - "11.7" -sudo: false -cache: - directories: - - node_modules -before_install: - # Configure npm - - | - # Skip updating shrinkwrap / lock - npm config set shrinkwrap false - # Setup Node.js version-specific dependencies - - | - # eslint for linting - # - remove on Node.js < 6 - if [[ "$(cut -d. -f1 <<< "$TRAVIS_NODE_VERSION")" -lt 6 ]]; then - node -pe 'Object.keys(require("./package").devDependencies).join("\n")' | \ - grep -E '^eslint(-|$)' | \ - xargs npm rm --save-dev - fi - - | - # istanbul for coverage - # - remove for Node.js < 0.10 - if [[ "$(cut -d. -f1 <<< "$TRAVIS_NODE_VERSION")" -eq 0 && "$(cut -d. -f2 <<< "$TRAVIS_NODE_VERSION")" -lt 10 ]]; then - npm rm --silent --save-dev istanbul - fi - # Update Node.js modules - - | - # Prune and rebuild node_modules - if [[ -d node_modules ]]; then - npm prune - npm rebuild - fi -script: - # Run test script - - | - if npm -ps ls istanbul | grep -q istanbul; then - npm run test-ci - else - npm test - fi - # Run linting - - | - if npm -ps ls eslint | grep -q eslint; then - npm run lint - fi -after_script: - - | - # Upload coverage to coveralls - if [[ -f ./coverage/lcov.info ]]; then - npm install --save-dev coveralls@2.13.3 - coveralls < ./coverage/lcov.info - fi diff --git a/README.md b/README.md index aaa8bd7..1587f08 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ # resolve-path -[![NPM Version][npm-image]][npm-url] -[![NPM Downloads][downloads-image]][downloads-url] -[![Node.js Version][node-image]][node-url] -[![Linux Build][travis-image]][travis-url] +[![NPM Version][npm-version-image]][npm-url] +[![NPM Downloads][npm-downloads-image]][npm-url] +[![Node.js Version][node-version-image]][node-version-url] +[![Build Status][github-actions-ci-image]][github-actions-ci-url] [![Windows Build][appveyor-image]][appveyor-url] [![Test Coverage][coveralls-image]][coveralls-url] @@ -97,15 +97,14 @@ server.listen(3000) [MIT](LICENSE) -[npm-image]: https://img.shields.io/npm/v/resolve-path.svg -[npm-url]: https://npmjs.org/package/resolve-path -[node-image]: https://img.shields.io/node/v/resolve-path.svg -[node-url]: http://nodejs.org/download/ -[travis-image]: https://img.shields.io/travis/pillarjs/resolve-path/master.svg?label=linux -[travis-url]: https://travis-ci.org/pillarjs/resolve-path +[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/accepts/master +[coveralls-url]: https://coveralls.io/r/jshttp/accepts?branch=master +[github-actions-ci-image]: https://badgen.net/github/checks/jshttp/accepts/master?label=ci +[github-actions-ci-url]: https://github.com/jshttp/accepts/actions/workflows/ci.yml +[node-version-image]: https://badgen.net/npm/node/accepts +[node-version-url]: https://nodejs.org/en/download +[npm-downloads-image]: https://badgen.net/npm/dm/accepts +[npm-url]: https://npmjs.org/package/accepts +[npm-version-image]: https://badgen.net/npm/v/accepts [appveyor-image]: https://img.shields.io/appveyor/ci/dougwilson/resolve-path/master.svg?label=windows [appveyor-url]: https://ci.appveyor.com/project/dougwilson/resolve-path -[coveralls-image]: https://img.shields.io/coveralls/pillarjs/resolve-path/master.svg -[coveralls-url]: https://coveralls.io/r/pillarjs/resolve-path?branch=master -[downloads-image]: https://img.shields.io/npm/dm/resolve-path.svg -[downloads-url]: https://npmjs.org/package/resolve-path diff --git a/package.json b/package.json index 5c9f92f..39543ef 100644 --- a/package.json +++ b/package.json @@ -20,8 +20,8 @@ "eslint-plugin-node": "8.0.1", "eslint-plugin-promise": "4.0.1", "eslint-plugin-standard": "4.0.0", - "istanbul": "0.4.5", - "mocha": "2.5.3" + "mocha": "9.2.0", + "nyc": "15.1.0" }, "files": [ "HISTORY.md", @@ -34,9 +34,9 @@ }, "scripts": { "lint": "eslint --plugin markdown --ext js,md .", - "test": "mocha --reporter spec --bail --check-leaks test/", - "test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/", - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/" + "test": "mocha --reporter spec --check-leaks --bail test/", + "test-ci": "nyc --reporter=lcov --reporter=text npm test", + "test-cov": "nyc --reporter=html --reporter=text npm test" }, "keywords": [ "resolve",