Fix Linux CPU sidecar bundling CUDA, add cleanup workflow
Linux CPU sidecar: PyPI's default torch on Linux includes CUDA (~800MB). UV_NO_SOURCES only bypasses our custom CUDA index but still gets CUDA-enabled torch from PyPI. Now explicitly installs CPU-only torch from pytorch.org/whl/cpu after sync. Same fix applied to Windows. New cleanup-releases.yml workflow (manual trigger): - Configurable: keep N app releases, keep N sidecar releases - Dry run mode (default) shows what would be deleted without deleting - Protects v1.4.0 (last pre-Tauri release) - Shows release sizes in MB Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -41,10 +41,11 @@ jobs:
|
|||||||
sudo apt-get install -y portaudio19-dev
|
sudo apt-get install -y portaudio19-dev
|
||||||
|
|
||||||
- name: Build sidecar (CPU)
|
- name: Build sidecar (CPU)
|
||||||
env:
|
|
||||||
UV_NO_SOURCES: "1"
|
|
||||||
run: |
|
run: |
|
||||||
uv sync
|
uv sync --no-sources
|
||||||
|
# PyPI's default torch on Linux includes CUDA (~800MB).
|
||||||
|
# Replace with CPU-only torch from the dedicated index.
|
||||||
|
uv pip install torch torchaudio --index-url https://download.pytorch.org/whl/cpu --force-reinstall
|
||||||
.venv/bin/pyinstaller local-transcription-headless.spec
|
.venv/bin/pyinstaller local-transcription-headless.spec
|
||||||
|
|
||||||
- name: Package sidecar (CPU)
|
- name: Package sidecar (CPU)
|
||||||
|
|||||||
@@ -56,10 +56,11 @@ jobs:
|
|||||||
|
|
||||||
- name: Build sidecar (CPU)
|
- name: Build sidecar (CPU)
|
||||||
shell: powershell
|
shell: powershell
|
||||||
env:
|
|
||||||
UV_NO_SOURCES: "1"
|
|
||||||
run: |
|
run: |
|
||||||
|
$env:UV_NO_SOURCES = "1"
|
||||||
uv sync
|
uv sync
|
||||||
|
# PyPI's default torch includes CUDA. Replace with CPU-only.
|
||||||
|
uv pip install torch torchaudio --index-url https://download.pytorch.org/whl/cpu --force-reinstall
|
||||||
.venv\Scripts\pyinstaller.exe local-transcription-headless.spec
|
.venv\Scripts\pyinstaller.exe local-transcription-headless.spec
|
||||||
|
|
||||||
- name: Package sidecar (CPU)
|
- name: Package sidecar (CPU)
|
||||||
|
|||||||
102
.gitea/workflows/cleanup-releases.yml
Normal file
102
.gitea/workflows/cleanup-releases.yml
Normal file
@@ -0,0 +1,102 @@
|
|||||||
|
name: Cleanup Old Releases
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
keep_app_releases:
|
||||||
|
description: 'Number of app releases to keep'
|
||||||
|
required: false
|
||||||
|
default: '3'
|
||||||
|
keep_sidecar_releases:
|
||||||
|
description: 'Number of sidecar releases to keep'
|
||||||
|
required: false
|
||||||
|
default: '2'
|
||||||
|
dry_run:
|
||||||
|
description: 'Dry run (show what would be deleted without deleting)'
|
||||||
|
required: false
|
||||||
|
default: 'true'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
cleanup:
|
||||||
|
name: Cleanup Old Releases
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Cleanup releases
|
||||||
|
env:
|
||||||
|
BUILD_TOKEN: ${{ secrets.BUILD_TOKEN }}
|
||||||
|
run: |
|
||||||
|
REPO_API="${GITHUB_SERVER_URL}/api/v1/repos/${GITHUB_REPOSITORY}"
|
||||||
|
KEEP_APP="${{ inputs.keep_app_releases }}"
|
||||||
|
KEEP_SIDECAR="${{ inputs.keep_sidecar_releases }}"
|
||||||
|
DRY_RUN="${{ inputs.dry_run }}"
|
||||||
|
|
||||||
|
echo "=== Cleanup Configuration ==="
|
||||||
|
echo "Keep app releases: ${KEEP_APP}"
|
||||||
|
echo "Keep sidecar releases: ${KEEP_SIDECAR}"
|
||||||
|
echo "Dry run: ${DRY_RUN}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Fetch all releases
|
||||||
|
ALL_RELEASES=$(curl -s -H "Authorization: token ${BUILD_TOKEN}" \
|
||||||
|
"${REPO_API}/releases?limit=50")
|
||||||
|
|
||||||
|
# ── App releases (v* tags, not sidecar-v*) ──
|
||||||
|
echo "=== App Releases ==="
|
||||||
|
APP_RELEASES=$(echo "$ALL_RELEASES" | jq -c '[.[] | select(.tag_name | startswith("v")) | select(.tag_name | startswith("sidecar") | not)]')
|
||||||
|
APP_TOTAL=$(echo "$APP_RELEASES" | jq 'length')
|
||||||
|
echo "Found ${APP_TOTAL} app releases, keeping ${KEEP_APP}"
|
||||||
|
|
||||||
|
if [ "$APP_TOTAL" -gt "$KEEP_APP" ]; then
|
||||||
|
echo "$APP_RELEASES" | jq -c ".[$KEEP_APP:][]" | while read -r release; do
|
||||||
|
ID=$(echo "$release" | jq -r '.id')
|
||||||
|
TAG=$(echo "$release" | jq -r '.tag_name')
|
||||||
|
SIZE=$(echo "$release" | jq '[.assets[]?.size // 0] | add // 0')
|
||||||
|
SIZE_MB=$(echo "scale=1; $SIZE / 1048576" | bc 2>/dev/null || echo "?")
|
||||||
|
|
||||||
|
# Protect v1.4.0 (last pre-Tauri release)
|
||||||
|
if [ "$TAG" = "v1.4.0" ]; then
|
||||||
|
echo " PROTECT ${TAG} (${SIZE_MB} MB)"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$DRY_RUN" = "true" ]; then
|
||||||
|
echo " WOULD DELETE ${TAG} (ID: ${ID}, ${SIZE_MB} MB)"
|
||||||
|
else
|
||||||
|
echo " DELETING ${TAG} (ID: ${ID}, ${SIZE_MB} MB)..."
|
||||||
|
curl -s -X DELETE -H "Authorization: token ${BUILD_TOKEN}" \
|
||||||
|
"${REPO_API}/releases/${ID}"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
else
|
||||||
|
echo " Nothing to clean up"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# ── Sidecar releases (sidecar-v* tags) ──
|
||||||
|
echo "=== Sidecar Releases ==="
|
||||||
|
SIDECAR_RELEASES=$(echo "$ALL_RELEASES" | jq -c '[.[] | select(.tag_name | startswith("sidecar-v"))]')
|
||||||
|
SIDECAR_TOTAL=$(echo "$SIDECAR_RELEASES" | jq 'length')
|
||||||
|
echo "Found ${SIDECAR_TOTAL} sidecar releases, keeping ${KEEP_SIDECAR}"
|
||||||
|
|
||||||
|
if [ "$SIDECAR_TOTAL" -gt "$KEEP_SIDECAR" ]; then
|
||||||
|
echo "$SIDECAR_RELEASES" | jq -c ".[$KEEP_SIDECAR:][]" | while read -r release; do
|
||||||
|
ID=$(echo "$release" | jq -r '.id')
|
||||||
|
TAG=$(echo "$release" | jq -r '.tag_name')
|
||||||
|
SIZE=$(echo "$release" | jq '[.assets[]?.size // 0] | add // 0')
|
||||||
|
SIZE_MB=$(echo "scale=1; $SIZE / 1048576" | bc 2>/dev/null || echo "?")
|
||||||
|
|
||||||
|
if [ "$DRY_RUN" = "true" ]; then
|
||||||
|
echo " WOULD DELETE ${TAG} (ID: ${ID}, ${SIZE_MB} MB)"
|
||||||
|
else
|
||||||
|
echo " DELETING ${TAG} (ID: ${ID}, ${SIZE_MB} MB)..."
|
||||||
|
curl -s -X DELETE -H "Authorization: token ${BUILD_TOKEN}" \
|
||||||
|
"${REPO_API}/releases/${ID}"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
else
|
||||||
|
echo " Nothing to clean up"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "=== Done ==="
|
||||||
Reference in New Issue
Block a user