The Co-op Cloud command-line utility belt 🎩🐇 https://coopcloud.tech
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
cellarspoon 0e688f1407
refactor!: migrate to urfave/cli v1
7 hours ago
.gitea docs: add template 4 months ago
cli refactor!: migrate to urfave/cli v1 7 hours ago
cmd/abra docs: capitalistion, style 3 weeks ago
pkg refactor!: migrate to urfave/cli v1 7 hours ago
scripts chore: publish 0.4.0-alpha-rc5 10 hours ago
tests fix: read correct app file name for secret generation 23 hours ago
.drone.yml fix: use more descriptive name for token [ci skip] 4 months ago
.e2e.env.sample test: more example env vars 2 weeks ago
.envrc.sample dosc: add gitea token [ci skip] 4 months ago
.gitignore test: start on integration script 2 weeks ago
.goreleaser.yml chore: avoid reverts in the change logi [ci skip] 3 months ago
Makefile refactor: more shuffling test infra around [ci skip] 2 weeks ago
README.md fix: read password length from env files 23 hours ago
go.mod refactor!: migrate to urfave/cli v1 7 hours ago
go.sum refactor!: migrate to urfave/cli v1 7 hours ago
renovate.json chore(deps): add renovate.json 2 months ago

README.md

abra

https://coopcloud.tech

Build Status Go Report Card

The Co-op Cloud utility belt 🎩🐇

abra is a command-line tool for managing your own Co-op Cloud. It can provision new servers, create apps, deploy them, run backup and restore operations and a whole lot of other things. Please see docs.coopcloud.tech for more extensive documentation.

Quick install

curl https://install.abra.autonomic.zone | bash

Or using the latest release candidate (extra experimental!):

curl https://install.abra.autonomic.zone | bash -s -- --rc

Source for this script is in scripts/installer/installer.

Hacking

Getting started

Install direnv, run cp .envrc.sample .envrc, then run direnv allow in this directory. This will set coopcloud repos as private due to this bug.. Or you can run go env -w GOPRIVATE=coopcloud.tech but I'm not sure how persistent this is.

Install Go >= 1.16 and then:

  • make build to build
  • ./abra to run commands
  • make test will run tests
  • make install will install it to $GOPATH/bin
  • go get <package> and go mod tidy to add a new dependency

Our Drone CI configuration runs a number of sanity on each pushed commit. See the Makefile for more handy targets.

Please use the conventional commit format for your commits so we can automate our change log.

Versioning

We use goreleaser to help us automate releases. We use semver for versioning all releases of the tool. While we are still in the public alpha release phase, we will maintain a 0.y.z-alpha format. Change logs are generated from our commit logs. We are still working this out and aim to refine our release praxis as we go.

For developers, while using this -alpha format, the y part is the "major" version part. So, if you make breaking changes, you increment that and not the x part. So, if you're on 0.1.0-alpha, then you'd go to 0.1.1-alpha for a backwards compatible change and 0.2.0-alpha for a backwards incompatible change.

Making a new release

  • Change ABRA_VERSION to match the new tag in scripts (use semver)
  • Commit that change (e.g. git commit -m 'chore: publish next tag x.y.z-alpha')
  • Make a new tag (e.g. git tag -a x.y.z-alpha)
  • Push the new tag (e.g. git push && git push --tags)
  • Wait until the build finishes on build.coopcloud.tech
  • Deploy the new installer script (e.g. cd ./scripts/installer && make)
  • Check the release worked, (e.g. abra upgrade; abra -v)

Fork maintenance

godotenv

We maintain a fork of godotenv for two features:

  1. multi-line env var support
  2. inline comment parsing

You can upgrade the version here by running go get github.com/Autonomic-Cooperative/godotenv@<commit> where <commit> is the latest commit you want to pin to. At time of writing, go get github.com/Autonomic-Cooperative/godotenv@b031ea1211e7fd297af4c7747ffb562ebe00cd33 is the command you want to run to maintain the above functionality.

docker/client

A number of modules in pkg/upstream are copy/pasta'd from the upstream docker/docker/client. We had to do this because upstream are not exposing their API as public.