@installdoc/ansible-gas-station
Version:
An Ansible playbook that provisions your network with software from GitHub Awesome lists, developed with disaster recovery in mind ⛽🔥🤤
289 lines (263 loc) • 10.3 kB
YAML
---
version: '3'
tasks:
all:
deps:
- ':{{if eq .REPOSITORY_TYPE "packer"}}packer:update:descriptions{{else}}donothing{{end}}'
- files
- :install:tslib
- :python:requirementstxt
cmds:
- task: all:continue
all:continue:
deps:
- :git:remotes
- ':{{if eq .REPOSITORY_SUBTYPE "playbook"}}ansible:playbook:remotes{{else}}donothing{{end}}'
- all:docs
all:docs:
cmds:
- task: '{{if eq .REPOSITORY_TYPE "common"}}:donothing{{else}}{{if eq .REPOSITORY_TYPE "documentation"}}:donothing{{else}}all:docs:generate{{end}}{{end}}'
all:docs:generate:
deps:
- contributing
- readme
ansible:
deps:
- :ansible:populate:dependencies
- :ansible:populate:meta
- :ansible:update:galaxy-id
contributing:
deps:
- :install:npm:prettier
- :install:npm:readme
vars:
CONTRIB_TEMPLATE: .config/docs/blueprint-contributing.md
log:
error: Encountered error while generating `docs/CONTRIBUTING.md`
start: Generating `docs/CONTRIBUTING.md` using document partials
success: Successfully generated `docs/CONTRIBUTING.md`
cmds:
- mkdir -p docs
- >
{{.NPX_HANDLE}}readme generate --silent --headingPrefix '{}' --config .variables.json
--input "{{.CONTRIB_TEMPLATE}}" --output docs/CONTRIBUTING.md
- task: markdown:scrub
vars:
SCRUB_FILE: docs/CONTRIBUTING.md
- '{{.NPX_HANDLE}}prettier --write docs/CONTRIBUTING.md > /dev/null'
sources:
- docs/CONTRIBUTING.md
- .config/docs/**/*
- .variables.json
preconditions:
- sh: test -f .config/docs/blueprint-contributing.md
msg: The CONTRIBUTING.md template file is not present at `.config/docs/blueprint-contributing.md`
- sh: test -f .variables.json
msg: The `.variables.json` file is not present.
- sh: type readme > /dev/null
msg: '`@appnest/readme` is not installed globally.'
files:
vars:
CONTAINER:
sh: if [[ "${container:=}" == "docker" ]]; then echo "docker"; fi
FIRST_LINE:
sh: if [ -f Dockerfile ]; then head -n 1 Dockerfile; fi
log:
error: Encountered error while updating miscellaneous files
start: Updating miscellaneous files
success: Updated miscellaneous files
cmds:
- |
if [ -f initctl ] && [ -f .config/initctl ]; then
cp .config/initctl initctl
.config/log info 'Ensured that the `initctl` polyfill file is synchronized with the upstream version'
fi
- |
if [ -f .dockerignore ]; then
TMP="$(mktemp)"
echo '# To keep changes, only add items to end of file' > "$TMP"
cat .gitignore >> "$TMP"
if [ ! -f .config/dockerignore ]; then
curl -sSL https://gitlab.com/megabyte-labs/common/shared/-/raw/master/common/.config/dockerignore > .config/dockerignore
fi
cat .config/dockerignore >> "$TMP"
echo '# Saved entries below' >> "$TMP"
cat .dockerignore | sed -n '/# Saved entries below/,$p' | sed 's/# Saved entries below//' | awk 'NF' >> "$TMP"
mv "$TMP" .dockerignore
elif [ '{{.PROJECT_TYPE}}' == 'project' ]; then
rm .config/dockerignore
fi
- task: :common:{{if eq .CONTAINER "docker"}}husky:ci{{else}}husky{{end}}
- task: :{{if eq .REPOSITORY_SUBTYPE "role"}}ansible:keywords:sync{{else}}donothing{{end}}
init:
log:
error: Encountered error while initializing project
start: Ensuring project is initialized
cmds:
- |
if ! test -f package.json; then
echo '{"blueprint": {}}' > package.json
fi
status:
- test -f package.json
man-page:
deps:
- :install:modules:local
- :install:npm:remark
- :install:npm:prettier
- :install:npm:readme
vars:
MAN_TEMPLATE: '{{.REPOSITORY_SUBTYPE}}-blueprint-man.md'
cmds:
- |
if test -f ".config/docs/{{.MAN_TEMPLATE}}"; then
{{.NPX_HANDLE}}readme generate --headingPrefix '{}' --silent --config .variables.json --input ".config/docs/{{.MAN_TEMPLATE}}" --output MAN.md
{{.NPX_HANDLE}}prettier --write MAN.md > /dev/null
.config/log info 'Generated MAN.md'
mkdir -p dist
{{.NPX_HANDLE}}remark --use man MAN.md --output dist/man
.config/log success 'Converted MAN.md to man page located in `dist/man`'
rm MAN.md
fi
sources:
- .config/docs/**/*
- .variables.json
- dist/man
preconditions:
- sh: test -f .variables.json
msg: The `.variables.json` file is not present.
markdown:scrub:
vars:
DIVIDER_SRC: <a href="\1" style="width:100%"><img style="width:100%"
src="https://gitlab.com/megabyte-labs/assets/-/raw/master/png/aqua-divider.png" /></a>
REGEX: .*https://raw.githubusercontent.com/andreasbm/readme/master/assets/lines/.*.png)][(]\(.*\)[)].*$
cmds:
- task: markdown:scrub:{{OS}}
vars:
DIVIDER_SRC: '{{.DIVIDER_SRC}}'
REGEX: '{{.REGEX}}'
SCRUB_FILE: '{{.SCRUB_FILE}}'
markdown:scrub:darwin: /usr/bin/sed -i .bak 's^{{.REGEX}}^{{.DIVIDER_SRC}}^g' {{.SCRUB_FILE}} && rm {{.SCRUB_FILE}}.bak
markdown:scrub:linux: sed -i 's^{{.REGEX}}^{{.DIVIDER_SRC}}^g' {{.SCRUB_FILE}}
modules:
deps:
- :install:software:git
summary: |
# Ensure all submodules in `.modules/` are updated
Some of our projects include submodules. These submodules are generally
stored in the `.modules/` folder in the root of the project. Some projects
might symlink files to one of the submodules stored in the `.modules/` folder.
If you are ok with the risk, you can use this task to update all the submodules
to the latest on the remote's master branch.
log:
error: Failed to ensure submodules in the `.modules/` folder are up-to-date
start: Ensuring submodules in the `.modules/` folder are up-to-date
success: Successfully ensured submodules in the `.modules/` folder are up-to-date
cmds:
- |
ROOT_DIR="$PWD"
if ls .modules/*/ > /dev/null 2>&1; then
for SUBMODULE_PATH in .modules/*/; do
cd $SUBMODULE_PATH
DEFAULT_BRANCH=$(git remote show origin | grep 'HEAD branch' | cut -d' ' -f5)
git reset --hard HEAD
git checkout "$DEFAULT_BRANCH"
git pull origin "$DEFAULT_BRANCH" --ff-only || true
done
cd "$ROOT_DIR"
.config/log success 'Ensured submodules in the `.modules` folder are pointing to the master branch'
fi
status:
- '! ls .modules/*/ > /dev/null 2>&1'
project:
log:
start: Pulling `master` if `origin` is defined
cmds:
- |
if [ -d .git ] && git branch -r | grep origin > /dev/null; then
git pull origin master --no-rebase || true
fi
readme:
deps:
- ':{{if eq .REPOSITORY_TYPE "ansible"}}ansible:collection-dependencies:markdown{{else}}donothing{{end}}'
- ':{{if eq .REPOSITORY_SUBTYPE "role"}}ansible:mod-ansible-autodoc{{else}}donothing{{end}}'
- :install:npm:prettier
- :install:npm:readme
vars:
README_TEMPLATE: blueprint-readme-{{.REPOSITORY_SUBTYPE}}.md
log:
error: Error encountered while generating `README.md`
start: Generating `README.md`
success: Generated README.md successfully
cmds:
- >
{{.NPX_HANDLE}}readme generate --headingPrefix '{}' --silent --config .variables.json
--input ".config/docs/{{.README_TEMPLATE}}"
- task: markdown:scrub
vars:
SCRUB_FILE: README.md
- task: ':{{if eq .REPOSITORY_TYPE "packer"}}packer:update:readme{{else}}donothing{{end}}'
- '{{.NPX_HANDLE}}prettier --write README.md > /dev/null'
sources:
- .autodoc/*
- .config/docs/**/*
- .variables.json
- README.md
preconditions:
- sh: 'test -f .config/docs/{{.README_TEMPLATE}}'
msg: 'The README.md template file is not present at `.config/docs/{{.README_TEMPLATE}}`.'
- sh: test -f .variables.json
msg: The `.variables.json` file is not present.
repositories:
cmds:
- task: modules
- task: project
services:
cmds:
- task: :{{if eq .REPOSITORY_TYPE "project"}}donothing{{else}}start{{end}}
- task: update
- task: services:repos
services:repos:
deps:
- :git:update
start:
deps:
- :common:requirements
- variables
update:
deps:
- ':{{if eq .REPOSITORY_SUBTYPE "role"}}common:update:ansible{{else}}donothing{{end}}'
- ':{{if eq .REPOSITORY_TYPE "packer"}}packer:latestos{{else}}donothing{{end}}'
- init
- repositories
summary: |
# Refresh project with latest upstream code and ensure project files are up-to-date
This task will pull the latest upstream code and overwrite any files that are out of date.
Ideally, you should run this task often to ensure there are no merge conflicts and to
ensure you are using the latest production settings. This task is also run by CI so
normally if you pull the latest changes, you should already have the updates that this
task applies.
**Example usage:**
`task update`
run: once
cmds:
- task: start
- task: all
- task: ':{{if eq .REPOSITORY_TYPE "docker"}}docker:update:labels{{else}}donothing{{end}}'
- task: update:git
update:git:
cmds:
- task: :git:update
status:
- '[[ "${container:=}" == "docker" ]] || [[ "$SKIP_UPLOADING" == "true" ]]'
variables:
deps:
- :install:software:jq
cmds:
- task: :upstream:variables
vars:
INPUT_FILE: .config/variables.json
OUTPUT_FILE: .variables.json
- task: ':{{if eq .REPOSITORY_TYPE "go"}}{{if eq .REPOSITORY_SUBTYPE "cli"}}go:help{{else}}donothing{{end}}{{else}}donothing{{end}}'
- task: ':{{if eq .REPOSITORY_TYPE "packer"}}packer:update:variables{{else}}donothing{{end}}'
- task: ':{{if eq .REPOSITORY_TYPE "ansible"}}ansible:update:variables{{if eq .REPOSITORY_SUBTYPE "playbook"}}:playbook{{end}}{{else}}donothing{{end}}'