Compare commits

...

233 Commits
0.3.1 ... 0.5.0

Author SHA1 Message Date
5bc702bf96 Propagate new version around 2021-03-01 11:44:58 +01:00
4bd842db66 Mark new release of abra 2021-03-01 11:41:44 +01:00
a8f7faddb9 Fix typo 2021-03-01 11:38:31 +01:00
3wc
e5b2a426f0 Add shared backup helpers 2021-02-24 17:03:28 +02:00
3wc
29b22fe162 Display subcommand help with -h/--help
Closes #78
2021-02-11 15:02:37 +02:00
c082645da0 Remove test commit 2021-02-09 08:35:52 +01:00
156d5d8fba Merge pull request 'abra-commands.sh → abra.sh, make configs type-level' (#77) from move-configs into main
Reviewed-on: https://git.autonomic.zone/coop-cloud/abra/pulls/77
2021-02-09 08:31:45 +01:00
3wc
d2cdb11fcc Tweak INFO messages, update CHANGELOG 2021-02-08 13:43:39 +02:00
3wc
cef06a82a6 abra-commands.sh → abra.sh 2021-01-30 16:10:40 +02:00
3wc
9a630a0440 Prevent accidental cd when loading app vars 2021-01-30 16:10:40 +02:00
3wc
1c6651b18b Fix secret generate help
[ci skip]
2021-01-30 16:10:13 +02:00
3wc
5f7df4694f Test failed drone build 2021-01-29 14:02:26 +02:00
3wc
7feeab24ec Add RocketChat notifications for failed builds 2021-01-29 13:44:55 +02:00
3wc
1a6688cfbf Merge branch 'debug_logging' into main 2021-01-24 21:51:59 +02:00
3wc
f90e1d154c Add container IDs to debug log 2021-01-24 19:11:22 +02:00
3wc
6cc265e931 Tweak info/debug output 2021-01-24 19:11:22 +02:00
3wc
854ae23f60 Initial --verbose / --debug 2021-01-24 19:11:22 +02:00
3wc
43e7672725 Prevent accidental cd when loading app vars 2021-01-24 19:11:11 +02:00
4e913c426d Follow same style 2021-01-09 20:07:16 +01:00
3wc
8a08de51e4 Alert on missing secrets, re-add . → _ STACK_NAME 2021-01-09 15:07:39 +02:00
1c7a51bce1 Merge pull request 'App backup & restore' (#72) from backup_restore into main
Reviewed-on: https://git.autonomic.zone/coop-cloud/abra/pulls/72
2021-01-09 12:36:50 +01:00
3wc
5d84cef63c app restore 2021-01-09 13:36:32 +02:00
3wc
eda5198904 Add scaffolding for per-app backup commands
See #70
2021-01-09 13:36:32 +02:00
3wc
a4a3dccd66 Add global --skip-check / --skip-update commands 2021-01-09 13:36:32 +02:00
3wc
a2d249e3a1 Fix abra app ls with * server 2021-01-02 00:34:44 +02:00
dc83baea12 Remove tab 2021-01-01 22:44:21 +01:00
3wc
d6b4a4744f Fix abra app ls for app → type 2021-01-01 23:00:20 +02:00
6ba2657dc1 Use short hash convention 2021-01-01 18:59:19 +01:00
ac6b805cbf Follow parens convention 2021-01-01 18:57:39 +01:00
d4e52a9de3 Merge pull request 'Make secret generation more robust' (#73) from simplify-secret-logic into main
Reviewed-on: https://git.autonomic.zone/coop-cloud/abra/pulls/73
2021-01-01 18:55:47 +01:00
aa59c1ad43 Make secret generation more robust
Closes https://git.autonomic.zone/coop-cloud/abra/issues/68.
2021-01-01 18:54:41 +01:00
36f1d679ae Merge pull request 'Merging auto functionality into generate command' (#64) from app-auto-merge into main
Reviewed-on: https://git.autonomic.zone/coop-cloud/abra/pulls/64
2021-01-01 17:32:30 +01:00
f5c8ee1136 Merge auto/generate and use --secrets
Closes https://git.autonomic.zone/coop-cloud/abra/issues/58.
2021-01-01 17:31:21 +01:00
3wc
9a17817cc8 Tiny tweak to abra help advice 2021-01-01 17:57:36 +02:00
3wc
b2e3292453 Add version subcommand to CHANGELOG 2021-01-01 17:55:45 +02:00
13fafb5929 Fix typo and link to commit 2021-01-01 14:18:30 +01:00
3wc
114f99ae2e Update CHANGELOG 2021-01-01 15:11:04 +02:00
3wc
fff4b10a41 Gettin some help_
See #50
2021-01-01 15:09:49 +02:00
ab1353603d Use homebrewed image for CI too 2021-01-01 13:49:19 +01:00
1600b6277f Use the One True Way for testing
Closes https://git.autonomic.zone/coop-cloud/abra/issues/71.
2021-01-01 13:48:14 +01:00
b79e35f982 Merge pull request 'Add per-subcommand help using abra help <subcommand>' (#61) from command_help_2 into main
Reviewed-on: https://git.autonomic.zone/coop-cloud/abra/pulls/61
2021-01-01 13:13:29 +01:00
703dbe0a0f Merge branch 'main' into command_help_2 2021-01-01 13:09:57 +01:00
7abb0191e1 Use upstream CI image
See https://git.autonomic.zone/coop-cloud/docker-dind-bats-kcov.
2021-01-01 12:26:50 +01:00
3wc
886ae5b7f2 Fix help function names 2021-01-01 01:46:09 +02:00
3wc
5411c85793 Don't require weird app_ls format for abra help 2021-01-01 01:42:17 +02:00
3wc
caa315e361 Add per-subcommand help 2021-01-01 01:13:17 +02:00
3wc
e6b24fe65c Change -v option to version subcommand 2021-01-01 01:10:03 +02:00
3wc
81782bb5f0 make test → test_local, test_docker, test_dind
test_local: run `bats tests/`. Requires `bats`.

test_docker: run docker and install bats in it.

Both of these options require that your local Docker daemon is running
in swarm mode.

test_dind: starts a Docker daemon and runs tests in that. Requires sudo
2020-12-31 22:10:52 +02:00
406b9e374e Only output length if using it
Closes https://git.autonomic.zone/coop-cloud/abra/issues/67.
2020-12-31 18:16:01 +01:00
ce0e0e893c Use plain usage only when erroring out
Closes https://git.autonomic.zone/coop-cloud/abra/issues/65.
2020-12-31 18:12:01 +01:00
fac45f276e Add entry 2020-12-31 18:11:22 +01:00
44d3ac3a1c Support pwqgen/pwgen checking
Closes https://git.autonomic.zone/coop-cloud/abra/issues/66.
2020-12-31 18:10:13 +01:00
5da9f26076 Remove old function
Follow on from 3936d6afc0.
2020-12-31 18:06:20 +01:00
4e99cf1ded Add log entry 2020-12-31 16:57:10 +01:00
55324524ca Don't cut since export ... isn't in the env file
Closes https://git.autonomic.zone/coop-cloud/abra/issues/69.
2020-12-31 16:55:33 +01:00
b6928959cb Fix test target path 2020-12-31 13:50:10 +01:00
3wc
8ddb290683 Further update to tests for #47 2020-12-31 14:34:52 +02:00
2cb1134a54 Use _ now 2020-12-31 13:26:25 +01:00
c4b1ac482e Update change log 2020-12-31 13:22:26 +01:00
3wc
29cc392dff Prompt on app .. config if $EDITOR is un-set
Closes #41
2020-12-31 12:52:44 +02:00
3wc
8839bd4595 Fix server bash completion
Ref #45
2020-12-31 11:47:14 +02:00
3wc
0179f600f5 Change -v option to version subcommand 2020-12-31 11:47:12 +02:00
15f0233351 Merge pull request '<domain> → <app>, APP → TYPE' (#60) from domain_to_app into main
Reviewed-on: https://git.autonomic.zone/coop-cloud/abra/pulls/60
2020-12-30 22:22:11 +01:00
3wc
bbaacb7b9f Update tests for app-name 2020-12-30 21:56:52 +02:00
3wc
6761574d74 Add "app name" concept, and rename APP → TYPE
Ref #47
2020-12-30 21:26:17 +02:00
3wc
8384af8b95 First foray into <domain> → <app> 2020-12-30 13:47:41 +02:00
3wc
b9e97688d6 ... and update docopt 2020-12-30 13:43:17 +02:00
3wc
1055805c8d Merge duplicate run commands
Closes #57
2020-12-30 13:33:57 +02:00
678906cb39 Merge pull request 'Use set -a/+a and docker env file formats' (#55) from use-set-a into main
Reviewed-on: https://git.autonomic.zone/coop-cloud/abra/pulls/55
2020-12-30 11:23:30 +01:00
11c50ae98d Use set -a/+a and docker env file formats
Closes https://git.autonomic.zone/coop-cloud/abra/issues/40.
2020-12-30 11:22:58 +01:00
e911ab246b Merge pull request 'Merge logs/multilogs and avoid multitail external' (#56) from merge-logging into main
Reviewed-on: https://git.autonomic.zone/coop-cloud/abra/pulls/56
2020-12-30 11:21:46 +01:00
34775f306b Merge branch 'main' into merge-logging 2020-12-30 11:21:03 +01:00
375a4dd29d Re-add require_app_latest for custom commands
Revision of 67cce192df.

See https://git.autonomic.zone/coop-cloud/abra/pulls/54#issuecomment-2300.
2020-12-30 11:19:55 +01:00
2b951e9f54 Mark minor 2020-12-30 11:18:32 +01:00
3wc
01184c313a Add missing CHANGELOG entries
Closes #46
2020-12-30 00:43:52 +02:00
3936d6afc0 Merge logs/multilogs and avoid multitail external 2020-12-29 23:22:46 +01:00
407744827f Add change log entry for #42
See https://git.autonomic.zone/coop-cloud/abra/issues/42.
2020-12-29 17:11:30 +01:00
b634b4c668 Merge pull request 'Make sure to git pull latest changes on ~/.abra/apps side' (#54) from latest-checks into main
Reviewed-on: https://git.autonomic.zone/coop-cloud/abra/pulls/54
2020-12-29 17:10:16 +01:00
67cce192df Don't do more cloning that necessary 2020-12-29 17:06:49 +01:00
3a9e141b24 Pull latest changes
Closes https://git.autonomic.zone/coop-cloud/abra/issues/42.
2020-12-29 17:06:32 +01:00
ebfe7ca4e8 Suppress output of clone and do better logging 2020-12-29 17:05:30 +01:00
fff2fbe819 Prepare function name for new functionality 2020-12-29 17:05:00 +01:00
f213c3df5f Follow convention and show type of message 2020-12-29 17:04:17 +01:00
9b1be33018 Mark as quote and not as entry 2020-12-29 15:11:15 +01:00
6ecf4f287a Add missing ) 2020-12-29 15:10:57 +01:00
e1d6ff8b73 Add docs link 2020-12-29 15:10:05 +01:00
07d4815a74 Start 0.5.0 change log 2020-12-29 15:08:42 +01:00
33315f6b43 Merge pull request '<app> -> <type>' (#53) from app-goes-to-type into main
Reviewed-on: https://git.autonomic.zone/coop-cloud/abra/pulls/53
2020-12-29 15:03:43 +01:00
f017324431 <app> -> <type>
Closes https://git.autonomic.zone/coop-cloud/abra/issues/48.
2020-12-29 14:56:50 +01:00
4339c91cf3 Merge pull request 'Remove abra server use' (#52) from server-use-remove into main
Reviewed-on: https://git.autonomic.zone/coop-cloud/abra/pulls/52
2020-12-29 14:26:39 +01:00
592f515ec4 Remove abra server use 2020-12-29 14:24:50 +01:00
3wc
77ba5652b2 Run "check" during "deploy", + "--skip-check" 2020-12-29 11:15:14 +02:00
3wc
fdf6334ed3 Use temporary ABRA_DIr in tests 2020-12-27 21:53:44 +02:00
3wc
73e5e64b9a Bump version 2020-12-27 21:45:37 +02:00
3f9b4477cd Swap args around 2020-12-27 13:11:22 +01:00
3wc
412729aac9 Fix calling logs with no arguments
Closes #31
2020-12-27 12:23:16 +02:00
3wc
8022a2cb41 Add cheeky network command 2020-12-27 12:07:10 +02:00
3wc
35182ed260 Get both .. volume .. and custom commands working 2020-12-27 12:07:10 +02:00
3wc
d90c6ef361 Add --no-tty option to app run 2020-12-27 12:07:10 +02:00
3wc
40ca8dfe93 Add --server filter to app list..
.. and add `server <host> apps` as an alias.
2020-12-27 12:07:10 +02:00
3wc
7f009f927b Fix app ls --status
Closes #35
2020-12-27 12:06:39 +02:00
3wc
e222f4152b Pin kcov version 2020-12-24 01:07:01 +02:00
3wc
893150cdd9 Pin shellcheck version 2020-12-24 00:55:57 +02:00
3wc
61126f16e1 Update installer 2020-12-24 00:50:50 +02:00
3wc
63c982c550 Fix custom commands loading 2020-12-17 13:38:30 +02:00
3wc
0d202eedfc Reënable custom per-stack commands 2020-12-14 12:33:22 +02:00
3wc
cb2d563ea0 Fix status header 2020-11-18 01:06:07 +02:00
3wc
059968a8cf Fix abra app ls --status 2020-11-18 00:40:26 +02:00
3wc
c57069e0af Use ABRA_DIR instead of hard-coding .abra 2020-11-18 00:39:41 +02:00
3wc
946a527baa Add app ... ps command, and some comments 2020-11-16 17:29:35 +02:00
89d530a553 Use printf instead of echo like docker docs do 2020-11-08 16:40:45 +01:00
25fe6808ad Use one line and strip newlines on generation 2020-11-08 16:34:26 +01:00
28b2d8ecc7 Strip whitespace 2020-11-08 16:34:21 +01:00
3wc
fd735a1310 Add app <domain> check to sniff out missing vars
Re #36
2020-11-06 23:14:26 +02:00
3wc
e307286db7 Add --status option to app ls
Closes #35
2020-11-06 22:35:48 +02:00
dd570e224b Ignore those build failures 2020-11-05 16:02:21 +01:00
f495ec0d94 Appease shellcheck 2020-11-05 16:00:50 +01:00
b75bce531b Merge pull request 'PASSWORD/KEY distinction+match for secret generation' (#33) from new-pass-keys-generation into main
Reviewed-on: https://git.autonomic.zone/coop-cloud/abra/pulls/33
2020-11-05 15:57:39 +01:00
0d62f01d5a Merge branch 'main' into new-pass-keys-generation 2020-11-05 15:57:32 +01:00
eec55896a4 Implement password/key handling 2020-11-05 15:56:31 +01:00
c2a56c6c09 Drop this broken catch-all
Closes https://git.autonomic.zone/coop-cloud/abra/issues/29.
2020-11-01 21:15:06 +01:00
74dfd75fb1 Use same [] style once more 2020-11-01 20:55:47 +01:00
e8c0efa91e Add --auto to app new for generation
Step one of https://git.autonomic.zone/coop-cloud/abra/issues/32.
2020-11-01 20:54:43 +01:00
6bae48431c Use same style as other [] options 2020-11-01 20:41:58 +01:00
3wc
543072ab37 Add zsh completion, remove compat hacks from bash
Ref #5
2020-11-01 21:09:33 +02:00
57e3a34133 Make sure to clone on deploy as well 2020-11-01 17:08:44 +01:00
33a49a8457 Trim whitespace 2020-11-01 17:05:13 +01:00
5806e40c1c Add require_app_clone 2020-11-01 17:05:10 +01:00
3wc
0d24a8e5cc Tryna fix Drone CI 2020-11-01 16:52:36 +02:00
3wc
e01f06423e Whoops! (Actual compopt fix
Ref #5
2020-11-01 15:22:45 +02:00
3wc
80f06ba0e1 Support >2 COMPOSE_FILEs 2020-10-31 17:51:56 +02:00
3wc
f8306b282d Split tests into separate files, add secret tests 2020-10-31 17:06:54 +02:00
3wc
2bdfe8baa8 Handle missing compopt
Ref #5
2020-10-30 21:40:59 +02:00
3wc
b226396764 Consistent y/n confirmation prompts 2020-10-30 20:57:13 +02:00
3wc
a3cd6d2281 Add git and bash to Drone test env 2020-10-30 18:32:01 +02:00
3wc
50651aeea1 Mollify shellcheck 2020-10-30 18:30:53 +02:00
3wc
57e24eaf0a Always run tests on local Docker 2020-10-30 18:30:43 +02:00
3wc
50ca4f8029 Tighten up options for secret commands 2020-10-30 18:24:22 +02:00
3wc
0433da3689 Fix subcommand -> function mapper 2020-10-30 18:17:06 +02:00
3wc
3e0b9e9475 Working completion app and server 2020-10-30 17:52:47 +02:00
3wc
c6b841de6c First stab 2020-10-30 17:52:47 +02:00
3wc
2daffc8694 Use bash select, tweak args 2020-10-30 17:52:46 +02:00
b15a214049 WIP: app secret rm 2020-10-30 02:09:59 +01:00
8d7194fcce Add quotes 2020-10-30 00:39:24 +01:00
188dc56dd1 Also run via sh 2020-10-30 00:34:37 +01:00
dbfe6f8097 Add initial CLI parsing for secret deletion 2020-10-30 00:32:03 +01:00
26b994ab84 Add --pass for new apps command
See https://git.autonomic.zone/coop-cloud/abra/issues/25.
2020-10-30 00:04:53 +01:00
3wc
dba3c391bd Handle missing tput gracefully 2020-10-29 19:40:19 +02:00
3wc
5a72ed0cfb Make config more chill, small gardening 2020-10-29 19:39:51 +02:00
3wc
b5d84d5e0d Test for git, container, and test app new ... 2020-10-29 19:38:42 +02:00
3wc
e3983c2440 Run bats in dind container, add git & bash 2020-10-29 19:38:15 +02:00
3wc
85b8a4f459 Add config command 2020-10-29 19:35:59 +02:00
3wc
6e38dc35e5 Fix run subcommand 2020-10-29 19:35:57 +02:00
841e4fc61a Explode if can't clone the app 2020-10-28 18:24:28 +01:00
c1d12eacc5 Fix typo 2020-10-28 18:24:15 +01:00
3b730d314b Use basename when listing servers for abra new 2020-10-28 18:05:53 +01:00
5df3a9fffb Account for 0 or 1 servers 2020-10-28 17:33:48 +01:00
3e3fe0e349 Create under servers directory 2020-10-28 17:32:38 +01:00
db766f4aec Don't explode if you already have the context 2020-10-28 17:32:30 +01:00
3wc
8909a46d8c Add --force option to app .. delete 2020-10-28 01:52:27 +02:00
3wc
8d139d4d28 Add undeploy/delete commands
Ref #4
2020-10-28 01:40:35 +02:00
3wc
b6b80298c2 Add .. secret auto command 2020-10-28 00:29:40 +02:00
3wc
b1e8ac4498 Local server list, more tidying 2020-10-27 23:46:03 +02:00
3wc
c5785089d6 Tidy up CLI commands, add app list 2020-10-27 21:38:20 +02:00
3wc
bec3272a41 .abra dir, abra new
Closes #24

Ref #21
2020-10-27 17:58:34 +02:00
dc3b772b72 Use server naming 2020-10-26 18:40:04 +01:00
07d4f8cbdf Remove abra.yml / yq stuff for now 2020-10-26 18:36:28 +01:00
37c59a53ef Drop interactive flags 2020-10-26 18:31:03 +01:00
87a54594f6 Fix typo, clean up after 2020-10-26 18:25:40 +01:00
e2e76edaaf Remove old test file 2020-10-26 18:19:41 +01:00
ab7772e8f7 Shuffle that 2020-10-26 18:16:54 +01:00
7304612f5f Use actual plugin 2020-10-26 18:14:41 +01:00
5a07f08ab3 Use new syntax 2020-10-26 18:13:23 +01:00
1e158cce55 Use cwd for coverage 2020-10-26 18:09:39 +01:00
2102193df1 Fix syntax 2020-10-26 18:05:27 +01:00
1b4258f1ea Add shellcheck target, drop default 2020-10-26 18:04:14 +01:00
cc060b8546 Fix error code 2020-10-26 18:02:24 +01:00
dce46603bf Add codecov target too 2020-10-26 18:01:12 +01:00
64d04a29ab Run full kcov 2020-10-26 18:01:00 +01:00
db7eb30447 Drop curl 2020-10-26 17:50:06 +01:00
f648b251bf Remove yq target and newline test target 2020-10-26 17:49:21 +01:00
86a790bbe4 Make tests run locally isolated 2020-10-26 17:48:19 +01:00
b423d61fce Remove install targets 2020-10-26 17:48:12 +01:00
f03c509552 Use shellcheck image 2020-10-26 17:40:02 +01:00
e6458e5e60 Update parser once more 2020-10-26 17:30:37 +01:00
9580199616 Remove extra secrets help 2020-10-26 17:19:32 +01:00
3wc
b59e902d18 Fix logs, cp, `multilogs
Ref #18
2020-10-26 16:55:43 +02:00
3wc
c50b1d8760 Goodbye, parse_subcommand! 👋
Ref #18
2020-10-26 16:08:15 +02:00
3wc
b49b510c43 Load custom commands in a function 2020-10-26 13:46:54 +02:00
3wc
b68bfdfb43 Regnerate Docopt 2020-10-26 13:35:58 +02:00
3wc
983e4af08c Use docopts variables
Ref #18
2020-10-26 13:34:49 +02:00
3wc
6cf7cf843a Update server subcommands 2020-10-26 13:34:30 +02:00
3wc
d37d8a0c66 Add default --tail option to abra logs 2020-10-26 13:33:56 +02:00
da33064a5f Add codecov badge 2020-10-26 11:49:06 +01:00
be2fffd858 Run plain bin 2020-10-26 11:40:41 +01:00
38f0c92bc7 Try avoid error exit code 2020-10-26 11:38:32 +01:00
c1fbb75657 Wait a sec, collect, not just report 2020-10-26 11:37:13 +01:00
33fd0eeb8d Point codecov at report folder 2020-10-26 11:36:12 +01:00
5955505752 Get reports only 2020-10-26 11:36:04 +01:00
e022fe2310 Use kcov image 2020-10-26 11:28:19 +01:00
02fa9025dc Install kcov directly now 2020-10-26 11:26:28 +01:00
2250713c05 Split up codecov steps 2020-10-26 11:25:55 +01:00
2b77cfebf9 Disable failing test for now 2020-10-26 11:25:39 +01:00
aff01e6741 Install kcov holding package 2020-10-26 11:24:05 +01:00
0eb5d14ad8 Drop unit tests temporarily 2020-10-26 11:21:58 +01:00
6d6208a63c Add code coverage CI 2020-10-26 11:20:17 +01:00
1e059ffe7f Add coverage target 2020-10-26 11:20:09 +01:00
eb12f2392c Ignore coverage folder 2020-10-26 11:19:38 +01:00
a13e58c6c0 Finally work out subcommands 2020-10-26 10:05:03 +01:00
44c41830a7 Finalise docopt parser integration 2020-10-26 09:46:14 +01:00
ae6c2c26ae A first stab at docopt-sh integration 2020-10-25 21:41:17 +01:00
dad72c820a Re-jig names and add test target in Makefile 2020-10-25 21:31:41 +01:00
eec9a8ba1a Add link to site 2020-10-25 21:22:29 +01:00
bf44270b3d Make CI zippier with alpine 2020-10-25 21:19:14 +01:00
4bf1dbd7eb Spacing and naming 2020-10-25 21:17:01 +01:00
4ca1026c2c Don't test against dir that doesnt exist 2020-10-25 21:16:42 +01:00
891b2cc6c9 Add place holders for change log 2020-10-25 21:13:33 +01:00
4de7f24d8e Start moving installer scripts over 2020-10-25 21:08:08 +01:00
ad1063a0cc Trim down README for now 2020-10-25 21:08:03 +01:00
3wc
4cfe143326 Install docker using convenience script 2020-10-23 05:13:06 +02:00
3wc
16cc5d9cf7 Fix tests 2020-10-23 05:04:35 +02:00
3wc
9d22797dc8 Attempt to test using bats / drone 2020-10-23 05:03:01 +02:00
3wc
16a09887e6 Rename abra context to abra server 2020-10-23 05:02:39 +02:00
3wc
b7757b51b1 Fix abra run if there are 2 containers up 2020-10-23 03:58:55 +02:00
3c7c7694bf Merge pull request 'Adapt --help output to Click-like format' (#20) from new-help into main
Reviewed-on: https://git.autonomic.zone/autonomic-cooperative/abra/pulls/20
2020-10-23 03:56:50 +02:00
f15dfd9f5f First stab at new help 2020-10-22 21:16:30 +02:00
3wc
66dcaedfd0 Add stack and volume as shortcuts to docker 2020-10-06 20:27:50 +02:00
3wc
6598aabc37 Work even if a local path contains $SERVICE 2020-10-01 01:08:29 +02:00
3wc
6759e6a175 Show multiple COMPOSE_FILEs better
Fixes #16
2020-09-29 00:17:26 +02:00
3wc
8735362580 Load custom commands from $ABRA_STACK_DIR too 2020-09-28 15:02:18 +02:00
3wc
7223dca951 Re-enable running commands as another user
Fixes #14
2020-09-27 23:45:39 +02:00
3wc
dd9444b036 Add context init command to set up remote swarm 2020-09-27 13:26:27 +02:00
3wc
81e24b6f72 Remove debugging from secret_generate 2020-09-27 13:26:15 +02:00
16 changed files with 1952 additions and 433 deletions

View File

@ -3,11 +3,41 @@ kind: pipeline
name: linters
steps:
- name: run shellcheck
image: debian:buster
image: koalaman/shellcheck-alpine:v0.7.1
commands:
- apt update
- apt install -y shellcheck
- shellcheck abra script.d/*
- 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
- name: notify rocket chat
image: plugins/slack
settings:
webhook:
from_secret: rc_builds_url
username: comradebritney
channel: "internal.builds"
template: "{{repo.owner}}/{{repo.name}} build failed: {{build.link}}"
when:
status:
- failure
trigger:
branch:
- main

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
coverage/
/.venv

View File

@ -1,10 +1,47 @@
# abra x.x.x (UNRELEASED)
# abra 0.5.0 (2021-03-01)
- `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|-U` / `--skip-check|-C` 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 ([#70](https://git.autonomic.zone/coop-cloud/abra/issues/70))
- Rename per-type `abra-commands.sh` to `abra.sh`, and include config versions as type-level instead of app-level config ([#43](https://git.autonomic.zone/coop-cloud/abra/issues/43))
- Show per-subcommand help by adding `-h/--help` to a command line ([#38](https://git.autonomic.zone/coop-cloud/abra/issues/78))
# 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 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,14 +1,45 @@
default: install
.PHONY: test shellcheck docopt kcov codecov
dev_install:
ln -sf $(PWD)/abra ~/.local/bin
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
install:
install abra /usr/bin/abra
shellcheck:
@docker run \
-it \
--rm \
-v $$(pwd):/workdir \
koalaman/shellcheck-alpine \
shellcheck /workdir/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
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
.PHONY: dev_install install get_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)

View File

@ -1,56 +1,18 @@
# abra
[![Build Status](https://drone.autonomic.zone/api/badges/autonomic-cooperative/abra/status.svg)](https://drone.autonomic.zone/autonomic-cooperative/abra)
[![Build Status](https://drone.autonomic.zone/api/badges/coop-cloud/abra/status.svg)](https://drone.autonomic.zone/coop-cloud/abra)
[![codecov](https://codecov.io/gh/Autonomic-Cooperative/abra/branch/main/graph/badge.svg?token=aX3I5NMRsj)](undefined)
Docker stack magic 🎩🐇
> https://cloud.autonomic.zone
The cooperative cloud utility belt 🎩🐇
## Documentation
> [docs.cloud.autonomic.zone](https://docs.cloud.autonomic.zone/)
## Install
```sh
curl -fsSL https://install.abra.autonomic.zone | bash
curl 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 bump the version in [abra-installer](./script.d/abra-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`

1850
abra

File diff suppressed because it is too large Load Diff

52
completion/_abra Normal file
View File

@ -0,0 +1,52 @@
#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 "$@"

117
completion/abra.bash Normal file
View File

@ -0,0 +1,117 @@
#!/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

40
installer/compose.yml Normal file
View File

@ -0,0 +1,40 @@
---
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:

18
installer/installer Executable file
View File

@ -0,0 +1,18 @@
#!/bin/bash
ABRA_VERSION="0.5.0"
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"
chmod +x "$HOME/.local/bin/abra"
echo "abra installed to $HOME/.local/bin/abra"
}
function run_installation {
install_abra
}
run_installation
exit 0

10
installer/nginx.conf Normal file
View File

@ -0,0 +1,10 @@
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;
}
}

View File

@ -1,18 +0,0 @@
#!/bin/bash
ABRA_VERSION="0.3.1"
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"
chmod +x "$HOME/.local/bin/abra"
echo "abra installed to $HOME/.loca/bin/abra"
}
function run_installation {
install_abra
}
run_installation
exit 0

View File

@ -1,16 +0,0 @@
#!/bin/sh
install_docker() {
echo "install_docker: TODO"
}
init_swarm() {
echo "init_swarm: TODO"
}
run_installation() {
install_docker
init_swarm
}
run_installation
exit 0

View File

@ -1,7 +0,0 @@
---
name: mystack
secrets:
foo:
bar:
baz:
length: 128

17
tests/01_environment.bats Normal file
View File

@ -0,0 +1,17 @@
#!/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
}

52
tests/02_abra.bats Normal file
View File

@ -0,0 +1,52 @@
#!/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
}