optimize resource usage by reducing parallelism in builds to avoid overloading runners. applies to all gpu flavours (ampere, ada, blackwell).
230 lines
7.6 KiB
YAML
230 lines
7.6 KiB
YAML
name: build-prerelease
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
inputs:
|
|
commit:
|
|
description: "mistral.rs upstream commit SHA"
|
|
required: true
|
|
type: string
|
|
version:
|
|
description: "Version from upstream Cargo.toml (e.g. 0.8.1)"
|
|
required: true
|
|
type: string
|
|
date:
|
|
description: "Commit date as YYYYMMDD"
|
|
required: true
|
|
type: string
|
|
short_sha:
|
|
description: "Short commit SHA (7 chars)"
|
|
required: true
|
|
type: string
|
|
|
|
concurrency:
|
|
group: prerelease-build
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
build:
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- name: ampere
|
|
fedora_version: "43"
|
|
runner: cuda-13.0
|
|
cuda_home: /usr/local/cuda-13.0
|
|
cargo_features: "cuda cudnn flash-attn nccl"
|
|
compute_caps: "86"
|
|
build_jobs: 4
|
|
nvcc_threads: 2
|
|
- name: ada
|
|
fedora_version: "43"
|
|
runner: cuda-13.0
|
|
cuda_home: /usr/local/cuda-13.0
|
|
cargo_features: "cuda cudnn flash-attn nccl"
|
|
compute_caps: "89"
|
|
build_jobs: 4
|
|
nvcc_threads: 2
|
|
- name: blackwell
|
|
fedora_version: "43"
|
|
runner: cuda-13.0
|
|
cuda_home: /usr/local/cuda-13.0
|
|
cargo_features: "cuda cudnn flash-attn nccl"
|
|
compute_caps: "120"
|
|
build_jobs: 4
|
|
nvcc_threads: 2
|
|
runs-on: ${{ matrix.runner }}
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Install/update Rust toolchain
|
|
run: |
|
|
if command -v rustup &> /dev/null; then
|
|
rustup update stable
|
|
else
|
|
curl --proto '=https' --tlsv1.2 --silent --show-error --fail https://sh.rustup.rs | sh -s -- -y
|
|
fi
|
|
echo "${HOME}/.cargo/bin" >> "$GITHUB_PATH"
|
|
|
|
- name: Clone mistral.rs at commit
|
|
run: |
|
|
git clone https://github.com/EricLBuehler/mistral.rs.git src/
|
|
cd src
|
|
git checkout "${{ inputs.commit }}"
|
|
|
|
- name: Build mistralrs
|
|
run: |
|
|
export PATH="${{ matrix.cuda_home }}/bin:${PATH}"
|
|
export LD_LIBRARY_PATH="${{ matrix.cuda_home }}/targets/x86_64-linux/lib:${{ matrix.cuda_home }}/lib64:${LD_LIBRARY_PATH:-}"
|
|
export LIBRARY_PATH="${{ matrix.cuda_home }}/targets/x86_64-linux/lib:${{ matrix.cuda_home }}/lib64:${LIBRARY_PATH:-}"
|
|
cd src
|
|
cargo build --release --features "${{ matrix.cargo_features }}"
|
|
env:
|
|
CUDA_COMPUTE_CAP: ${{ matrix.compute_caps }}
|
|
CARGO_BUILD_JOBS: ${{ matrix.build_jobs }}
|
|
NVCC_THREADS: ${{ matrix.nvcc_threads }}
|
|
|
|
- name: Collect artifacts
|
|
run: |
|
|
mkdir --parents artifacts
|
|
cp src/target/release/mistralrs "artifacts/mistralrs-${{ matrix.name }}"
|
|
echo "built: $(artifacts/mistralrs-${{ matrix.name }} --version 2>&1 | head -1)"
|
|
|
|
- name: Upload binary artifact
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: mistralrs-${{ matrix.name }}-fc${{ matrix.fedora_version }}
|
|
path: artifacts/mistralrs-${{ matrix.name }}
|
|
retention-days: 1
|
|
|
|
package:
|
|
needs: build
|
|
runs-on: rpm
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- name: ampere
|
|
fedora_version: "43"
|
|
- name: ada
|
|
fedora_version: "43"
|
|
- name: blackwell
|
|
fedora_version: "43"
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Download binary
|
|
uses: actions/download-artifact@v3
|
|
with:
|
|
name: mistralrs-${{ matrix.name }}-fc${{ matrix.fedora_version }}
|
|
path: artifacts/
|
|
|
|
- name: Build RPM
|
|
run: |
|
|
rm -f ~/.rpmmacros
|
|
rpmdev-setuptree
|
|
cp artifacts/mistralrs-${{ matrix.name }} ~/rpmbuild/SOURCES/
|
|
cp rpm/systemd/mistralrs@.service ~/rpmbuild/SOURCES/
|
|
cp rpm/systemd/mistralrs@.conf.example ~/rpmbuild/SOURCES/
|
|
rpmbuild -bb rpm/mistralrs.spec \
|
|
--define "mistralrs_version ${{ inputs.version }}" \
|
|
--define "mistralrs_flavour ${{ matrix.name }}" \
|
|
--define "mistralrs_prerelease 0.1.${{ inputs.date }}git${{ inputs.short_sha }}" \
|
|
--undefine dist \
|
|
--define "dist .fc${{ matrix.fedora_version }}"
|
|
|
|
- name: Upload RPM
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: rpm-${{ matrix.name }}-fc${{ matrix.fedora_version }}
|
|
path: ~/rpmbuild/RPMS/x86_64/*.rpm
|
|
retention-days: 7
|
|
|
|
publish:
|
|
needs: package
|
|
runs-on: rpm
|
|
concurrency:
|
|
group: rpm-publish
|
|
cancel-in-progress: false
|
|
env:
|
|
RPM_REPO_HOST: oolon.kosherinata.internal
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- fedora_version: "43"
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Download RPMs for fc${{ matrix.fedora_version }}
|
|
uses: actions/download-artifact@v3
|
|
with:
|
|
path: rpms/
|
|
pattern: rpm-*-fc${{ matrix.fedora_version }}
|
|
|
|
- name: Flatten RPM artifacts
|
|
run: |
|
|
find rpms/ -name '*.rpm' -exec mv --target-directory=rpms/ {} +
|
|
find rpms/ -mindepth 1 -type d -empty -delete
|
|
|
|
- name: Check for sequoia-sq
|
|
run: |
|
|
if ! command -v sq &> /dev/null; then
|
|
echo "ERROR: sequoia-sq is not installed. Install with: sudo dnf install sequoia-sq"
|
|
exit 1
|
|
fi
|
|
|
|
- name: Import signing key
|
|
run: |
|
|
echo "${{ secrets.RPM_SIGNING_KEY }}" | gpg --batch --import
|
|
fpr=$(gpg --batch --with-colons --list-keys "${{ secrets.RPM_SIGNING_KEY_ID }}" | awk -F: '/^fpr:/ { print $10; exit }')
|
|
echo "${fpr}:6:" | gpg --batch --import-ownertrust
|
|
sed "s/@GPG_NAME@/${{ secrets.RPM_SIGNING_KEY_ID }}/" rpm/rpmmacros > ~/.rpmmacros
|
|
|
|
- name: Sign RPMs
|
|
run: |
|
|
for rpm in rpms/*.rpm; do
|
|
echo "signing ${rpm}..."
|
|
rpm --addsign "${rpm}"
|
|
done
|
|
|
|
- name: Set up SSH
|
|
run: |
|
|
install --directory --mode 700 ~/.ssh
|
|
echo "${RSYNC_SSH_KEY}" | install --mode 600 /dev/stdin ~/.ssh/id_ed25519
|
|
env:
|
|
RSYNC_SSH_KEY: ${{ secrets.RSYNC_SSH_KEY }}
|
|
|
|
- name: Test SSH connectivity
|
|
run: |
|
|
ssh -o StrictHostKeyChecking=accept-new "gitea_ci@${RPM_REPO_HOST}" exit
|
|
|
|
- name: Ensure unstable repo directory exists
|
|
run: |
|
|
ssh "gitea_ci@${RPM_REPO_HOST}" \
|
|
"mkdir --parents /var/www/rpm/fedora/${{ matrix.fedora_version }}/x86_64/unstable"
|
|
|
|
- name: Sync RPMs to unstable repo
|
|
run: |
|
|
rsync \
|
|
--archive \
|
|
--verbose \
|
|
--chmod D755,F644 \
|
|
rpms/*.rpm \
|
|
"gitea_ci@${RPM_REPO_HOST}:/var/www/rpm/fedora/${{ matrix.fedora_version }}/x86_64/unstable/"
|
|
|
|
- name: Update unstable repo metadata
|
|
run: |
|
|
ssh "gitea_ci@${RPM_REPO_HOST}" \
|
|
"cd /var/www/rpm/fedora/${{ matrix.fedora_version }}/x86_64/unstable && createrepo_c --update ."
|
|
|
|
- name: Generate packages.json for unstable
|
|
run: |
|
|
scp script/generate-packages-json.py "gitea_ci@${RPM_REPO_HOST}:/tmp/"
|
|
ssh "gitea_ci@${RPM_REPO_HOST}" \
|
|
"python3 /tmp/generate-packages-json.py \
|
|
--repodata-dir /var/www/rpm/fedora/${{ matrix.fedora_version }}/x86_64/unstable/repodata \
|
|
--output /var/www/rpm/fedora/${{ matrix.fedora_version }}/x86_64/unstable/packages.json \
|
|
--base-url https://rpm.lair.cafe/fedora/${{ matrix.fedora_version }}/x86_64/unstable"
|