From 229e6091741c906f1b14df2acc9d73e8a81c139c Mon Sep 17 00:00:00 2001 From: Sebastian Beltran Date: Fri, 14 Mar 2025 14:06:48 -0500 Subject: [PATCH 1/5] ci: add test for windows --- .github/workflows/ci.yml | 369 +++++++++++++++++---------------------- package.json | 2 +- 2 files changed, 161 insertions(+), 210 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ff3bce76..7323afb8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,236 +1,187 @@ name: ci on: -- pull_request -- push + push: + branches: + - master + pull_request: -jobs: - test: - runs-on: ubuntu-latest - strategy: - matrix: - name: - - Node.js 0.8 - - Node.js 0.10 - - Node.js 0.12 - - io.js 1.x - - io.js 2.x - - io.js 3.x - - 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 - - include: - - name: Node.js 0.8 - node-version: "0.8" - npm-i: mocha@2.5.3 supertest@1.1.0 - npm-rm: nyc - - - name: Node.js 0.10 - node-version: "0.10" - npm-i: mocha@2.5.3 nyc@10.3.2 supertest@2.0.0 - - - name: Node.js 0.12 - node-version: "0.12" - npm-i: mocha@2.5.3 nyc@10.3.2 supertest@2.0.0 - - - name: io.js 1.x - node-version: "1.8" - npm-i: mocha@2.5.3 nyc@10.3.2 supertest@2.0.0 - - - name: io.js 2.x - node-version: "2.5" - npm-i: mocha@2.5.3 nyc@10.3.2 supertest@2.0.0 - - - name: io.js 3.x - node-version: "3.3" - npm-i: mocha@2.5.3 nyc@10.3.2 supertest@2.0.0 - - - name: Node.js 4.x - node-version: "4.9" - npm-i: mocha@5.2.0 nyc@11.9.0 supertest@3.4.2 +permissions: + contents: read - - name: Node.js 5.x - node-version: "5.12" - npm-i: mocha@5.2.0 nyc@11.9.0 supertest@3.4.2 +# Cancel in progress workflows +# in the scenario where we already had a run going for that PR/branch/tag but then triggered a new run +concurrency: + group: "${{ github.workflow }} ✨ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}" + cancel-in-progress: true - - name: Node.js 6.x - node-version: "6.17" - npm-i: mocha@6.2.2 nyc@14.1.1 supertest@6.1.6 - - - name: Node.js 7.x - node-version: "7.10" - npm-i: mocha@6.2.2 nyc@14.1.1 supertest@6.1.6 +jobs: + lint: + name: Lint + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: 'lts/*' - - name: Node.js 8.x - node-version: "8.17" - npm-i: mocha@7.2.0 nyc@14.1.1 + - name: Install dependencies + run: npm install --ignore-scripts --include=dev - - name: Node.js 9.x - node-version: "9.11" - npm-i: mocha@7.2.0 nyc@14.1.1 + - name: Run lint + run: npm run lint - - name: Node.js 10.x - node-version: "10.24" - npm-i: mocha@8.4.0 + test: + name: Run tests + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, windows-latest] + node-version: + - "0.8" + - "0.10" + - "0.12" + - "4" + - "5" + - "6" + - "7" + - "8" + - "9" + - "10" + - "11" + - "12" + - "13" + - "14" + - "15" + - "16" + - "17" + - "18" + - "19" + - "20" + - "21" + - "22" + - "23" + # Use supported versions of our testing tools under older versions of Node + # Install npm in some specific cases where we need to + include: + - name: Node.js 0.8 + node-version: "0.8" + npm-i: mocha@2.5.3 supertest@1.1.0 + npm-rm: nyc + - node-version: "0.10" + npm-i: "mocha@3.5.3 nyc@10.3.2 supertest@2.0.0" + # Npm isn't being installed on windows w/ setup-node for + # 0.10 and 0.12, which will end up choking when npm uses es6 + npm-version: "npm@2.15.1" - - name: Node.js 11.x - node-version: "11.15" - npm-i: mocha@8.4.0 + - node-version: "0.12" + npm-i: "mocha@3.5.3 nyc@10.3.2 supertest@2.0.0" + npm-version: "npm@2.15.11" - - name: Node.js 12.x - node-version: "12.22" - npm-i: mocha@9.2.2 + - node-version: "4" + npm-i: "mocha@5.2.0 nyc@11.9.0 supertest@3.4.2" - - name: Node.js 13.x - node-version: "13.14" - npm-i: mocha@9.2.2 + - node-version: "5" + npm-i: "mocha@5.2.0 nyc@11.9.0 supertest@3.4.2" + # fixes https://github.com/npm/cli/issues/681 + npm-version: "npm@3.10.10" - - name: Node.js 14.x - node-version: "14.21" + - node-version: "6" + npm-i: "mocha@6.2.2 nyc@14.1.1 supertest@3.4.2" - - name: Node.js 15.x - node-version: "15.14" + - node-version: "7" + npm-i: "mocha@6.2.2 nyc@14.1.1 supertest@6.1.6" - - name: Node.js 16.x - node-version: "16.20" + - node-version: "8" + npm-i: "mocha@7.2.0 nyc@14.1.1" - - name: Node.js 17.x - node-version: "17.9" + - node-version: "9" + npm-i: "mocha@7.2.0 nyc@14.1.1" - - name: Node.js 18.x - node-version: "18.19" + - node-version: "10" + npm-i: "mocha@8.4.0" - - name: Node.js 19.x - node-version: "19.9" + - node-version: "11" + npm-i: "mocha@8.4.0" - - name: Node.js 20.x - node-version: "20.11" + - node-version: "12" + npm-i: "mocha@9.2.2" - - name: Node.js 21.x - node-version: "21.6" + - node-version: "13" + npm-i: "mocha@9.2.2" + runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v4 - - - name: Install Node.js ${{ matrix.node-version }} - shell: bash -eo pipefail -l {0} - run: | - nvm install --default ${{ matrix.node-version }} - if [[ "${{ matrix.node-version }}" == 0.* && "$(cut -d. -f2 <<< "${{ matrix.node-version }}")" -lt 10 ]]; then - nvm install --alias=npm 0.10 - nvm use ${{ matrix.node-version }} - sed -i '1s;^.*$;'"$(printf '#!%q' "$(nvm which npm)")"';' "$(readlink -f "$(which npm)")" - npm config set strict-ssl false - fi - dirname "$(nvm which ${{ matrix.node-version }})" >> "$GITHUB_PATH" - - - 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: 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: 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: 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 - cp coverage/lcov.info "coverage/${{ matrix.node-version }}.lcov" - else - npm test - fi - - - name: Lint code - if: steps.list_env.outputs.eslint != '' - run: npm run lint - - - name: Collect code coverage - if: steps.list_env.outputs.nyc != '' - run: | - if [[ -d ./coverage ]]; then - mv ./coverage "./${{ matrix.node-version }}" - mkdir ./coverage - mv "./${{ matrix.node-version }}" "./coverage/${{ matrix.node-version }}" - fi - - - name: Upload code coverage - uses: actions/upload-artifact@v4 - if: steps.list_env.outputs.nyc != '' - with: - name: coverage-${{ matrix.node-version }} - path: "./coverage/${{ matrix.node-version }}" - retention-days: 1 + - uses: actions/checkout@v4 + with: + persist-credentials: false + + - name: Setup Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node-version }} + + - name: Npm version fixes + if: ${{matrix.npm-version != ''}} + run: npm install -g ${{ matrix.npm-version }} + + - name: Configure npm loglevel + run: | + npm config set loglevel error + shell: bash + + - name: Remove npm module(s) ${{ matrix.npm-rm }} + run: npm rm --silent --save-dev ${{ matrix.npm-rm }} + if: matrix.npm-rm != '' + + - name: Install Node version specific dev deps + if: ${{ matrix.npm-i != '' }} + run: npm install --save-dev ${{ matrix.npm-i }} + + - name: Install dependencies + run: npm install + + - name: Output Node and NPM versions + run: | + echo "Node.js version: $(node -v)" + echo "NPM version: $(npm -v)" + + - name: Run tests + shell: bash + run: npm run test-ci + + - name: Upload code coverage + uses: actions/upload-artifact@v4 + with: + name: coverage-node-${{ matrix.node-version }}-${{ matrix.os }} + path: ./coverage/lcov.info + retention-days: 1 coverage: needs: test runs-on: ubuntu-latest + permissions: + contents: read + checks: write 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@v4 - with: - 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 }} + - uses: actions/checkout@v4 + + - name: Install lcov + shell: bash + run: sudo apt-get -y install lcov + + - name: Collect coverage reports + uses: actions/download-artifact@v4 + with: + path: ./coverage + pattern: coverage-node-* + + - name: Merge coverage reports + shell: bash + run: find ./coverage -name lcov.info -exec printf '-a %q\n' {} \; | xargs lcov -o ./lcov.info + + - name: Upload coverage report + uses: coverallsapp/github-action@v2 + with: + file: ./lcov.info diff --git a/package.json b/package.json index 79cb1b4c..5d768256 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ }, "scripts": { "lint": "eslint . && node ./scripts/lint-readme.js", - "test": "./test/support/gencert.sh && mocha --require test/support/env --check-leaks --bail --no-exit --reporter spec test/", + "test": "test/support/gencert.sh && mocha --require test/support/env --check-leaks --bail --no-exit --reporter spec test/", "test-ci": "nyc --reporter=lcov --reporter=text npm test", "test-cov": "nyc npm test", "version": "node scripts/version-history.js && git add HISTORY.md" From 2aedd45fe0d76a9bc70a6cec87ad3dd9f7b1303e Mon Sep 17 00:00:00 2001 From: Sebastian Beltran Date: Fri, 14 Mar 2025 15:01:42 -0500 Subject: [PATCH 2/5] test --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5d768256..66ad35cf 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ }, "scripts": { "lint": "eslint . && node ./scripts/lint-readme.js", - "test": "test/support/gencert.sh && mocha --require test/support/env --check-leaks --bail --no-exit --reporter spec test/", + "test": "bash test/support/gencert.sh && mocha --require test/support/env --check-leaks --bail --no-exit --reporter spec test/", "test-ci": "nyc --reporter=lcov --reporter=text npm test", "test-cov": "nyc npm test", "version": "node scripts/version-history.js && git add HISTORY.md" From fc02ad457fa40b5f7cf02f23036c542f9c9f13bc Mon Sep 17 00:00:00 2001 From: Sebastian Beltran Date: Fri, 14 Mar 2025 15:50:41 -0500 Subject: [PATCH 3/5] bash script --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 66ad35cf..cbd999a1 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ }, "scripts": { "lint": "eslint . && node ./scripts/lint-readme.js", - "test": "bash test/support/gencert.sh && mocha --require test/support/env --check-leaks --bail --no-exit --reporter spec test/", + "test": "bash -c 'test/support/gencert.sh' && mocha --require test/support/env --check-leaks --bail --no-exit --reporter spec test/", "test-ci": "nyc --reporter=lcov --reporter=text npm test", "test-cov": "nyc npm test", "version": "node scripts/version-history.js && git add HISTORY.md" From a61672e4b82d8a7f8800a7bcc03f015b8d179d04 Mon Sep 17 00:00:00 2001 From: Sebastian Beltran Date: Fri, 14 Mar 2025 16:06:00 -0500 Subject: [PATCH 4/5] work? --- test/support/gencert.sh | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/test/support/gencert.sh b/test/support/gencert.sh index cfdda070..8af6e4f3 100755 --- a/test/support/gencert.sh +++ b/test/support/gencert.sh @@ -1,5 +1,15 @@ #! /bin/sh set -ex -openssl req -x509 -nodes -newkey rsa:2048 -keyout ./test/fixtures/server.key -out ./test/fixtures/server.crt -days 3650 \ --subj "/C=US/ST=Illinois/L=Chicago/O=node-express-session/CN=express-session.local" +OS=$(uname) + +if [ "$OS" = "Linux" ] || [ "$OS" = "Darwin" ]; then + openssl req -x509 -nodes -newkey rsa:2048 -keyout ./test/fixtures/server.key -out ./test/fixtures/server.crt -days 3650 \ + -subj "/C=US/ST=Illinois/L=Chicago/O=node-express-session/CN=express-session.local" +elif [ "$OS" = "MINGW64_NT" ] || [ "$OS" = "MINGW32_NT" ]; then + openssl req -x509 -nodes -newkey rsa:2048 -keyout ./test/fixtures/server.key -out ./test/fixtures/server.crt -days 3650 \ + -subj "//C=US//ST=Illinois//L=Chicago//O=node-express-session//CN=express-session.local" +else + echo "Unsupported OS: $OS" + exit 1 +fi From 6c8418b9ec0e9c0e2c384d0eeeaf8ca2afb19c63 Mon Sep 17 00:00:00 2001 From: Sebastian Beltran Date: Fri, 14 Mar 2025 16:09:08 -0500 Subject: [PATCH 5/5] now? --- test/support/gencert.sh | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/test/support/gencert.sh b/test/support/gencert.sh index 8af6e4f3..c6a75054 100755 --- a/test/support/gencert.sh +++ b/test/support/gencert.sh @@ -6,10 +6,7 @@ OS=$(uname) if [ "$OS" = "Linux" ] || [ "$OS" = "Darwin" ]; then openssl req -x509 -nodes -newkey rsa:2048 -keyout ./test/fixtures/server.key -out ./test/fixtures/server.crt -days 3650 \ -subj "/C=US/ST=Illinois/L=Chicago/O=node-express-session/CN=express-session.local" -elif [ "$OS" = "MINGW64_NT" ] || [ "$OS" = "MINGW32_NT" ]; then +else openssl req -x509 -nodes -newkey rsa:2048 -keyout ./test/fixtures/server.key -out ./test/fixtures/server.crt -days 3650 \ -subj "//C=US//ST=Illinois//L=Chicago//O=node-express-session//CN=express-session.local" -else - echo "Unsupported OS: $OS" - exit 1 fi