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