forked from toolshed/abra
Compare commits
82 Commits
Author | SHA1 | Date | |
---|---|---|---|
d68444be9e | |||
f7bc8efabe | |||
f5284ba725 | |||
293d3ff558 | |||
c00319ab01 | |||
8b4141670c | |||
23c852125d | |||
b4eae2e5e5 | |||
9e953319cf | |||
0814fa9146 | |||
0e1b6c858b | |||
28618bd3ac | |||
b04bfea1c7 | |||
bc0ef0d6fc | |||
16c91fedd1 | |||
9f5945094c | |||
76513a1f35 | |||
86eb8d7fde | |||
e31b3d3173 | |||
58b13d7528 | |||
b0fca49ecb | |||
79dacf557e | |||
d6caf03301 | |||
9b90712d28 | |||
1dd3fe6fcd | |||
29953c17d9 | |||
3b59adfe34 | |||
00c8a988e1 | |||
524fb6a44c | |||
e99bedf9e4 | |||
0d98c442a2 | |||
bcc15ecdb0 | |||
a617629a7a | |||
f7ae400eb3 | |||
7141d364e1 | |||
057ce223f1 | |||
7511b25e47 | |||
62b447d61f | |||
88d2a75575 | |||
8cb6617a0f | |||
1a649c56cb | |||
fd655274f8 | |||
946d1a068d | |||
e8651976ca | |||
af52ba1fec | |||
499c08c374 | |||
08281891a1 | |||
5bce042922 | |||
3276c9fe47 | |||
040374e781 | |||
621c8cd5c4 | |||
7434b67c34 | |||
17306a753b | |||
2e3f4cabd8 | |||
cf2308cdd7 | |||
eec49d6dd1 | |||
d6195ad6d7 | |||
fd04c5a6e9 | |||
1c9d7282b2 | |||
dd9c485c66 | |||
99ab5bf369 | |||
25a0afed65 | |||
44e22db11b | |||
3321010089 | |||
e04c4626f2 | |||
65ce949e03 | |||
5931cbd791 | |||
0bbff91722 | |||
7f5e753dfd | |||
d3776f4424 | |||
544c4e86ba | |||
516309b478 | |||
dfd7e29a30 | |||
bb30fa28da | |||
044de5824b | |||
00cdce7bd2 | |||
f163d4b0fa | |||
e0032fb74a | |||
152dfe9349 | |||
5a95ae97a0 | |||
98e674b8e8 | |||
b655cf20be |
21
CHANGELOG.md
21
CHANGELOG.md
@ -1,5 +1,26 @@
|
|||||||
# abra x.x.x (UNRELEASED)
|
# abra x.x.x (UNRELEASED)
|
||||||
|
|
||||||
|
# abra 0.6.0 (2021-03-17)
|
||||||
|
|
||||||
|
- Show version and digest of app if labelled ([98e674b8e8](https://git.autonomic.zone/coop-cloud/abra/commit/98e674b8e83458a83dcbf331e8e34c7188559c4a))
|
||||||
|
- Implement basic version checking on deployment ([#82](https://git.autonomic.zone/coop-cloud/abra/issues/82))
|
||||||
|
- New `app-catalogue.sh` script to auto-generate app list for documentation ([f163d4b](https://git.autonomic.zone/coop-cloud/abra/commit/f163d4b0fa920232e9d995a22d20fe78b174b3a9))
|
||||||
|
- Support app service rollbacks with `abra <app> rollback <service>` ([#76](https://git.autonomic.zone/coop-cloud/abra/issues/76))
|
||||||
|
- Detect when latest version is deployed and perform a no-op ([#87](https://git.autonomic.zone/coop-cloud/abra/issues/87))
|
||||||
|
- Allow cloning of app repos with different main branches using `-b, --branch=<branch>` ([#80](https://git.autonomic.zone/coop-cloud/abra/issues/80))
|
||||||
|
- Protect against lengthy app names which gives Docker trouble later on ([#83](https://git.autonomic.zone/coop-cloud/abra/issues/83))
|
||||||
|
- Support removal of secrets and volumes when `rm`'ing apps ([#44](https://git.autonomic.zone/coop-cloud/abra/issues/44))
|
||||||
|
- Always choose the default IPv4 address with `abra server <host> init` ([#91](https://git.autonomic.zone/coop-cloud/abra/issues/91))
|
||||||
|
- Add `--type=<type>` filtering option to `abra <app> ls` ([0828189](https://git.autonomic.zone/coop-cloud/abra/commit/0828189))
|
||||||
|
- Check for bash 4+ ([#96](https://git.autonomic.zone/coop-cloud/abra/commit/0828189))
|
||||||
|
- Add `--dev` option to installer using `git clone` ([88d2a75](https://git.autonomic.zone/coop-cloud/abra/commit/88d2a75))
|
||||||
|
- Support `--dev` on the `abra upgrade` command also ([bcc15ec](https://git.autonomic.zone/coop-cloud/abra/commit/bcc15ec))
|
||||||
|
- Vendor [yq](https://github.com/mikefarah/yq/releases) automatically ([3b59adf](https://git.autonomic.zone/coop-cloud/abra/commit/3b59adf))
|
||||||
|
- Extend version handling logic to support all underlying services ([#90](https://git.autonomic.zone/coop-cloud/abra/issues/90))
|
||||||
|
- Fix development installation script symlink issue ([#98](https://git.autonomic.zone/coop-cloud/abra/issues/98))
|
||||||
|
- Add `app-version.sh` script to help packagers version apps ([28618bd](https://git.autonomic.zone/coop-cloud/abra/commit/28618bd))
|
||||||
|
- Add git digest to `abra version` output ([8b41416](https://git.autonomic.zone/coop-cloud/abra/commit/8b41416))
|
||||||
|
|
||||||
# abra 0.5.0 (2021-03-01)
|
# 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))
|
- `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))
|
||||||
|
39
README.md
39
README.md
@ -7,12 +7,51 @@
|
|||||||
|
|
||||||
The cooperative cloud utility belt 🎩🐇
|
The cooperative cloud utility belt 🎩🐇
|
||||||
|
|
||||||
|
`abra` is a command-line tool for managing your own [Co-op Cloud](https://cloud.autonomic.zone). It can provision new servers, create applications, deploy them, run backup and restore operations and a whole lot of other things. It is the go-to tool for day-to-day operations when managing a Co-op Cloud instance.
|
||||||
|
|
||||||
|
## Change log
|
||||||
|
|
||||||
|
See [CHANGELOG.md](./CHANGELOG.md).
|
||||||
|
|
||||||
## Documentation
|
## Documentation
|
||||||
|
|
||||||
> [docs.cloud.autonomic.zone](https://docs.cloud.autonomic.zone/)
|
> [docs.cloud.autonomic.zone](https://docs.cloud.autonomic.zone/)
|
||||||
|
|
||||||
## Install
|
## Install
|
||||||
|
|
||||||
|
Install the latest stable release:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
curl https://install.abra.autonomic.zone | bash
|
curl https://install.abra.autonomic.zone | bash
|
||||||
```
|
```
|
||||||
|
|
||||||
|
or the bleeding-edge development version:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
curl https://install.abra.autonomic.zone | bash -s -- --dev
|
||||||
|
```
|
||||||
|
|
||||||
|
The source for this script is [here](./installer/installer).
|
||||||
|
|
||||||
|
## Update
|
||||||
|
|
||||||
|
Run `abra upgrade` to automatically download and install the latest release
|
||||||
|
version.
|
||||||
|
|
||||||
|
To update the development version, run `abra upgrade --dev`.
|
||||||
|
|
||||||
|
## Hack
|
||||||
|
|
||||||
|
It's written in Bash version 4 or greater!
|
||||||
|
|
||||||
|
Install it via `curl https://install.abra.autonomic.zone | bash -s -- --dev`, then you can hack on the source in `~/.abra/src`.
|
||||||
|
|
||||||
|
The command-line interface is generated via [docopt](http://docopt.org/). If you add arguments then you need to run `make docopt` ro regenerate the parser.
|
||||||
|
|
||||||
|
Please remember to update the [CHANGELOG](./CHANGELOG.md) when you make a change.
|
||||||
|
|
||||||
|
To deploy a new version of the installer scripts:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
make release-installer
|
||||||
|
```
|
||||||
|
100
app-catalogue.sh
Executable file
100
app-catalogue.sh
Executable file
@ -0,0 +1,100 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Usage: ./app-catalogue.sh
|
||||||
|
#
|
||||||
|
# Gather metadata from Co-op Cloud apps in $ABRA_DIR/apps (default
|
||||||
|
# ~/.abra/apps), and format it as a Markdown table for this page:
|
||||||
|
# https://docs.cloud.autonomic.zone/apps/
|
||||||
|
|
||||||
|
stack_dir="${ABRA_DIR:-$HOME/.abra}/apps/"
|
||||||
|
|
||||||
|
cd "$stack_dir"
|
||||||
|
|
||||||
|
# load all README files into ENV_FILES array
|
||||||
|
mapfile -t readmes < <(find -L . -name "README.md")
|
||||||
|
# FIXME 3wc: requires bash 4, use for loop instead
|
||||||
|
|
||||||
|
base_url="https://git.autonomic.zone/coop-cloud"
|
||||||
|
|
||||||
|
cat_apps=()
|
||||||
|
cat_development=()
|
||||||
|
cat_utilities=()
|
||||||
|
cat_graveyard=()
|
||||||
|
|
||||||
|
get_var() {
|
||||||
|
echo "$1" | grep "$2" | sed 's/^[^:]*: //'
|
||||||
|
}
|
||||||
|
|
||||||
|
# shellcheck disable=SC2120
|
||||||
|
trim() {
|
||||||
|
# accept input as argument or from STDIN, see here:
|
||||||
|
# https://zwbetz.com/passing-input-to-a-bash-function-via-arguments-or-stdin/
|
||||||
|
# shellcheck disable=SC2155
|
||||||
|
local input="$([[ -p /dev/stdin ]] && cat - || echo "$@")"
|
||||||
|
[[ -z "$input" ]] && return 1
|
||||||
|
echo "$input" | tr -d ' '
|
||||||
|
}
|
||||||
|
|
||||||
|
# shellcheck disable=SC2120
|
||||||
|
prettify() {
|
||||||
|
# as above
|
||||||
|
# shellcheck disable=SC2155
|
||||||
|
local input="$([[ -p /dev/stdin ]] && cat - || echo "$@")"
|
||||||
|
[[ -z "$input" ]] && return 1
|
||||||
|
|
||||||
|
echo "$input" | sed -e 's/Yes/✅/' -e 's/No/❌/' -e 's/N\/A/⛔/'
|
||||||
|
}
|
||||||
|
|
||||||
|
for readme in "${readmes[@]}"; do
|
||||||
|
type="$(basename "${readme%README.md}")"
|
||||||
|
if [ "$type" = "example" ]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
title="$(grep '^# ' "$type/README.md" | sed 's/^# //' )"
|
||||||
|
# find section between 'metadata' and 'endmetadata' comments
|
||||||
|
metadata="$(awk '/-- metadata --/,/-- endmetadata --/' "$type/README.md")"
|
||||||
|
status="$(get_var "$metadata" "Status")"
|
||||||
|
category="$(get_var "$metadata" "Category" | cut -d',' -f2 | trim)"
|
||||||
|
|
||||||
|
if [ -z "$category" ]; then
|
||||||
|
echo "ERROR: missing category for $type"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
image="$(get_var "$metadata" "Image" | cut -d',' -f2 | trim)"
|
||||||
|
healthcheck="$(get_var "$metadata" "Healthcheck" | prettify)"
|
||||||
|
backups="$(get_var "$metadata" "Backups" | prettify)"
|
||||||
|
email="$(get_var "$metadata" "Email" | prettify)"
|
||||||
|
tests="$(get_var "$metadata" "Tests" | prettify)"
|
||||||
|
sso="$(get_var "$metadata" "SSO" | prettify)"
|
||||||
|
|
||||||
|
row="| [$title]($base_url/$type) | $status | $image | $healthcheck | $backups | $email | $tests | $sso |"
|
||||||
|
|
||||||
|
category_lower="$(echo "$category" | tr '[:upper:]' '[:lower:]')"
|
||||||
|
eval "cat_$category_lower+=( '$row' )"
|
||||||
|
done
|
||||||
|
|
||||||
|
headers="
|
||||||
|
| **Name** | **Status** | **Image** | **Healtcheck** | **Backups** | **Email** | **CI** | **Single-Sign-On** |
|
||||||
|
| --- | --- | --- | --- | --- | --- | --- | --- |"
|
||||||
|
|
||||||
|
echo "## Applications"
|
||||||
|
echo "$headers"
|
||||||
|
printf '%s\n' "${cat_apps[@]}" | sort
|
||||||
|
|
||||||
|
echo
|
||||||
|
|
||||||
|
echo "## Developer tools"
|
||||||
|
echo "$headers"
|
||||||
|
printf '%s\n' "${cat_development[@]}" | sort
|
||||||
|
|
||||||
|
echo
|
||||||
|
|
||||||
|
echo "## Utilities"
|
||||||
|
echo "$headers"
|
||||||
|
printf '%s\n' "${cat_utilities[@]}" | sort
|
||||||
|
|
||||||
|
echo
|
||||||
|
|
||||||
|
echo "## Graveyard"
|
||||||
|
echo "$headers"
|
||||||
|
printf '%s\n' "${cat_graveyard[@]}" | sort
|
42
app-version.sh
Executable file
42
app-version.sh
Executable file
@ -0,0 +1,42 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Usage: ./app-version.sh <image> <service>
|
||||||
|
# Example: ./app-version.sh drone/drone:1.10.1 app
|
||||||
|
#
|
||||||
|
# Accepts a full format hub.docker.com image tag which it pulls locally and
|
||||||
|
# generates output which can be used to put in the abra.sh for app packaging.
|
||||||
|
# Requires the yq program https://mikefarah.gitbook.io/yq/
|
||||||
|
|
||||||
|
error() {
|
||||||
|
echo "$(tput setaf 1)ERROR: $*$(tput sgr0)"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
IMAGE="$1"
|
||||||
|
SERVICE="$2"
|
||||||
|
|
||||||
|
if ! docker pull -q "$IMAGE" > /dev/null 2>&1; then
|
||||||
|
error "Failed to download image, is the tag correct?"
|
||||||
|
fi
|
||||||
|
|
||||||
|
version=$(echo "$IMAGE" | cut -d ':' -f2)
|
||||||
|
digest=$(docker image inspect -f "{{.Id}}" "$IMAGE" | cut -d ':' -f2- | cut -c 1-8)
|
||||||
|
|
||||||
|
echo "--- Add the following to your abra.sh ---"
|
||||||
|
echo "export ABRA_TYPE_${SERVICE^^}_VERSION=${version}"
|
||||||
|
echo "export ABRA_TYPE_${SERVICE^^}_DIGEST=${digest}"
|
||||||
|
|
||||||
|
version_lookup="ABRA_TYPE_${SERVICE^^}_VERSION"
|
||||||
|
digest_lookup="ABRA_TYPE_${SERVICE^^}_DIGEST"
|
||||||
|
|
||||||
|
label='- "coop-cloud.${STACK_NAME}.'
|
||||||
|
label+="${SERVICE}"
|
||||||
|
label+='.version=${'
|
||||||
|
label+="${version_lookup}"
|
||||||
|
label+='}-${'
|
||||||
|
label+="${digest_lookup}"
|
||||||
|
label+='}"'
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "--- And don't forget to label the actual service in the compose file ---"
|
||||||
|
echo "$label"
|
@ -26,10 +26,8 @@ services:
|
|||||||
|
|
||||||
configs:
|
configs:
|
||||||
abra_installer:
|
abra_installer:
|
||||||
name: abra_installer_v1
|
|
||||||
file: installer
|
file: installer
|
||||||
abra_conf:
|
abra_conf:
|
||||||
name: abra_conf_v1
|
|
||||||
file: nginx.conf
|
file: nginx.conf
|
||||||
|
|
||||||
networks:
|
networks:
|
||||||
|
@ -1,18 +1,34 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
ABRA_VERSION="0.5.0"
|
ABRA_VERSION="0.6.0"
|
||||||
ABRA_SRC="https://git.autonomic.zone/coop-cloud/abra/raw/tag/$ABRA_VERSION/abra"
|
GIT_URL="https://git.autonomic.zone/coop-cloud/abra"
|
||||||
|
ABRA_SRC="$GIT_URL/raw/tag/$ABRA_VERSION/abra"
|
||||||
|
|
||||||
function install_abra {
|
function install_abra_release {
|
||||||
mkdir -p "$HOME/.local/bin"
|
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"
|
chmod +x "$HOME/.local/bin/abra"
|
||||||
echo "abra installed to $HOME/.local/bin/abra"
|
echo "abra installed to $HOME/.local/bin/abra"
|
||||||
}
|
}
|
||||||
|
|
||||||
function run_installation {
|
function install_abra_dev {
|
||||||
install_abra
|
mkdir -p "$HOME/.abra/"
|
||||||
|
if [[ ! -d "$HOME/.abra/src" ]]; then
|
||||||
|
git clone "$GIT_URL" "$HOME/.abra/src"
|
||||||
|
fi
|
||||||
|
( cd "$HOME/.abra/src" && git pull origin main && cd -)
|
||||||
|
mkdir -p "$HOME/.local/bin"
|
||||||
|
ln -sf "$HOME/.abra/src/abra" "$HOME/.local/bin/abra"
|
||||||
|
echo "abra installed to $HOME/.local/bin/abra (development bleeding edge)"
|
||||||
}
|
}
|
||||||
|
|
||||||
run_installation
|
function run_installation {
|
||||||
|
if [ "$1" = "--dev" ]; then
|
||||||
|
install_abra_dev
|
||||||
|
else
|
||||||
|
install_abra_release
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
run_installation "$@"
|
||||||
exit 0
|
exit 0
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.PHONY: test shellcheck docopt kcov codecov
|
.PHONY: test shellcheck docopt kcov codecov release-installer
|
||||||
|
|
||||||
test:
|
test:
|
||||||
@sudo DOCKER_CONTEXT=default docker run \
|
@sudo DOCKER_CONTEXT=default docker run \
|
||||||
@ -43,3 +43,8 @@ codecov: SHELL:=/bin/bash
|
|||||||
codecov:
|
codecov:
|
||||||
@bash <(curl -s https://codecov.io/bash) \
|
@bash <(curl -s https://codecov.io/bash) \
|
||||||
-s coverage -t $$(pass show hosts/swarm.autonomic.zone/drone/codecov/token)
|
-s coverage -t $$(pass show hosts/swarm.autonomic.zone/drone/codecov/token)
|
||||||
|
|
||||||
|
release-installer:
|
||||||
|
@docker stack rm abra-installer-script && \
|
||||||
|
cd installer && \
|
||||||
|
docker stack deploy -c compose.yml abra-installer-script
|
Reference in New Issue
Block a user