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>
86 lines
3.2 KiB
YAML
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 }}\"}}"
|