Some checks failed
WAI operation catalogue / does this change touch it (push) Successful in 17s
wai-sink-android native sink library / does this change touch it (push) Successful in 18s
repository checks / lockfiles, advisories, tests in CI, workflow hygiene, spec and section references, public text (push) Has been cancelled
wai-sink-android native sink library / every ABI, the AAR, and the instrumented tests in a headless emulator · macos (push) Successful in 6m34s
WAI breaking changes and the conformance runner / WAI breaking · does this change touch WAI (push) Successful in 9s
WAI breaking changes and the conformance runner / WAI breaking · wire, record and API against main · linux (push) Successful in 48s
WAI operation catalogue / the catalogue and every door · linux (push) Successful in 6m36s
WAI breaking changes and the conformance runner / WAI breaking and conform · their tests, and the independent verifiers through wai conform · linux (push) Successful in 7m22s
wai-sink-android native sink library / the JNI layer and the platform-free half on the host JVM · linux-arm64 (push) Has been cancelled
The first wai-v* tag after 0833173ed would have failed the Android leg's publication and the
images job without the secret WAI_PACKAGES_TOKEN, and left the images job unclaimed with no
runner labelled oci, which keeps the run open. Both now run only once the setup exists, and fail
as before once they run:
- A job setup (gate pool, no checkout) reports whether WAI_PACKAGES_TOKEN is set as an output,
never its value, since a job's `if:` cannot read a secret; each missing piece of the setup is
one notice line, and it succeeds.
- The Maven publication step tests the mapped secret: without it, one notice and success. The
AAR is still built, checked and attached.
- The images job needs version and setup, with
`if: needs.version.result == 'success' && needs.setup.outputs.packages == 'true' &&
vars.WAI_OCI_RUNNER == 'true'`. Forgejo 16.0.6 evaluates a blocked job's `if:` on the server
once its needs are done (services/actions/job_emitter.go, prepareJobForEmitting), with the
`vars` context and the needs' results and outputs (runner v12.13.2's jobparser,
newJobIfInterpreter); a false one marks the job skipped, so it is never queued for a runner.
Only `env` and `secrets` there fall back to the runner, and neither is used.
The workflow's header gives the owner's steps in order: the secret, then an oci runner and the
variable WAI_OCI_RUNNER=true.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
3.8 KiB
3.8 KiB
The release carries libwai for C, the Swift and Android packages, and the relay's and room service's images
- C (
quickstart/build-libwai.sh): each Linux job of the release attacheslibwai-<version>-<triple>.tar.gz, forx86_64-andaarch64-unknown-linux-gnu. It holdslib/libwai.a, built from wai-rs with the featurenative_sink(the envelope and the native sink, the C interface the Swift and Android packages carry; no codec library), for the glibc target and without crt-static; the committedinclude/wai.h; andlib/pkgconfig/wai.pc, whose prefix is its own directory and whoseLibsname the system libraries the static library needs. The library is static so that a program carries it: nothing of libwai is looked for when the program runs, and its C runtime is the one it is linked against. Before it is attached, the header the build regenerated must be the committed one, the library must define exactly the envelope's and the native sink's functions (quickstart/libwai_interface.py), andquickstart/test/c-library.shcompilesquickstart/test/c/hello.cagainst the archive with the flagspkg-config --cflags --libs waigives, links it and runs it. - Swift (
wai-sink-swift):Package.swiftnames the binary targetWaiFFIby URL and checksum where a release has written them, andbuild/WaiFFI.xcframeworkwhile it is built there. The release'sswiftjob builds every slice and attachesWaiFFI-<version>.xcframework.zipandwai-sink-swift-<version>.zip, the package whosePackage.swiftnames the zip by its download URL and SwiftPM checksum (scripts/package-release.sh).scripts/check-release-package.shresolves, builds and runs an application that depends on the package, before the attach with the framework served through a mirror of the URL and after from the URL itself, and requires the package with a wrong checksum to be refused;wai-sink-swift.ymlruns the first on every change. - Kotlin (
wai-sink-android): the library is published with maven-publish asscience.transaction.wai:wai-sink:<version>, the version of wai-rs, and its manifest is of the packagescience.transaction.wai.sink(it waswai.sink; the Kotlin classes keep the packagewai.sink, which the JNI layer's symbols name). The release'sandroidjob holds the publication toscripts/check-publication.sh(its coordinates, its manifest's package, both libraries of each ABI, its classes), attacheswai-sink-<version>.aar, and publishes it to the forge's Maven registry;wai-sink-android.ymlwrites and checks the publication on every change. - Images (joule-code:
joule-moq-relay/deploy/,joule-moq-room/deploy/): Containerfiles for the relay and the room service, each with acheck-image.shthat runs the image with a read-only root and no capabilities and requires its user, its--versionand its service: the relay's WebSocket opening answered with its first capsule, and the room service's/healthwith its clock's session to the relay's image up. The release'simagesjob builds both, checks them and pushes them to the forge's container registry (quickstart/release-images.sh,quickstart/oci-push.py); an image that fails its check is not pushed. - The forge's job token reads the organisation's packages and cannot write them, so the Maven
publication and the images run only once the owner's setup exists: the repository secret
WAI_PACKAGES_TOKEN, a forge token with the scopewrite:package, and for the images a runner labelledociand the repository variableWAI_OCI_RUNNERset totrue. Until then the release says which is missing in a notice and succeeds: the AAR is attached unpublished, and the images job is skipped, not queued. Everything uploads to the forge over the private network.