Skip to content

Fix fleet handling and connect activity graphs (#362) #57

Fix fleet handling and connect activity graphs (#362)

Fix fleet handling and connect activity graphs (#362) #57

name: Git over CDN SSH
on:
workflow_dispatch:
inputs:
history:
description: "How many old commits to build packs for"
required: false
default: "15"
push:
branches:
- master
jobs:
build-and-upload:
runs-on: ubuntu-latest
permissions:
contents: read
env:
SSH_HOST: ${{ secrets.ALAS_UPD_SSH_HOST }}
SSH_PORT: ${{ secrets.ALAS_UPD_SSH_PORT }}
SSH_USER: ${{ secrets.ALAS_UPD_SSH_USER }}
SSH_PRIVATE_KEY: ${{ secrets.ALAS_UPD_SSH_PRIVATE_KEY }}
SSH_KNOWN_HOSTS: ${{ secrets.ALAS_UPD_SSH_KNOWN_HOSTS }}
REMOTE_PATH: ${{ secrets.ALAS_UPD_REMOTE_PATH }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
ref: master
- name: Install uv
uses: astral-sh/setup-uv@v5
- name: Build git-over-cdn packs
run: |
uv run python .github/scripts/build_git_over_cdn.py \
--branch master \
--history "${{ github.event.inputs.history || '15' }}" \
--output dist/git-over-cdn
- name: Configure SSH
run: |
set -euo pipefail
: "${SSH_HOST:?Set ALAS_UPD_SSH_HOST secret}"
: "${SSH_PORT:?Set ALAS_UPD_SSH_PORT secret}"
: "${SSH_USER:?Set ALAS_UPD_SSH_USER secret}"
: "${SSH_PRIVATE_KEY:?Set ALAS_UPD_SSH_PRIVATE_KEY secret}"
: "${REMOTE_PATH:?Set ALAS_UPD_REMOTE_PATH secret}"
echo "::add-mask::$SSH_HOST"
echo "::add-mask::$SSH_PORT"
echo "::add-mask::$SSH_USER"
echo "::add-mask::$SSH_USER@$SSH_HOST"
echo "::add-mask::$REMOTE_PATH"
install -m 700 -d ~/.ssh
printf '%s\n' "$SSH_PRIVATE_KEY" > ~/.ssh/id_ed25519
chmod 600 ~/.ssh/id_ed25519
if [ -n "$SSH_KNOWN_HOSTS" ]; then
printf '%s\n' "$SSH_KNOWN_HOSTS" > ~/.ssh/known_hosts
else
ssh-keyscan -p "$SSH_PORT" -H "$SSH_HOST" >> ~/.ssh/known_hosts
fi
- name: Package files
run: |
set -euo pipefail
tar -C dist/git-over-cdn -czf dist/git-over-cdn.tar.gz .
test -f dist/git-over-cdn/latest.json
- name: Prepare remote staging
env:
RELEASE_ID: ${{ github.sha }}
run: |
set -euo pipefail
ssh -i ~/.ssh/id_ed25519 -p "$SSH_PORT" -o StrictHostKeyChecking=yes "$SSH_USER@$SSH_HOST" \
'bash -s' -- "$REMOTE_PATH" "$RELEASE_ID" <<'REMOTE'
set -euo pipefail
REMOTE_PATH="$1"
RELEASE_ID="$2"
REMOTE_PATH="$(readlink -m "$REMOTE_PATH")"
if [ "$REMOTE_PATH" = "/" ] || [ "$(basename "$REMOTE_PATH")" != "upd" ]; then
echo "Unsafe REMOTE_PATH"
exit 1
fi
STAGING="${REMOTE_PATH}.upload-${RELEASE_ID}"
rm -rf "$STAGING"
mkdir -p "$STAGING"
REMOTE
- name: Upload package
env:
RELEASE_ID: ${{ github.sha }}
run: |
set -euo pipefail
STAGING="${REMOTE_PATH}.upload-${RELEASE_ID}"
scp -i ~/.ssh/id_ed25519 -P "$SSH_PORT" -o StrictHostKeyChecking=yes \
dist/git-over-cdn.tar.gz "$SSH_USER@$SSH_HOST:$STAGING/git-over-cdn.tar.gz"
- name: Publish and cleanup old versions
env:
RELEASE_ID: ${{ github.sha }}
run: |
set -euo pipefail
ssh -i ~/.ssh/id_ed25519 -p "$SSH_PORT" -o StrictHostKeyChecking=yes "$SSH_USER@$SSH_HOST" \
'bash -s' -- "$REMOTE_PATH" "$RELEASE_ID" <<'REMOTE'
set -euo pipefail
REMOTE_PATH="$1"
RELEASE_ID="$2"
REMOTE_PATH="$(readlink -m "$REMOTE_PATH")"
if [ "$REMOTE_PATH" = "/" ] || [ "$(basename "$REMOTE_PATH")" != "upd" ]; then
echo "Unsafe REMOTE_PATH"
exit 1
fi
STAGING="${REMOTE_PATH}.upload-${RELEASE_ID}"
BACKUP="${REMOTE_PATH}.old-${RELEASE_ID}"
PARENT="$(dirname "$REMOTE_PATH")"
tar -xzf "$STAGING/git-over-cdn.tar.gz" -C "$STAGING"
rm -f "$STAGING/git-over-cdn.tar.gz"
test -f "$STAGING/latest.json"
restore_previous() {
if [ ! -d "$REMOTE_PATH" ] && [ -d "$BACKUP" ]; then
mv "$BACKUP" "$REMOTE_PATH"
fi
}
trap restore_previous ERR
rm -rf "$BACKUP"
if [ -d "$REMOTE_PATH" ]; then
mv "$REMOTE_PATH" "$BACKUP"
fi
mv "$STAGING" "$REMOTE_PATH"
trap - ERR
rm -rf "$BACKUP"
find "$PARENT" -maxdepth 1 -type d \( -name 'upd.upload-*' -o -name 'upd.old-*' \) -mtime +1 -exec rm -rf {} +
REMOTE