290 lines
9.5 KiB
YAML
290 lines
9.5 KiB
YAML
|
---
|
||
|
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
|