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

141 lines
4.7 KiB
YAML

---
version: '3'
vars:
PROJECT_COMMON_URL: https://gitlab.com/megabyte-labs/common/{{.REPOSITORY_TYPE}}.git
SHARED_FOLDER: .shared
tasks:
boilerplate:
deps:
- :install:software:coreutils
- :install:software:jq
log:
error: There was an error in the boilerplate logic
start: Checking if `.boilerplate/` code should be added
success: Boilerplate logic completed successfully
cmds:
- |
{{if (eq OS "darwin")}}PATH="$(brew --prefix)/opt/coreutils/libexec/gnubin:$PATH"{{end}}
if [[ "$(jq -r '.blueprint.boilerplate' package.json)" == 'true' ]]; then
for ENTITY in .boilerplate/*; do
TARGET="$(echo $ENTITY | sed 's/^.boilerplate\///')"
rm -rf "$TARGET"
done
fi
GREP=""
for ENTITY in .boilerplate/*; do
TARGET="$(echo $ENTITY | sed 's/^.boilerplate\///')"
GREP="$TARGET"\|"$GREP"
done
GREP="$(echo $GREP | sed 's/\\|$//')"
if ! ls -la | grep "$GREP" &> /dev/null; then
.config/log info "Adding boilerplate code since there are no overlapping files"
cp -rT .boilerplate .
.config/log success "Scaffolded the project with boilerplate code!"
fi
- rm -rf .boilerplate
clean:
log:
error: Failed to run `rm -rf {{.SHARED_FOLDER}}`
start: Running `rm -rf {{.SHARED_FOLDER}}`
success: Successfully ran `rm -rf {{.SHARED_FOLDER}}`
cmds:
- rm -rf {{.SHARED_FOLDER}}
clone:
log:
error: Error cloning {{.PROJECT_COMMON_URL}}
start: Cloning {{.PROJECT_COMMON_URL}}
success: Finished cloning {{.PROJECT_COMMON_URL}}
cmds:
- rm -rf {{.SHARED_FOLDER}}
- git clone --depth=1 {{.PROJECT_COMMON_URL}} {{.SHARED_FOLDER}}
- rm -rf ./{{.SHARED_FOLDER}}/.git
copy:
deps:
- :install:software:coreutils
- :install:software:yq
log:
error: Error copying pre-generated files
start: Copying pre-generated files
success: Copied pre-generated files
cmds:
- |
if [ -f .gitlab-ci.yml ]; then
mv .gitlab-ci.yml old.gitlab-ci.yml
fi
- |
{{if (eq OS "darwin")}}PATH="$(brew --prefix)/opt/coreutils/libexec/gnubin:$PATH"{{end}}
cp -rT {{.SHARED_FOLDER}}/_generated_/common .
cp -rT {{.SHARED_FOLDER}}/_generated_/{{.REPOSITORY_SUBTYPE}} .
- |
if [ -f old.gitlab-ci.yml ]; then
yq eval-all -i 'select(fileIndex == 0) * select(fileIndex == 1)' old.gitlab-ci.yml .gitlab-ci.yml
mv old.gitlab-ci.yml .gitlab-ci.yml
fi
- task: :common:husky:permissions
- task: save:common:keywords
merge:package:overrides:
deps:
- :install:software:jq
summary: |
# Merge data from package.json's '.blueprint.jsonOverrides' key
If you wanted to ensure that the project's package.json file always has its 'xyz' key
equal to 'abc' then you would add the following to the package.json file:
```json
{
...
"blueprint": {
"jsonOverrides": {
"package.json": {
"xyz": "abc"
}
}
}
}
```
In the above example, you could also set the value of package.json equal to the path of some other
JSON file in the project that you would like to override.
This method is here in case there are any key/values that you would like to freeze.
log:
error: Error processing `.blueprint.jsonOverrides` in `package.json`
start: Processing `.blueprint.jsonOverrides` in `package.json`
success: Finished processing `.blueprint.jsonOverrides` in `package.json`
cmds:
- |
if [ "$(jq -r '.blueprint.jsonOverrides' package.json)" != 'null' ]; then
jq -r '.blueprint.jsonOverrides | keys[]' package.json | while read FILE_PATH; do
VALUE="$(jq --arg filepath "$FILE_PATH" '.blueprint.jsonOverrides[$filepath]' "$FILE_PATH")"
TMP="$(mktemp)"
jq --arg value "$VALUE" -s '.[] + ($value | fromjson)' "$FILE_PATH" > "$TMP"
mv "$TMP" "$FILE_PATH"
done
fi
save:common:keywords:
deps:
- :install:software:jq
log:
error: Failed to save common keywords
start: Saving common keywords
success: Saved common keywords
cmds:
- |
KEYWORDS="$(jq -r '.keywords' package.json.liquid)"
jq -n --arg keywords "$KEYWORDS" '.keywords = ($keywords | fromjson | unique)' > .config/common-keywords.json.liquid
template:
cmds:
- task: :upstream:variables
vars:
INPUT_FILE: .config/variables.json
OUTPUT_FILE: .variables.json
- task: :upstream:template