54 lines
1.6 KiB
YAML
54 lines
1.6 KiB
YAML
name: Deploy to CloudPanel
|
|
|
|
on:
|
|
push:
|
|
branches: [ "main" ]
|
|
release:
|
|
types: [published]
|
|
|
|
jobs:
|
|
deploy:
|
|
name: Rsync via SSH
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 1
|
|
|
|
- name: Setup SSH key
|
|
uses: webfactory/ssh-agent@v0.9.0
|
|
with:
|
|
ssh-private-key: ${{ secrets.SSH_KEY }}
|
|
|
|
- name: Add known_hosts (GitHub runner -> Server)
|
|
run: |
|
|
mkdir -p ~/.ssh
|
|
ssh-keyscan -p "${{ secrets.SSH_PORT }}" "${{ secrets.SSH_HOST }}" >> ~/.ssh/known_hosts
|
|
|
|
- name: Ensure target path exists
|
|
run: |
|
|
ssh -p "${{ secrets.SSH_PORT }}" "${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}" \
|
|
"mkdir -p '${{ secrets.DEPLOY_PATH }}'"
|
|
|
|
- name: Rsync files
|
|
env:
|
|
SRC: ${{ secrets.SOURCE_PATH }}
|
|
DEST: ${{ secrets.DEPLOY_PATH }}
|
|
HOST: ${{ secrets.SSH_HOST }}
|
|
USER: ${{ secrets.SSH_USER }}
|
|
PORT: ${{ secrets.SSH_PORT }}
|
|
EXCLUDES: ${{ secrets.RSYNC_EXCLUDES }}
|
|
run: |
|
|
IFS=',' read -ra EX <<< "$EXCLUDES"
|
|
EXCLUDE_ARGS=""
|
|
for e in "${EX[@]}"; do
|
|
[ -n "$e" ] && EXCLUDE_ARGS="$EXCLUDE_ARGS --exclude=$e"
|
|
done
|
|
rsync -az --delete $EXCLUDE_ARGS -e "ssh -p $PORT" "$SRC/" "$USER@$HOST:$DEST/"
|
|
|
|
- name: Post-deploy touch (optional caching bust)
|
|
run: |
|
|
ssh -p "${{ secrets.SSH_PORT }}" "${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}" \
|
|
"test -d '${{ secrets.DEPLOY_PATH }}' && touch '${{ secrets.DEPLOY_PATH }}/.deployed_$(date +%s)' || true"
|