-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTaskfile.yml
More file actions
174 lines (138 loc) · 5.7 KB
/
Copy pathTaskfile.yml
File metadata and controls
174 lines (138 loc) · 5.7 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
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
# https://taskfile.dev — install with `brew install go-task` (or see docs).
# Run `task` (or `task --list-all`) to see all available commands.
version: "3"
# https://taskfile.dev/usage/#env-files
dotenv: [".env.local", ".env"]
vars:
# https://taskfile.dev/reference/templating/
BASE_URL: "{{.TASK_BASE_URL | default .COMPOSE_SERVER_DOMAIN | default .COMPOSE_DOMAIN }}"
DOCKER_COMPOSE: '{{ .TASK_DOCKER_COMPOSE | default "itkdev-docker-compose" }}'
tasks:
default:
desc: List all tasks
cmds:
- task --list-all
silent: true
# -------------------------------------------------------------- Wrappers ---
compose:
desc: "Run a docker compose command. Example: task compose -- up --detach."
cmds:
- "{{ .DOCKER_COMPOSE }} {{ .CLI_ARGS }}"
composer:
desc: "Run a composer command. Example: task composer -- install."
cmds:
- task phpfpm -- composer {{.CLI_ARGS}}
silent: true
node:
desc: "Run a command in a one-off node container. Example: task node -- npm run dev."
cmds:
- task compose -- run --rm node {{.CLI_ARGS}}
silent: true
phpfpm:
desc: "Run a command inside the running phpfpm container. Example: task phpfpm -- bin/console cache:clear."
cmds:
- task compose -- exec phpfpm {{.CLI_ARGS}}
silent: true
# ------------------------------------------------------ Stack lifecycle ---
setup:
desc: One-time stack setup — network, pull, install deps, run migrations.
cmds:
- docker network create frontend || true
- task compose -- pull
- task node -- npm install
- task compose -- up -d
- task composer -- install
- task db:migrate
# ------------------------------------------------------------ PHP tests ---
test:
desc: Run the PHP test suite.
cmds:
- task composer -- tests
test:coverage:
desc: Run tests and write HTML coverage to coverage/.
cmds:
- task compose -- exec -e XDEBUG_MODE=coverage phpfpm vendor/bin/phpunit --coverage-html coverage/
test:coverage:check:
desc: Run tests and fail if line coverage is under the configured threshold.
cmds:
- task compose -- exec -e XDEBUG_MODE=coverage phpfpm vendor/bin/phpunit --coverage-clover=coverage/clover.xml
- task compose -- exec phpfpm vendor/bin/coverage-check coverage/clover.xml 62
test:coverage:set-threshold:
desc: Update the coverage threshold across Taskfile, composer.json, and pr.yml — `task test:coverage:set-threshold -- 65`
cmds:
- |
if [ -z "{{.CLI_ARGS}}" ]; then
echo "Usage: task test:coverage:set-threshold -- <new-threshold>" >&2
exit 1
fi
- 'task compose -- exec phpfpm php -r ''$t=intval("{{.CLI_ARGS}}"); if($t<1||$t>100){fwrite(STDERR,"Threshold must be an integer 1..100\n");exit(1);} foreach(["Taskfile.yml","composer.json",".github/workflows/pr.yml"] as $f){file_put_contents($f, preg_replace("|coverage-check coverage/clover\\.xml \\d+|", "coverage-check coverage/clover.xml $t", file_get_contents($f)));}'''
- echo "Coverage threshold set to {{.CLI_ARGS}}. Verify with 'task test:coverage:check'."
test:file:
desc: Run a single test file — `task test:file -- tests/Service/Foo.php`
cmds:
- task compose -- exec phpfpm vendor/bin/phpunit {{.CLI_ARGS}}
# ----------------------------------------- Static analysis & code prep ---
code-analysis:
desc: Run static analysis (Psalm).
cmds:
- task composer -- code-analysis
prepare-code:
desc: Run all PHP pre-commit checks (coding standards + analysis + tests).
cmds:
- task composer -- prepare-code
# ----------------------------------------------------- Coding standards ---
coding-standards:check:
desc: Check coding standards (PHP + Twig, JS + Markdown).
cmds:
- task coding-standards:php:check
- task coding-standards:js:check
coding-standards:apply:
desc: Apply coding standards (PHP + Twig, JS + Markdown).
cmds:
- task coding-standards:php:apply
- task coding-standards:js:apply
coding-standards:php:check:
desc: Check PHP + Twig coding standards (dry-run).
cmds:
- task composer -- coding-standards-check
coding-standards:php:apply:
desc: Apply PHP + Twig coding standards.
cmds:
- task composer -- coding-standards-apply
coding-standards:js:check:
desc: Check JS + Markdown coding standards.
cmds:
- task compose -- run --rm node npm run coding-standards-check
coding-standards:js:apply:
desc: Apply JS + Markdown coding standards.
cmds:
- task compose -- run --rm node npm run coding-standards-apply
# -------------------------------------------------- Database & fixtures ---
db:migrate:
prompt: "This will run migrations on the configured database. Continue?"
desc: Apply Doctrine migrations.
cmds:
- task compose -- exec phpfpm bin/console doctrine:migrations:migrate --no-interaction
fixtures:load:
prompt: "This will reset fixture data. Continue?"
desc: Load data fixtures.
cmds:
- task composer -- fixtures:load
# ----------------------------------------------------------- Messenger ---
messenger:
desc: Consume async messages from the `async` transport.
cmds:
- task compose -- exec phpfpm bin/console messenger:consume async
# -------------------------------------------------------------- Assets ---
assets:dev:
desc: Build assets for development.
cmds:
- task compose -- run --rm node npm run dev
assets:watch:
desc: Watch and rebuild assets on change.
cmds:
- task compose -- run --rm node npm run watch
assets:build:
desc: Production asset build.
cmds:
- task compose -- run --rm node npm run build