142 lines
4.7 KiB
YAML
142 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
|