install.fairie/.config/taskfiles/boilerplate/Taskfile.yml
Brian Zalewski f42899b107 Latest
2022-12-24 15:04:59 -05:00

136 lines
5 KiB
YAML

---
version: '3'
tasks:
check:package:
interactive: true
deps:
- :install:modules:local
- :install:software:jq
vars:
BLUEPRINT_REQUIRED_FIELDS: title description group name overview slug subgroup
run: once
log:
error: Error occurred while validating/prompting for blueprint settings
start: Ensuring required fields in the blueprint section of `package.json` are present
succes: Successfully ensured `package.json` minimum blueprint requirements are present
cmds:
- task: prime:package
- task: ensure:gitlab-ci
- task: :boilerplate:prompt:all
- task: :boilerplate:populate:type
- task: update:taskfile
clean:
deps:
- :install:software:jq
log:
error: Failed to clean `package.json`
start: Cleaning `package.json`
success: Cleaned `package.json`
cmds:
- |
TMP="$(mktemp)"
jq 'del(."standard-version")' package.json > "$TMP"
mv "$TMP" package.json
- |
TMP="$(mktemp)"
jq 'del(."lint-staged")' package.json > "$TMP"
mv "$TMP" package.json
ensure:gitlab-ci:
run: once
cmds:
- |
if [ ! -f .gitlab-ci.yml ]; then
echo '---' > .gitlab-ci.yml
echo 'stages:' >> .gitlab-ci.yml
echo ' - lint' >> .gitlab-ci.yml
echo '' >> .gitlab-ci.yml
fi
prime:package:
deps:
- :install:software:jq
run: once
log:
error: Failed to merge shared `package.json` settings
start: Ensuring `package.json` has shared settings
success: Successfully merged shared `package.json` settings
cmds:
- curl -s https://gitlab.com/megabyte-labs/common/shared/-/raw/master/package.json > package-reference.json
- task: prime:package:ensure-deps
vars:
PKG_FILE: package.json
- task: prime:package:ensure-deps
vars:
PKG_FILE: package-reference.json
- |
DEPS="$(jq -s '.[0].dependencies * .[1].dependencies' package-reference.json package.json)"
DEV_DEPS="$(jq -s '.[0].devDependencies * .[1].devDependencies' package-reference.json package.json)"
OPT_DEPS="$(jq -s '.[0].optionalDependencies * .[1].optionalDependencies' package-reference.json package.json)"
ESLINT_CONFIG="$(jq -r '.eslintConfig.extends' package-reference.json)"
PRETTIER_CONFIG="$(jq -r '.prettier' package-reference.json)"
TMP="$(mktemp)"
jq --arg deps "$DEPS" --arg devDeps "$DEV_DEPS" --arg optDeps "$OPT_DEPS" --arg eslint "$ESLINT_CONFIG" \
--arg prettier "$PRETTIER_CONFIG" '.dependencies = ($deps | fromjson) | .devDependencies = ($devDeps
| fromjson) | .optionalDependencies = ($optDeps | fromjson) | .eslintConfig.extends = $eslint
| .prettier = $prettier' package.json > "$TMP"
mv "$TMP" package.json
- rm package-reference.json
prime:package:ensure-deps:
deps:
- :install:software:jq
run: once
cmds:
- |
if [ "$(jq -r '.dependencies' {{.PKG_FILE}})" == 'null' ]; then
TMP="$(mktemp)"
jq '.dependencies = {}' {{.PKG_FILE}} > "$TMP"
mv "$TMP" {{.PKG_FILE}}
fi
- |
if [ "$(jq -r '.devDependencies' {{.PKG_FILE}})" == 'null' ]; then
TMP="$(mktemp)"
jq '.devDependencies = {}' {{.PKG_FILE}} > "$TMP"
mv "$TMP" {{.PKG_FILE}}
fi
- |
if [ "$(jq -r '.optionalDependencies' {{.PKG_FILE}})" == 'null' ]; then
TMP="$(mktemp)"
jq '.optionalDependencies = {}' {{.PKG_FILE}} > "$TMP"
mv "$TMP" {{.PKG_FILE}}
fi
update:taskfile:
deps:
- :install:software:yq
run: once
log:
error: Error encountered while ensuring `Taskfile.yml` has correct settings
start: Ensuring `Taskfile.yml` has correct settings
success: Successfully applied `Taskfile.yml` assurances
cmds:
- |
GROUP="$(jq -r '.blueprint.group' package.json)"
SUBGROUP="$(jq -r '.blueprint.subgroup' package.json)"
TASK_GROUP="$(yq eval '.vars.REPOSITORY_TYPE' Taskfile.yml)"
TASK_SUBGROUP="$(yq eval '.vars.REPOSITORY_SUBTYPE' Taskfile.yml)"
if [ "$GROUP" != "$TASK_GROUP" ]; then
yq e -i ".vars.REPOSITORY_TYPE = \"$GROUP\"" Taskfile.yml
fi
if [ "$SUBGROUP" != "$TASK_SUBGROUP" ]; then
yq e -i ".vars.REPOSITORY_SUBTYPE = \"$SUBGROUP\"" Taskfile.yml
fi
UPSTREAM='upstream:project'
if [ '{{.REPOSITORY_TYPE}}.{{.REPOSITORY_SUBTYPE}}' == 'common.shared' ]; then
UPSTREAM='upstream:shared'
elif [ '{{.REPOSITORY_TYPE}}.{{.REPOSITORY_SUBTYPE}}' == 'documentation.shared' ]; then
UPSTREAM='upstream:commondocs'
elif [ '{{.REPOSITORY_TYPE}}' == 'common' ]; then
UPSTREAM='upstream:common'
elif [ '{{.REPOSITORY_TYPE}}' == 'documentation' ]; then
UPSTREAM='upstream:docs'
fi
yq e -i ".tasks.start.cmds[0].task = \"$UPSTREAM\"" Taskfile.yml