Files
mistralrs-package/.gitea/workflows/poll-upstream.yml
rob thijssen ff8e5437ef
All checks were successful
poll-upstream / check (push) Successful in 1s
fix(ci): verify repo index consistency in poll-upstream check
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

86 lines
3.2 KiB
YAML

name: poll-upstream
on:
schedule:
- cron: "*/15 * * * *"
workflow_dispatch: {}
concurrency:
group: poll-and-build
cancel-in-progress: false
jobs:
check:
runs-on: fedora-43
steps:
- name: Get upstream latest tag
id: upstream
run: |
tag=$(curl -sSfL \
-H 'Accept: application/vnd.github+json' \
https://api.github.com/repos/EricLBuehler/mistral.rs/releases/latest \
| jq -r .tag_name)
echo "tag=${tag}" >> "$GITHUB_OUTPUT"
echo "Upstream latest: ${tag}"
- name: Check if all packages are published
id: published
run: |
version="${UPSTREAM_TAG#v}"
needs_build=false
for target in "43:cuda13"; do
fedora_version="${target%%:*}"
flavour="${target##*:}"
base_url="https://rpm.lair.cafe/fedora/${fedora_version}/x86_64"
rpm_name="mistralrs-server-${flavour}-${version}-1.fc${fedora_version}.x86_64.rpm"
# check that the rpm file exists
http_code=$(curl \
--silent \
--write-out "%{http_code}" \
--output /dev/null \
--head \
--url "${base_url}/${rpm_name}")
if [ "${http_code}" = "404" ]; then
echo "missing: ${base_url}/${rpm_name}"
needs_build=true
continue
elif [ "${http_code}" != "200" ]; then
echo "unexpected HTTP ${http_code} for ${base_url}/${rpm_name}"
exit 1
fi
echo "found: ${base_url}/${rpm_name}"
# check that the repo index references this package
if ! curl --silent --fail "${base_url}/repodata/repomd.xml" \
| grep --quiet 'primary'; then
echo "missing or invalid repomd.xml at ${base_url}/repodata/"
needs_build=true
continue
fi
if ! dnf repoquery \
--repofrompath=check,"${base_url}" \
--repo=check \
--quiet \
"mistralrs-server-${flavour}-${version}" 2>&1 \
| grep --quiet "mistralrs-server-${flavour}"; then
echo "repo index missing: mistralrs-server-${flavour}-${version} not in ${base_url}/repodata/"
needs_build=true
continue
fi
echo "indexed: mistralrs-server-${flavour}-${version} in ${base_url}/repodata/"
done
echo "already_built=$( [ "${needs_build}" = "true" ] && echo false || echo true )" >> "$GITHUB_OUTPUT"
env:
UPSTREAM_TAG: ${{ steps.upstream.outputs.tag }}
- name: Trigger build workflow
if: steps.published.outputs.already_built == 'false'
run: |
curl --fail --silent --show-error --location \
--request POST \
--header "Authorization: token ${{ secrets.DISPATCH_TOKEN }}" \
--header 'Content-Type: application/json' \
--url "${{ github.server_url }}/api/v1/repos/${{ github.repository }}/actions/workflows/build-release.yml/dispatches" \
--data "{\"ref\":\"refs/heads/main\",\"inputs\":{\"tag\":\"${{ steps.upstream.outputs.tag }}\"}}"