forked from toolshed/abra-bash
		
	Compare commits
	
		
			4 Commits
		
	
	
		
			backup_res
			...
			monorepo
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 66013f6ddb | |||
| 3d3d6b9b67 | |||
| eec1dcb0b2 | |||
| 1d52c0f5ed | 
							
								
								
									
										26
									
								
								.drone.yml
									
									
									
									
									
								
							
							
						
						
									
										26
									
								
								.drone.yml
									
									
									
									
									
								
							@ -3,29 +3,11 @@ kind: pipeline
 | 
				
			|||||||
name: linters
 | 
					name: linters
 | 
				
			||||||
steps:
 | 
					steps:
 | 
				
			||||||
  - name: run shellcheck
 | 
					  - name: run shellcheck
 | 
				
			||||||
    image: koalaman/shellcheck-alpine:v0.7.1
 | 
					    image: debian:buster
 | 
				
			||||||
    commands:
 | 
					    commands:
 | 
				
			||||||
      - shellcheck abra
 | 
					      - apt update
 | 
				
			||||||
 | 
					      - apt install -y shellcheck
 | 
				
			||||||
  - name: run unit tests
 | 
					      - shellcheck abra installer
 | 
				
			||||||
    image: decentral1se/docker-dind-bats-kcov
 | 
					 | 
				
			||||||
    commands:
 | 
					 | 
				
			||||||
      - bats tests
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  - name: collect code coverage
 | 
					 | 
				
			||||||
    failure: ignore # until we fix this
 | 
					 | 
				
			||||||
    image: decentral1se/docker-dind-bats-kcov
 | 
					 | 
				
			||||||
    commands:
 | 
					 | 
				
			||||||
      - kcov . bats tests || true
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  - name: send code coverage report to codecov
 | 
					 | 
				
			||||||
    failure: ignore # until we fix this
 | 
					 | 
				
			||||||
    image: plugins/codecov
 | 
					 | 
				
			||||||
    settings:
 | 
					 | 
				
			||||||
      token:
 | 
					 | 
				
			||||||
        from_secret: codecov_token
 | 
					 | 
				
			||||||
        required: true
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
trigger:
 | 
					trigger:
 | 
				
			||||||
  branch:
 | 
					  branch:
 | 
				
			||||||
    - main
 | 
					    - main
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@ -1,2 +0,0 @@
 | 
				
			|||||||
coverage/
 | 
					 | 
				
			||||||
/.venv
 | 
					 | 
				
			||||||
							
								
								
									
										48
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										48
									
								
								CHANGELOG.md
									
									
									
									
									
								
							@ -1,51 +1,3 @@
 | 
				
			|||||||
# abra x.x.x (UNRELEASED)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- `secret auto` merged into `secret generate` and `app new --auto` is now `app new --secrets` ([#64](https://git.autonomic.zone/coop-cloud/abra/pulls/64))
 | 
					 | 
				
			||||||
- Avoid outputting length during secret generation when not in use ([#67](https://git.autonomic.zone/coop-cloud/abra/issues/67))
 | 
					 | 
				
			||||||
- Support graceful failure when missing secret generation commands ([44d3ac3](https://git.autonomic.zone/coop-cloud/abra/commit/44d3ac3a1cb86edc9b9e91eea1a00e70eae14965))
 | 
					 | 
				
			||||||
- Fix secret detection when using new `.env` file format in apps ([5532452](https://git.autonomic.zone/coop-cloud/abra/commit/55324524ca77141666ffe6cc41b62cc71cf89ace))
 | 
					 | 
				
			||||||
- Support choosing an `$EDITOR` when editing configs ([29cc392](https://git.autonomic.zone/coop-cloud/abra/commit/29cc392dff3e93e48e0e2edd3ce11b405c66a95a))
 | 
					 | 
				
			||||||
- "server" shell completion fixed ([8839bd4](https://git.autonomic.zone/coop-cloud/abra/commit/8839bd45951d00dccf4ef81ece445bcc49e13ee6))
 | 
					 | 
				
			||||||
- Drop `multilogs` command ([#56](https://git.autonomic.zone/coop-cloud/abra/pulls/56))
 | 
					 | 
				
			||||||
- Remove `server use` command ([#51](https://git.autonomic.zone/coop-cloud/abra/issues/51))
 | 
					 | 
				
			||||||
- `new <app>` becomes `new <type>` ([#48](https://git.autonomic.zone/coop-cloud/abra/issues/48))
 | 
					 | 
				
			||||||
- `check` is run on `deploy` now and configurable ([77ba565](https://git.autonomic.zone/coop-cloud/abra/commit/77ba5652b2fe15820f5edfa0f642636f7b8eae7e))
 | 
					 | 
				
			||||||
- App configurations are always updated now ([#42](https://git.autonomic.zone/coop-cloud/abra/issues/42))
 | 
					 | 
				
			||||||
- We use docker format `.env` files (no "export" syntax) from now now ([#55](https://git.autonomic.zone/coop-cloud/abra/pulls/55))
 | 
					 | 
				
			||||||
- Rename `<domain>` option to `<app>` and `APP` variable to `TYPE`, see ([#47](https://git.autonomic.zone/coop-cloud/abra/issues/47))
 | 
					 | 
				
			||||||
- Use Docker-in-Docker (dind), and `dind-bats-kcov` Docker image, for `make test` ([1600b62](https://git.autonomic.zone/coop-cloud/abra/commit/1600b6277fbbffc4c6de1e4ba799c7bbe72ec6a0))
 | 
					 | 
				
			||||||
- Add built-in documentation using `abra help <subcommand>...`, see ([#50](https://git.autonomic.zone/coop-cloud/abra/issues/50))
 | 
					 | 
				
			||||||
- `version` subcommand ([e6b24fe](https://git.autonomic.zone/coop-cloud/abra/commit/e6b24fe))
 | 
					 | 
				
			||||||
- Use `# length=x` comments to generate passwords with `pwgen` and drop `KEY`/`PASSWORD` logic ([#68](https://git.autonomic.zone/coop-cloud/abra/issues/68))
 | 
					 | 
				
			||||||
- Global `--skip-update` / `--skip-check` options to make things quicker,
 | 
					 | 
				
			||||||
		[37e8b00](https://git.autonomic.zone/coop-cloud/abra/commit/37e8b00)
 | 
					 | 
				
			||||||
- `app backup` and `app restore` commands; requires per-app definition -- see
 | 
					 | 
				
			||||||
		[#70](https://git.autonomic.zone/coop-cloud/abra/issues/70)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# abra 0.4.1 (2020-12-24)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- Bug-fixes on `app ls --status` & custom commands
 | 
					 | 
				
			||||||
- Add `app ls --server=...` and alias
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# abra 0.4.0 (2020-12-24)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- New command-line interface based on docopt
 | 
					 | 
				
			||||||
- `~/.abra` directory instead of expecting local `.env` files
 | 
					 | 
				
			||||||
- Integration tests & code coverage
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# abra 0.3.1 (2020-09-27)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- Fix installer version
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# abra 0.3.0 (2020-09-27)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- Add multilogs stack logs implementation ([#8](https://git.autonomic.zone/compose-stacks/abra/issues/8))
 | 
					 | 
				
			||||||
- Add beginnings of "monorepo" functionality
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# abra 0.2.0 (2020-09-24)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- Prepare for swarm install script using script.d ([#12](https://git.autonomic.zone/compose-stacks/planning/issues/12))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# abra 0.1.2 (2020-09-22)
 | 
					# abra 0.1.2 (2020-09-22)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- Add upgrade command ([#10](https://git.autonomic.zone/autonomic-cooperative/abra/issues/10))
 | 
					- Add upgrade command ([#10](https://git.autonomic.zone/autonomic-cooperative/abra/issues/10))
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										51
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										51
									
								
								Makefile
									
									
									
									
									
								
							@ -1,45 +1,14 @@
 | 
				
			|||||||
.PHONY: test shellcheck docopt kcov codecov
 | 
					default: install
 | 
				
			||||||
 | 
					
 | 
				
			||||||
test:
 | 
					dev_install:
 | 
				
			||||||
	@sudo DOCKER_CONTEXT=default docker run \
 | 
						ln -sf $(PWD)/abra ~/.local/bin
 | 
				
			||||||
		-v $$(pwd):/workdir \
 | 
					 | 
				
			||||||
		--privileged \
 | 
					 | 
				
			||||||
		-d \
 | 
					 | 
				
			||||||
		--name=abra-test-dind \
 | 
					 | 
				
			||||||
		-e DOCKER_TLS_CERTDIR="" \
 | 
					 | 
				
			||||||
		decentral1se/docker-dind-bats-kcov
 | 
					 | 
				
			||||||
	@DOCKER_CONTEXT=default docker exec \
 | 
					 | 
				
			||||||
		-it \
 | 
					 | 
				
			||||||
		abra-test-dind \
 | 
					 | 
				
			||||||
		sh -c "cd /workdir && bats /workdir/tests"
 | 
					 | 
				
			||||||
	@DOCKER_CONTEXT=default docker stop abra-test-dind
 | 
					 | 
				
			||||||
	@DOCKER_CONTEXT=default docker rm abra-test-dind
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
shellcheck:
 | 
					install:
 | 
				
			||||||
	@docker run \
 | 
						install abra /usr/bin/abra
 | 
				
			||||||
		-it \
 | 
					 | 
				
			||||||
		--rm \
 | 
					 | 
				
			||||||
		-v $$(pwd):/workdir \
 | 
					 | 
				
			||||||
		koalaman/shellcheck-alpine \
 | 
					 | 
				
			||||||
		shellcheck /workdir/abra
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
docopt:
 | 
					get_yq:
 | 
				
			||||||
	@if [ ! -d ".venv" ]; then \
 | 
						wget https://github.com/mikefarah/yq/releases/download/3.3.2/yq_linux_amd64 && \
 | 
				
			||||||
		python3 -m venv .venv && \
 | 
							chmod +x yq_linux_amd64 && \
 | 
				
			||||||
		.venv/bin/pip install -U pip setuptools wheel && \
 | 
							mv yq_linux_amd64 yq
 | 
				
			||||||
		.venv/bin/pip install docopt-sh; \
 | 
					 | 
				
			||||||
	fi
 | 
					 | 
				
			||||||
	.venv/bin/docopt.sh abra
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
kcov:
 | 
					.PHONY: dev_install install get_yq
 | 
				
			||||||
	@docker run \
 | 
					 | 
				
			||||||
		-it \
 | 
					 | 
				
			||||||
		--rm \
 | 
					 | 
				
			||||||
		-v $$(pwd):/workdir \
 | 
					 | 
				
			||||||
		kcov/kcov:latest \
 | 
					 | 
				
			||||||
		sh -c "kcov /workdir/coverage /workdir/abra || true"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
codecov: SHELL:=/bin/bash
 | 
					 | 
				
			||||||
codecov:
 | 
					 | 
				
			||||||
	@bash <(curl -s https://codecov.io/bash) \
 | 
					 | 
				
			||||||
		-s coverage -t $$(pass show hosts/swarm.autonomic.zone/drone/codecov/token)
 | 
					 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										58
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										58
									
								
								README.md
									
									
									
									
									
								
							@ -1,18 +1,56 @@
 | 
				
			|||||||
# abra
 | 
					# abra
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[](https://drone.autonomic.zone/coop-cloud/abra)
 | 
					[](https://drone.autonomic.zone/autonomic-cooperative/abra)
 | 
				
			||||||
[](undefined)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
> https://cloud.autonomic.zone
 | 
					Docker stack magic 🎩🐇
 | 
				
			||||||
 | 
					 | 
				
			||||||
The cooperative cloud utility belt 🎩🐇
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Documentation
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
> [docs.cloud.autonomic.zone](https://docs.cloud.autonomic.zone/)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Install
 | 
					## Install
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```sh
 | 
					```sh
 | 
				
			||||||
curl https://install.abra.autonomic.zone | bash
 | 
					curl -fsSL https://install.abra.autonomic.zone | bash
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Specific releases are available via the project [release page](https://git.autonomic.zone/autonomic-cooperative/abra/releases).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Changes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See [CHANGELOG.md](./CHANGELOG.md).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Hacking
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```sh
 | 
				
			||||||
 | 
					git clone ssh://git@git.autonomic.zone:2222/autonomic-cooperative/abra.git
 | 
				
			||||||
 | 
					cd abra
 | 
				
			||||||
 | 
					make dev_install
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See [autonomic-cooperative/installer-scripts](https://git.autonomic.zone/autonomic-cooperative/installer-scripts) for the installer script deployment. To make a release, just add an entry to [CHANGELOG.md](./CHANGELOG.md) and the [installer](./installer) (following [semver](https://semver.org/) please) and then `git tag x.x.x && git push origin main --tags`. If you want the [installer-scripts](https://git.autonomic.zone/autonomic-cooperative/installer-scripts) deployment to pick that up, you'll need to change the version number in the [Makefile](https://git.autonomic.zone/autonomic-cooperative/installer-scripts/src/branch/main/Makefile) and run `make` in that repository and push the changes.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Specify what to deploy where
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					You can use `abra` in one of 2 ways:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1. Clone a `compose-stack`, create an `.envrc` in it, and run `abra` in that
 | 
				
			||||||
 | 
					   directory. Be sure to set `ABRA_STACK_DIR=.`
 | 
				
			||||||
 | 
					2. "Monorepo mode": keep all your `compose-stack`s in one directory and all your `env` files in
 | 
				
			||||||
 | 
					   another, e.g.:
 | 
				
			||||||
 | 
					   ```
 | 
				
			||||||
 | 
						 $ tree
 | 
				
			||||||
 | 
					   .
 | 
				
			||||||
 | 
					   ├── apps
 | 
				
			||||||
 | 
					   │   ├── mediawiki.demo.autonomic.zone.env
 | 
				
			||||||
 | 
					   │   ├── wordpress.demo.autonomic.zone.env
 | 
				
			||||||
 | 
					   └── stacks
 | 
				
			||||||
 | 
					       ├── gitea
 | 
				
			||||||
 | 
					       ├── matrix-synapse
 | 
				
			||||||
 | 
					       ├── mediawiki
 | 
				
			||||||
 | 
					       ├── nextcloud
 | 
				
			||||||
 | 
					       ├── swarmpit
 | 
				
			||||||
 | 
					       ├── traefik
 | 
				
			||||||
 | 
					       └── wordpress
 | 
				
			||||||
 | 
							$ abra -e apps/mediawiki.demo.autonomic.zone.env deploy
 | 
				
			||||||
 | 
					    ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Examples
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- `abra run mariadb mysqldump gitea -p'GdIbMeS09SURRktBnm3jcTufsL5z0MPd' | gzip > ../git.autonomic.zone_mariadb_`date +%F`.sql.gz`
 | 
				
			||||||
 | 
				
			|||||||
@ -1,52 +0,0 @@
 | 
				
			|||||||
#compdef abra
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
_abra () {
 | 
					 | 
				
			||||||
	local context state line curcontext="$curcontext" ret=1
 | 
					 | 
				
			||||||
	_arguments -n : \
 | 
					 | 
				
			||||||
		{-h,--help}'[Help message]' \
 | 
					 | 
				
			||||||
		'1:commands:(app server)' \
 | 
					 | 
				
			||||||
		'*::arguments:->arguments' \
 | 
					 | 
				
			||||||
		&& ret=0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	case $state in
 | 
					 | 
				
			||||||
		(arguments)
 | 
					 | 
				
			||||||
			curcontext="${curcontext%:*:*}:abra-arguments-$words[1]:"
 | 
					 | 
				
			||||||
			case $words[1] in
 | 
					 | 
				
			||||||
				(app)
 | 
					 | 
				
			||||||
					_arguments \
 | 
					 | 
				
			||||||
						'1: :_abra_apps' \
 | 
					 | 
				
			||||||
					&& ret=0
 | 
					 | 
				
			||||||
				;;
 | 
					 | 
				
			||||||
				(server)
 | 
					 | 
				
			||||||
					_arguments \
 | 
					 | 
				
			||||||
						'1:servers:_abra_servers' \
 | 
					 | 
				
			||||||
					&& ret=0
 | 
					 | 
				
			||||||
				;;
 | 
					 | 
				
			||||||
			esac
 | 
					 | 
				
			||||||
		;;
 | 
					 | 
				
			||||||
	esac
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return ret
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
_abra_servers() {
 | 
					 | 
				
			||||||
	_path_files -/W $HOME/.abra/servers
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
_abra_apps()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	local newapps apps=($HOME/.abra/servers/*/*.env)
 | 
					 | 
				
			||||||
	typeset -a apps
 | 
					 | 
				
			||||||
	newapps=()
 | 
					 | 
				
			||||||
	for app in $apps; do
 | 
					 | 
				
			||||||
		newapps+=($(_abra_basename "${app}"))
 | 
					 | 
				
			||||||
	done
 | 
					 | 
				
			||||||
	_describe -t apps 'app' newapps
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
_abra_basename()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    printf -- "${1##*/}"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
_abra "$@"
 | 
					 | 
				
			||||||
@ -1,117 +0,0 @@
 | 
				
			|||||||
#!/usr/bin/env bash
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
_abra_basename()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    echo "${1##*/}"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
_abra_servers()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    # FIXME 3wc: copied from abra/get_servers()
 | 
					 | 
				
			||||||
    shopt -s nullglob dotglob
 | 
					 | 
				
			||||||
    local SERVERS=(~/.abra/servers/*)
 | 
					 | 
				
			||||||
    shopt -u nullglob dotglob
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    for SERVER in "${SERVERS[@]}"; do
 | 
					 | 
				
			||||||
        _abra_basename "${SERVER}"
 | 
					 | 
				
			||||||
    done
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
_abra_complete_servers()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    mapfile -t COMPREPLY < <(compgen -W "$(_abra_servers)" -- "$1")
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
_abra_apps()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    shopt -s nullglob dotglob
 | 
					 | 
				
			||||||
    local APPS=(~/.abra/servers/*/*.env)
 | 
					 | 
				
			||||||
    shopt -u nullglob dotglob
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    for APP in "${APPS[@]}"; do
 | 
					 | 
				
			||||||
        _abra_basename "${APP%.env}"
 | 
					 | 
				
			||||||
    done
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
_abra_complete_apps()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    mapfile -t COMPREPLY < <(compgen -W "$(_abra_apps)" -- "$1")
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
_abra_complete()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    compopt +o default +o nospace
 | 
					 | 
				
			||||||
    COMPREPLY=()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    local -r cmds='
 | 
					 | 
				
			||||||
        app
 | 
					 | 
				
			||||||
        server
 | 
					 | 
				
			||||||
    '
 | 
					 | 
				
			||||||
    local -r short_opts='-e      -h     -s      -v'
 | 
					 | 
				
			||||||
    local -r long_opts='--env --help --stack --version'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Scan through the command line and find the abra command
 | 
					 | 
				
			||||||
    # (if present), as well as its expected position.
 | 
					 | 
				
			||||||
    local cmd
 | 
					 | 
				
			||||||
    local cmd_index=1 # Expected index of the command token.
 | 
					 | 
				
			||||||
    local i
 | 
					 | 
				
			||||||
    for (( i = 1; i < ${#COMP_WORDS[@]}; i++ )); do
 | 
					 | 
				
			||||||
        local word="${COMP_WORDS[i]}"
 | 
					 | 
				
			||||||
        case "$word" in
 | 
					 | 
				
			||||||
            -*)
 | 
					 | 
				
			||||||
                ((cmd_index++))
 | 
					 | 
				
			||||||
                ;;
 | 
					 | 
				
			||||||
            *)
 | 
					 | 
				
			||||||
                cmd="$word"
 | 
					 | 
				
			||||||
                break
 | 
					 | 
				
			||||||
                ;;
 | 
					 | 
				
			||||||
        esac
 | 
					 | 
				
			||||||
    done
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    local cur="${COMP_WORDS[COMP_CWORD]}"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (( COMP_CWORD < cmd_index )); then
 | 
					 | 
				
			||||||
        # Offer option completions.
 | 
					 | 
				
			||||||
        case "$cur" in
 | 
					 | 
				
			||||||
            --*)
 | 
					 | 
				
			||||||
                mapfile -t COMPREPLY < <(compgen -W "$long_opts" -- "$cur")
 | 
					 | 
				
			||||||
                ;;
 | 
					 | 
				
			||||||
            -*)
 | 
					 | 
				
			||||||
                mapfile -t COMPREPLY < <(compgen -W "$short_opts" -- "$cur")
 | 
					 | 
				
			||||||
                ;;
 | 
					 | 
				
			||||||
            *)
 | 
					 | 
				
			||||||
                # Skip completion; we should never get here.
 | 
					 | 
				
			||||||
                ;;
 | 
					 | 
				
			||||||
        esac
 | 
					 | 
				
			||||||
    elif (( COMP_CWORD == cmd_index )); then
 | 
					 | 
				
			||||||
        # Offer command name completions.
 | 
					 | 
				
			||||||
        mapfile -t COMPREPLY < <(compgen -W "$cmds" -- "$cur")
 | 
					 | 
				
			||||||
    else
 | 
					 | 
				
			||||||
        # Offer command argument completions.
 | 
					 | 
				
			||||||
        case "$cmd" in
 | 
					 | 
				
			||||||
            server)
 | 
					 | 
				
			||||||
                # Offer exactly one server name completion.
 | 
					 | 
				
			||||||
                if (( COMP_CWORD == cmd_index + 1 )); then
 | 
					 | 
				
			||||||
                    _abra_complete_servers "$cur"
 | 
					 | 
				
			||||||
                fi
 | 
					 | 
				
			||||||
                ;;
 | 
					 | 
				
			||||||
            app)
 | 
					 | 
				
			||||||
                # Offer exactly one app completion.
 | 
					 | 
				
			||||||
                if (( COMP_CWORD == cmd_index + 1 )); then
 | 
					 | 
				
			||||||
                    _abra_complete_apps "$cur"
 | 
					 | 
				
			||||||
                fi
 | 
					 | 
				
			||||||
                ;;
 | 
					 | 
				
			||||||
            #help)
 | 
					 | 
				
			||||||
            #    # Offer exactly one command name completion.
 | 
					 | 
				
			||||||
            #    if (( COMP_CWORD == cmd_index + 1 )); then
 | 
					 | 
				
			||||||
            #        COMPREPLY=($(compgen -W "$cmds" -- "$cur"))
 | 
					 | 
				
			||||||
            #    fi
 | 
					 | 
				
			||||||
            #    ;;
 | 
					 | 
				
			||||||
            *)
 | 
					 | 
				
			||||||
                # Unknown command or unknowable argument.
 | 
					 | 
				
			||||||
                ;;
 | 
					 | 
				
			||||||
        esac
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
complete -o default -F _abra_complete abra
 | 
					 | 
				
			||||||
@ -1,7 +1,7 @@
 | 
				
			|||||||
#!/bin/bash
 | 
					#!/bin/bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ABRA_VERSION="0.4.1"
 | 
					ABRA_VERSION="0.1.2"
 | 
				
			||||||
ABRA_SRC="https://git.autonomic.zone/coop-cloud/abra/raw/tag/$ABRA_VERSION/abra"
 | 
					ABRA_SRC="https://git.autonomic.zone/autonomic-cooperative/abra/raw/tag/$ABRA_VERSION/abra"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function install_abra {
 | 
					function install_abra {
 | 
				
			||||||
  mkdir -p "$HOME/.local/bin"
 | 
					  mkdir -p "$HOME/.local/bin"
 | 
				
			||||||
@ -1,40 +0,0 @@
 | 
				
			|||||||
---
 | 
					 | 
				
			||||||
version: "3.8"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
services:
 | 
					 | 
				
			||||||
  abra_installer:
 | 
					 | 
				
			||||||
    image: "nginx:stable"
 | 
					 | 
				
			||||||
    configs:
 | 
					 | 
				
			||||||
      - source: abra_conf
 | 
					 | 
				
			||||||
        target: /etc/nginx/conf.d/abra.conf
 | 
					 | 
				
			||||||
      - source: abra_installer
 | 
					 | 
				
			||||||
        target: /var/www/abra-installer/installer
 | 
					 | 
				
			||||||
    volumes:
 | 
					 | 
				
			||||||
      - "public:/var/www/abra-installer"
 | 
					 | 
				
			||||||
    networks:
 | 
					 | 
				
			||||||
      - proxy
 | 
					 | 
				
			||||||
    deploy:
 | 
					 | 
				
			||||||
      update_config:
 | 
					 | 
				
			||||||
        failure_action: rollback
 | 
					 | 
				
			||||||
        order: start-first
 | 
					 | 
				
			||||||
      labels:
 | 
					 | 
				
			||||||
        - "traefik.enable=true"
 | 
					 | 
				
			||||||
        - "traefik.http.services.abra-installer.loadbalancer.server.port=80"
 | 
					 | 
				
			||||||
        - "traefik.http.routers.abra-installer.rule=Host(`install.abra.autonomic.zone`)"
 | 
					 | 
				
			||||||
        - "traefik.http.routers.abra-installer.entrypoints=web-secure"
 | 
					 | 
				
			||||||
        - "traefik.http.routers.abra-installer.tls.certresolver=production"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
configs:
 | 
					 | 
				
			||||||
  abra_installer:
 | 
					 | 
				
			||||||
    name: abra_installer_v1
 | 
					 | 
				
			||||||
    file: installer
 | 
					 | 
				
			||||||
  abra_conf:
 | 
					 | 
				
			||||||
    name: abra_conf_v1
 | 
					 | 
				
			||||||
    file: nginx.conf
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
networks:
 | 
					 | 
				
			||||||
  proxy:
 | 
					 | 
				
			||||||
    external: true
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
volumes:
 | 
					 | 
				
			||||||
  public:
 | 
					 | 
				
			||||||
@ -1,10 +0,0 @@
 | 
				
			|||||||
server {
 | 
					 | 
				
			||||||
  listen         80 default_server;
 | 
					 | 
				
			||||||
  server_name    install.abra.autonomic.zone;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  location / {
 | 
					 | 
				
			||||||
    root /var/www/abra-installer;
 | 
					 | 
				
			||||||
    add_header Content-Type text/plain;
 | 
					 | 
				
			||||||
    index installer;
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
							
								
								
									
										7
									
								
								test/abra.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								test/abra.yml
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,7 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					name: mystack
 | 
				
			||||||
 | 
					secrets:
 | 
				
			||||||
 | 
					  foo:
 | 
				
			||||||
 | 
					  bar:
 | 
				
			||||||
 | 
					  baz:
 | 
				
			||||||
 | 
					    length: 128
 | 
				
			||||||
@ -1,17 +0,0 @@
 | 
				
			|||||||
#!/usr/bin/env bats
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@test "docker is available" {
 | 
					 | 
				
			||||||
    command -v docker
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@test "abra is executable" {
 | 
					 | 
				
			||||||
    ./abra --help
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@test "git is available" {
 | 
					 | 
				
			||||||
    command -v git
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@test "running in a container" {
 | 
					 | 
				
			||||||
    ls /etc/alpine-release
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,52 +0,0 @@
 | 
				
			|||||||
#!/usr/bin/env bats
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
setup() {
 | 
					 | 
				
			||||||
    export ABRA_DIR=$(mktemp -d)
 | 
					 | 
				
			||||||
    mkdir -p $ABRA_DIR/servers/default
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
teardown() {
 | 
					 | 
				
			||||||
    rm -rf "$ABRA_DIR"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@test "abra server (add|rm)" {
 | 
					 | 
				
			||||||
    ./abra server add swarm.test.com
 | 
					 | 
				
			||||||
    docker context ls | grep swarm.test.com
 | 
					 | 
				
			||||||
    [ -d $ABRA_DIR/servers/swarm.test.com ]
 | 
					 | 
				
			||||||
    ./abra server swarm.test.com rm
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ./abra server add swarm.test.com foobar 12345
 | 
					 | 
				
			||||||
    [ -d $ABRA_DIR/servers/swarm.test.com ]
 | 
					 | 
				
			||||||
    ./abra server swarm.test.com rm
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@test "abra server init" {
 | 
					 | 
				
			||||||
    ./abra server default init
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@test "abra app (new|rm)" {
 | 
					 | 
				
			||||||
    ./abra app new --server default --domain traefik.test.com --app-name traefik_test_com traefik
 | 
					 | 
				
			||||||
    [ -f $ABRA_DIR/servers/default/traefik_test_com.env ]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # interactive prompt
 | 
					 | 
				
			||||||
    echo "y" | ./abra app traefik_test_com delete
 | 
					 | 
				
			||||||
    [ ! -f $ABRA_DIR/servers/default/traefik_test_com.env ]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # --force
 | 
					 | 
				
			||||||
    ./abra app new --server default --domain traefik_test_com --app-name traefik_test_com traefik
 | 
					 | 
				
			||||||
    ./abra app traefik_test_com delete --force
 | 
					 | 
				
			||||||
    [ ! -f $ABRA_DIR/servers/default/traefik_test_com.env ]
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@test "abra app <domain> secret (insert|generate|rm)" {
 | 
					 | 
				
			||||||
    ./abra app new --server default --domain traefik_test_com --app-name traefik_test_com traefik
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ./abra app traefik_test_com secret insert foobar v1 "foobar"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # interactive prompt
 | 
					 | 
				
			||||||
    echo "y" | ./abra app traefik_test_com secret rm foobar
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ./abra app traefik_test_com secret insert foobar v1 "foobar"
 | 
					 | 
				
			||||||
    #  prompt
 | 
					 | 
				
			||||||
    ./abra app traefik_test_com secret rm foobar --force
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
		Reference in New Issue
	
	Block a user