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

289 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