name: build-release on: workflow_dispatch: inputs: tag: description: "mistral.rs upstream tag" required: true type: string jobs: plan: runs-on: fedora outputs: flavours: ${{ steps.plan.outputs.flavours }} version: ${{ steps.plan.outputs.version }} steps: - uses: actions/checkout@v4 - id: plan run: | version="${TAG#v}" echo "version=${version}" >> "$GITHUB_OUTPUT" # Emit flavours as a JSON array for matrix consumption flavours=$(yq -o=json -I=0 '.flavours' flavours.yml) echo "flavours=${flavours}" >> "$GITHUB_OUTPUT" env: TAG: ${{ inputs.tag }} build: needs: plan runs-on: cuda-13.0 strategy: fail-fast: false matrix: flavour: ${{ fromJSON(needs.plan.outputs.flavours) }} steps: - uses: actions/checkout@v4 - name: Clone mistral.rs at tag run: | git clone --depth 1 --branch "${{ inputs.tag }}" \ https://github.com/EricLBuehler/mistral.rs.git src/ - name: Build run: ./script/build-binary.sh env: FLAVOUR_NAME: ${{ matrix.flavour.name }} CUDA_HOME: ${{ matrix.flavour.cuda_home }} CARGO_FEATURES: ${{ matrix.flavour.cargo_features }} CUDA_COMPUTE_CAP: ${{ matrix.flavour.compute_caps }} SRC_DIR: src - name: Upload binary artifact uses: actions/upload-artifact@v3 with: name: mistralrs-server-${{ matrix.flavour.name }} path: artifacts/mistralrs-server-${{ matrix.flavour.name }} retention-days: 1 package: needs: [plan, build] runs-on: fedora strategy: fail-fast: false matrix: flavour: ${{ fromJSON(needs.plan.outputs.flavours) }} steps: - uses: actions/checkout@v4 #- name: Install build tools # run: sudo dnf install -y rpm-build rpmdevtools systemd-rpm-macros - name: Download binary uses: actions/download-artifact@v3 with: name: mistralrs-server-${{ matrix.flavour.name }} path: artifacts/ - name: Build RPM run: | rpmdev-setuptree cp artifacts/mistralrs-server-${{ matrix.flavour.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 ${{ needs.plan.outputs.version }}" \ --define "mistralrs_flavour ${{ matrix.flavour.name }}" - name: Upload RPM uses: actions/upload-artifact@v3 with: name: rpm-${{ matrix.flavour.name }} path: ~/rpmbuild/RPMS/x86_64/*.rpm retention-days: 7 publish: needs: [plan, package] runs-on: fedora # concurrency ensures only one publish runs at a time — repo metadata # corruption is a nightmare if two createrepo_c processes race. concurrency: group: rpm-publish cancel-in-progress: false steps: - uses: actions/checkout@v4 #- name: Install tools # run: sudo dnf install -y createrepo_c rpm-sign rsync - name: Download all RPMs uses: actions/download-artifact@v3 with: path: rpms/ pattern: rpm-* merge-multiple: true - name: Import signing key run: | echo "${{ secrets.RPM_SIGNING_KEY }}" | gpg --batch --import echo "%_gpg_name ${{ secrets.RPM_SIGNING_KEY_ID }}" > ~/.rpmmacros - name: Sign and publish run: ./script/publish-repo.sh rpms/ env: RSYNC_TARGET: ${{ secrets.RSYNC_TARGET }} RSYNC_SSH_KEY: ${{ secrets.RSYNC_SSH_KEY }}