Refactor Docker setup and update contact link support 项目瘦身 删除没有在使用的模板… #73
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |