Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| b800aafe51 | |||
|
884ccd32a7
|
|||
|
aaa42182e3
|
Executable
+51
@@ -0,0 +1,51 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# SPDX-FileCopyrightText: 2026 Kris Lamoureux <kris@lamoureux.io>
|
||||||
|
# SPDX-License-Identifier: 0BSD
|
||||||
|
|
||||||
|
set -o pipefail
|
||||||
|
msg() {
|
||||||
|
printf '[%s]: %s\n' "$1" "$2"
|
||||||
|
}
|
||||||
|
|
||||||
|
for cmd in bw gpg gzip; do
|
||||||
|
if ! command -v "$cmd" >/dev/null; then
|
||||||
|
msg 'ERROR' "'$cmd' not found"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
read -srp "Vault password: " bw_pw
|
||||||
|
echo
|
||||||
|
if ! bw_session="$(printf '%s' "$bw_pw" | bw unlock --raw 2>/dev/null)"; then
|
||||||
|
msg 'ERROR' "Couldn't unlock vault"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
unset bw_pw
|
||||||
|
read -srp "GPG passphrase: " gpg_pw
|
||||||
|
echo
|
||||||
|
read -srp "Confirm GPG passphrase: " gpg_pw2
|
||||||
|
echo
|
||||||
|
if [ "$gpg_pw" != "$gpg_pw2" ]; then
|
||||||
|
msg 'ERROR' "Passphrases don't match"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
unset gpg_pw2
|
||||||
|
|
||||||
|
bw_date="$(TZ='America/New_York' date +%Y%m%dT%H%M)"
|
||||||
|
: "${BW_BACKUP:="./bw-export-$bw_date.json.gz.gpg"}"
|
||||||
|
if [ -e "$BW_BACKUP" ]; then
|
||||||
|
msg 'ERROR' "Existing file at $BW_BACKUP"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if ! bw export --format json --raw --session "$bw_session" | gzip |
|
||||||
|
gpg --symmetric --cipher-algo AES256 --pinentry-mode loopback \
|
||||||
|
--passphrase-fd 3 --batch -q \
|
||||||
|
-o "$BW_BACKUP" 3<<<"$gpg_pw"; then
|
||||||
|
msg 'ERROR' "Export failed"
|
||||||
|
unset gpg_pw
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
unset gpg_pw
|
||||||
|
bw lock --session "$bw_session" >/dev/null 2>&1
|
||||||
|
unset bw_session
|
||||||
|
msg 'INFO' "Exported to '$BW_BACKUP'"
|
||||||
Executable
+55
@@ -0,0 +1,55 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# SPDX-FileCopyrightText: 2026 Kris Lamoureux <kris@lamoureux.io>
|
||||||
|
# SPDX-License-Identifier: 0BSD
|
||||||
|
|
||||||
|
prog=${0##*/}
|
||||||
|
|
||||||
|
err() {
|
||||||
|
printf '%s: %s\n' "$prog" "$1" >&2
|
||||||
|
logger -t "$prog" -p user.err "$1"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
printf 'usage: %s <zensical-semver> <repo-dir> [selinux-context]\n' "$prog" >&2
|
||||||
|
}
|
||||||
|
|
||||||
|
if (($# != 2 && $# != 3)); then
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
tag=$1
|
||||||
|
dir=$2
|
||||||
|
label=$3
|
||||||
|
|
||||||
|
if [[ ! $tag =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
||||||
|
err "tag must be a version like 1.2.3 (got: $tag)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
[[ ! -d $dir ]] && err "not a directory: $dir"
|
||||||
|
cd "$dir" || err "failed to enter directory: $dir"
|
||||||
|
git rev-parse --is-inside-work-tree &>/dev/null ||
|
||||||
|
err "not a git repository: $(pwd)"
|
||||||
|
|
||||||
|
branch=$(git branch --show-current) || err "failed to get current branch"
|
||||||
|
[[ -n $branch ]] || err "not on a branch"
|
||||||
|
[[ $branch == main ]] || err "not on main branch: $branch"
|
||||||
|
|
||||||
|
status=$(git status --porcelain) || err "git status failed at: $(pwd)"
|
||||||
|
[[ -n $status ]] && err "working tree is dirty"
|
||||||
|
|
||||||
|
old=$(git rev-parse HEAD) || err "git rev-parse failed at: $(pwd)"
|
||||||
|
git pull -q --ff-only || err "failed to update repo"
|
||||||
|
new=$(git rev-parse HEAD) || err "git rev-parse failed after pull at: $(pwd)"
|
||||||
|
|
||||||
|
if [[ $old != "$new" || ! -d site ]]; then
|
||||||
|
if ! docker run --rm -v "$PWD:/docs" "zensical/zensical:$tag" build; then
|
||||||
|
err "build failed"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
[[ -d site ]] || err "build did not produce site directory"
|
||||||
|
if [[ -n $label ]]; then
|
||||||
|
chcon -R -- "$label" site || err "failed to change SELinux context: $label"
|
||||||
|
fi
|
||||||
@@ -1,3 +1,6 @@
|
|||||||
|
# SPDX-FileCopyrightText: 2026 Kris Lamoureux <kris@lamoureux.io>
|
||||||
|
# SPDX-License-Identifier: 0BSD
|
||||||
|
|
||||||
# prefix+r to reload
|
# prefix+r to reload
|
||||||
bind r source-file ~/.tmux.conf \; display "Config reloaded!"
|
bind r source-file ~/.tmux.conf \; display "Config reloaded!"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user