Repository navigation
Expand file tree
/
Copy pathTaskfile.yaml
More file actions
142 lines (130 loc) · 4.84 KB
/
Copy pathTaskfile.yaml
File metadata and controls
142 lines (130 loc) · 4.84 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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
# Taskfile.yaml - development and test tasks for the generic devcontainer kit
#
# Why this exists:
# - keeps the kit's Docker and smoke-test commands close to the files they verify
# - provides a stable entrypoint for tests without adding root-level wrappers
#
# Inputs:
# - WORKSPACE selects the host path mounted into docker-run, defaulting to $PWD,
# and supplies DEVCONTAINER_WORKSPACE_FOLDER and its `.tmp` path as
# DEVCONTAINER_WORKSPACE_TMP to the whole container.
# - COMMAND selects the docker-run command, defaulting to devcontainer up.
# - CONTAINER_* values can align the image user with the caller.
# - devcontainer:try, :stage, and :try-staged accept a directory after --,
# defaulting to .tmp/current-release. Staging replaces that disposable tree.
# - release:update accepts an optional branch name and --push.
#
# Related files:
# - Dockerfile.base
# - cmds/
# - entrypoint.sh
# - scripts/release-build.sh
# - scripts/stage-runtime-tree.sh
# - tests/run.sh
# - tests/devcontainer-reality-test.sh
# - scripts/chrome.sh
# - tests/browser-open-test.sh
# - tests/release-build.sh
version: '3'
vars:
IMAGE: codegeist-devcontainer-kit:local
TEST_RELEASE_DIR: '{{default ".tmp/current-release" (join " " .CLI_ARGS_LIST)}}'
WORKSPACE:
sh: printf '%s' "${WORKSPACE:-$PWD}"
COMMAND:
sh: printf '%s' "${COMMAND:-devcontainer up --workspace-folder .}"
CONTAINER_USER:
sh: printf '%s' "${CONTAINER_USER:-${USER:-$(id -un)}}"
CONTAINER_GROUP:
sh: printf '%s' "${CONTAINER_GROUP:-${USER:-$(id -un)}}"
CONTAINER_UID:
sh: printf '%s' "${CONTAINER_UID:-${UID:-$(id -u)}}"
CONTAINER_GID:
sh: printf '%s' "${CONTAINER_GID:-${UID:-$(id -u)}}"
tasks:
check:
desc: Run fast deterministic contributor checks
cmds:
# Bash accepts one script; additional filenames would only become argv.
- |
for file in \
"{{.TASKFILE_DIR}}"/cmds/* \
"{{.TASKFILE_DIR}}/entrypoint.sh" \
"{{.TASKFILE_DIR}}/initialize.sh" \
"{{.TASKFILE_DIR}}"/scripts/*.sh \
"{{.TASKFILE_DIR}}"/tests/*.sh; do
bash -n "$file" || exit "$?"
done
- '"{{.TASKFILE_DIR}}/tests/release-build.sh"'
- '"{{.TASKFILE_DIR}}/tests/runtime-worktree-task.sh"'
docker-build:
desc: Build the generic devcontainer kit image
cmds:
- >-
bash -euc 'tmp_dir="$(mktemp -d)";
cleanup() { rm -rf "$tmp_dir"; };
trap cleanup EXIT;
RUNTIME_TREE_OUTPUT_DIR="$tmp_dir/.devcontainer" RUNTIME_TREE_REPLACE=false
"{{.TASKFILE_DIR}}/scripts/stage-runtime-tree.sh";
docker build
--build-arg CONTAINER_USER={{.CONTAINER_USER}}
--build-arg CONTAINER_GROUP={{.CONTAINER_GROUP}}
--build-arg CONTAINER_UID={{.CONTAINER_UID}}
--build-arg CONTAINER_GID={{.CONTAINER_GID}}
-f "$tmp_dir/.devcontainer/Dockerfile"
-t {{.IMAGE}}
"$tmp_dir"'
docker-run:
desc: Run the generic devcontainer kit image with nested Docker
deps:
- docker-build
cmds:
- >-
docker run --rm -it
--privileged
-e DEVCONTAINER_WORKSPACE_FOLDER={{.WORKSPACE}}
-e DEVCONTAINER_WORKSPACE_TMP={{.WORKSPACE}}/.tmp
-v {{.WORKSPACE}}:{{.WORKSPACE}}
-w {{.WORKSPACE}}
{{.IMAGE}}
{{.COMMAND}}
browser-open-test:
desc: Start a temp Dev Containers CLI repo and open visible Chrome
cmds:
- '{{.TASKFILE_DIR}}/tests/browser-open-test.sh {{.CLI_ARGS}}'
qemu-alpine-smoke:
desc: Download and boot Alpine Linux through QEMU
cmds:
- '{{.TASKFILE_DIR}}/tests/qemu-alpine-smoke.sh'
tests-run:
desc: Run the generic devcontainer kit test suite
cmds:
- '{{.TASKFILE_DIR}}/tests/run.sh'
devcontainer:try-staged:
desc: Verify staged runtime and open container Bash (default .tmp/current-release)
env:
DEVCONTAINER_TEST_RELEASE_DIR: '{{.TEST_RELEASE_DIR}}'
cmds:
- '"{{.TASKFILE_DIR}}/tests/devcontainer-reality-test.sh"'
devcontainer:stage:
desc: Copy current runtime files to a staging directory (default .tmp/current-release)
env:
RUNTIME_TREE_OUTPUT_DIR: '{{.TEST_RELEASE_DIR}}'
RUNTIME_TREE_REPLACE: 'true'
cmds:
- '"{{.TASKFILE_DIR}}/scripts/stage-runtime-tree.sh"'
devcontainer:try:
# When invoked inside the parent devcontainer, the reality and worktree
# containers use its nested Docker daemon, not the SSH host Docker daemon.
desc: Stage current runtime, build and verify a temporary container, then open Bash
cmds:
- task: devcontainer:stage
vars:
TEST_RELEASE_DIR: '{{.TEST_RELEASE_DIR}}'
- task: devcontainer:try-staged
vars:
TEST_RELEASE_DIR: '{{.TEST_RELEASE_DIR}}'
release:update:
desc: Update the runtime-only devcontainer release branch
cmds:
- '"{{.TASKFILE_DIR}}/scripts/release-build.sh" {{.CLI_ARGS}}'