105 lines
4.1 KiB
YAML
105 lines
4.1 KiB
YAML
---
|
|
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}}'
|