UNPKG

@installdoc/ansible-gas-station

Version:

An Ansible playbook that provisions your network with software from GitHub Awesome lists, developed with disaster recovery in mind ⛽🔥🤤

282 lines (264 loc) 10.9 kB
--- version: '3' vars: EMOJI_END: sh: | if [ -f '.variables.json' ] && type jq &> /dev/null; then BP_END="$(jq -r '.emoji_end' .variables.json)" if [ "$BP_END" != 'null' ]; then echo "$BP_END" else if [ "$(jq -r '.emoji_endings[15]' .variables.json)" != 'null' ]; then echo "$(jq --arg place "$(shuf -i 0-15 -n 1)" -r '.emoji_endings[($place | tonumber)]' .variables.json)" else echo "" fi fi fi EMOJI_START: sh: | if [ -f '.variables.json' ] && type jq &> /dev/null; then BP_START="$(jq -r '.emoji_start' .variables.json)" if [ "$BP_START" != 'null' ]; then echo "$BP_START" else if [ "$(jq -r '.emoji_beginnings[15]' .variables.json)" != 'null' ]; then echo "$(jq --arg place "$(shuf -i 0-15 -n 1)" -r '.emoji_beginnings[($place | tonumber)]' .variables.json)" else echo "" fi fi fi GITHUB_ISSUES: true GITHUB_WIKI: false GITLAB_WIKI: false env: CLICOLOR: sh: if [[ "${container:=}" == 'docker' ]]; then echo "0"; else echo "1"; fi tasks: commit:automated: deps: - remotes log: start: Running automated commit cmds: - cmd: | if [[ "$FULLY_AUTOMATED_TASKS" == 'true' ]]; then task --list > /dev/null || (echo "ERROR: Invalid Taskfiles!" && exit 1) git add --all HUSKY=0 git commit -m "☁️ Automation" -n fi ignore_error: true convert:folder:submodule: deps: - :git:github:update - :git:gitlab:update vars: BASENAME: sh: basename "$PWD" GITLAB_REPO: sh: jq -r '.blueprint.repository.gitlab' package.json log: error: Error converting `{{.BASENAME}}` to a submodule start: Converting `{{.BASENAME}}` directory into a submodule success: Converted the `{{.BASENAME}}` directory to a submodule cmds: - git init - git remote add origin "{{.GITLAB_REPO}}" - git add --all - git commit --quiet -m "refactor(convert-dir-to-submodule) Adding folder/project to its own git repository." - git push --quiet -u --no-progress origin master - | cd .. rm -rf {{.BASENAME}} git add {{.BASENAME}} git commit --quiet -m "refactor(convert-dir-to-submodule) Removing folder which will now be a submodule." git submodule add -b master "{{.GITLAB_REPO}}" {{.BASENAME}} git add {{.BASENAME}} git commit --quiet -m "refactor(convert-dir-to-submodule) Adding new submodule which was previously a directory." git push --quiet -u --no-progress origin HEAD - .config/log success '' preconditions: - sh: '[[ ! $(git rev-parse --git-dir) =~ ".git/modules" ]]' msg: Cannot convert the directory to a submodule - the directory already appears to be a submodule. convert:folder:subrepo: deps: - :install:software:subrepo vars: BASENAME: sh: basename "$PWD" GITLAB_REPO: sh: jq -r '.blueprint.repository.gitlab' package.json log: error: Error encountered while converting `{{.BASENAME}}` into a sub-repo start: Converting `{{.BASENAME}}` into a sub-repo success: Converted `{{.BASENAME}}` into a sub-repo cmds: - rm -rf .git - | ROLE_DIR="$PWD" while ! test -d .git; do cd ..; done git remote add {{.BASENAME}} {{.GITLAB_REPO}} RELATIVE_DIR="$(echo $ROLE_DIR | sed 's@'"$PWD"'/@@')" HUSKY=0 git subrepo clone {{.BASENAME}} "$RELATIVE_DIR" -b master filter: log: error: Error filtering git history start: Filtering unnecessary items from git history success: Successfully filtered unnecessary items from git history cmds: - git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch -r **/node_modules/' --prune-empty -- --all push:all: deps: - :ci:commit:config log: error: Encountered error while running `git push all master --force || git push origin master` start: Running `git push all master --force || git push origin master` success: Successfully ran `git push all master --force || git push origin master` cmds: - | if [[ "$FULLY_AUTOMATED_TASKS" == 'true' ]]; then git push all master --force || git push origin master fi status: - '[ -n "$CI" ]' remotes: deps: - :install:software:git - :install:software:jq - :install:software:subrepo desc: Configure the the `origin`, `gitlab`, `github`, and `all` git remotes summary: | # Configure Git Remotes This task will set the origin to the GitLab repository associated with this project. It will then also create a remote named `all` which will point to both the GitLab repository and the GitHub mirror. You can then push to both repositories at the same time by running `git push all master`. **Example usage:** `task git:remotes` env: GITHUB_REPO: sh: jq -r '.blueprint.repository.github' package.json | sed 's/^https:\/\//git@/' | sed 's/github.com\//github.com:/' GITLAB_REPO: sh: jq -r '.blueprint.repository.gitlab' package.json | sed 's/^https:\/\//git@/' | sed 's/gitlab.com\//gitlab.com:/' run: once log: error: Error setting git remotes start: Setting up git remotes success: Git remotes are set up cmds: - git init -q - | if [ ! -z "$GITLAB_REPO" ]; then if git config remote.origin.url > /dev/null; then git remote set-url origin "${GITLAB_REPO}.git" else git remote add origin "${GITLAB_REPO}.git" .config/log success 'Added git remote named `origin`' fi if git config remote.gitlab.url > /dev/null; then git remote set-url gitlab "${GITLAB_REPO}.git" else git remote add gitlab "${GITLAB_REPO}.git" .config/log success 'Added git remote named `gitlab`' fi fi - | if [ ! -z "$GITHUB_REPO" ]; then if git config remote.github.url > /dev/null; then git remote set-url github "${GITHUB_REPO}.git" else git remote add github "${GITHUB_REPO}.git" .config/log success 'Added git remote named `github`' fi fi - | if [ ! -z "$GITLAB_REPO" ] && [ ! -z "$GITHUB_REPO" ]; then if git config remote.all.url > /dev/null; then git remote rm all fi git remote add all "${GITLAB_REPO}.git" git remote set-url --add --push all "${GITHUB_REPO}.git" git remote set-url --add --push all "${GITLAB_REPO}.git" .config/log success 'Added git remote named `all`' fi status: - '[[ "$(git config remote.all.url)" == "${GITLAB_REPO}.git" ]] || [ -n "$CI" ]' - '[[ "$(git config remote.github.url)" == "${GITHUB_REPO}.git" ]] || [ -n "$CI" ]' - '[[ "$(git config remote.gitlab.url)" == "${GITLAB_REPO}.git" ]] || [ -n "$CI" ]' remove:history:cli: deps: - :install:software:git log: error: Failed to remove `{{.CLI_ARGS}}` from the git history start: Removing `{{.CLI_ARGS}}` from the git history success: Removed `{{.CLI_ARGS}}` from the git history cmds: - git filter-branch --index-filter 'git rm -rf --cached --ignore-unmatch {{.CLI_ARGS}}' HEAD remove:submodules: deps: - :install:software:git desc: Remove all submodules in the current directory and optionally filter by RegEx summary: | # Remove submodules in current directory This task will remove all the submodules in the current directory and its' children. You can optionally specify RegEx to only remove submodules that match a particular pattern. Please note that this task is not _perfect_. You should commit your current changes before using it and then reset the repository with `git reset --hard HEAD` if anything pops up on `git status` that you do not like after running it. **Example removing all submodules that are children of the working directory:** `task git:remove-submodules` **Example removing all submodules that are children of the working directory and matching a pattern:** `task git:remove-submodules -- docs` vars: GITMODULES_PATH: .gitmodules REGEX_ARG: sh: if [ -z "{{.CLI_ARGS}}" ]; then echo ""; else echo " | grep {{.CLI_ARGS}}"; fi RELATIVE_PATH: sh: pwd | sed "s,^$(git rev-parse --show-toplevel),," | cut -c2- # /home/hawkwood/Downloads/Backup/Code ROOT_GIT: sh: git rev-parse --git-dir | sed 's/\.git\/modules\(.*\)/.gitmodules/' | sed 's/\.git$/.gitmodules/' | sed 's/.gitmodules$//' # /home/hawkwood/Downloads/Backup/Code/docker/ci-pipeline/hadolint TOP_LEVEL: sh: git rev-parse --show-toplevel log: error: Error encountered while attempting to remove submodules start: Attempting to remove submodules success: Successfully removed submodules cmds: - | if [ -f '.gitmodules' ]; then MODULE_PATHS=$(git config --file "{{.GITMODULES_PATH}}" --name-only --get-regexp "{{.RELATIVE_PATH}}" | sed 's/^submodule\.//' | grep "path$" | sed 's/\.path$//'{{.REGEX_ARG}}) for MODULE_PATH in "$MODULE_PATHS"; do # https://github.com/a14m/gitsubmodule/blob/master/gitsubmodule git config -f '{{.GITMODULES_PATH}}' --remove-section "submodule.$MODULE_PATH" | true git add '{{.GITMODULES_PATH}}' # /home/hawkwood/Downloads/Backup/Code/.git/modules/docker/ci-pipeline/hadolint/config {{if .ROOT_GIT}} CONFIG_PATH="$(pwd | sed 's,{{.ROOT_GIT}},,')" {{else}} CONFIG_PATH='.git' {{end}} git config -f '{{.ROOT_GIT}}./{{if ne .ROOT_GIT ""}}.git/modules/{{end}}'"$CONFIG_PATH"'/config' --remove-section "submodule.$MODULE_PATH" git rm --cached "$MODULE_PATH" rm -rf "{{.ROOT_GIT}}./.git/modules/$CONFIG_PATH" rm -rf "$MODULE_PATH" done .config/log success "Successfully removed the project's submodules" else .config/log info 'This task does not run unless there is a `.gitmodules` file in the current directory' fi update: run: once cmds: - task: :git:gitlab:create - task: :git:github:create - task: update:continue status: - '[ -n "$CI" ] || ([ -z "$GITLAB_TOKEN" ] && [ -z "$GITHUB_TOKEN" ])' update:continue: deps: - :git:gitlab:update - :git:github:update run: once