Open-LLM / .github /workflows /create_release.yml
Nope137
Describe your changes here
c0937c0
name: Create Release Packages
# Only manual trigger
on:
workflow_dispatch:
inputs:
version_override:
description: "Override version number in pyproject.toml (leave empty to use file version)"
required: false
upload_to_r2:
description: "Upload to Cloudflare R2"
type: boolean
default: true
create_github_release:
description: "Create GitHub Release"
type: boolean
default: true
target_branch:
description: "Branch to build (default is v1-release)"
required: false
default: "v1-release"
jobs:
build-release-packages:
runs-on: ubuntu-latest
steps:
- name: Clone repository
uses: actions/checkout@v3
with:
repository: Open-LLM-VTuber/Open-LLM-VTuber
ref: ${{ github.event.inputs.target_branch }}
submodules: true
fetch-depth: 1
fetch-tags: true
continue-on-error: true
id: checkout
- name: Try with default branch
if: steps.checkout.outcome == 'failure'
uses: actions/checkout@v3
with:
repository: Open-LLM-VTuber/Open-LLM-VTuber
ref: v1-release
submodules: true
fetch-depth: 1
# Add debug step to check file structure
- name: Debug - Check repository structure
run: |
echo "Current working directory: $(pwd)"
echo "List root directory contents:"
ls -la
echo "Check if config_templates directory exists:"
ls -la | grep config_templates || echo "config_templates directory does not exist"
echo "List config_templates directory contents:"
ls -la config_templates/
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: "3.10"
- name: Extract version from pyproject.toml
id: get_version
run: |
VERSION=$(grep -m 1 'version' pyproject.toml | sed 's/[^"]*"\([^"]*\).*/\1/')
if [ "${{ github.event.inputs.version_override }}" != "" ]; then
VERSION="${{ github.event.inputs.version_override }}"
fi
echo "VERSION=$VERSION" >> $GITHUB_ENV
echo "Found version: $VERSION"
# Download and prepare ASR model
- name: Download and prepare ASR model
run: |
mkdir -p models
cd models
echo "Downloading ASR model..."
wget https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/sherpa-onnx-sense-voice-zh-en-ja-ko-yue-2024-07-17.tar.bz2
echo "Extracting model..."
tar -xjf sherpa-onnx-sense-voice-zh-en-ja-ko-yue-2024-07-17.tar.bz2
rm sherpa-onnx-sense-voice-zh-en-ja-ko-yue-2024-07-17.tar.bz2
echo "Removing model.onnx file to reduce size..."
rm -f sherpa-onnx-sense-voice-zh-en-ja-ko-yue-2024-07-17/model.onnx
# Clean unnecessary files
- name: Clean project
run: |
echo "Cleaning __pycache__ and .venv folders..."
find . -type d -name "__pycache__" -exec rm -rf {} + 2>/dev/null || true
find . -type d -name ".venv" -exec rm -rf {} + 2>/dev/null || true
# Create Chinese version
- name: Create Chinese version
run: |
echo "Creating Chinese version..."
cp config_templates/conf.ZH.default.yaml conf.yaml
zip -r Open-LLM-VTuber-v${{ env.VERSION }}-zh.zip . -x "*.zip"
rm conf.yaml
# Create English version
- name: Create English version
run: |
echo "Creating English version..."
cp config_templates/conf.default.yaml conf.yaml
zip -r Open-LLM-VTuber-v${{ env.VERSION }}-en.zip . -x "*.zip"
rm conf.yaml
# Get latest Electron app
- name: Get latest Electron app
id: download_electron
run: |
set -e
# Fetch the latest release JSON from the GitHub API
RELEASE_JSON=$(curl --silent "https://api.github.com/repos/Open-LLM-VTuber/Open-LLM-VTuber-Web/releases/latest")
# Use jq to extract browser_download_url for assets ending with .exe or .dmg
ASSET_URLS=$(echo "$RELEASE_JSON" | jq -r '.assets[] | select(.name | endswith(".exe") or endswith(".dmg")) | .browser_download_url')
# Download each asset into the current directory
for url in $ASSET_URLS; do
echo "Downloading $(basename "$url")..."
curl -L -O "$url"
ls -la
done
# If chosen, upload to GitHub Actions artifacts
- name: Upload Chinese version to GitHub Actions artifacts
if: ${{ github.event.inputs.create_github_release == 'true' }}
uses: actions/upload-artifact@v4
with:
name: Open-LLM-VTuber-v${{ env.VERSION }}-zh
path: Open-LLM-VTuber-v${{ env.VERSION }}-zh.zip
retention-days: 30
- name: Upload English version to GitHub Actions artifacts
if: ${{ github.event.inputs.create_github_release == 'true' }}
uses: actions/upload-artifact@v4
with:
name: Open-LLM-VTuber-v${{ env.VERSION }}-en
path: Open-LLM-VTuber-v${{ env.VERSION }}-en.zip
retention-days: 30
- name: Upload Windows installer to GitHub Actions artifacts
if: ${{ github.event.inputs.create_github_release == 'true' }}
uses: actions/upload-artifact@v4
with:
name: Open-LLM-VTuber-v${{ env.VERSION }}-windows
path: open-llm-vtuber-electron-*-setup.exe
retention-days: 30
- name: Upload macOS installer to GitHub Actions artifacts
if: ${{ github.event.inputs.create_github_release == 'true' }}
uses: actions/upload-artifact@v4
with:
name: Open-LLM-VTuber-v${{ env.VERSION }}-macos
path: open-llm-vtuber-electron-*.dmg
retention-days: 30
- name: Debug input parameters
run: |
echo "upload_to_r2 value: '${{ github.event.inputs.upload_to_r2 }}'"
echo "type: $(typeof ${{ github.event.inputs.upload_to_r2 }})"
# If chosen, upload to Cloudflare R2
- name: Upload to Cloudflare R2
if: ${{ github.event.inputs.upload_to_r2 == 'true' }}
env:
AWS_ACCESS_KEY_ID: ${{ secrets.R2_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }}
R2_ENDPOINT: ${{ secrets.R2_ENDPOINT }}
R2_PUBLIC_URL: ${{ secrets.R2_PUBLIC_URL }}
run: |
# Install AWS CLI
pip install awscli
echo "AWS CLI installation complete"
# Configure AWS CLI for Cloudflare R2
aws configure set aws_access_key_id "$AWS_ACCESS_KEY_ID"
aws configure set aws_secret_access_key "$AWS_SECRET_ACCESS_KEY"
# Confirm AWS CLI configuration
echo "AWS CLI configured, preparing to upload files..."
# Create version directory in bucket
aws s3 --endpoint-url=$R2_ENDPOINT cp --recursive --acl public-read . s3://open-llm-vtuber-release/v${{ env.VERSION }}/ --exclude "*" --include "Open-LLM-VTuber-v${{ env.VERSION }}-*.zip" --include "open-llm-vtuber-electron-*.dmg" --include "open-llm-vtuber-electron-*-setup.exe"
# Output public URLs
echo "Files uploaded to R2. Public URLs:"
for file in Open-LLM-VTuber-v${{ env.VERSION }}-zh.zip Open-LLM-VTuber-v${{ env.VERSION }}-en.zip open-llm-vtuber-electron-*.dmg open-llm-vtuber-electron-*-setup.exe; do
echo "$R2_PUBLIC_URL/v${{ env.VERSION }}/$file"
done
echo "R2 upload process completed"
# Generate download links markdown
- name: Generate R2 download links markdown
if: ${{ github.event.inputs.upload_to_r2 == 'true' }}
env:
R2_PUBLIC_URL: ${{ secrets.R2_PUBLIC_URL }}
run: |
# Get electron app version from filenames
EXE_VERSION=$(ls open-llm-vtuber-electron-*-setup.exe | sed -E 's/open-llm-vtuber-electron-(.*)-setup.exe/\1/')
DMG_VERSION=$(ls open-llm-vtuber-electron-*.dmg | sed -E 's/open-llm-vtuber-electron-(.*).dmg/\1/')
# Create markdown text with download links and save to file
cat > download-links.md << EOF
## Faster download links for Chinese users 给内地用户准备的(相对)快速的下载链接
Open-LLM-VTuber-v${{ env.VERSION }}-zh.zip (包含 sherpa onnx asr sense-voice 模型,就不用再从github上拉取了)
- [Open-LLM-VTuber-v${{ env.VERSION }}-en.zip]($R2_PUBLIC_URL/v${{ env.VERSION }}/Open-LLM-VTuber-v${{ env.VERSION }}-en.zip)
- [Open-LLM-VTuber-v${{ env.VERSION }}-zh.zip]($R2_PUBLIC_URL/v${{ env.VERSION }}/Open-LLM-VTuber-v${{ env.VERSION }}-zh.zip)
open-llm-vtuber-electron-$EXE_VERSION-frontend.exe (桌面版前端,Windows)
- [open-llm-vtuber-electron-$EXE_VERSION-setup.exe]($R2_PUBLIC_URL/v${{ env.VERSION }}/open-llm-vtuber-electron-$EXE_VERSION-setup.exe)
open-llm-vtuber-electron-$DMG_VERSION-frontend.dmg (桌面版前端,macOS)
- [open-llm-vtuber-electron-$DMG_VERSION.dmg]($R2_PUBLIC_URL/v${{ env.VERSION }}/open-llm-vtuber-electron-$DMG_VERSION.dmg)
EOF
echo "Download links markdown file created"
# Upload download links as an artifact
- name: Upload download links markdown
if: ${{ github.event.inputs.upload_to_r2 == 'true' }}
uses: actions/upload-artifact@v4
with:
name: download-links
path: download-links.md
retention-days: 30
# Add the download links to GitHub release if creating one
- name: Add download links to release description
if: ${{ github.event.inputs.upload_to_r2 == 'true' && github.event.inputs.create_github_release == 'true' }}
run: |
echo "::set-output name=download_links::$(cat download-links.md)"
id: download_links