Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,4 @@ itkdev-docker-compose-server
node_modules
dist
.pkg-cache
.task
13 changes: 12 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -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.
44 changes: 32 additions & 12 deletions Taskfile.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,32 +2,52 @@ 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

dev:compile:
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
9 changes: 0 additions & 9 deletions docker-compose.mac-nfs.yml

This file was deleted.

11 changes: 1 addition & 10 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -1,19 +1,10 @@
version: "3.7"

services:
node:
image: node:16
user: node
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
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
8 changes: 4 additions & 4 deletions src/commands/docker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand All @@ -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;
Expand All @@ -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)
}
}
6 changes: 3 additions & 3 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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': {
Expand Down
11 changes: 6 additions & 5 deletions src/modules/docker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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
]

Expand All @@ -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);
Expand Down