137 lines
5 KiB
YAML
137 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
|