initial commit: add deploy script
This commit is contained in:
commit
cf49d82520
1 changed files with 54 additions and 0 deletions
54
deploy.sh
Executable file
54
deploy.sh
Executable file
|
@ -0,0 +1,54 @@
|
||||||
|
#! /bin/bash
|
||||||
|
# This script deploys packages built with 'makepkg' to an Arch Linux repository
|
||||||
|
# that lives on a remote host not necessarily running Arch.
|
||||||
|
# It works by syncing the remote database to a local place, editing (adding
|
||||||
|
# packages and signing the database).
|
||||||
|
# It is meant to run on an Arch Linux system, where the necessary tools
|
||||||
|
# (repo-add and some libraries) are present.
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Configurable variables
|
||||||
|
REPO_NAME=abstractnonsense
|
||||||
|
REMOTE_REPO_ROOT=arch.abstractnonsen.se:/var/www/arch.abstractnonsen.se/
|
||||||
|
TMP_REPO_ROOT=~/.cache/${REPO_NAME}
|
||||||
|
|
||||||
|
# Might be modified if you want other rsync options
|
||||||
|
RSYNC_OPTIONS=(--links --safe-links "--info=del,progress2,remove,symsafe")
|
||||||
|
|
||||||
|
# Should not be changed, these files need to be synced in order for repo-add to work properly
|
||||||
|
REPO_FILES=("${REPO_NAME}".db.tar.gz "${REPO_NAME}".db.tar.gz.sig "${REPO_NAME}".files.tar.gz "${REPO_NAME}".files.tar.gz.sig
|
||||||
|
"${REPO_NAME}".db 0 "${REPO_NAME}".db.sig "${REPO_NAME}".files "${REPO_NAME}".files.sig)
|
||||||
|
|
||||||
|
|
||||||
|
# Start script
|
||||||
|
mapfile -t packages < <(ls ./*pkg.tar.zst$)
|
||||||
|
mapfile -t sigs < <(ls ./*pkg.tar.zst.sig$)
|
||||||
|
|
||||||
|
mkdir -p $TMP_REPO_ROOT
|
||||||
|
|
||||||
|
echo "[deploy] Deploying the following $(echo "${packages[@]}" | wc -w) package(s):"
|
||||||
|
echo "${packages[*]}"
|
||||||
|
|
||||||
|
# get old state of repo
|
||||||
|
echo "[deploy] Syncing remote repo to locale cache"
|
||||||
|
|
||||||
|
remote_files=()
|
||||||
|
for f in "${REPO_FILES[@]}"; do
|
||||||
|
remote_files+=("${REMOTE_REPO_ROOT}/$f")
|
||||||
|
done
|
||||||
|
rsync "${RSYNC_OPTIONS[@]}" "${remote_files[@]}" "${TMP_REPO_ROOT}"
|
||||||
|
|
||||||
|
# update repo locally
|
||||||
|
echo "[deploy] Updating repository locally"
|
||||||
|
cp "${packages[@]}" "${TMP_REPO_ROOT}"
|
||||||
|
cp "${sigs[@]}" "${TMP_REPO_ROOT}"
|
||||||
|
repo-add --new --remove --verify --sign ${TMP_REPO_ROOT}/mkessler-arch.db.tar.gz "${packages[*]}"
|
||||||
|
|
||||||
|
# sync repo to remote
|
||||||
|
echo "[deploy] Syncing changes to remote"
|
||||||
|
local_files=()
|
||||||
|
for f in "${REPO_FILES[@]}" "${sigs[@]}" "${packages[@]}"; do
|
||||||
|
local_files+=("$TMP_REPO_ROOT/$f")
|
||||||
|
done
|
||||||
|
|
||||||
|
rsync "${RSYNC_OPTIONS[@]}" "${local_files[@]}" "${REMOTE_REPO_ROOT}"
|
Loading…
Reference in a new issue