330 lines
12 KiB
YAML
330 lines
12 KiB
YAML
---
|
|
version: '3'
|
|
|
|
tasks:
|
|
common:
|
|
run: once
|
|
log:
|
|
error: Error updating common repository
|
|
start: Updating common repository
|
|
success: Finished updating common repository
|
|
cmds:
|
|
- task: :upstream:common:reset
|
|
- task: :upstream:common:clone
|
|
- task: :upstream:common:copy
|
|
- task: :upstream:common:merge
|
|
- task: :upstream:common:clean
|
|
- task: :upstream:common:template
|
|
- task: :upstream:common:combine
|
|
- task: :vscode:generate
|
|
- task: :install:modules:local:lockfiles
|
|
- task: :fix:eslint
|
|
- task: :git:commit:automated
|
|
- task: :git:push:all
|
|
status:
|
|
- '[ "{{.DOCKER_BUILDING}}" == "true" ]'
|
|
|
|
commondocs:
|
|
run: once
|
|
log:
|
|
error: Error updating common documents repository
|
|
start: Updating common documents repository
|
|
success: Finished updating common documents repository
|
|
cmds:
|
|
- task: :upstream:commondocs:clone
|
|
- task: :upstream:commondocs:copy
|
|
- task: :upstream:commondocs:clean
|
|
- task: :upstream:commondocs:template
|
|
- task: :vscode:generate
|
|
- task: :install:modules:local:lockfiles
|
|
- task: :fix:eslint
|
|
- task: :git:commit:automated
|
|
- task: :git:push:all
|
|
status:
|
|
- '[ "{{.DOCKER_BUILDING}}" == "true" ]'
|
|
|
|
docs:
|
|
run: once
|
|
todo: Remove the git:commit:automated tasks
|
|
log:
|
|
error: Error updating document repository
|
|
start: Updating document repository
|
|
success: Finished updating document repository
|
|
cmds:
|
|
- task: :upstream:docs:clone
|
|
- task: :upstream:docs:copy
|
|
- task: :upstream:docs:merge
|
|
- task: :upstream:docs:clean
|
|
- task: :upstream:docs:template
|
|
- task: :vscode:generate
|
|
- task: :install:modules:local:lockfiles
|
|
- task: :fix:eslint
|
|
- task: :git:commit:automated
|
|
- task: :git:push:all
|
|
status:
|
|
- '[ "{{.DOCKER_BUILDING}}" == "true" ]'
|
|
|
|
project:
|
|
run: once
|
|
log:
|
|
error: Error updating project repository
|
|
start: Running project update logic
|
|
success: Finished running project update logic
|
|
cmds:
|
|
- task: pull
|
|
- task: :upstream:project:clone
|
|
- task: :upstream:project:copy
|
|
- task: :upstream:project:clean
|
|
- task: :upstream:project:template
|
|
- task: :upstream:project:boilerplate
|
|
- task: :vscode:generate
|
|
- task: :upstream:project:merge:package:overrides
|
|
- task: :common:update:update
|
|
- task: :install:modules:local:lockfiles
|
|
- task: :fix:eslint
|
|
- task: :git:commit:automated
|
|
- task: :git:push:all
|
|
- task: :{{if eq .REPOSITORY_SUBTYPE "role"}}ansible:galaxy:import{{else}}donothing{{end}}
|
|
status:
|
|
- '[ "{{.DOCKER_BUILDING}}" == "true" ]'
|
|
|
|
project:scaffold-only:
|
|
run: once
|
|
log:
|
|
error: Error scaffolding project
|
|
start: Scaffolding project
|
|
success: Finished scaffolding project
|
|
cmds:
|
|
- task: pull
|
|
- task: :upstream:project:clone
|
|
- task: :upstream:project:copy
|
|
- task: :upstream:project:clean
|
|
- task: :upstream:project:template
|
|
- task: :upstream:project:boilerplate
|
|
- task: :vscode:generate
|
|
- task: :upstream:project:merge:package:overrides
|
|
- SKIP_UPLOADING=true task common:update:update
|
|
- task: :install:modules:local:lockfiles
|
|
- task: :fix:eslint
|
|
status:
|
|
- '[ "{{.DOCKER_BUILDING}}" == "true" ]'
|
|
|
|
pull:
|
|
deps:
|
|
- :install:software:git
|
|
run: once
|
|
log:
|
|
error: Error executing initial `git pull` logic
|
|
start: Determining whether or not to `git pull`
|
|
success: Finished initial `git pull` logic
|
|
cmds:
|
|
- |
|
|
if ([ -f "$HOME/.ssh/known_hosts" ] && [ ! -n "$(grep "^gitlab.com " "$HOME/.ssh/known_hosts")" ]) || [[ "${container:=}" == "docker" ]]; then
|
|
if [ -z "$GITLAB_CI" ]; then
|
|
if [ -d "$HOME/.ssh" ]; then
|
|
ssh-keyscan gitlab.com >> "$HOME/.ssh/known_hosts" 2> /dev/null
|
|
fi
|
|
git config url."https://gitlab.com/".insteadOf git@gitlab.com:
|
|
fi
|
|
fi
|
|
- cmd: if git branch -r | grep origin > /dev/null; then git pull --ff-only; fi
|
|
ignore_error: true
|
|
- cmd: git config --unset url."https://gitlab.com/".insteadOf
|
|
ignore_error: true
|
|
status:
|
|
- '[ ! -d .git ]'
|
|
|
|
shared:
|
|
run: once
|
|
log:
|
|
error: Error running shared repository update logic
|
|
start: Running shared repository update logic
|
|
success: Finished running shared repository update logic
|
|
cmds:
|
|
- task: pull
|
|
- task: :upstream:shared:copy
|
|
- task: :upstream:shared:variables
|
|
- task: :upstream:shared:template
|
|
- task: :vscode:generate
|
|
- task: :install:modules:local:lockfiles
|
|
- task: :fix:eslint
|
|
- task: :git:commit:automated
|
|
- task: :git:push:all
|
|
status:
|
|
- '[ "{{.DOCKER_BUILDING}}" == "true" ]'
|
|
|
|
template:
|
|
run: once
|
|
cmds:
|
|
- task: template:liquidjs
|
|
status:
|
|
- '[ "{{.DOCKER_BUILDING}}" == "true" ]'
|
|
|
|
template:liquidjs:
|
|
deps:
|
|
- :install:modules:local
|
|
- :install:npm:liquidjs
|
|
- :install:software:jq
|
|
- template:liquidjs:python:deps
|
|
todo: Update project when Taskfile.yml gets modified
|
|
vars:
|
|
PYTHON_BREW_NOTICE: In order for this file to be generated, the customPyPiPackageName needs to be specified in the
|
|
blueprint section of package.json and the PyPi package needs to be installed on the system.
|
|
env:
|
|
TMP:
|
|
sh: mktemp
|
|
run: once
|
|
log:
|
|
error: Error encountered while generating files from `liquid` template files
|
|
start: Generating files from `liquid` template files
|
|
success: Successfully generated files from templates
|
|
cmds:
|
|
- mkdir -p local
|
|
- |
|
|
if [[ '{{.REPOSITORY_TYPE}}' == 'python' ]] && [ -f '.config/brew/python.rb.liquid' ]; then
|
|
BINARY_NAME="$(jq -r '.customPyPiPackageName' .variables.json)"
|
|
if [[ "$BINARY_NAME" == 'null' ]] || ! type "$BINARY_NAME" &> /dev/null; then
|
|
echo "{{.PYTHON_BREW_NOTICE}}" > .config/brew/python.rb.liquid
|
|
fi
|
|
fi
|
|
- cp package.json package.json.bak
|
|
- |
|
|
PATH="$PATH:$HOME/.local/bin"
|
|
function handlebars() {
|
|
FILE="$1"
|
|
TMP="$(mktemp)"
|
|
.config/log info 'Generating `'"${FILE//.liquid}"'` from `'"$FILE"'`'
|
|
hbs --data .variables.json --helper ./.config/hbs.cjs "$FILE" --stdout > "$TMP"
|
|
mv "$TMP" "${FILE//.liquid}"
|
|
rm "$FILE"
|
|
}
|
|
while read FILE; do
|
|
cp "$FILE" "${FILE//.hbs}"
|
|
done < <(find . -type f -not \( {{.ADDITIONAL_IGNORE_FOLDERS}} {{.IGNORE_FOLDERS}} \) -prune -name '*.liquid.hbs')
|
|
while read FILE; do
|
|
handlebars "$FILE"
|
|
done < <(find . -type f -not \( {{.ADDITIONAL_IGNORE_FOLDERS}} {{.IGNORE_FOLDERS}} \) -prune -name '*.liquid')
|
|
while read CONFIG_FILE; do
|
|
handlebars "$CONFIG_FILE"
|
|
done < <(find .config -type f -name '*.liquid')
|
|
- |
|
|
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
|
|
}
|
|
ensureKeywords package.json.bak
|
|
- jq -s -S --arg blueprint "$(jq -r '.blueprint' package.json.bak)"
|
|
--arg keywords "$(jq '.keywords[]' package.json.bak package.json | jq -s '. | unique')"
|
|
--argjson private "$(jq -r '.private' package.json.bak | sed 's/^null$/true/')"
|
|
--arg version "$(jq -r '.version' package.json.bak | sed 's/^null$/0.0.1/')"
|
|
'.[0] * .[1] | .keywords = ($keywords | fromjson) | .blueprint = ($blueprint | fromjson) | .private = $private | .version = $version | .'
|
|
package.json.bak package.json > "$TMP"
|
|
- mv "$TMP" package.json
|
|
- rm package.json.bak
|
|
- task: template:pyproject
|
|
|
|
template:liquidjs:python:deps:
|
|
cmds:
|
|
- task: :install:pipx:poet
|
|
status:
|
|
- '[ "{{.REPOSITORY_TYPE}}" != "python" ]'
|
|
|
|
template:pyproject:
|
|
run: once
|
|
cmds:
|
|
- task: :install:gh:fusion
|
|
- task: template:pyproject:config
|
|
- task: template:pyproject:local
|
|
- task: template:pyproject:fix
|
|
status:
|
|
- '[ ! -f pyproject.toml ] || [ "{{.DOCKER_BUILDING}}" == "true" ]'
|
|
|
|
template:pyproject:config:
|
|
log:
|
|
error: Encountered error while merging `.config/pyproject.partial.toml` into the regenerated `pyproject.toml`
|
|
start: Merging `.config/pyproject.partial.toml` into `pyproject.toml`
|
|
success: The `pyproject.toml` file was successfully generated from `.config/pyproject.partial.toml`
|
|
cmds:
|
|
- fusion toml pyproject.toml .config/pyproject.partial.toml -o pyproject.next.toml
|
|
- mv pyproject.next.toml pyproject.toml
|
|
status:
|
|
- '[ ! -f .config/pyproject.partial.toml ] || [ ! -f pyproject.toml ]'
|
|
|
|
template:pyproject:fix:
|
|
cmds:
|
|
- task: :fix:toml
|
|
vars:
|
|
CLI_ARGS: pyproject.toml
|
|
- task: :fix:prettier
|
|
vars:
|
|
CLI_ARGS: pyproject.toml
|
|
status:
|
|
- '[ -n "$NO_INSTALL_HOMEBREW" ]'
|
|
|
|
template:pyproject:local:
|
|
deps:
|
|
- :install:gh:fusion
|
|
vars:
|
|
PYPROJECT_NOTICE: |-
|
|
##### IMPORTANT DEVELOPER NOTICE #####
|
|
# This `pyproject.toml` file is automatically generated.
|
|
# If you want to make changes that persist then you should
|
|
# add your changes to `./docs/pyproject.partial.toml`.
|
|
# Be sure to include the section's title with your custom
|
|
# entries. You can test the generation of this file by running
|
|
# `bash start.sh && task init`.
|
|
log:
|
|
error: Encountered error while merging `local/pyproject.partial.toml` into the regenerated `pyproject.toml`
|
|
start: Merging `local/pyproject.partial.toml` into `pyproject.toml`
|
|
success: The `pyproject.toml` file was successfully generated from `local/pyproject.partial.toml`
|
|
cmds:
|
|
- fusion toml pyproject.toml local/pyproject.partial.toml -o pyproject.next.toml
|
|
- mv pyproject.next.toml pyproject.toml
|
|
- echo '' >> pyproject.toml
|
|
- echo '{{.PYPROJECT_NOTICE}}' >> pyproject.toml
|
|
- echo '' >> pyproject.toml
|
|
status:
|
|
- '[ ! -f local/pyproject.partial.toml ] || [ ! -f pyproject.toml ]'
|
|
|
|
variables:
|
|
deps:
|
|
- :install:software:jq
|
|
env:
|
|
FILE_INPUT:
|
|
sh: if [ -f '{{.INPUT_FILE}}' ]; then echo {{.INPUT_FILE}}; else echo ".variables.json"; fi
|
|
TMP:
|
|
sh: mktemp
|
|
run: once
|
|
log:
|
|
error: Encountered error while injecting `{{.OUTPUT_FILE}}` with variables
|
|
start: Injecting `{{.OUTPUT_FILE}}` with variables
|
|
success: Successfully injected `{{.OUTPUT_FILE}}` with variables
|
|
cmds:
|
|
- |
|
|
if [[ "$(jq '.keywords' package.json)" == 'null' ]]; then
|
|
TMP_KEYWORDS="$(mktemp)"
|
|
jq '.keywords = []' package.json > "$TMP_KEYWORDS"
|
|
mv "$TMP_KEYWORDS" package.json
|
|
fi
|
|
- jq --arg blueprint "$(jq -r '.blueprint' package.json | sed 's/^null$/{}/')"
|
|
--arg version "$(jq -r '.version' package.json | sed 's/^null$/0.0.1/')"
|
|
--arg poetry "$(jq -r '.keywords | join("\", \"")' package.json | sed 's/$/"/' | sed 's/^/"/')"
|
|
--arg encoded "$(jq -r '.blueprint.repository.gitlab' package.json | sed 's/https:\/\/gitlab.com\///' | sed 's/\//%252F/g')"
|
|
-S '. = (. * ($blueprint | fromjson)) | .version = $version | .poetryKeywords = $poetry | .gitlab_encoded_path = $encoded'
|
|
"$FILE_INPUT" > "$TMP"
|
|
- mv "$TMP" {{.OUTPUT_FILE}}
|
|
- |
|
|
if [ '{{.REPOSITORY_TYPE}}' == 'ansible' ] && [ -f meta/main.yml ]; then
|
|
task ansible:update:variables:descriptions
|
|
fi
|
|
- |
|
|
if [ '{{.REPOSITORY_TYPE}}' == 'packer' ]; then
|
|
task packer:update:variables
|
|
fi
|
|
status:
|
|
- '[ "{{.DOCKER_BUILDING}}" == "true" ]'
|