-
Notifications
You must be signed in to change notification settings - Fork 0
/
Taskfile.yml
159 lines (141 loc) · 5.36 KB
/
Taskfile.yml
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
# This file gives new contributors an easy way to get everything they need,
# assuming they have `cargo` and `Taskfile`.
# Generally we shouldn't be requiring running this to have a good dev loop —
# rust tools are independently good, and adding an intermediate layer means we're
# reimplementing things or getting in the way. Instead, this can be used to
# aggregate commands that's aren't yet integrated.
# Some of the file may be somewhat over-engineered!
version: "3"
vars:
# Keeps in sync with .vscode/extensions.json
vscode_extensions: |
budparr.language-hugo-vscode
esbenp.prettier-vscode
mitsuhiko.insta
prql.prql
rust-lang.rust-analyzer
tasks:
setup-dev:
desc: Install tools for PRQL development.
cmds:
# `--locked` installs from the underlying lock files (which is not the default?!)
- cargo install --locked
cargo-audit
cargo-insta
cargo-release
default-target
mdbook
mdbook-admonish
mdbook-toc
wasm-bindgen-cli
wasm-pack
- rustup target add wasm32-unknown-unknown
- python3 -m pip install -U maturin
- task: install-pre-commit
- task: install-brew-dependencies
- task: install-npm-dependencies
# We only suggest, rather than install; we don't want to intrude (maybe we're being too conservative?).
- task: suggest-vscode-extensions
- pre-commit install-hooks
- cmd: |
echo "
🟢 Set up complete! ✅🚀"
silent: true
suggest-vscode-extensions:
desc: Check and suggest VSCode extensions.
vars:
extensions:
# List extensions, or just return true if we can't find `code`.
sh: which code && code --list-extensions || true
missing_extensions: |
{{ range ( .vscode_extensions | trim | splitLines ) -}}
{{ if not (contains . $.extensions) }}❌ {{.}} {{else}}✅ {{.}} {{ end }}
{{ end -}}
status:
# If vscode isn't installed, or there are no missing extensions, return 0 and exit early.
- '[ ! -x "$(which code)" ] || {{ not (contains "❌" .missing_extensions) }}'
silent: true
cmds:
- |
echo "
🟡 It looks like VSCode is installed but doesn't have all recommended extensions installed:
{{ .missing_extensions }}
Install them with:
task install-vscode-extensions
"
install-vscode-extensions:
desc: Install recommended VSCode extensions.
cmds:
- |
{{ range ( .vscode_extensions | trim | splitLines ) -}}
code --install-extension {{.}}
{{ end -}}
install-pre-commit:
# Someone might have this installed with `brew`, so only install if it can't be found.
status:
- which pre-commit
cmds:
- python3 -m pip install -U pre-commit
install-brew-dependencies:
status:
- which hugo
- which npm
preconditions:
- sh: which brew
msg: |
🔴 Can't find `brew`, which we use to install Hugo & npm. Either install brew and re-run this, or install them directly based on:
- https://gohugo.io/getting-started/installing/
- https://docs.npmjs.com/downloading-and-installing-node-js-and-npm
cmds:
- brew install hugo npm
install-npm-dependencies:
cmds:
- npm install --location=global prettier prettier-plugin-go-template
- cmd:
echo "In order to get nice auto-formatting of web code in VSCode, VSCode
requires configuration to use the system-wide install of prettier. See
https://github.com/NiklasPor/prettier-plugin-go-template/issues/58#issuecomment-1085060511
for more info."
silent: true
build-all:
desc: Build everything. Running this isn't required when developing; it's for caching or as a reference.
vars:
default_target:
sh: default-target
targets: |
{{ .default_target }}
wasm32-unknown-unknown
cmds:
- |
{{ range ( .targets | trim | splitLines ) -}}
cargo build --all-targets --target={{.}}
{{ end -}}
- mdbook build book/
- cd playground && npm install && npm run build
- cd website && hugo
test-all:
desc: Test everything, resetting snapshots. Running this isn't required when developing; it's for caching or as a reference.
vars:
default_target:
sh: default-target
cmds:
# We run this `run_examples` first for the reasons given in
# `parser::test_parse_pipeline_parse_tree`. Ideally we would a) retain
# examples in the documentation (inc. tested), b) not rely on falliable
# tests to extract them, which include compiling prql-compiler, c) not
# fail other compliation steps if they can't be extracted.
- cargo insta test --accept -- run_examples
- task: build-all
# Only delete unreferenced snapshots on the default target — lots are excluded under wasm.
- cargo insta test --accept --delete-unreferenced-snapshots -- --target={{.default_target}}
- cargo insta test --accept -- --target=wasm32-unknown-unknown
- pre-commit run -a
build-web:
desc: Build the website
cmds:
- cd website && hugo --minify
- cd book && mdbook build
- mv book/book website/public/book
- cd playground && npm ci
- cd playground && npm run build
- mv playground/build website/public/playground