diff --git a/.gitignore b/.gitignore index d704bb4..ee1b67c 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ itkdev-docker-compose-server node_modules dist .pkg-cache +.task diff --git a/README.md b/README.md index 0ee5559..e923cec 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,13 @@ # Docker compose server -Simple wrapper around docker compose + +Simple wrapper around `docker compose`. + +## Development and test + +``` shell +task dev:install +task dev:build +task test:run +``` + +Run `task dev:build --force` to force a rebuild of the `itkdev-docker-compose-server` binary. diff --git a/Taskfile.yml b/Taskfile.yml index 441cac2..7e5f5a6 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -2,15 +2,9 @@ version: '3' dotenv: [".task.env"] -vars: - # Docker file selection - DOCKER_COMPOSE_FILES_OSX: '{{if eq OS "darwin"}}-f docker-compose.mac-nfs.yml{{end}}' - DOCKER_COMPOSE_FILES_DEFAULT: '-f docker-compose.yml {{ .DOCKER_COMPOSE_FILES_OSX }}' - DOCKER_COMPOSE_FILES: '{{.DOCKER_COMPOSE_FILES | default .DOCKER_COMPOSE_FILES_DEFAULT }}' - tasks: dev:install: - summary: Install node packages + desc: Install node packages cmds: - task dev:cli -- npm install @@ -18,16 +12,42 @@ tasks: task dev:cli -- node_modules/.bin/tsc dev:build: - summary: Build MacOS-x64 test build + desc: Build itkdev-docker-compose-server binary for local testing cmds: - - task dev:cli -- npm run buildTest + - cmd: 'task dev:cli -- npm run build:macos' + # https://taskfile.dev/usage/#platform-specific-tasks-and-commands + platforms: [darwin] + - cmd: 'task dev:cli -- npm run build' + platforms: [linux] + sources: + - '*.json' + - 'src/**/*.ts' + generates: + - itkdev-docker-compose-server dev:cli: - summary: Performs command inside container. Expects parameter(s). + desc: Performs command inside container. Expects parameter(s). cmds: - - docker compose {{ .DOCKER_COMPOSE_FILES }} run --rm node {{.CLI_ARGS}} + - docker compose run --rm node {{.CLI_ARGS}} build: - summary: Build linux-x64 + desc: Build linux-x64 for production cmds: - task dev:cli -- npm run build + + test:run: + desc: Build binary and run it + deps: [dev:build] + cmds: + - | + rm .env.docker.local + ./itkdev-docker-compose-server --debug + - | + echo -n > .env.docker.local + ./itkdev-docker-compose-server --debug + - | + echo "COMPOSE_FILES=docker-compose.yml" > .env.docker.local + ./itkdev-docker-compose-server --debug + - ./itkdev-docker-compose-server --docker $(which docker) --debug + - ./itkdev-docker-compose-server --docker $(which docker) config + - ./itkdev-docker-compose-server --docker $(which docker) run --rm node node --version diff --git a/docker-compose.mac-nfs.yml b/docker-compose.mac-nfs.yml deleted file mode 100644 index d72da2f..0000000 --- a/docker-compose.mac-nfs.yml +++ /dev/null @@ -1,9 +0,0 @@ -version: "3.7" - -volumes: - root: - driver: local - driver_opts: - type: nfs - o: addr=host.docker.internal,rw,nolock,hard,nointr,nfsvers=3 - device: ":${PWD}" diff --git a/docker-compose.yml b/docker-compose.yml index 0192da4..58eb103 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,5 +1,3 @@ -version: "3.7" - services: node: image: node:16 @@ -7,13 +5,6 @@ services: init: true working_dir: /app volumes: - - root:/app + - $PWD:/app # Map pkg cache dir to prevent download base image on every run. - $PWD/.pkg-cache:/home/node/.pkg-cache - -volumes: - root: - driver_opts: - type: none - device: $PWD - o: bind diff --git a/package.json b/package.json index ecd325b..9ef1ca9 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ }, "scripts": { "build": "node_modules/.bin/tsc && node_modules/.bin/pkg --targets node16-linux-x64 --output itkdev-docker-compose-server .", - "buildTest": "node_modules/.bin/tsc && node_modules/.bin/pkg --targets node16-macos-x64 --output itkdev-docker-compose-server ." + "build:macos": "node_modules/.bin/tsc && node_modules/.bin/pkg --targets node16-macos-x64 --output itkdev-docker-compose-server ." }, "devDependencies": { "@types/node": "^17.0.33", diff --git a/src/commands/docker.ts b/src/commands/docker.ts index 0c4532a..b5a4eb4 100644 --- a/src/commands/docker.ts +++ b/src/commands/docker.ts @@ -6,14 +6,14 @@ import Utils from '../modules/utils'; exports.command = '*' exports.description = 'Docker-compose server site using .env to detect setup' -exports.handler = function (argv: { [x: string]: any; base: string; debug: any; compose: any; }) { +exports.handler = function (argv: { [x: string]: any; base: string; debug: any; docker: any; }) { const utils = new Utils(); const docker = new Docker(); const env = argv['env-file']; // Test env file exists. if (!utils.isFile(argv.base + '/' + env)) { - console.error('The env file not found!'); + console.error(`The env (${env}) file not found!`); return; } @@ -29,7 +29,7 @@ exports.handler = function (argv: { [x: string]: any; base: string; debug: any; case "--env-file": case "--base": - case "--compose": + case "--docker": // Jump over the argument to these parameteres i++ continue; @@ -43,6 +43,6 @@ exports.handler = function (argv: { [x: string]: any; base: string; debug: any; docker.info(argv.debug, env, argv.base); } else { - docker.exec(argv.debug, env, argv.base, argv.compose, composeArguments) + docker.exec(argv.debug, env, argv.base, argv.docker, composeArguments) } } diff --git a/src/index.ts b/src/index.ts index c84eeea..0f5b14a 100644 --- a/src/index.ts +++ b/src/index.ts @@ -24,9 +24,9 @@ const argv = yargs(hideBin(process.argv)) default: '.', type: 'string' }, - 'compose': { - description: 'Location of docker-compose executable', - default: '/usr/local/bin/docker-compose', + 'docker': { + description: 'Location of docker executable', + default: '/usr/bin/docker', type: 'string' }, 'dump-info': { diff --git a/src/modules/docker.ts b/src/modules/docker.ts index 6bac127..a937652 100644 --- a/src/modules/docker.ts +++ b/src/modules/docker.ts @@ -43,14 +43,15 @@ export default class Docker { * The environment file to use. * @param base * The base path to execute the command in. - * @param compose - * The composer binary. + * @param docker + * The docker binary. * @param composeArguments * The commands to pass to docker compose. */ - public exec(debug: boolean, env: string, base: string, compose: string, composeArguments: string[]) + public exec(debug: boolean, env: string, base: string, docker: string, composeArguments: string[]) { const args = [ + 'compose', '--env-file', env ] @@ -73,11 +74,11 @@ export default class Docker { if (debug) { const utils = new Utils() - console.log([compose, ...args].map(s => utils.shellEscape(s)).join(' ')); + console.log([docker, ...args].map(s => utils.shellEscape(s)).join(' ')); } else { try { - execFileSync(compose, args, {encoding: 'utf8', cwd: base, stdio: 'inherit'}); + execFileSync(docker, args, {encoding: 'utf8', cwd: base, stdio: 'inherit'}); } catch (err) { if (err instanceof Error) { console.error(err.message);