Compare commits

..

2 Commits

Author SHA1 Message Date
3wc
ba936796ec Aborted attempts to get bats / kcov working 2020-12-14 12:04:36 +02:00
3wc
fdc6403a1b Use bats-mock 2020-12-14 12:04:27 +02:00
10 changed files with 290 additions and 743 deletions

View File

@ -3,23 +3,25 @@ kind: pipeline
name: linters
steps:
- name: run shellcheck
image: koalaman/shellcheck-alpine:v0.7.1
image: koalaman/shellcheck-alpine:latest
commands:
- shellcheck abra
- name: run unit tests
image: decentral1se/docker-dind-bats-kcov
image: docker:dind
commands:
- apk add bats git bash
- bats tests
- name: collect code coverage
failure: ignore # until we fix this
image: decentral1se/docker-dind-bats-kcov
failure: ignore # until we fix this
image: kcov/kcov:latest
commands:
- apk add bats git bash
- kcov . bats tests || true
- name: send code coverage report to codecov
failure: ignore # until we fix this
failure: ignore # until we fix this
image: plugins/codecov
settings:
token:

3
.gitmodules vendored Normal file
View File

@ -0,0 +1,3 @@
[submodule "tests/helpers/mocks"]
path = tests/helpers/mocks
url = https://github.com/Flamefire/bats-mock.git

View File

@ -1,37 +1,6 @@
# 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)
@ -39,7 +8,7 @@
# abra 0.3.0 (2020-09-27)
- Add multilogs stack logs implementation ([#8](https://git.autonomic.zone/compose-stacks/abra/issues/8))
- 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)

View File

@ -1,19 +1,13 @@
.PHONY: test shellcheck docopt kcov codecov
test:
@sudo DOCKER_CONTEXT=default docker run \
@DOCKER_CONTEXT=default docker run \
-it \
--rm \
-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
docker:dind \
sh -c "apk add bats git bash && cd /workdir && bats tests"
shellcheck:
@docker run \
@ -32,12 +26,15 @@ docopt:
.venv/bin/docopt.sh abra
kcov:
@docker run \
@DOCKER_CONTEXT=default docker run \
-it \
--rm \
-v $$(pwd):/workdir \
kcov/kcov:latest \
sh -c "kcov /workdir/coverage /workdir/abra || true"
koinotice/dind-kcov-bats \
bash -c "kcov coverage bats tests || true"
install:
install abra /usr/bin/abra
codecov: SHELL:=/bin/bash
codecov:

View File

@ -7,10 +7,6 @@
The cooperative cloud utility belt 🎩🐇
## Documentation
> [docs.cloud.autonomic.zone](https://docs.cloud.autonomic.zone/)
## Install
```sh

897
abra

File diff suppressed because it is too large Load Diff

View File

@ -91,7 +91,7 @@ _abra_complete()
case "$cmd" in
server)
# Offer exactly one server name completion.
if (( COMP_CWORD == cmd_index + 1 )); then
if (( COMP_CWORD == cmd_index + 2 )); then
_abra_complete_servers "$cur"
fi
;;

View File

@ -1,11 +1,11 @@
#!/bin/bash
ABRA_VERSION="0.4.1"
ABRA_VERSION="0.3.1"
ABRA_SRC="https://git.autonomic.zone/coop-cloud/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"
}

View File

@ -1,52 +1,60 @@
#!/usr/bin/env bats
load test_helper
setup() {
export ABRA_DIR=$(mktemp -d)
export DOCKER_STUB_DEBUG=foo
mkdir -p $ABRA_DIR/servers/default
stub docker \
"context create * --docker * : touch $ABRA_DIR/context" \
'context ls : echo "swarm.test.com"' \
"context rm * : rm $ABRA_DIR/context" \
"context create * --docker * : touch $ABRA_DIR/context" \
"context rm * : rm $ABRA_DIR/context"
}
teardown() {
rm -rf "$ABRA_DIR"
#unstub docker
#rm -rf "$ABRA_DIR"
echo "foo"
}
@test "abra server (add|rm)" {
@test "abra server add/rm works" {
./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 rm swarm.test.com
./abra server add swarm.test.com foobar 12345
[ -d $ABRA_DIR/servers/swarm.test.com ]
./abra server swarm.test.com rm
./abra server rm swarm.test.com
}
@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 ]
@test "abra app new/rm works" {
./abra app new --server default --domain 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 ]
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 ]
./abra app new --server default --domain 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
# TODO 3wc: mock `server new` so we don't endlessly re-test it
./abra app new --server default --domain traefik.test.com traefik
./abra app traefik_test_com secret insert foobar v1 "foobar"
./abra app traefik.test.com secret insert foobar v1 "foobar"
# interactive prompt
echo "y" | ./abra app traefik_test_com secret rm foobar
echo "y" | ./abra app traefik.test.com secret rm foobar
./abra app traefik_test_com secret insert foobar v1 "foobar"
./abra app traefik.test.com secret insert foobar v1 "foobar"
# prompt
./abra app traefik_test_com secret rm foobar --force
./abra app traefik.test.com secret rm foobar --force
}

1
tests/test_helper.bash Normal file
View File

@ -0,0 +1 @@
load helpers/mocks/src/stub