mirror of
https://github.com/lingble/safe-redis-leader.git
synced 2025-10-31 20:48:05 +00:00
initial commit
This commit is contained in:
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
dev-docker-data-cache
|
||||||
|
node_modules
|
||||||
13
docker/compose/redis.yml
Normal file
13
docker/compose/redis.yml
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
version: '3.7'
|
||||||
|
services:
|
||||||
|
redis_dev:
|
||||||
|
# container_name: hero-dev-redis
|
||||||
|
image: redis:alpine
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- ${PWD}/dev-docker-data-cache/redis-data:/data
|
||||||
|
command: ['redis-server', '--appendonly', 'yes', '--requirepass', 'redis_dev_password']
|
||||||
|
ports:
|
||||||
|
- ${DOCKER_REDIS_PORT_PUBLIC:-6760}:${DOCKER_REDIS_PORT:-6379}
|
||||||
|
networks:
|
||||||
|
- safe_redis_leader_dev
|
||||||
37
docker/compose/test.yml
Normal file
37
docker/compose/test.yml
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
version: '3.7'
|
||||||
|
services:
|
||||||
|
safe_redis_leader_backend:
|
||||||
|
build:
|
||||||
|
context: ../../
|
||||||
|
dockerfile: ./docker/dockerfiles/Dockerfile
|
||||||
|
# container_name: safe_redis_leader_dev_backend
|
||||||
|
environment:
|
||||||
|
NODE_ENV: ${NODE_ENV}
|
||||||
|
DOCKER_REDIS_HOST: redis_dev
|
||||||
|
DOCKER_REDIS_PASSWORD: redis_dev_password
|
||||||
|
DOCKER_REDIS_PORT: ${DOCKER_REDIS_PORT:-6379}
|
||||||
|
NETWORK_NAME: safe_redis_leader_dev
|
||||||
|
tty: true
|
||||||
|
stdin_open: true
|
||||||
|
working_dir: /app
|
||||||
|
volumes:
|
||||||
|
- ${PWD}/docker:/docker:delegated
|
||||||
|
- ${PWD}/src:/app:delegated
|
||||||
|
- ${PWD}/package.json:/package.json
|
||||||
|
- ${PWD}/package-lock.json:/package-lock.json
|
||||||
|
- ${PWD}/.env:/.env
|
||||||
|
- ${PWD}/dev-docker-data-cache/test_node_modules:/node_modules:delegated
|
||||||
|
- ${PWD}/dev-docker-data-cache/package_node_modules:/app/node_modules:delegated
|
||||||
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
|
user: root
|
||||||
|
command: >
|
||||||
|
sh -c 'npm install --ignore-scripts --save --loglevel verbose && ${COMPOSE_COMMAND}'
|
||||||
|
ports:
|
||||||
|
- 9220:9229
|
||||||
|
networks:
|
||||||
|
- safe_redis_leader_dev
|
||||||
|
networks:
|
||||||
|
safe_redis_leader_dev:
|
||||||
|
name: safe_redis_leader_dev
|
||||||
|
driver: bridge
|
||||||
|
# docker network ls -f driver=bridge --format "{{.ID}}" | xargs docker network inspect | grep Name
|
||||||
1
docker/dockerfiles/Dockerfile
Normal file
1
docker/dockerfiles/Dockerfile
Normal file
@@ -0,0 +1 @@
|
|||||||
|
FROM node:12-alpine3.10
|
||||||
71
docker/scripts/runner.js
Normal file
71
docker/scripts/runner.js
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
const { spawn, exec } = require('child_process')
|
||||||
|
|
||||||
|
async function run(){
|
||||||
|
let backendComposeCommand = 'npm run test'
|
||||||
|
const isTest = process.env.NODE_ENV === 'test'
|
||||||
|
|
||||||
|
|
||||||
|
let command = exec(
|
||||||
|
`mkdir -p ./dev-docker-data-cache && mkdir -p ./dev-docker-data-cache/node_modules && mkdir -p ./dev-docker-data-cache/redis-data`,
|
||||||
|
{
|
||||||
|
env: {
|
||||||
|
...process.env,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
await waitForCommandStatusWithStdout(command, {onError: ()=>new Error('could not create dev-docker-data-cache directories')})
|
||||||
|
|
||||||
|
|
||||||
|
const child2 = spawn(
|
||||||
|
`docker-compose`,
|
||||||
|
[
|
||||||
|
"--project-name",
|
||||||
|
"safe-redis-leader",
|
||||||
|
"--project-directory",
|
||||||
|
"./docker/compose",
|
||||||
|
"-f",
|
||||||
|
"./docker/compose/test.yml",
|
||||||
|
"-f",
|
||||||
|
"./docker/compose/redis.yml",
|
||||||
|
"up",
|
||||||
|
// "--build"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
env: {
|
||||||
|
...process.env,
|
||||||
|
COMPOSE_COMMAND: backendComposeCommand
|
||||||
|
},
|
||||||
|
stdio: 'inherit'
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
child2.on("exit", (code, signal)=>{
|
||||||
|
process.exit(code)
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function waitForCommandStatusWithStdout(command, {onError}){
|
||||||
|
command.stdout.pipe(process.stdout)
|
||||||
|
command.stderr.pipe(process.stderr)
|
||||||
|
|
||||||
|
|
||||||
|
return new Promise((res,rej)=>command.on('close', (code) => {
|
||||||
|
if(code === 0){
|
||||||
|
res()
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
rej(onError(code))
|
||||||
|
}
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
run().catch((e)=>{
|
||||||
|
console.error(e)
|
||||||
|
process.exit(1)
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
5
package-lock.json
generated
Normal file
5
package-lock.json
generated
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"name": "safe-redis-leader",
|
||||||
|
"version": "0.0.1",
|
||||||
|
"lockfileVersion": 1
|
||||||
|
}
|
||||||
11
package.json
Normal file
11
package.json
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"name": "safe-redis-leader",
|
||||||
|
"version": "0.0.1",
|
||||||
|
"description": "Redis leader election implementation that does not have any race conditions",
|
||||||
|
"main": "index.js",
|
||||||
|
"scripts": {
|
||||||
|
"test": "npm install && node ./docker/scripts/runner.js"
|
||||||
|
},
|
||||||
|
"author": "",
|
||||||
|
"license": "ISC"
|
||||||
|
}
|
||||||
BIN
src/.DS_Store
vendored
Normal file
BIN
src/.DS_Store
vendored
Normal file
Binary file not shown.
4
src/mochaConfig/mocha.opts
Normal file
4
src/mochaConfig/mocha.opts
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
--reporter spec
|
||||||
|
--file ./mochaConfig/setup/index.js
|
||||||
|
--exclude node_modules/**/*
|
||||||
|
--timeout 10000
|
||||||
3
src/mochaConfig/setup/index.js
Normal file
3
src/mochaConfig/setup/index.js
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
|
||||||
|
|
||||||
|
console.log('hello from setup!')
|
||||||
1905
src/package-lock.json
generated
Normal file
1905
src/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
19
src/package.json
Normal file
19
src/package.json
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
"name": "safe-redis-leader",
|
||||||
|
"version": "0.0.1",
|
||||||
|
"description": "Redis leader election implementation that does not have any race conditions",
|
||||||
|
"main": "index.js",
|
||||||
|
"scripts": {
|
||||||
|
"test": "NODE_ENV=test NODE_PATH='./' mocha $DEBUG_NODE $WATCH --watch --inspect-brk=0.0.0:9229 --opts ./mochaConfig/mocha.opts ./src/**/*.test.js"
|
||||||
|
},
|
||||||
|
"author": "",
|
||||||
|
"license": "ISC",
|
||||||
|
"devDependencies": {
|
||||||
|
"chai": "^4.2.0",
|
||||||
|
"dotenv": "^8.2.0",
|
||||||
|
"lodash": "^4.17.14",
|
||||||
|
"mocha": "^6.2.2",
|
||||||
|
"nock": "^12.0.2",
|
||||||
|
"nodemon": "^2.0.4"
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
src/src/.DS_Store
vendored
Normal file
BIN
src/src/.DS_Store
vendored
Normal file
Binary file not shown.
6
src/src/tests/index.test.js
Normal file
6
src/src/tests/index.test.js
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
|
||||||
|
describe("Main", function(){
|
||||||
|
it("should run", async function(){
|
||||||
|
console.log('it ran!')
|
||||||
|
})
|
||||||
|
})
|
||||||
Reference in New Issue
Block a user