# ######################################################### # Build wheels with self-hosted runner # ######################################################### name: "[Linux x86_64, self-hosted] Build wheels and upload to GitHub Releases" on: workflow_call: inputs: flash-attn-version: description: "Flash-Attention version" required: true type: string python-version: description: "Python version" required: true type: string torch-version: description: "PyTorch version" required: true type: string cuda-version: description: "CUDA version" required: true type: string runner: description: "Runner type" required: false type: string default: '["self-hosted", "Linux", "x64"]' is-upload: description: "Whether to upload the release asset" required: false type: boolean default: true use-container: description: "Whether to use container" required: false type: boolean default: true container-image: description: "Container image" required: false type: string default: "ubuntu:22.04" jobs: build_wheels_self_hosted: if: ${{ inputs.use-container }} name: Build wheels and Upload (Linux x86_64, self-hosted runner) runs-on: ${{ fromjson(inputs.runner) }} container: image: ${{ inputs.container-image }} defaults: run: shell: bash env: DEBIAN_FRONTEND: noninteractive TERM: xterm-256color timeout-minutes: 2160 steps: - name: Check environment shell: bash run: | cat /etc/os-release || true echo "-----------------------------" cat /etc/lsb-release || true echo "-----------------------------" lscpu || true echo "-----------------------------" df -h || true echo "-----------------------------" free -h || true - name: Install tools shell: bash run: | # Auto-detect package manager and install dependencies if command -v apt-get >/dev/null 2>&1; then apt-get update && apt-get install -y --no-install-recommends \ curl \ ca-certificates \ sudo \ software-properties-common \ wget \ unzip \ zip \ git \ build-essential \ gcc \ g++ \ clang \ ninja-build \ keyboard-configuration \ time \ patchelf elif command -v dnf >/dev/null 2>&1; then dnf install -y \ curl \ ca-certificates \ sudo \ wget \ unzip \ zip \ git \ gcc-toolset-13-gcc \ gcc-toolset-13-gcc-c++ \ clang \ ninja-build \ time \ patchelf # Activate gcc-toolset-13 for CUDA compatibility if [ -f /opt/rh/gcc-toolset-13/enable ]; then # Export PATH and other env vars to GITHUB_ENV for subsequent steps source /opt/rh/gcc-toolset-13/enable echo "PATH=$PATH" >> $GITHUB_ENV echo "LD_LIBRARY_PATH=${LD_LIBRARY_PATH:-}" >> $GITHUB_ENV echo "CC=$(which gcc)" >> $GITHUB_ENV echo "CXX=$(which g++)" >> $GITHUB_ENV echo "GCC version: $(gcc --version | head -1)" fi else echo "Error: No supported package manager found (apt-get or dnf)" exit 1 fi - name: Install gh shell: bash run: | # Auto-detect package manager and install GitHub CLI if command -v apt-get >/dev/null 2>&1; then sudo mkdir -p -m 755 /etc/apt/keyrings out=$(mktemp) wget -nv -O$out https://cli.github.com/packages/githubcli-archive-keyring.gpg cat $out | sudo tee /etc/apt/keyrings/githubcli-archive-keyring.gpg > /dev/null sudo chmod go+r /etc/apt/keyrings/githubcli-archive-keyring.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null sudo apt update sudo apt install gh -y elif command -v dnf >/dev/null 2>&1; then dnf install -y 'dnf-command(config-manager)' dnf config-manager --add-repo https://cli.github.com/packages/rpm/gh-cli.repo dnf -y install gh --repo gh-cli else echo "Error: No supported package manager found (apt-get or dnf)" exit 1 fi - uses: actions/checkout@v4 - name: Configure Git safe directory shell: bash run: | git config --global --add safe.directory $(pwd) - name: Build and upload wheels uses: ./.github/actions/build-and-upload with: flash-attn-version: ${{ inputs.flash-attn-version }} python-version: ${{ inputs.python-version }} torch-version: ${{ inputs.torch-version }} cuda-version: ${{ inputs.cuda-version }} is-upload: ${{ inputs.is-upload }} cleanup: "true" build_wheels_self_hosted_no_container: if: ${{ !inputs.use-container }} name: Build wheels and Upload (Linux x86_64, self-hosted runner) runs-on: ${{ fromjson(inputs.runner) }} defaults: run: shell: bash env: DEBIAN_FRONTEND: noninteractive TERM: xterm-256color timeout-minutes: 2160 steps: - name: Check environment shell: bash run: | cat /etc/os-release || true echo "-----------------------------" cat /etc/lsb-release || true echo "-----------------------------" lscpu || true echo "-----------------------------" df -h || true echo "-----------------------------" free -h || true - name: Install tools shell: bash run: | # Auto-detect package manager and install dependencies if command -v apt-get >/dev/null 2>&1; then apt-get update && apt-get install -y --no-install-recommends \ curl \ ca-certificates \ sudo \ software-properties-common \ wget \ unzip \ zip \ git \ build-essential \ gcc \ g++ \ clang \ ninja-build \ keyboard-configuration \ time \ patchelf elif command -v dnf >/dev/null 2>&1; then dnf install -y \ curl \ ca-certificates \ sudo \ wget \ unzip \ zip \ git \ gcc-toolset-13-gcc \ gcc-toolset-13-gcc-c++ \ clang \ ninja-build \ time \ patchelf # Activate gcc-toolset-13 for CUDA compatibility if [ -f /opt/rh/gcc-toolset-13/enable ]; then # Export PATH and other env vars to GITHUB_ENV for subsequent steps source /opt/rh/gcc-toolset-13/enable echo "PATH=$PATH" >> $GITHUB_ENV echo "LD_LIBRARY_PATH=${LD_LIBRARY_PATH:-}" >> $GITHUB_ENV echo "CC=$(which gcc)" >> $GITHUB_ENV echo "CXX=$(which g++)" >> $GITHUB_ENV echo "GCC version: $(gcc --version | head -1)" fi else echo "Error: No supported package manager found (apt-get or dnf)" exit 1 fi - name: Install gh shell: bash run: | # Auto-detect package manager and install GitHub CLI if command -v apt-get >/dev/null 2>&1; then sudo mkdir -p -m 755 /etc/apt/keyrings out=$(mktemp) wget -nv -O$out https://cli.github.com/packages/githubcli-archive-keyring.gpg cat $out | sudo tee /etc/apt/keyrings/githubcli-archive-keyring.gpg > /dev/null sudo chmod go+r /etc/apt/keyrings/githubcli-archive-keyring.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null sudo apt update sudo apt install gh -y elif command -v dnf >/dev/null 2>&1; then dnf install -y 'dnf-command(config-manager)' dnf config-manager --add-repo https://cli.github.com/packages/rpm/gh-cli.repo dnf -y install gh --repo gh-cli else echo "Error: No supported package manager found (apt-get or dnf)" exit 1 fi - uses: actions/checkout@v4 - name: Configure Git safe directory shell: bash run: | git config --global --add safe.directory $(pwd) - name: Build and upload wheels uses: ./.github/actions/build-and-upload with: flash-attn-version: ${{ inputs.flash-attn-version }} python-version: ${{ inputs.python-version }} torch-version: ${{ inputs.torch-version }} cuda-version: ${{ inputs.cuda-version }} is-upload: ${{ inputs.is-upload }} cleanup: "true"