--- version: '3' vars: COMMON_FOLDER: .common DOCS_URL: https://gitlab.com/megabyte-labs/documentation/{{.REPOSITORY_SUBTYPE}} SHARED_COMMON_URL: https://gitlab.com/megabyte-labs/common/shared.git SHARED_FOLDER: .shared tasks: clean: log: error: Error running `rm -rf {{.SHARED_FOLDER}}` start: Running `rm -rf {{.SHARED_FOLDER}}` success: Removed `{{.SHARED_FOLDER}}` cmds: - rm -rf {{.SHARED_FOLDER}} - rm -f .config/docs/Taskfile.yml clone: cmds: - task: clone:common - task: clone:docs clone:common: log: error: Error cloning Shared Common to `{{.SHARED_FOLDER}}` start: Cloning Shared Common to `{{.SHARED_FOLDER}}` success: Cloned Shared Common to `{{.SHARED_FOLDER}}` cmds: - rm -rf ./{{.SHARED_FOLDER}} - git clone --depth=1 {{.SHARED_COMMON_URL}} ./{{.SHARED_FOLDER}} - rm -rf ./{{.SHARED_FOLDER}}/.git clone:docs: log: error: Error cloning / cleaning up {{.REPOSITORY_SUBTYPE}} docs repo start: Cloning {{.REPOSITORY_SUBTYPE}} docs repo and pruning unnecessary files success: Cloned sub-type documentation repository and pruned unnecessary files cmds: - mkdir -p ./{{.SHARED_FOLDER}}/common/.config - rm -rf ./{{.SHARED_FOLDER}}/.config/docs - git clone --depth=1 {{.DOCS_URL}} ./{{.SHARED_FOLDER}}/common/.config/docs - | cd ./{{.SHARED_FOLDER}}/common/.config/docs rm -rf .git .config .github .gitlab .vscode .editorconfig .gitignore .gitlab-ci.yml rm -rf LICENSE Taskfile.yml package-lock.json package.json poetry.lock pyproject.toml rm -rf docs common.json pnpm-lock.yaml start.sh logo.png yarn.lock local/yarn.lock local/package-lock.json rm -rf .devcontainer local/slim combine: log: error: Error combining generated files start: Combining generated files success: Combined generated files cmds: - mkdir -p _generated_ - mv .common* _generated_ - | mv _generated_/.common _generated_/common for FOLDER in _generated_/.common-*; do TARGET="$(echo $FOLDER | sed 's/^_generated_\/.common-//')" mv "$FOLDER" "_generated_/$TARGET" done copy: deps: - :install:software:yq log: error: Error removing `.config/` start: Removing `.config/` success: Removed `.config/` cmds: - mv .gitlab-ci.yml old.gitlab-ci.yml - task: copy:begin - | 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 copy:begin: deps: - copy:common - copy:project - copy:project:subtype copy:common: deps: - :install:software:coreutils log: error: Error copying common files start: Copying common files success: Copied common files cmds: - | {{if (eq OS "darwin")}}PATH="$(brew --prefix)/opt/coreutils/libexec/gnubin:$PATH"{{end}} cp -rT ./{{.SHARED_FOLDER}}/common/ . - task: :common:husky:permissions copy:project: deps: - :install:software:coreutils log: error: Error copying project files start: Copying project files success: Copied project files cmds: - | {{if (eq OS "darwin")}}PATH="$(brew --prefix)/opt/coreutils/libexec/gnubin:$PATH"{{end}} cp -rT ./{{.SHARED_FOLDER}}/common ./{{.COMMON_FOLDER}} if [ ! -d project ]; then mkdir project; fi cp -rT project ./{{.COMMON_FOLDER}} copy:project:subtype: deps: - :install:software:coreutils log: error: Error copying project sub-type files start: Copying project sub-type files success: Copied project sub-type files cmds: - | {{if (eq OS "darwin")}}PATH="$(brew --prefix)/opt/coreutils/libexec/gnubin:$PATH"{{end}} for FOLDER in project-*/; do SUBTYPE="$(echo "$FOLDER" | sed 's/project-\(.*\)\//\1/')" cp -rT "$FOLDER" "./{{.COMMON_FOLDER}}-$SUBTYPE" done merge: deps: - merge:package - merge:variables merge:package: cmds: - task: merge:package:project - task: merge:package:project:subtype merge:package:project: deps: - :install:software:jq log: error: Error merging `package.json.liquid` templates start: Merging `package.json.liquid` templates success: Merged `package.json.liquid` templates cmds: - | function ensureKeywords() { if [ ! -f "$1" ]; then echo "{}" > "$1"; fi KEYWORDS="$(jq -r '.keywords' "$1")" if [[ "$KEYWORDS" == 'null' ]] || [[ "$KEYWORDS" == '' ]]; then TMP="$(mktemp)" jq -r '.keywords = [] | .' "$1" > "$TMP" mv "$TMP" "$1" fi } function mergePackages() { # Ensure array exists in both JSON files ensureKeywords "$1" ensureKeywords "$2" # Merge the files TMP="$(mktemp)" jq --arg keywords "$(jq '.keywords[]' "$1" "$2" | jq -s '. | unique')" -s -S \ '.[0] * .[1] | .keywords = ($keywords | fromjson) | .' "$1" "$2" > "$TMP" mv "$TMP" "$3" } mergePackages "./{{.SHARED_FOLDER}}/common/package.json.liquid" "./project/package.json.liquid" "./{{.COMMON_FOLDER}}/package.json.liquid" merge:package:project:subtype: deps: - :install:software:jq log: error: Error merging `package.json.liquid` templates for sub-type start: Merging `package.json.liquid` templates for sub-type success: Merged `package.json.liquid` templates for sub-type cmds: - | function ensureKeywords() { if [ ! -f "$1" ]; then echo "{}" > "$1"; fi KEYWORDS="$(jq -r '.keywords' "$1")" if [[ "$KEYWORDS" == 'null' ]] || [[ "$KEYWORDS" == '' ]]; then TMP="$(mktemp)" jq -r '.keywords = [] | .' "$1" > "$TMP" mv "$TMP" "$1" fi } function mergePackages() { # Ensure array exists in both JSON files ensureKeywords "$1" ensureKeywords "$2" # Merge the files TMP="$(mktemp)" jq --arg keywords "$(jq '.keywords[]' "$1" "$2" | jq -s '. | unique')" -s -S '.[0] * .[1] | .keywords = ($keywords | fromjson) | .' "$1" "$2" > "$TMP" mv "$TMP" "$3" } for FOLDER in project-*/; do SUBTYPE="$(echo "$FOLDER" | sed 's/project-\(.*\)\//\1/')" mergePackages "./{{.COMMON_FOLDER}}/package.json.liquid" "project-$SUBTYPE/package.json.liquid" "./{{.COMMON_FOLDER}}-$SUBTYPE/package.json.liquid" & done wait merge:variables: cmds: - task: merge:variables:project - task: merge:variables:subtype merge:variables:project: deps: - :install:software:jq log: error: Error merging variables files start: Merging variables.json files success: Merged variables.json files cmds: - | if [ -f "project/.config/variables.json" ]; then jq -s -S '.[0] * .[1]' "./{{.COMMON_FOLDER}}/.config/docs/variables.json" \ "project/.config/variables.json" > "./{{.COMMON_FOLDER}}/.config/variables.json" else cp ./{{.COMMON_FOLDER}}/.config/docs/variables.json ./{{.COMMON_FOLDER}}/.config/variables.json fi merge:variables:subtype: deps: - :install:software:jq log: error: Error merging variables files for sub-type start: Merging variables.json files for sub-type success: Merged variables.json files for sub-type cmds: - | GROUP="$(jq -r '.blueprint.group' package.json)" if [[ "$GROUP" == 'null' ]]; then GROUP="$(yq e '.vars.REPOSITORY_TYPE' Taskfile.yml)" if [[ "$GROUP" == 'null' ]]; then echo "ERROR '.blueprint.group' did not exist in the package.json and the fallback '.vars.REPOSITORY_TYPE' did not exist in the Taskfile.yml" fi fi function handleSubtype() { FOLDER="$1" SUBTYPE="$(echo "$FOLDER" | sed 's/project-\(.*\)\//\1/')" mkdir -p "./{{.COMMON_FOLDER}}-$SUBTYPE/.config" TMP="$(mktemp)" jq --arg group "$GROUP" --arg subtype "$SUBTYPE" '.subgroup = $subtype | .group = $group | .' ./{{.COMMON_FOLDER}}/.config/variables.json > "$TMP" if [ -f "project-$SUBTYPE/.config/variables.json" ]; then jq -s -S '.[0] * .[1]' "$TMP" "project-$SUBTYPE/.config/variables.json" > "./{{.COMMON_FOLDER}}-$SUBTYPE/.config/variables.json" else mv "$TMP" "./{{.COMMON_FOLDER}}-$SUBTYPE/.config/variables.json" fi } for FOLDER in project-*/; do handleSubtype "$FOLDER" & done wait reset: log: error: Error removing `.common*` and `_generated_` start: Removing `.common*` and `_generated_` success: Removed `.common*` and `_generated_` cmds: - rm -rf .common* - rm -rf _generated_ template: deps: - :install:modules:local - :install:npm:liquidjs cmds: - task: :upstream:variables vars: INPUT_FILE: ./{{.COMMON_FOLDER}}/.config/docs/variables.json OUTPUT_FILE: ./.variables.json - task: template:files template:files: deps: - template:files:liquidjs template:files:liquidjs: cmds: - task: :upstream:template:liquidjs vars: ADDITIONAL_IGNORE_FOLDERS: -path './{{.COMMON_FOLDER}}*' -o -path './project*' -o -path './deprecated*' -o