Commit Graph

58 Commits

Author SHA1 Message Date
34c9cbb89d fix(ci): restore cancel-in-progress on prerelease builds
All checks were successful
poll-upstream / check (push) Successful in 1s
poll-upstream / check-prerelease (push) Successful in 1s
Hourly polling is sufficient to prevent re-dispatch during builds.
Keep cancel-in-progress: true so stalled builds can be cleared.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-11 19:04:45 +03:00
e0cb337538 fix(ci): reduce poll frequency to hourly and stop cancelling prerelease builds
The 15-minute poll interval was re-dispatching builds before they could
finish. The prerelease workflow had cancel-in-progress: true which
cancelled the running build each time. Change poll to hourly and set
cancel-in-progress: false on prerelease builds so they run to completion.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-11 19:03:07 +03:00
3e3090802a fix(ci): separate concurrency groups so polling is not blocked by builds
All checks were successful
poll-upstream / check (push) Successful in 3s
poll-upstream / check-prerelease (push) Successful in 2s
poll-upstream and build-release shared the poll-and-build concurrency
group, which caused cron-triggered poll runs to be queued or dropped
while a build was in progress. Give each workflow its own group and
set cancel-in-progress: true for the poller since stale polls are
redundant.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-11 14:53:36 +03:00
c1ffe7e62e fix(ci): use upstream default branch master for prerelease polling
The mistral.rs repo uses master as its default branch, not main.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-11 14:49:35 +03:00
ace6037a2d feat: replace cuda13 flavour with per-GPU-generation packages
All checks were successful
deploy-ui / build-and-deploy (push) Successful in 44s
Build separate packages for each GPU generation instead of a single
cuda13 package:
- mistralrs-ampere (sm_86, RTX 3060)
- mistralrs-ada (sm_89, RTX 4090)
- mistralrs-blackwell (sm_120, RTX 5090)

All use the same CUDA 13.0 toolkit and features (cuda, cudnn, flash-attn,
nccl), varying only the compute capability target.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-11 14:45:28 +03:00
661cf574f2 fix(ci): remove nvm dependency from deploy-ui workflow
Some checks failed
deploy-ui / build-and-deploy (push) Successful in 1m0s
poll-upstream / check (push) Successful in 1s
poll-upstream / check-prerelease (push) Failing after 1s
The fedora-43 base image now includes nodejs and npm, so the nvm runner
label and Node.js setup step are no longer needed.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-11 14:23:02 +03:00
a79eafd70f feat: add prerelease RPM builds from upstream main branch
Some checks failed
deploy-ui / build-and-deploy (push) Has been cancelled
Poll upstream main branch HEAD alongside release tags. When a new commit
is detected, build and publish prerelease RPMs to a separate unstable
repo at rpm.lair.cafe/fedora/$releasever/$basearch/unstable/.

RPM versioning uses the Fedora snapshot convention (e.g.
0.8.1-0.1.20260511git1a2b3c4.fc43) so stable releases automatically
supersede any installed prerelease.

- RPM spec: conditional Release field via mistralrs_prerelease define
- poll-upstream.yml: new check-prerelease job fetches main HEAD + Cargo.toml version
- build-prerelease.yml: new workflow for commit-based builds without --locked
- UI: fetch both stable/unstable manifests, show channel badges, add
  unstable repo setup instructions to home page

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-11 14:21:28 +03:00
fff56a626c Revert "fix(ci): clone upstream locally instead of using repo-url for changelog"
All checks were successful
poll-upstream / check (push) Successful in 1s
This reverts commit 23283c375f.
2026-04-28 08:18:15 +03:00
23283c375f fix(ci): clone upstream locally instead of using repo-url for changelog
The rpm-changelog action's repo-url input uses mktemp which fails on
runners with restricted /tmp permissions. Clone the upstream repo
directly in the workflow and use source-dir instead.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-28 08:15:57 +03:00
ef7e3a3183 refactor: rename package from mistralrs-server to mistralrs
All checks were successful
deploy-ui / build-and-deploy (push) Successful in 20s
Rename the RPM package from mistralrs-server-<flavour> to
mistralrs-<flavour> and the installed binary from mistralrs-server
to mistralrs, matching the upstream CLI binary name.

Adds Obsoletes/Provides for the old package name so dnf will cleanly
replace it on upgrade.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 18:53:32 +03:00
3e4191a7d9 feat: switch from deprecated mistralrs-server to mistralrs CLI
Build the mistralrs binary (CLI) instead of the deprecated
mistralrs-server. The RPM still installs as /usr/bin/mistralrs-server
for backwards compatibility. The systemd unit now invokes
`mistralrs-server serve` to use the CLI's serve subcommand.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 18:50:52 +03:00
d9cddb4824 fix: remove explicit author override from changelog action
All checks were successful
poll-upstream / check (push) Successful in 1s
Let the action use its default author rather than misattributing
upstream commits to the package maintainer.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 13:47:18 +03:00
291596cb71 fix: set changelog author and remove hardcoded entry from spec
All checks were successful
poll-upstream / check (push) Successful in 2s
Set the rpm-changelog action author to the actual maintainer instead
of the default "Gitea Actions". Remove the static changelog entry
from the spec since the action generates entries automatically.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 13:43:36 +03:00
0ec89de36f fix(ci): remove nginx config deploy from deploy-ui workflow
All checks were successful
deploy-ui / build-and-deploy (push) Successful in 21s
Nginx config is managed by script/setup/nginx.sh, not CI. The
gitea_ci user doesn't have permissions to write to /etc/nginx.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 13:24:10 +03:00
9f57342810 fix(ci): use --recursive instead of --archive for UI deploy
Some checks failed
deploy-ui / build-and-deploy (push) Failing after 22s
--archive includes -pogDt which tries to set permissions, ownership,
and timestamps on the root-owned web root directory. Only --recursive
and --links are needed for deploying static files.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 13:20:56 +03:00
6dde36080e fix(ci): trigger deploy-ui on changes to its own workflow file
Some checks failed
deploy-ui / build-and-deploy (push) Failing after 21s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 13:19:22 +03:00
bb76402e5a fix(ci): add --omit-dir-times to UI rsync deploy
The gitea_ci user cannot set timestamps on /var/www/rpm/ which is
owned by root. Directory timestamps are irrelevant for static files.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 13:16:46 +03:00
3603c31e21 fix(ci): use explicit NVM_DIR to load nvm in non-interactive shell
Gitea Actions runs steps in a non-interactive shell that does not
source .bashrc. Use the explicit NVM_DIR path to load nvm.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 13:03:13 +03:00
7f9e857695 feat: add React UI for rpm.lair.cafe
Some checks failed
poll-upstream / check (push) Successful in 1s
deploy-ui / build-and-deploy (push) Failing after 19s
- Vite + React + SWC + TypeScript SPA with react-router and
  react-bootstrap
- Dark/light/system theme with Bootstrap 5.3 data-bs-theme
- Home page with repo setup instructions and copyable code blocks
- Package list and detail pages driven by packages.json
- Python script to generate packages.json from repodata XML
- Nginx config updated for SPA fallback, asset caching, removed
  autoindex
- New deploy-ui workflow triggered on ui/ or nginx config changes,
  requires runners with nvm label
- packages.json generation added to publish job after createrepo_c
- Runner setup docs for nvm and sequoia-sq added to readme

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 12:55:38 +03:00
6d3dca17fa feat(ci): generate rpm changelog from upstream mistral.rs commits
Use actions/rpm-changelog@v1 with repo-url to collect commits from
the upstream mistral.rs repo between release tags and prepend a
changelog entry to the spec file before building the RPM.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 10:39:14 +03:00
6946682df1 fix(ci): export LIBRARY_PATH for CUDA linker search paths
All checks were successful
poll-upstream / check (push) Successful in 1s
The linker needs LIBRARY_PATH to find -lcudnn at link time.
LD_LIBRARY_PATH only affects runtime library loading.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 10:16:58 +03:00
ff8e5437ef fix(ci): verify repo index consistency in poll-upstream check
All checks were successful
poll-upstream / check (push) Successful in 1s
The RPM file existing on the server is not sufficient — the repo
metadata must also reference it. After checking the file exists,
verify repomd.xml is present and dnf repoquery can find the package
in the index. This catches the case where sync succeeded but
createrepo_c failed.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 10:06:58 +03:00
65a265c095 refactor(ci): inline build steps, delete build-binary.sh
Replace build-binary.sh with discrete workflow steps: Build
mistralrs-server, Collect artifacts. Remove commented-out NCCL
check block.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 10:00:22 +03:00
54cffcfe81 fix(ci): move RPM_REPO_HOST to job-level env, remove step duplication
All checks were successful
poll-upstream / check (push) Successful in 0s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 09:25:26 +03:00
cacdbebbf7 refactor(ci): use RPM_REPO_HOST env var, add SSH connectivity test
- Set RPM_REPO_HOST=oolon.kosherinata.internal as a plain env var
  instead of treating the hostname as a secret via RSYNC_TARGET
- Add explicit SSH connectivity test step using StrictHostKeyChecking=accept-new
- Remove ssh-keyscan in favour of accept-new which provides meaningful errors
- Remove RSYNC_TARGET secret dependency

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 09:23:54 +03:00
ba5eec78f1 refactor(ci): inline publish steps, delete publish-repo.sh
All checks were successful
poll-upstream / check (push) Successful in 1s
Replace the monolithic publish-repo.sh with discrete workflow steps:
Sign RPMs, Set up SSH, Sync RPMs to repo, Update repo metadata.

Each step now has its own name in the CI UI, making failures
immediately identifiable. Removed 2>/dev/null from ssh-keyscan
which was silently hiding DNS resolution failures.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 09:07:54 +03:00
7df736292c fix(ci): use rpm 6 openpgp signing with sequoia-sq
All checks were successful
poll-upstream / check (push) Successful in 1s
RPM 6 on Fedora 43 uses sequoia (sq) for signing instead of gpg.
Replace %_gpg_name with %_openpgp_sign_id and drop the gpg-agent
loopback config. Add a pre-flight check for sequoia-sq.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 07:47:52 +03:00
7575ec6a3c fix(ci): set ultimate trust on imported signing key
All checks were successful
poll-upstream / check (push) Successful in 1s
GPG refuses to sign with a key that has unknown trust. Set the
imported key to ultimate trust after import.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-26 18:32:22 +03:00
bab7d9850c fix(ci): use fedora-43 runner label for all non-build jobs
All checks were successful
poll-upstream / check (push) Successful in 1s
Ensures package, publish, and poll-upstream jobs are picked up by
Fedora 43 runners specifically.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-26 15:32:40 +03:00
70ae2108ee fix(ci): import public key for checksig and force dist tag override
All checks were successful
poll-upstream / check (push) Successful in 1s
Import the GPG public key into rpm's keyring so rpm --checksig can
verify signatures. Also use --undefine dist before --define to ensure
the CLI value overrides the system macro on the build host.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-26 15:27:40 +03:00
38e36e4547 fix(ci): use gpg-agent loopback instead of custom sign command
All checks were successful
poll-upstream / check (push) Successful in 1s
The custom %__gpg_sign_cmd macro with %{__plaintext_filename} is not
supported on modern rpm. Instead, configure gpg-agent for loopback
pinentry and let rpm use its default sign command.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-26 15:14:37 +03:00
1919e14032 fix(ci): move rpmmacros to template file
All checks were successful
poll-upstream / check (push) Successful in 1s
The heredoc with column-0 lines inside a YAML block scalar may
confuse Gitea's workflow parser. Move rpmmacros content to
rpm/rpmmacros as a template with sed substitution.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-26 14:54:48 +03:00
94d890b82e fix(ci): remove job-level concurrency group from publish
Gitea may not support matrix expressions in job-level concurrency
groups. The workflow-level concurrency group already prevents
parallel runs.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-26 14:53:12 +03:00
ee693f638c fix(ci): revert runner array syntax unsupported by Gitea
Some checks failed
poll-upstream / check (push) Failing after 1s
Gitea 1.25 does not support array values in matrix includes for
runs-on, causing the dispatch API to return 500. Revert to a single
runner label.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-26 14:41:00 +03:00
f4e1008684 feat(ci): parameterize fedora version across pipeline
Add fedora_version to build, package, and publish matrices so the
pipeline can target multiple Fedora releases in parallel. Force the
dist tag via --define to ensure RPMs are stamped correctly regardless
of build host. Update poll-upstream to check all fedora/flavour
combinations before triggering a build.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-26 14:36:09 +03:00
0cb6a4f524 fix(ci): use heredoc for rpmmacros to avoid shell escaping issues
The echo-based approach was mangling rpm macro tokens like
%{__plaintext_filename}. Switch to a heredoc so the content is
written verbatim.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-26 14:25:57 +03:00
4160334bf1 fix(ci): remove duplicate gpg in sign command macro
All checks were successful
poll-upstream / check (push) Successful in 1s
%{__gpg} already expands to /usr/bin/gpg, so the extra "gpg" was
passed as a positional argument causing all flags to be ignored.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-26 13:48:30 +03:00
0147e0fe32 fix(ci): configure gpg for non-interactive RPM signing
All checks were successful
poll-upstream / check (push) Successful in 1s
Add %__gpg_sign_cmd macro to ~/.rpmmacros with --batch, --no-tty, and
--pinentry-mode loopback so rpm --addsign works without a TTY in CI.

Also add signing progress output and post-sign verification to
publish-repo.sh for easier debugging.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-26 13:22:33 +03:00
82a04c88dc fix(ci): flatten RPM artifacts before signing
All checks were successful
poll-upstream / check (push) Successful in 1s
Gitea's download-artifact does not support merge-multiple, so RPMs
end up in subdirectories. Add a step to move them into the expected
flat directory before publish-repo.sh runs.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-24 17:05:55 +03:00
75806fd1d9 chore: see if we can squeeze a few more cycles out of the builders 2026-04-24 17:02:52 +03:00
937e72bff6 fix(ci): remove stale .rpmmacros before rpmbuild in package job
All checks were successful
poll-upstream / check (push) Successful in 1s
The shared runner retains ~/.rpmmacros from previous publish jobs,
causing a spurious "Macro %_gpg_name has empty body" error during
rpmbuild in the package job.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-24 14:59:42 +03:00
e6c2b4e402 fix(ci): prevent poll-upstream from cancelling in-progress builds
All checks were successful
poll-upstream / check (push) Successful in 1s
Poll was firing every minute, dispatching new builds that cancelled
the running one. Restore 15-minute cron interval and add shared
concurrency group across both workflows so new polls queue instead
of re-dispatching.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-24 13:15:34 +03:00
f2ed86bb4d feat(ci): add CARGO_BUILD_JOBS and NVCC_THREADS to build matrix
All checks were successful
poll-upstream / check (push) Successful in 2s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-24 12:56:25 +03:00
146af6a976 fix (ci): will have to debug this later
All checks were successful
poll-upstream / check (push) Successful in 1s
2026-04-24 12:48:24 +03:00
40cd1a4e76 feat(ci): add NCCL dependency check with install instructions
All checks were successful
poll-upstream / check (push) Successful in 1s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-24 12:38:07 +03:00
8f0bf3663e fix(ci): add rustup install/update step to build job
All checks were successful
poll-upstream / check (push) Successful in 1s
The gitea runner user on beast doesn't have Rust installed.
Reuses existing installation on subsequent runs.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-24 11:44:42 +03:00
f4e68d41ae refactor(ci): replace dynamic matrix with static includes
All checks were successful
poll-upstream / check (push) Successful in 1s
Gitea Actions doesn't support fromJSON in matrix strategies
(expressions are evaluated before dependent jobs run). Move
flavour definitions into the workflow as static matrix includes
and remove flavours.yml.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-24 11:41:01 +03:00
2785395850 fix(ci): use python yq syntax for flavours parsing
All checks were successful
poll-upstream / check (push) Successful in 1s
The runners have python yq (jq wrapper), not mikefarah/yq (Go).
Replace -o=json -I=0 with --compact-output which is the jq equivalent.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-24 11:28:12 +03:00
adb1683a54 chore(ci): remove debug logging from poll-upstream dispatch
All checks were successful
poll-upstream / check (push) Successful in 1s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-24 11:22:07 +03:00
ead42ae7b4 fix(ci): use full ref format and Content-Type header for dispatch
All checks were successful
poll-upstream / check (push) Successful in 1s
Gitea API requires refs/heads/main (not just main) and
Content-Type: application/json for the dispatch endpoint.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-24 11:20:06 +03:00