Compare commits
13 Commits
0.1.0-alph
...
0.1.2-alph
Author | SHA1 | Date | |
---|---|---|---|
719e24eb80 | |||
c441a1ab52 | |||
b0460bd923 | |||
f1659b3bda | |||
eb4a2b3339 | |||
265bfe92fd | |||
1757fabb89
|
|||
abf0ebf41d | |||
45f1692c99 | |||
48bc03db51 | |||
f0e966afc3 | |||
a1d1166308 | |||
1438fdf3c2 |
@ -22,6 +22,7 @@ archives:
|
||||
linux: Linux
|
||||
386: i386
|
||||
amd64: x86_64
|
||||
format: binary
|
||||
checksum:
|
||||
name_template: "checksums.txt"
|
||||
snapshot:
|
||||
|
38
README.md
38
README.md
@ -38,6 +38,27 @@ make install
|
||||
|
||||
The abra binary will be in `$GOPATH/bin`.
|
||||
|
||||
## Autocompletion
|
||||
|
||||
**bash**
|
||||
|
||||
Copy `autocomplete/bash_autocomplete` into `/etc/bash_completion.d/` and rename
|
||||
it to abra.
|
||||
```
|
||||
sudo cp autocomplete/bash_autocomplete /etc/bash_completion.d/abra
|
||||
source /etc/bash_completion.d/abra
|
||||
```
|
||||
|
||||
**(fi)zsh**
|
||||
|
||||
(fi)zsh doesn't have an autocompletion folder by default but you can create one, then copy `zsh_autocomplete` into it and add a couple lines to your `~/.zshrc` or `~/.fizsh/.fizshrc`
|
||||
```
|
||||
sudo mkdir /etc/zsh/completion.d/
|
||||
sudo cp autocomplete/zsh_autocomplete /etc/zsh/completion.d/abra
|
||||
echo "PROG=abra\n_CLI_ZSH_AUTOCOMPLETE_HACK=1\nsource /etc/zsh/completion.d/abra" >> ~/.zshrc
|
||||
```
|
||||
(replace .zshrc with ~/.fizsh/.fizshrc if you use fizsh)
|
||||
|
||||
## Hacking
|
||||
|
||||
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.](https://git.coopcloud.tech/coop-cloud/coopcloud.tech/issues/20#issuecomment-8201). Or you can run `go env -w GOPRIVATE=coopcloud.tech` but I'm not sure how persistent this is.
|
||||
@ -54,11 +75,18 @@ Please use the [conventional commit format](https://www.conventionalcommits.org/
|
||||
|
||||
## Versioning
|
||||
|
||||
We use [goreleaser](https://goreleaser.com) to help us automate releases. We
|
||||
use [semver](https://semver.org) 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.
|
||||
We use [goreleaser](https://goreleaser.com) to help us automate releases. We use [semver](https://semver.org) 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`](./scripts/installer/installer) (use [semver](https://semver.org))
|
||||
- Commit that change (e.g. `git commit -m 'chore: publish next tag 0.3.1-alpha'`)
|
||||
- Make a new tag (e.g. `git tag 0.y.z-alpha`)
|
||||
- Push the new tag (e.g. `git push && git push --tags`)
|
||||
- Wait until the build finishes on [build.coopcloud.tech](https://build.coopcloud.tech/coop-cloud/abra)
|
||||
- Check the release worked, (e.g. `abra upgrade; abra version`)
|
||||
|
||||
## Fork maintenance
|
||||
|
||||
|
2
TODO.md
2
TODO.md
@ -42,7 +42,7 @@
|
||||
- [x] `sync`
|
||||
- [x] `versions`
|
||||
- [x] `lint`
|
||||
- [ ] `upgrade`
|
||||
- [x] `upgrade`
|
||||
- [x] `version`
|
||||
|
||||
## Next phase
|
||||
|
21
autocomplete/bash_autocomplete
Executable file
21
autocomplete/bash_autocomplete
Executable file
@ -0,0 +1,21 @@
|
||||
#! /bin/bash
|
||||
|
||||
: ${PROG:=$(basename ${BASH_SOURCE})}
|
||||
|
||||
_cli_bash_autocomplete() {
|
||||
if [[ "${COMP_WORDS[0]}" != "source" ]]; then
|
||||
local cur opts base
|
||||
COMPREPLY=()
|
||||
cur="${COMP_WORDS[COMP_CWORD]}"
|
||||
if [[ "$cur" == "-"* ]]; then
|
||||
opts=$( ${COMP_WORDS[@]:0:$COMP_CWORD} ${cur} --generate-bash-completion )
|
||||
else
|
||||
opts=$( ${COMP_WORDS[@]:0:$COMP_CWORD} --generate-bash-completion )
|
||||
fi
|
||||
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
|
||||
return 0
|
||||
fi
|
||||
}
|
||||
|
||||
complete -o bashdefault -o default -o nospace -F _cli_bash_autocomplete $PROG
|
||||
unset PROG
|
9
autocomplete/powershell_autocomplete.ps1
Normal file
9
autocomplete/powershell_autocomplete.ps1
Normal file
@ -0,0 +1,9 @@
|
||||
$fn = $($MyInvocation.MyCommand.Name)
|
||||
$name = $fn -replace "(.*)\.ps1$", '$1'
|
||||
Register-ArgumentCompleter -Native -CommandName $name -ScriptBlock {
|
||||
param($commandName, $wordToComplete, $cursorPosition)
|
||||
$other = "$wordToComplete --generate-bash-completion"
|
||||
Invoke-Expression $other | ForEach-Object {
|
||||
[System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_)
|
||||
}
|
||||
}
|
23
autocomplete/zsh_autocomplete
Normal file
23
autocomplete/zsh_autocomplete
Normal file
@ -0,0 +1,23 @@
|
||||
#compdef $PROG
|
||||
|
||||
_cli_zsh_autocomplete() {
|
||||
|
||||
local -a opts
|
||||
local cur
|
||||
cur=${words[-1]}
|
||||
if [[ "$cur" == "-"* ]]; then
|
||||
opts=("${(@f)$(_CLI_ZSH_AUTOCOMPLETE_HACK=1 ${words[@]:0:#words[@]-1} ${cur} --generate-bash-completion)}")
|
||||
else
|
||||
opts=("${(@f)$(_CLI_ZSH_AUTOCOMPLETE_HACK=1 ${words[@]:0:#words[@]-1} --generate-bash-completion)}")
|
||||
fi
|
||||
|
||||
if [[ "${opts[1]}" != "" ]]; then
|
||||
_describe 'values' opts
|
||||
else
|
||||
_files
|
||||
fi
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
compdef _cli_zsh_autocomplete $PROG
|
@ -55,6 +55,7 @@ func RunApp(version, commit string) {
|
||||
server.ServerCommand,
|
||||
recipe.RecipeCommand,
|
||||
VersionCommand,
|
||||
UpgradeCommand,
|
||||
},
|
||||
Flags: []cli.Flag{
|
||||
VerboseFlag,
|
||||
@ -67,6 +68,7 @@ func RunApp(version, commit string) {
|
||||
},
|
||||
},
|
||||
}
|
||||
app.EnableBashCompletion = true
|
||||
|
||||
if err := app.Run(os.Args); err != nil {
|
||||
logrus.Fatal(err)
|
||||
|
38
cli/internal/command.go
Normal file
38
cli/internal/command.go
Normal file
@ -0,0 +1,38 @@
|
||||
package internal
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"os/exec"
|
||||
)
|
||||
|
||||
func RunCmd(cmd *exec.Cmd) error {
|
||||
r, err := cmd.StdoutPipe()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
cmd.Stderr = cmd.Stdout
|
||||
done := make(chan struct{})
|
||||
scanner := bufio.NewScanner(r)
|
||||
|
||||
go func() {
|
||||
for scanner.Scan() {
|
||||
line := scanner.Text()
|
||||
fmt.Println(line)
|
||||
}
|
||||
done <- struct{}{}
|
||||
}()
|
||||
|
||||
if err := cmd.Start(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
<-done
|
||||
|
||||
if err := cmd.Wait(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
22
cli/upgrade.go
Normal file
22
cli/upgrade.go
Normal file
@ -0,0 +1,22 @@
|
||||
package cli
|
||||
|
||||
import (
|
||||
"os/exec"
|
||||
|
||||
"coopcloud.tech/abra/cli/internal"
|
||||
"github.com/sirupsen/logrus"
|
||||
"github.com/urfave/cli/v2"
|
||||
)
|
||||
|
||||
// UpgradeCommand upgrades abra in-place.
|
||||
var UpgradeCommand = &cli.Command{
|
||||
Name: "upgrade",
|
||||
Usage: "Upgrade abra",
|
||||
Action: func(c *cli.Context) error {
|
||||
cmd := exec.Command("bash", "-c", "curl -s https://install.abra.coopcloud.tech | bash")
|
||||
if err := internal.RunCmd(cmd); err != nil {
|
||||
logrus.Fatal(err)
|
||||
}
|
||||
return nil
|
||||
},
|
||||
}
|
5
scripts/installer/README.md
Normal file
5
scripts/installer/README.md
Normal file
@ -0,0 +1,5 @@
|
||||
# install.abra.coopcloud.tech
|
||||
|
||||
To deploy, run `make`.
|
||||
|
||||
You have to be an [Autonomic](https://autonomic.zone) member to do this.
|
38
scripts/installer/compose.yml
Normal file
38
scripts/installer/compose.yml
Normal file
@ -0,0 +1,38 @@
|
||||
---
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
app:
|
||||
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`,`install.abra.coopcloud.tech`)"
|
||||
- "traefik.http.routers.abra-installer.entrypoints=web-secure"
|
||||
- "traefik.http.routers.abra-installer.tls.certresolver=production"
|
||||
|
||||
configs:
|
||||
abra_installer:
|
||||
file: installer
|
||||
abra_conf:
|
||||
file: nginx.conf
|
||||
|
||||
networks:
|
||||
proxy:
|
||||
external: true
|
||||
|
||||
volumes:
|
||||
public:
|
57
scripts/installer/installer
Executable file
57
scripts/installer/installer
Executable file
@ -0,0 +1,57 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
ABRA_VERSION="0.1.2-alpha"
|
||||
ABRA_RELEASE_URL="https://git.coopcloud.tech/api/v1/repos/coop-cloud/abra/releases/tags/$ABRA_VERSION"
|
||||
|
||||
function show_banner {
|
||||
echo ""
|
||||
echo " ____ ____ _ _ "
|
||||
echo " / ___|___ ___ _ __ / ___| | ___ _ _ __| |"
|
||||
echo " | | / _ \ _____ / _ \| '_ \ | | | |/ _ \| | | |/ _' |"
|
||||
echo " | |__| (_) |_____| (_) | |_) | | |___| | (_) | |_| | (_| |"
|
||||
echo " \____\___/ \___/| .__/ \____|_|\___/ \__,_|\__,_|"
|
||||
echo " |_|"
|
||||
echo ""
|
||||
echo ""
|
||||
echo " === Public interest infrastructure === "
|
||||
echo ""
|
||||
echo ""
|
||||
}
|
||||
|
||||
function install_abra_release {
|
||||
mkdir -p "$HOME/.local/bin"
|
||||
|
||||
if ! type "curl" > /dev/null 2>&1; then
|
||||
echo "'curl' is not installed, cannot proceed..."
|
||||
echo "perhaps try installing manually via the releases URL?"
|
||||
echo "https://git.coopcloud.tech/coop-cloud/abra/releases"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! type "curl" > /dev/null 2>&1; then
|
||||
error "'python3' is not installed, cannot proceed..."
|
||||
echo "perhaps try installing manually via the releases URL?"
|
||||
echo "https://git.coopcloud.tech/coop-cloud/abra/releases"
|
||||
fi
|
||||
|
||||
# FIXME: support different architectures
|
||||
release_url=$(curl -s "$ABRA_RELEASE_URL" |
|
||||
python3 -c "import sys, json; \
|
||||
payload = json.load(sys.stdin); \
|
||||
url = [a['browser_download_url'] for a in payload['assets'] if 'x86_64' in a['name']][0]; \
|
||||
print(url)")
|
||||
|
||||
echo "downloading $ABRA_VERSION x86_64 binary release for abra..."
|
||||
curl --progress-bar "$release_url" --output "$HOME/.local/bin/abra"
|
||||
chmod +x "$HOME/.local/bin/abra"
|
||||
|
||||
echo "abra installed to $HOME/.local/bin/abra"
|
||||
}
|
||||
|
||||
function run_installation {
|
||||
show_banner
|
||||
install_abra_release
|
||||
}
|
||||
|
||||
run_installation "$@"
|
||||
exit 0
|
7
scripts/installer/makefile
Normal file
7
scripts/installer/makefile
Normal file
@ -0,0 +1,7 @@
|
||||
STACK := abra_installer_script
|
||||
|
||||
default: deploy
|
||||
|
||||
deploy:
|
||||
@docker stack rm $(STACK) && \
|
||||
docker stack deploy -c compose.yml $(STACK)
|
10
scripts/installer/nginx.conf
Normal file
10
scripts/installer/nginx.conf
Normal file
@ -0,0 +1,10 @@
|
||||
server {
|
||||
listen 80 default_server;
|
||||
server_name install.abra.autonomic.zone install.abra.coopcloud.tech;
|
||||
|
||||
location / {
|
||||
root /var/www/abra-installer;
|
||||
add_header Content-Type text/plain;
|
||||
index installer;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user