ci(release): ask the installer to recompose the Rust bundle (stage 4, D224)
All checks were successful
PR Checks / plugin-checks (pull_request) Successful in 9s
All checks were successful
PR Checks / plugin-checks (pull_request) Successful in 9s
RunicNPC is the Rust bundle's third artefact from stage 4, so its release ends as Rust-Plugins' does: a dispatch of the installer's bundle workflow, warned rather than failed when the token cannot reach it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
This commit is contained in:
@@ -38,9 +38,12 @@
|
|||||||
# sidecar (PLAN.md §4): the bridge calls it in-process. What a consumer pairs
|
# sidecar (PLAN.md §4): the bridge calls it in-process. What a consumer pairs
|
||||||
# on is the API version other plugins call, from plugin.toml.
|
# on is the API version other plugins call, from plugin.toml.
|
||||||
#
|
#
|
||||||
# 4. NO BUNDLE DISPATCH, YET. The installer does not know RunicNPC until stage 4
|
# 4. THE BUNDLE IS RECOMPOSED. Since stage 4 RunicNPC is the Rust bundle's third
|
||||||
# makes it a third artefact of the Rust bundle (D224). That stage adds the
|
# artefact (D224): the installer's compose job carries the latest RunicNPC
|
||||||
# step Rust-Plugins ends with, which asks RunicGateway/installer to recompose.
|
# release that answers the API the bridge declares (Rust-Plugins' overlay.toml
|
||||||
|
# `runicnpc_api`). The last step here asks RunicGateway/installer to
|
||||||
|
# recompose, as Rust-Plugins' release does; the installer's nightly cron covers
|
||||||
|
# a dispatch that did not arrive.
|
||||||
#
|
#
|
||||||
# The version is stamped into the shipped copy's `[Info(…)]` attribute, so
|
# The version is stamped into the shipped copy's `[Info(…)]` attribute, so
|
||||||
# `oxide.plugins` / `c.plugins` on a server names the release it runs. The
|
# `oxide.plugins` / `c.plugins` on a server names the release it runs. The
|
||||||
@@ -55,7 +58,9 @@
|
|||||||
# Prerequisites (Settings → Actions → Secrets on RunicGateway/runicnpc-rust, or
|
# Prerequisites (Settings → Actions → Secrets on RunicGateway/runicnpc-rust, or
|
||||||
# the organisation's):
|
# the organisation's):
|
||||||
# REGISTRY_TOKEN — Gitea access token with `write:repository`, to push the
|
# REGISTRY_TOKEN — Gitea access token with `write:repository`, to push the
|
||||||
# tag and create the release.
|
# tag and create the release. The final step also dispatches
|
||||||
|
# RunicGateway/installer's bundle workflow, so the token
|
||||||
|
# needs write on that repo too; without it that step warns.
|
||||||
# REGISTRY_USER — the Gitea username that token belongs to.
|
# REGISTRY_USER — the Gitea username that token belongs to.
|
||||||
|
|
||||||
name: Release plugin
|
name: Release plugin
|
||||||
@@ -71,6 +76,7 @@ concurrency:
|
|||||||
|
|
||||||
env:
|
env:
|
||||||
GITEA_HOST: gitea.whitlocktech.com
|
GITEA_HOST: gitea.whitlocktech.com
|
||||||
|
INSTALLER_REPO: RunicGateway/installer
|
||||||
REPO: RunicGateway/runicnpc-rust
|
REPO: RunicGateway/runicnpc-rust
|
||||||
ARTIFACT: runicnpc
|
ARTIFACT: runicnpc
|
||||||
PLUGIN: plugin/RunicNPC.cs
|
PLUGIN: plugin/RunicNPC.cs
|
||||||
@@ -474,3 +480,27 @@ jobs:
|
|||||||
fi
|
fi
|
||||||
echo " uploaded ${f}"
|
echo " uploaded ${f}"
|
||||||
done
|
done
|
||||||
|
|
||||||
|
# ── Recompose the installer's bundle manifest (D224) ─────────────────
|
||||||
|
# DISPATCH, DON'T WAIT, as Rust-Plugins' release does. A dropped dispatch
|
||||||
|
# costs latency, not correctness: the installer's nightly cron recomputes
|
||||||
|
# the bundle from whatever the latest releases actually are.
|
||||||
|
- name: Ask the installer repo to recompose its bundle
|
||||||
|
if: ${{ steps.plan.outputs.release == 'true' }}
|
||||||
|
env:
|
||||||
|
REGISTRY_TOKEN: ${{ secrets.REGISTRY_TOKEN }}
|
||||||
|
run: |
|
||||||
|
set -euo pipefail
|
||||||
|
CI_TOKEN="$(printf '%s' "${REGISTRY_TOKEN}" | tr -d '\r\n')"
|
||||||
|
HTTP="$(curl -s -o /dev/null -w '%{http_code}' -X POST \
|
||||||
|
-H "Authorization: token ${CI_TOKEN}" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d '{"ref":"main"}' \
|
||||||
|
"https://${GITEA_HOST}/api/v1/repos/${INSTALLER_REPO}/actions/workflows/bundle.yml/dispatches" || echo 000)"
|
||||||
|
case "$HTTP" in
|
||||||
|
20*) echo "Dispatched ${INSTALLER_REPO} bundle.yml (HTTP ${HTTP}) — not waiting for it." ;;
|
||||||
|
403|404)
|
||||||
|
echo "::warning::Could not dispatch ${INSTALLER_REPO} bundle.yml (HTTP ${HTTP}). REGISTRY_TOKEN likely lacks write:repository on that repo. Release ${{ steps.plan.outputs.tag }} is published and fine; its bundle will be composed by the installer's nightly cron instead." ;;
|
||||||
|
*)
|
||||||
|
echo "::warning::Dispatching ${INSTALLER_REPO} bundle.yml returned HTTP ${HTTP}. Release ${{ steps.plan.outputs.tag }} is published and fine; the nightly cron will recompose the bundle." ;;
|
||||||
|
esac
|
||||||
|
|||||||
Reference in New Issue
Block a user