--- 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