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 | ||||
| steps: | ||||
|   - name: run shellcheck | ||||
|     image: koalaman/shellcheck-alpine:v0.7.1 | ||||
|     image: debian:buster | ||||
|     commands: | ||||
|       - shellcheck abra | ||||
|  | ||||
|   - name: run unit tests | ||||
|     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 | ||||
|  | ||||
|       - apt update | ||||
|       - apt install -y shellcheck | ||||
|       - shellcheck abra installer | ||||
| trigger: | ||||
|   branch: | ||||
|     - 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) | ||||
|  | ||||
| - 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: | ||||
| 	@sudo DOCKER_CONTEXT=default docker run \ | ||||
| 		-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 | ||||
| dev_install: | ||||
| 	ln -sf $(PWD)/abra ~/.local/bin | ||||
|  | ||||
| shellcheck: | ||||
| 	@docker run \ | ||||
| 		-it \ | ||||
| 		--rm \ | ||||
| 		-v $$(pwd):/workdir \ | ||||
| 		koalaman/shellcheck-alpine \ | ||||
| 		shellcheck /workdir/abra | ||||
| install: | ||||
| 	install abra /usr/bin/abra | ||||
|  | ||||
| docopt: | ||||
| 	@if [ ! -d ".venv" ]; then \ | ||||
| 		python3 -m venv .venv && \ | ||||
| 		.venv/bin/pip install -U pip setuptools wheel && \ | ||||
| 		.venv/bin/pip install docopt-sh; \ | ||||
| 	fi | ||||
| 	.venv/bin/docopt.sh abra | ||||
| get_yq: | ||||
| 	wget https://github.com/mikefarah/yq/releases/download/3.3.2/yq_linux_amd64 && \ | ||||
| 		chmod +x yq_linux_amd64 && \ | ||||
| 		mv yq_linux_amd64 yq | ||||
|  | ||||
| kcov: | ||||
| 	@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) | ||||
| .PHONY: dev_install install get_yq | ||||
|  | ||||
							
								
								
									
										58
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										58
									
								
								README.md
									
									
									
									
									
								
							| @ -1,18 +1,56 @@ | ||||
| # abra | ||||
|  | ||||
| [](https://drone.autonomic.zone/coop-cloud/abra) | ||||
| [](undefined) | ||||
| [](https://drone.autonomic.zone/autonomic-cooperative/abra) | ||||
|  | ||||
| > https://cloud.autonomic.zone | ||||
|  | ||||
| The cooperative cloud utility belt 🎩🐇 | ||||
|  | ||||
| ## Documentation | ||||
|  | ||||
| > [docs.cloud.autonomic.zone](https://docs.cloud.autonomic.zone/) | ||||
| Docker stack magic 🎩🐇 | ||||
|  | ||||
| ## Install | ||||
|  | ||||
| ```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,11 +1,11 @@ | ||||
| #!/bin/bash | ||||
| 
 | ||||
| ABRA_VERSION="0.4.1" | ||||
| ABRA_SRC="https://git.autonomic.zone/coop-cloud/abra/raw/tag/$ABRA_VERSION/abra" | ||||
| ABRA_VERSION="0.1.2" | ||||
| ABRA_SRC="https://git.autonomic.zone/autonomic-cooperative/abra/raw/tag/$ABRA_VERSION/abra" | ||||
| 
 | ||||
| function install_abra { | ||||
|   mkdir -p "$HOME/.local/bin" | ||||
|   curl "$ABRA_SRC" > "$HOME/.local/bin/abra" | ||||
| 	curl "$ABRA_SRC" > "$HOME/.local/bin/abra" | ||||
|   chmod +x "$HOME/.local/bin/abra" | ||||
|   echo "abra installed to $HOME/.loca/bin/abra" | ||||
| } | ||||
| @ -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
	