Files
vim-ale/scripts/deploy-webicached.sh
AJ ONeal d62cbb1be0 fix(webicached): conf-driven variant exclusion; fix sttr darwin universal
- TagVariants now applies confVariants from releases.conf as case-folded
  substring matches before package-specific logic, removing the need to
  hardcode simple variant names in Go
- gitea: variants = gogit (excludes Windows gogit builds)
- lsd: variants = msvc (moved from Go to conf)
- pwsh: variants = fxdependent fxdependentWinDesktop appimage
- bun: variants = profile (moved from Go to conf)
- sttr: darwin_all tagged as universal2 so arm64 and amd64 Mac users
  are served; pkg.tar.zst excluded (Arch Linux package format)
- add .claude/ to .gitignore
2026-05-18 00:31:41 -06:00

73 lines
2.2 KiB
Bash
Executable File

#!/bin/sh
# shellcheck disable=SC2029,SC2088
set -e
set -u
# Build and deploy webicached to a target host
g_host="${1:-beta.webi.sh}"
g_bin="webicached"
g_out="agents/tmp/${g_bin}"
g_remote_bin="~/bin/${g_bin}"
case "${g_host}" in
beta.webi.sh) g_remote_conf="~/srv/beta.webinstall.dev/installers/" ;;
next.webi.sh) g_remote_conf="~/srv/next.webinstall.dev/installers/" ;;
webi.sh) g_remote_conf="~/srv/webinstall.dev/installers/" ;;
*) g_remote_conf="~/srv/webinstall.dev/installers/" ;;
esac
fn_build() {
b_tag="$(git describe --tags --abbrev=0 --match 'cmd/webicached/*' 2> /dev/null || echo 'cmd/webicached/v0.0.0')"
b_tag_ver="$(printf '%s' "${b_tag}" | sed 's:^cmd/webicached/::')"
b_count="$(git log --oneline "${b_tag}..HEAD" -- cmd/ internal/ 2> /dev/null | wc -l | tr -d ' \t')"
b_commit="$(git rev-parse --short HEAD)"
if test "${b_count}" -gt 0; then
b_version="${b_tag_ver}-${b_count}-g${b_commit}"
else
b_version="${b_tag_ver}"
fi
b_date="$(date -u +%Y-%m-%dT%H:%M:%SZ)"
b_ldflags="-X main.version=${b_version} -X main.commit=${b_commit} -X main.date=${b_date}"
printf 'Building %s %s %s (%s)...\n' "${g_bin}" "${b_version}" "${b_commit}" "${b_date}"
GOOS=linux GOARCH=amd64 GOAMD64=v2 go build -ldflags "${b_ldflags}" -o "${g_out}" ./cmd/webicached
printf 'Built: %s\n' "${g_out}"
}
fn_deploy() {
printf 'Stopping %s on %s...\n' "${g_bin}" "${g_host}"
ssh "${g_host}" "~/.local/bin/serviceman stop ${g_bin}" 2> /dev/null || true
printf 'Uploading binary...\n'
scp "${g_out}" "${g_host}:${g_remote_bin}"
printf 'Syncing releases.conf files...\n'
rsync -av \
--exclude='_cache' --exclude='.git' --exclude='agents' \
--exclude='bin' --exclude='cmd' --exclude='internal' \
--exclude='docs' --exclude='scripts' --exclude='node_modules' \
--include='*/' --include='releases.conf' --exclude='*' \
./ "${g_host}:${g_remote_conf}"
printf 'Starting %s...\n' "${g_bin}"
ssh "${g_host}" "~/.local/bin/serviceman start ${g_bin}"
}
fn_verify() {
printf 'Waiting 5s for startup...\n'
sleep 5
printf 'Checking version...\n'
ssh "${g_host}" "${g_remote_bin} -V"
printf 'Checking logs...\n'
ssh "${g_host}" "sudo journalctl -u ${g_bin} --no-pager -n 5"
}
fn_build
fn_deploy
fn_verify
printf '\nDone. %s deployed to %s.\n' "${g_bin}" "${g_host}"