48 lines
1.7 KiB
YAML
48 lines
1.7 KiB
YAML
# manual rollback
|
|
on:
|
|
workflow_dispatch:
|
|
inputs:
|
|
steps:
|
|
description: "How many releases to roll back (1 = previous)"
|
|
default: "1"
|
|
|
|
jobs:
|
|
rollback:
|
|
runs-on: [ mainhost ]
|
|
env:
|
|
SSH_HOST: ${{ secrets.SSH_HOST }}
|
|
SSH_USER: ${{ secrets.SSH_USER }}
|
|
SSH_KEY_PATH: /home/gitea-runner/.ssh/id_ed25519
|
|
SSH_OPTS: >-
|
|
-F /dev/null -o IdentitiesOnly=yes -o IdentityAgent=none
|
|
-o PreferredAuthentications=publickey -o PubkeyAuthentication=yes
|
|
-o PasswordAuthentication=no -o NumberOfPasswordPrompts=0 -o BatchMode=yes
|
|
-o ServerAliveInterval=15 -o ServerAliveCountMax=3 -o ConnectTimeout=20
|
|
-o StrictHostKeyChecking=no
|
|
APP_ROOT: /var/www/stellaamor
|
|
SERVICE_RELOAD: "systemctl reload apache2 || true"
|
|
|
|
steps:
|
|
- name: Roll back symlink to an older release
|
|
run: |
|
|
set -euo pipefail
|
|
APP="${{ env.APP_ROOT }}"
|
|
RELEASES="${APP}/releases"
|
|
CUR="${APP}/current"
|
|
N="${{ github.event.inputs.steps || '1' }}"
|
|
|
|
# pick target release (1=previous)
|
|
TARGET="$(ls -1tr "${RELEASES}" | tail -n +"$((N+1))" | tail -n 1)"
|
|
if [ -z "${TARGET}" ]; then
|
|
echo "No release found to roll back to."; exit 1
|
|
fi
|
|
echo "Rolling back to: ${TARGET}"
|
|
|
|
ssh $SSH_OPTS -i "$SSH_KEY_PATH" ${SSH_USER}@${SSH_HOST} "
|
|
set -euo pipefail
|
|
APP='${APP}'; RELEASES='${RELEASES}'; CUR='${CUR}'; TARGET='${TARGET}';
|
|
[ -d \"\${RELEASES}/\${TARGET}\" ] || { echo 'Target release missing'; exit 1; }
|
|
ln -sfn \"\${RELEASES}/\${TARGET}\" \"\${CUR}\"
|
|
${SERVICE_RELOAD} >/dev/null 2>&1 || true
|
|
"
|