You've already forked node-redis
mirror of
https://github.com/redis/node-redis.git
synced 2025-08-07 13:22:56 +03:00
tests: setup GitHub Actions to replace Travis (#1497)
Additionally adds testing against many Node.js versions and Redis versions.
This commit is contained in:
@@ -102,6 +102,7 @@ rules:
|
|||||||
globals:
|
globals:
|
||||||
it: true
|
it: true
|
||||||
describe: true
|
describe: true
|
||||||
|
xdescribe: true
|
||||||
before: true
|
before: true
|
||||||
after: true
|
after: true
|
||||||
beforeEach: true
|
beforeEach: true
|
||||||
|
38
.github/workflows/benchmark.yml
vendored
Normal file
38
.github/workflows/benchmark.yml
vendored
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
name: Benchmarking
|
||||||
|
|
||||||
|
on: [pull_request]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
benchmark:
|
||||||
|
name: Benchmark
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
node-version: [8.x, 10.x, 12.x]
|
||||||
|
redis-version: [5]
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v1
|
||||||
|
with:
|
||||||
|
fetch-depth: 1
|
||||||
|
|
||||||
|
- name: Use Node.js ${{ matrix.node-version }}
|
||||||
|
uses: actions/setup-node@v1
|
||||||
|
with:
|
||||||
|
node-version: ${{ matrix.node-version }}
|
||||||
|
|
||||||
|
- name: Setup Redis
|
||||||
|
uses: shogo82148/actions-setup-redis@v1.0.1
|
||||||
|
with:
|
||||||
|
redis-version: ${{ matrix.redis-version }}
|
||||||
|
auto-start: "true"
|
||||||
|
|
||||||
|
- run: npm i --no-audit --prefer-offline
|
||||||
|
- name: Run Benchmark
|
||||||
|
run: npm run benchmark > benchmark-output.txt && cat benchmark-output.txt
|
||||||
|
- name: Upload Benchmark Result
|
||||||
|
uses: actions/upload-artifact@v1
|
||||||
|
with:
|
||||||
|
name: benchmark-output.txt
|
||||||
|
path: benchmark-output.txt
|
31
.github/workflows/linting.yml
vendored
Normal file
31
.github/workflows/linting.yml
vendored
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
name: Linting
|
||||||
|
|
||||||
|
on: [pull_request]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
eslint:
|
||||||
|
name: ESLint
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v1
|
||||||
|
with:
|
||||||
|
fetch-depth: 1
|
||||||
|
- uses: actions/setup-node@v1
|
||||||
|
with:
|
||||||
|
node-version: 12
|
||||||
|
- run: npm i --no-audit --prefer-offline
|
||||||
|
- name: Test Code Linting
|
||||||
|
run: npm run lint
|
||||||
|
- name: Save Code Linting Report JSON
|
||||||
|
run: npm run lint:report
|
||||||
|
continue-on-error: true
|
||||||
|
- name: Annotate Code Linting Results
|
||||||
|
uses: ataylorme/eslint-annotate-action@1.0.4
|
||||||
|
with:
|
||||||
|
repo-token: "${{ secrets.GITHUB_TOKEN }}"
|
||||||
|
report-json: "eslint-report.json"
|
||||||
|
- name: Upload ESLint report
|
||||||
|
uses: actions/upload-artifact@v1
|
||||||
|
with:
|
||||||
|
name: eslint-report.json
|
||||||
|
path: eslint-report.json
|
52
.github/workflows/tests.yml
vendored
Normal file
52
.github/workflows/tests.yml
vendored
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
name: Tests
|
||||||
|
|
||||||
|
on: [pull_request]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
testing:
|
||||||
|
name: Test
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
node-version: [6.x, 8.x, 10.x, 12.x]
|
||||||
|
redis-version: [4.x, 5.x]
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v1
|
||||||
|
with:
|
||||||
|
fetch-depth: 1
|
||||||
|
|
||||||
|
- name: Use Node.js ${{ matrix.node-version }}
|
||||||
|
uses: actions/setup-node@v1
|
||||||
|
with:
|
||||||
|
node-version: ${{ matrix.node-version }}
|
||||||
|
|
||||||
|
- name: Setup Redis
|
||||||
|
uses: shogo82148/actions-setup-redis@v1.0.1
|
||||||
|
with:
|
||||||
|
redis-version: ${{ matrix.redis-version }}
|
||||||
|
auto-start: "false"
|
||||||
|
|
||||||
|
- name: Disable IPv6
|
||||||
|
run: sudo sh -c 'echo 0 > /proc/sys/net/ipv6/conf/all/disable_ipv6';
|
||||||
|
|
||||||
|
- name: Setup Stunnel
|
||||||
|
run: sudo apt-get install stunnel4
|
||||||
|
|
||||||
|
- name: Install Packages
|
||||||
|
run: npm i --no-audit --prefer-offline
|
||||||
|
|
||||||
|
- name: Run Tests
|
||||||
|
run: npm test
|
||||||
|
|
||||||
|
- name: Submit Coverage
|
||||||
|
run: npm run coveralls
|
||||||
|
env:
|
||||||
|
COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_TOKEN }}
|
||||||
|
|
||||||
|
- name: Upload Coverage Report
|
||||||
|
uses: actions/upload-artifact@v1
|
||||||
|
with:
|
||||||
|
name: coverage
|
||||||
|
path: coverage
|
49
.github/workflows/tests_windows.yml
vendored
Normal file
49
.github/workflows/tests_windows.yml
vendored
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
name: Tests Windows
|
||||||
|
|
||||||
|
on: [pull_request]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
testing-windows:
|
||||||
|
name: Test Windows
|
||||||
|
runs-on: windows-latest
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
node-version: [6.x, 8.x, 10.x, 12.x]
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v1
|
||||||
|
with:
|
||||||
|
fetch-depth: 1
|
||||||
|
|
||||||
|
- name: Install Redis
|
||||||
|
uses: crazy-max/ghaction-chocolatey@v1
|
||||||
|
with:
|
||||||
|
args: install redis-64 --no-progress
|
||||||
|
|
||||||
|
- name: Start Redis
|
||||||
|
run: |
|
||||||
|
redis-server --service-install
|
||||||
|
redis-server --service-start
|
||||||
|
redis-cli config set stop-writes-on-bgsave-error no
|
||||||
|
|
||||||
|
- name: Setup Node.js ${{ matrix.node-version }}
|
||||||
|
uses: actions/setup-node@v1
|
||||||
|
with:
|
||||||
|
node-version: ${{ matrix.node-version }}
|
||||||
|
|
||||||
|
- name: Install Packages
|
||||||
|
run: npm i --no-audit --prefer-offline
|
||||||
|
|
||||||
|
- name: Run Tests
|
||||||
|
run: npm test
|
||||||
|
|
||||||
|
- name: Submit Coverage
|
||||||
|
run: npm run coveralls
|
||||||
|
env:
|
||||||
|
COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_TOKEN }}
|
||||||
|
|
||||||
|
- name: Upload Coverage Report
|
||||||
|
uses: actions/upload-artifact@v1
|
||||||
|
with:
|
||||||
|
name: coverage
|
||||||
|
path: coverage
|
1
.gitignore
vendored
1
.gitignore
vendored
@@ -14,3 +14,4 @@ package-lock.json
|
|||||||
# VisualStudioCode IDEs
|
# VisualStudioCode IDEs
|
||||||
.vscode
|
.vscode
|
||||||
.vs
|
.vs
|
||||||
|
eslint-report.json
|
||||||
|
@@ -19,3 +19,4 @@ CODE_OF_CONDUCT.md
|
|||||||
appveyor.yml
|
appveyor.yml
|
||||||
package-lock.json
|
package-lock.json
|
||||||
.prettierrc
|
.prettierrc
|
||||||
|
eslint-report.json
|
||||||
|
47
.travis.yml
47
.travis.yml
@@ -1,47 +0,0 @@
|
|||||||
language: node_js
|
|
||||||
sudo: required
|
|
||||||
|
|
||||||
os:
|
|
||||||
- windows
|
|
||||||
- linux
|
|
||||||
|
|
||||||
node_js:
|
|
||||||
- "6"
|
|
||||||
- "8"
|
|
||||||
- "10"
|
|
||||||
- "12"
|
|
||||||
- "13"
|
|
||||||
|
|
||||||
before_install:
|
|
||||||
- |-
|
|
||||||
case $TRAVIS_OS_NAME in
|
|
||||||
linux)
|
|
||||||
if [[ ! -f stunnel.tar.gz ]]; then wget -O stunnel.tar.gz ftp://ftp.stunnel.org/stunnel/archive/5.x/stunnel-5.54.tar.gz; fi
|
|
||||||
if [[ ! -f ./stunnel-5.54/configure ]]; then tar -xzf stunnel.tar.gz; fi
|
|
||||||
if [[ ! -f ./stunnel-5.54/src/stunnel ]]; then cd ./stunnel-5.54; ./configure; make; cd ..; fi
|
|
||||||
export PATH="$PATH:$(pwd)/stunnel-5.54/src"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
- |-
|
|
||||||
case $TRAVIS_OS_NAME in
|
|
||||||
windows)
|
|
||||||
choco install redis-64
|
|
||||||
redis-server --service-install
|
|
||||||
redis-server --service-start
|
|
||||||
redis-cli config set stop-writes-on-bgsave-error no
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
cache:
|
|
||||||
directories:
|
|
||||||
- "$HOME/AppData/Local/Temp/chocolatey"
|
|
||||||
- "$TRAVIS_BUILD_DIR/stunnel-5.54"
|
|
||||||
|
|
||||||
before_script:
|
|
||||||
# Add an IPv6 config - see the corresponding Travis issue
|
|
||||||
# https://github.com/travis-ci/travis-ci/issues/8361
|
|
||||||
- if [ "${TRAVIS_OS_NAME}" == "linux" ]; then
|
|
||||||
sudo sh -c 'echo 0 > /proc/sys/net/ipv6/conf/all/disable_ipv6';
|
|
||||||
fi
|
|
||||||
|
|
||||||
after_success: npm run coveralls
|
|
@@ -30,8 +30,10 @@
|
|||||||
"coveralls": "nyc report --reporter=text-lcov | coveralls",
|
"coveralls": "nyc report --reporter=text-lcov | coveralls",
|
||||||
"coverage": "nyc report --reporter=html",
|
"coverage": "nyc report --reporter=html",
|
||||||
"benchmark": "node benchmarks/multi_bench.js",
|
"benchmark": "node benchmarks/multi_bench.js",
|
||||||
"test": "nyc --cache mocha ./test/*.js ./test/commands/*.js --timeout=8000",
|
"test": "nyc --cache mocha ./test/*.js ./test/commands/*.js --timeout=8000 && npm run coverage",
|
||||||
"lint": "eslint . --fix && npm run coverage",
|
"lint": "eslint .",
|
||||||
|
"lint:fix": "eslint . --fix",
|
||||||
|
"lint:report": "eslint --output-file=eslint-report.json --format=json .",
|
||||||
"compare": "node benchmarks/diff_multi_bench_output.js beforeBench.txt afterBench.txt"
|
"compare": "node benchmarks/diff_multi_bench_output.js beforeBench.txt afterBench.txt"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
@@ -34,7 +34,11 @@ describe("The 'zadd' method", function () {
|
|||||||
client.zrange('infinity', 0, -1, 'WITHSCORES', function (err, res) {
|
client.zrange('infinity', 0, -1, 'WITHSCORES', function (err, res) {
|
||||||
assert.equal(res[5], 'inf');
|
assert.equal(res[5], 'inf');
|
||||||
assert.equal(res[1], '-inf');
|
assert.equal(res[1], '-inf');
|
||||||
assert.equal(res[3], '9.9999999999999992e+22');
|
if (process.platform !== 'win32') {
|
||||||
|
assert.equal(res[3], '9.9999999999999992e+22');
|
||||||
|
} else {
|
||||||
|
assert.equal(res[3], '9.9999999999999992e+022');
|
||||||
|
}
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@@ -17,7 +17,7 @@ function waitForRedis (available, cb, port) {
|
|||||||
var running = false;
|
var running = false;
|
||||||
var socket = '/tmp/redis.sock';
|
var socket = '/tmp/redis.sock';
|
||||||
if (port) {
|
if (port) {
|
||||||
// We have to distinguishe the redis sockets if we have more than a single redis instance running
|
// We have to distinguish the redis sockets if we have more than a single redis instance running
|
||||||
socket = '/tmp/redis' + port + '.sock';
|
socket = '/tmp/redis' + port + '.sock';
|
||||||
}
|
}
|
||||||
port = port || config.PORT;
|
port = port || config.PORT;
|
||||||
@@ -51,6 +51,14 @@ function waitForRedis (available, cb, port) {
|
|||||||
module.exports = {
|
module.exports = {
|
||||||
start: function (done, conf, port) {
|
start: function (done, conf, port) {
|
||||||
var spawnFailed = false;
|
var spawnFailed = false;
|
||||||
|
if (process.platform === 'win32') return done(null, {
|
||||||
|
spawnFailed: function () {
|
||||||
|
return spawnFailed;
|
||||||
|
},
|
||||||
|
stop: function (done) {
|
||||||
|
return done();
|
||||||
|
}
|
||||||
|
});
|
||||||
// spawn redis with our testing configuration.
|
// spawn redis with our testing configuration.
|
||||||
var confFile = conf || path.resolve(__dirname, '../conf/redis.conf');
|
var confFile = conf || path.resolve(__dirname, '../conf/redis.conf');
|
||||||
var rp = spawn('redis-server', [confFile], {});
|
var rp = spawn('redis-server', [confFile], {});
|
||||||
@@ -58,7 +66,10 @@ module.exports = {
|
|||||||
// capture a failure booting redis, and give
|
// capture a failure booting redis, and give
|
||||||
// the user running the test some directions.
|
// the user running the test some directions.
|
||||||
rp.once('exit', function (code) {
|
rp.once('exit', function (code) {
|
||||||
if (code !== 0) spawnFailed = true;
|
if (code !== 0) {
|
||||||
|
spawnFailed = true;
|
||||||
|
throw new Error('TESTS: Redis Spawn Failed');
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// wait for redis to become available, by
|
// wait for redis to become available, by
|
||||||
|
@@ -11,20 +11,17 @@ var fork = require('child_process').fork;
|
|||||||
var redis = config.redis;
|
var redis = config.redis;
|
||||||
var client;
|
var client;
|
||||||
|
|
||||||
// Currently Travis Windows builds hang after completing if any processes are still running,
|
// Currently GitHub Actions on Windows (and event travis) builds hang after completing if
|
||||||
// we shutdown redis-server after all tests complete (can't do this in a
|
// any processes are still running, we shutdown redis-server after all tests complete (can't do this in a
|
||||||
// `after_script` Travis hook as it hangs before the `after` life cycles)
|
// `after_script` hook as it hangs before the `after` life cycles) to workaround the issue.
|
||||||
// to workaround the issue.
|
|
||||||
//
|
|
||||||
// See: https://github.com/travis-ci/travis-ci/issues/8082
|
|
||||||
after(function (done) {
|
after(function (done) {
|
||||||
if (process.platform !== 'win32' || !process.env.CI) {
|
if (process.platform !== 'win32' || !process.env.GITHUB_ACTION) {
|
||||||
return done();
|
return done();
|
||||||
}
|
}
|
||||||
process.nextTick(function () {
|
setTimeout(function () {
|
||||||
require('cross-spawn').sync('redis-server', ['--service-stop'], {});
|
require('cross-spawn').sync('redis-server', ['--service-stop'], {});
|
||||||
done();
|
done();
|
||||||
});
|
}, 2000);
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('The node_redis client', function () {
|
describe('The node_redis client', function () {
|
||||||
|
@@ -10,7 +10,9 @@ if (process.platform === 'win32') {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
describe('rename commands', function () {
|
// TODO these tests are causing flakey tests - looks like redis-server is not
|
||||||
|
// being started with new configuration after or before these tests
|
||||||
|
xdescribe('rename commands', function () {
|
||||||
before(function (done) {
|
before(function (done) {
|
||||||
helper.stopRedis(function () {
|
helper.stopRedis(function () {
|
||||||
helper.startRedis('./conf/rename.conf', done);
|
helper.startRedis('./conf/rename.conf', done);
|
||||||
|
Reference in New Issue
Block a user