mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-04-30 20:40:09 +00:00
Add asset availability check before updating demo server. The workflow now waits up to 5 minutes for checksums.txt and the linux-amd64 tarball to be available before attempting the update. This prevents the install script from failing when the release is published before all assets finish uploading. Resolves demo server downtime during releases.
92 lines
3.5 KiB
YAML
92 lines
3.5 KiB
YAML
name: Update Demo Server
|
|
|
|
on:
|
|
release:
|
|
types: [published]
|
|
|
|
jobs:
|
|
update-demo:
|
|
# Only run for stable releases (not pre-releases)
|
|
if: github.event.release.prerelease == false
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- name: Check release type
|
|
run: |
|
|
echo "Release: ${{ github.event.release.tag_name }}"
|
|
echo "Prerelease: ${{ github.event.release.prerelease }}"
|
|
echo "Updating demo server to latest stable release..."
|
|
|
|
- name: Wait for release assets
|
|
run: |
|
|
TAG="${{ github.event.release.tag_name }}"
|
|
echo "Waiting for release assets to be available..."
|
|
|
|
MAX_ATTEMPTS=30
|
|
ATTEMPT=0
|
|
|
|
while [ $ATTEMPT -lt $MAX_ATTEMPTS ]; do
|
|
echo "Checking for assets (attempt $((ATTEMPT + 1))/$MAX_ATTEMPTS)..."
|
|
|
|
# Check if checksums.txt and linux-amd64 tarball exist
|
|
CHECKSUMS_STATUS=$(curl -s -o /dev/null -w "%{http_code}" \
|
|
"https://github.com/rcourtman/Pulse/releases/download/${TAG}/checksums.txt")
|
|
TARBALL_STATUS=$(curl -s -o /dev/null -w "%{http_code}" \
|
|
"https://github.com/rcourtman/Pulse/releases/download/${TAG}/pulse-${TAG}-linux-amd64.tar.gz")
|
|
|
|
echo "checksums.txt: $CHECKSUMS_STATUS, tarball: $TARBALL_STATUS"
|
|
|
|
if [ "$CHECKSUMS_STATUS" = "200" ] && [ "$TARBALL_STATUS" = "200" ]; then
|
|
echo "✅ Release assets are available!"
|
|
exit 0
|
|
fi
|
|
|
|
ATTEMPT=$((ATTEMPT + 1))
|
|
if [ $ATTEMPT -lt $MAX_ATTEMPTS ]; then
|
|
echo "Assets not ready yet, waiting 10 seconds..."
|
|
sleep 10
|
|
fi
|
|
done
|
|
|
|
echo "❌ Timeout waiting for release assets"
|
|
exit 1
|
|
|
|
- name: Setup SSH
|
|
run: |
|
|
mkdir -p ~/.ssh
|
|
echo "${{ secrets.DEMO_SERVER_SSH_KEY }}" > ~/.ssh/id_ed25519
|
|
chmod 600 ~/.ssh/id_ed25519
|
|
ssh-keyscan -H ${{ secrets.DEMO_SERVER_HOST }} >> ~/.ssh/known_hosts
|
|
|
|
- name: Update demo server
|
|
run: |
|
|
ssh -i ~/.ssh/id_ed25519 ${{ secrets.DEMO_SERVER_USER }}@${{ secrets.DEMO_SERVER_HOST }} \
|
|
'curl -fsSL https://raw.githubusercontent.com/rcourtman/Pulse/main/install.sh | sudo bash'
|
|
|
|
- name: Verify update
|
|
run: |
|
|
# Wait a moment for service to restart
|
|
sleep 5
|
|
|
|
# Check version endpoint
|
|
VERSION=$(ssh -i ~/.ssh/id_ed25519 ${{ secrets.DEMO_SERVER_USER }}@${{ secrets.DEMO_SERVER_HOST }} \
|
|
"curl -s http://localhost:7655/api/version | jq -r .version")
|
|
|
|
echo "Demo server is now running version: $VERSION"
|
|
|
|
# Verify mock mode is active by authenticating and checking node count
|
|
NODES=$(ssh -i ~/.ssh/id_ed25519 ${{ secrets.DEMO_SERVER_USER }}@${{ secrets.DEMO_SERVER_HOST }} \
|
|
'curl -s -c /tmp/demo-cookies.txt http://localhost:7655/api/login -X POST -H "Content-Type: application/json" -d "{\"username\":\"demo\",\"password\":\"demo\"}" > /dev/null && curl -s -b /tmp/demo-cookies.txt http://localhost:7655/api/state | jq -r ".nodes | length" && rm -f /tmp/demo-cookies.txt')
|
|
|
|
echo "Mock nodes detected: $NODES"
|
|
|
|
if [ "$NODES" -ge 1 ]; then
|
|
echo "✅ Demo server successfully updated and verified!"
|
|
else
|
|
echo "⚠️ Demo server updated but mock mode may not be active"
|
|
exit 1
|
|
fi
|
|
|
|
- name: Cleanup SSH key
|
|
if: always()
|
|
run: rm -f ~/.ssh/id_ed25519
|