-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTaskfile.yml
More file actions
89 lines (79 loc) · 3.23 KB
/
Taskfile.yml
File metadata and controls
89 lines (79 loc) · 3.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
version: '3'
dotenv: ['.env']
vars:
IMAGE_NAME: '{{ default "agent-8s" .IMAGE_NAME }}'
CONTAINER_NAME: '{{ default "agent-8s" .CONTAINER_NAME }}'
tasks:
test:
desc: Run unit tests inside the Docker build stage
cmds:
- task: docker:test
docker:test:
desc: Execute the Docker test stage to compile and run checks
cmds:
- docker build --target test --progress plain -t {{.IMAGE_NAME}}:test .
docker:build:
desc: Build the Docker image for the bot
cmds:
- task: docker:test
vars:
IMAGE_NAME: '{{.IMAGE_NAME}}'
- docker build -t {{.IMAGE_NAME}} .
docker:run:
desc: Run the bot container with required environment variables
vars:
BOT_TOKEN_VALUE: '{{ coalesce .BOT_TOKEN (env "BOT_TOKEN") }}'
TELEMETRY_URL_VALUE: '{{ coalesce .TELEMETRY_URL (env "TELEMETRY_URL") }}'
TELEMETRY_TOKEN_VALUE: '{{ coalesce .TELEMETRY_TOKEN (env "TELEMETRY_TOKEN") }}'
DETACH_FLAG: '{{if eq (default "false" .DETACH) "true"}}-d{{end}}'
RUN_ENV_ARGS: '-e BOT_TOKEN={{.BOT_TOKEN_VALUE}}{{if .TELEMETRY_URL_VALUE}} -e TELEMETRY_URL={{.TELEMETRY_URL_VALUE}}{{end}}{{if .TELEMETRY_TOKEN_VALUE}} -e TELEMETRY_TOKEN={{.TELEMETRY_TOKEN_VALUE}}{{end}}'
preconditions:
- sh: test -n "{{.BOT_TOKEN_VALUE}}"
msg: Provide BOT_TOKEN via environment or BOT_TOKEN=... when running task
cmds:
- docker run --rm{{if .DETACH_FLAG}} {{.DETACH_FLAG}}{{end}} --name {{.CONTAINER_NAME}} {{.RUN_ENV_ARGS}} {{.IMAGE_NAME}}{{if .CLI_ARGS}} {{.CLI_ARGS}}{{end}}
docker:run-env-file:
desc: Run the bot container using an env file (defaults to .env)
vars:
ENV_FILE: '{{ default ".env" .ENV_FILE }}'
DETACH_FLAG: '{{if eq (default "false" .DETACH) "true"}}-d{{end}}'
cmds:
- docker run --rm{{if .DETACH_FLAG}} {{.DETACH_FLAG}}{{end}} --name {{.CONTAINER_NAME}} --env-file {{.ENV_FILE}} -v {{.PWD}}/{{.ENV_FILE}}:/usr/src/app/.env:ro {{.IMAGE_NAME}}{{if .CLI_ARGS}} {{.CLI_ARGS}}{{end}}
docker:down:
desc: Stop the running bot container and remove it if present
cmds:
- |
CONTAINER="{{.CONTAINER_NAME}}"
if [ -n "$(docker ps -q --filter name=^/${CONTAINER}$)" ]; then
docker stop "${CONTAINER}"
fi
if [ -n "$(docker ps -aq --filter name=^/${CONTAINER}$)" ]; then
docker rm "${CONTAINER}"
fi
docker:destroy-image:
desc: Remove the bot Docker image and prune dangling layers
cmds:
- |
if docker image inspect {{.IMAGE_NAME}} >/dev/null 2>&1; then
docker image rm {{.IMAGE_NAME}}
fi
- docker image prune -f
docker:update-run:
desc: Stop container, rebuild image, and run the latest bot using .env by default
cmds:
- task: docker:down
vars:
CONTAINER_NAME: '{{.CONTAINER_NAME}}'
- task: docker:destroy-image
vars:
IMAGE_NAME: '{{.IMAGE_NAME}}'
- task: docker:build
vars:
IMAGE_NAME: '{{.IMAGE_NAME}}'
- task: docker:run-env-file
vars:
IMAGE_NAME: '{{.IMAGE_NAME}}'
CONTAINER_NAME: '{{.CONTAINER_NAME}}'
ENV_FILE: '{{ default ".env" .ENV_FILE }}'
DETACH: '{{ default "false" .DETACH }}'
CLI_ARGS: '{{.CLI_ARGS}}'