1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#!/bin/bash
if [ -z "${INFRA_LIB:-}" ]; then
. "$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)/lib/common.sh"
fi
bidder_defaults() {
BIDDER_ACCOUNT="${BIDDER_ACCOUNT:-swc-bidder}"
BIDDER_STATE="${BIDDER_STATE:-/var/lib/socialweb-computer/$BIDDER_ACCOUNT}"
BIDDER_PLATFORM="${BIDDER_PLATFORM:-linux/amd64}"
BIDDER_HANDLE="${BIDDER_HANDLE:-}"
BIDDER_ALLOW_DEV_BINARY="${BIDDER_ALLOW_DEV_BINARY:-}"
BIDDER_STAGE_DIR="${BIDDER_STAGE_DIR:-/var/tmp/swc-release}"
}
bidder_as_account() {
printf 'runuser -u %q -- env XDG_RUNTIME_DIR=/run/user/$(id -u %q) CONFIG_PATH_SOCIALWEB_COMPUTER=%q' \
"$BIDDER_ACCOUNT" "$BIDDER_ACCOUNT" "$BIDDER_STATE/config.json"
}
bidder_status() {
local st
bidder_defaults
st="$(infra_q "$BIDDER_STATE")"
infra_ro_root "rec=/var/lib/socialweb-computer/install-$(infra_q "$BIDDER_ACCOUNT").json
if [ -f \"\$rec\" ]; then echo \"install record: \$rec\"; else echo \"install record: none (not installed)\"; exit 0; fi
echo \"bin/current: \$(readlink $st/bin/current)\"
echo \"bin/previous: \$(readlink $st/bin/previous 2>/dev/null || echo none)\"
$st/bin/current/socialweb-computer version 2>&1 | head -3 | sed 's/^/version: /'
systemctl --user -M $(infra_q "$BIDDER_ACCOUNT")@ list-units --all --no-legend --plain 'socialweb-computer-*' 2>&1 | cut -c1-160"
}
bidder_deploy() {
local staged dev="" install="" sha
bidder_defaults
INFRA_BINARY="${BIDDER_BINARY:-}"
INFRA_SHA256="${BIDDER_SHA256:-}"
infra_release_binary "$BIDDER_PLATFORM"
sha="$INFRA_SHA256"
staged="$BIDDER_STAGE_DIR/socialweb-computer-${sha:0:12}"
case "$sha" in
"<"*) staged="$BIDDER_STAGE_DIR/socialweb-computer-<sha12>" ;;
esac
if [ -n "$BIDDER_ALLOW_DEV_BINARY" ]; then
dev=" --allow-dev-binary"
fi
if [ -n "$BIDDER_HANDLE" ]; then
install="$(infra_q "$staged") install bidder --handle $(infra_q "$BIDDER_HANDLE")$dev"
fi
infra_log "binary $INFRA_BINARY ($sha) -> $(infra_target):$staged"
infra_upload "$INFRA_BINARY" "$staged" 0755 root
infra_rw_root "set -e
rec=/var/lib/socialweb-computer/install-$(infra_q "$BIDDER_ACCOUNT").json
if [ -f \"\$rec\" ]; then
echo \"upgrade $BIDDER_ACCOUNT to $sha\"
$(bidder_as_account) $(infra_q "$BIDDER_STATE/bin/current/socialweb-computer") upgrade --binary $(infra_q "$staged") --sha256 $(infra_q "$sha")$dev
${install:-echo \"no BIDDER_HANDLE: upgrade only, install bidder not run again\"}
else
${install:-echo \"not installed and no BIDDER_HANDLE: set BIDDER_HANDLE for the first install bidder\" >&2; exit 1}
fi"
if [ "$INFRA_APPLY" = 1 ]; then
bidder_status
fi
}
bidder_rollback() {
bidder_defaults
infra_rw_root "$(bidder_as_account) $(infra_q "$BIDDER_STATE/bin/current/socialweb-computer") rollback"
if [ "$INFRA_APPLY" = 1 ]; then
bidder_status
fi
}
if [ "${BASH_SOURCE[0]}" = "$0" ]; then
set -euo pipefail
infra_component_main bidder "" "" "" "sudo -n" "$@"
fi