name: Build CPU and macOS on: workflow_dispatch: inputs: version: description: 'Version tag of text-generation-webui to build: v3.0' default: 'v3.0' required: true type: string config: description: 'Override configurations to build: key1:item1-1,item1-2;key2:item2-1,item2-2' default: 'Default' required: false type: string exclude: description: 'Exclude build configurations: key1-1:item1-1,key1-2:item1-2;key2-1:item2-1,key2-2:item2-2' default: 'None' required: false type: string workflow_call: inputs: version: description: 'Version tag of text-generation-webui to build: v3.0' default: 'v3.0' required: true type: string config: description: 'Configurations to build: key1:item1-1,item1-2;key2:item2-1,item2-2' default: 'Default' required: false type: string exclude: description: 'Exclude build configurations: key1-1:item1-1,key1-2:item1-2;key2-1:item2-1,key2-2:item2-2' default: 'None' required: false type: string permissions: contents: write jobs: define_matrix: name: Define Build Matrix runs-on: ubuntu-latest outputs: matrix: ${{ steps.set-matrix.outputs.matrix }} defaults: run: shell: pwsh env: CONFIGIN: ${{ inputs.config }} EXCLUDEIN: ${{ inputs.exclude }} steps: - name: Define Job Output id: set-matrix run: | $matrix = @{ 'os' = @('ubuntu-22.04', 'windows-2019', 'macos-13', 'macos-14') 'pyver' = @("3.11") 'avx' = @("AVX2") } if ($env:CONFIGIN -ne 'Default') {$env:CONFIGIN.split(';').foreach({$matrix[$_.split(':')[0]] = $_.split(':')[1].split(',')})} if ($env:EXCLUDEIN -ne 'None') { $exclusions = @() $exclusions += $env:EXCLUDEIN.split(';').replace(':','=').replace(',',"`n") | ConvertFrom-StringData $matrix['exclude'] = $exclusions } $matrixOut = ConvertTo-Json $matrix -Compress Write-Output ('matrix=' + $matrixOut) >> $env:GITHUB_OUTPUT build_wheels: name: ${{ matrix.os }} ${{ matrix.pyver }} CPU ${{ matrix.avx }} needs: define_matrix runs-on: ${{ matrix.os }} strategy: matrix: ${{ fromJSON(needs.define_matrix.outputs.matrix) }} defaults: run: shell: pwsh env: AVXVER: ${{ matrix.avx }} PCKGVER: ${{ inputs.version }} steps: - uses: actions/checkout@v4 with: repository: 'oobabooga/text-generation-webui' ref: ${{ inputs.version }} submodules: 'recursive' - uses: actions/setup-python@v4 with: python-version: ${{ matrix.pyver }} - name: Build Package shell: bash run: | rm -rf .git cmd* update_wizard* Colab-TextGen-GPU.ipynb docker allowed=("character_bias" "gallery" "openai" "sd_api_pictures") find extensions/ -mindepth 1 -maxdepth 1 -type d | grep -v -E "$(printf '%s|' "${allowed[@]}" | sed 's/|$//')" | xargs rm -rf # Define common variables AVX_SUPPORT="${{ matrix.avx }}" VERSION="${{ inputs.version }}" OS_TYPE="${{ matrix.os }}" # 1. Set platform-specific variables if [[ "$RUNNER_OS" == "Windows" ]]; then PLATFORM="windows-cpu" PYTHON_URL="https://github.com/astral-sh/python-build-standalone/releases/download/20250409/cpython-3.11.12+20250409-x86_64-pc-windows-msvc-install_only.tar.gz" PIP_PATH="portable_env/python.exe -m pip" PACKAGES_PATH="portable_env/Lib/site-packages" rm start_linux.sh start_macos.sh elif [[ "$RUNNER_OS" == "macOS" ]]; then if [[ "$OS_TYPE" == "macos-13" ]]; then PLATFORM="macos-x86_64" PYTHON_URL="https://github.com/astral-sh/python-build-standalone/releases/download/20250409/cpython-3.11.12+20250409-x86_64-apple-darwin-install_only.tar.gz" REQ_TYPE="apple_intel" else PLATFORM="macos-arm64" PYTHON_URL="https://github.com/astral-sh/python-build-standalone/releases/download/20250409/cpython-3.11.12+20250409-aarch64-apple-darwin-install_only.tar.gz" REQ_TYPE="apple_silicon" fi PIP_PATH="portable_env/bin/python -m pip" PACKAGES_PATH="portable_env/lib/python3.11/site-packages" rm start_linux.sh start_windows.bat else # Linux case PLATFORM="linux-cpu" PYTHON_URL="https://github.com/astral-sh/python-build-standalone/releases/download/20250409/cpython-3.11.12+20250409-x86_64-unknown-linux-gnu-install_only.tar.gz" PIP_PATH="portable_env/bin/python -m pip" PACKAGES_PATH="portable_env/lib/python3.11/site-packages" rm start_macos.sh start_windows.bat fi # 2. Download and extract Python echo "Downloading Python for $PLATFORM..." cd .. curl -L -o python-build.tar.gz "$PYTHON_URL" tar -xzf python-build.tar.gz mv python text-generation-webui/portable_env # 3. Prepare requirements file based on platform and AVX cd text-generation-webui # Select requirements file based on platform if [[ "$RUNNER_OS" == "macOS" ]]; then if [[ "$OS_TYPE" == "macos-13" ]]; then REQ_FILE="requirements/portable/requirements_apple_intel.txt" else REQ_FILE="requirements/portable/requirements_apple_silicon.txt" fi else # For Windows and Linux, check AVX support if [[ "$AVX_SUPPORT" == "AVX2" ]]; then REQ_FILE="requirements/portable/requirements_cpu_only.txt" else REQ_FILE="requirements/portable/requirements_cpu_only_noavx2.txt" fi fi echo "Using requirements file: $REQ_FILE" # 4. Install packages echo "Installing Python packages from $REQ_FILE..." $PIP_PATH install --target="./$PACKAGES_PATH" -r "$REQ_FILE" # 5. Create ZIP file cd .. VERSION_CLEAN="${VERSION#v}" ZIP_NAME="textgen-portable-${VERSION_CLEAN}-${PLATFORM}.zip" echo "Creating archive: $ZIP_NAME" if [[ "$RUNNER_OS" == "Windows" ]]; then powershell -Command "Compress-Archive -Path text-generation-webui -DestinationPath $ZIP_NAME" else zip -r "$ZIP_NAME" text-generation-webui fi - name: Upload files to a GitHub release id: upload-release uses: svenstaro/upload-release-action@2.7.0 continue-on-error: true with: repo_token: ${{ secrets.GITHUB_TOKEN }} file: ../textgen-portable-*.zip tag: ${{ inputs.version }} file_glob: true make_latest: false overwrite: true