install.fairie/.config/taskfiles/vscode/Taskfile.yml

106 lines
4.1 KiB
YAML
Raw Normal View History

2022-12-24 12:04:59 -08:00
---
version: '3'
vars:
DEVCONTAINER_CONFIG: .devcontainer/devcontainer.json
EXTENSIONS_FILE: .vscode/extensions.json
EXTENSIONS_URL: https://gitlab.com/megabyte-labs/gas-station/-/raw/master/environments/prod/group_vars/desktop/vscode-extensions.yml
TASKS_FILE: .vscode/tasks.json
tasks:
extensions:
deps:
- :install:npm:prettier
- :install:software:jq
- :install:software:yq
summary: |
# Generates the `{{.EXTENSIONS_FILE}}` file for VS Code auto plugin recommendations
This task generates the `{{.EXTENSIONS_FILE}}` file which is used to automatically have
VS Code show a popup with a link that leads to a list of plugins that the project recommends.
This list is populated by converting the list of VS Code plugins installed by default by
[Gas Station](https://gitlab.com/megabyte-labs/gas-station) into VS Code syntax.
run: once
log:
error: Failed to generate `{{.EXTENSIONS_FILE}}`
start: Generating `{{.EXTENSIONS_FILE}}`
success: Generated `{{.EXTENSIONS_FILE}}`
cmds:
- mkdir -p .vscode
- >-
curl -s {{.EXTENSIONS_URL}} | yq e -o=j | jq '.[] = [(.[][] | select(.types | index("{{.REPOSITORY_TYPE}}") or index("all")))
| .name] | . + {"recommendations": .vscode_extensions } | del(.vscode_extensions)' > {{.EXTENSIONS_FILE}}
- task: :fix:prettier
vars:
CLI_ARGS: '{{.EXTENSIONS_FILE}}'
extensions:devcontainer:
deps:
- :install:npm:prettier
- :install:software:jq
summary: |
# Inject `devcontainer.json` with Extensions
This task synchronizes the extensions from `.vscode/extensions.json` into the
`.devcontainer/devcontainer.json` extensions field.
run: once
log:
error: Failed to inject `{{.EXTENSIONS_FILE}}` `recommendations` into `{{.DEVCONTAINER_CONFIG}}`
start: Injecting `{{.EXTENSIONS_FILE}}` `recommendations` into `{{.DEVCONTAINER_CONFIG}}`
success: Successfully injected `{{.EXTENSIONS_FILE}}` `recommendations` into `{{.DEVCONTAINER_CONFIG}}`
cmds:
- |
TMP="$(mktemp)"
jq --arg recs "$(jq '.recommendations' {{.EXTENSIONS_FILE}})" '.extensions = ($recs | fromjson)' {{.DEVCONTAINER_CONFIG}} > "$TMP"
mv "$TMP" {{.DEVCONTAINER_CONFIG}}
- task: :fix:prettier
vars:
CLI_ARGS: '{{.DEVCONTAINER_CONFIG}}'
generate:
deps:
- extensions
- tasks
run: once
cmds:
- task: extensions:devcontainer
tasks:
deps:
- :install:npm:prettier
- :install:software:jq
summary: |
# Populate the `.vscode/tasks.json` file
This task populates the `.vscode/tasks.json` file with tasks that are viewable by
running `task --list`. With the file generated using the output from `tasks --list`,
the user can then easily run any of the tasks from within VS Code.
This is a simple implementation. There are many features provided by VS Code that we
can potentially leverage to make our `tasks.json` better and more useful to developers.
run: when_changed
log:
error: Failed to generate `{{.EXTENSIONS_FILE}}`
start: Generating `.vscode/tasks.json`
success: Generated `{{.EXTENSIONS_FILE}}`
cmds:
- |
TMP="$(mktemp)"
echo '{"version": "2.0.0"}' > "$TMP"
TASKS='['
while read LINE; do
if [[ "${LINE:0:1}" == '*' ]]; then
TASK_NAME=$(echo "$LINE" | sed "s/'/ADD_QUOTE_BACK_IN/g" | sed 's/^\*.\([^\ ]*\):\(.*\)$/\1/g' | xargs)
TASK_DESC=$(echo "$LINE" | sed "s/'/ADD_QUOTE_BACK_IN/g" | sed 's/^\*.\([^\ ]*\):\(.*\)$/\2/g' | xargs)
LABEL="($TASK_NAME): $TASK_DESC"
LABEL="$(echo "$LABEL" | sed "s/ADD_QUOTE_BACK_IN/'/g")"
TYPE="shell"
COMMAND="bash start.sh && task $TASK_NAME"
TASKS+="{\"label\": \"$LABEL\", \"type\": \"$TYPE\", \"command\": \"$COMMAND\"},"
fi
done <<< "$(task --list)"
jq --arg tasks "${TASKS%?}]" '.tasks = ($tasks | fromjson)' "$TMP" > '{{.TASKS_FILE}}'
- task: :fix:prettier
vars:
CLI_ARGS: '{{.TASKS_FILE}}'