-
Notifications
You must be signed in to change notification settings - Fork 0
Ops Ambiguous Release Migration
This guide tracks the human setup work behind the Ambiguous release migration for DxMessaging. It is safe to commit because it contains only public identifiers, checklist structure, and verification steps.
Do not commit secrets, recovery codes, account screenshots, publisher account
identifiers, personal access tokens, one-time codes, private billing details, or
local execution notes. Use npm run generate:ambiguous-release-runbook for an
ignored local checklist only for non-sensitive execution notes, such as public
PR URLs, public release URLs, and dates when public verification was completed.
| Surface | Public value |
|---|---|
| GitHub repository | Ambiguous-Interactive/DxMessaging |
| Canonical repository URL | https://github.com/Ambiguous-Interactive/DxMessaging |
| GitHub Pages URL | https://ambiguous-interactive.github.io/DxMessaging/ |
| Unity and npm package id | com.wallstop-studios.dxmessaging |
| Display name | DxMessaging |
Minimum Unity version in package.json
|
2021.3 |
| Release workflow | .github/workflows/release.yml |
| Documentation workflow | .github/workflows/deploy-docs.yml |
| npm package validation workflow | .github/workflows/validate-npm-meta.yml |
| Unity test workflow |
.github/workflows/unity-tests.yml (editmode/playmode/standalone matrix) |
| Unity benchmark workflow | .github/workflows/unity-benchmarks.yml |
| Unity organization lock |
wallstop-organization-builds via ambiguous-organization-build-lock
|
| GitHub Pages environment | github-pages |
| OpenUPM package page | https://openupm.com/packages/com.wallstop-studios.dxmessaging/ |
Before changing external settings, capture the public state that must survive the migration.
- Confirm
Ambiguous-Interactive/DxMessagingis the intended canonical repository slug and no target repository or fork network conflict blocks the transfer. - Confirm the default branch used for release and docs operations. Current
tracked links use
master, while workflows also accept pushes tomain. - Confirm
package.jsonstill hasnameset tocom.wallstop-studios.dxmessaging,displayNameset toDxMessaging, and repository URLgit+https://github.com/Ambiguous-Interactive/DxMessaging.git. - Record the latest public tag, latest GitHub Release, and latest npm and OpenUPM package versions in the ignored local runbook, not in tracked docs.
- Confirm maintainers who need post-transfer admin access are available for GitHub, npm, OpenUPM, and Unity Publisher Portal actions.
- Confirm no release-critical workflow depends on a personal fork, personal token, or old repository URL.
Use GitHub repository settings for the transfer. GitHub documents that the operator must have administrator access, the target owner must be valid, and the target must not already have a repository with the same name or a fork in the same network.
- From the source repository, open Settings and use the repository transfer control in the danger zone.
- Set the new owner to
Ambiguous-Interactiveand keep the repository nameDxMessaging. - Read GitHub's transfer warnings before confirming. Pay specific attention to Pages, protected branches, collaborators, issue assignments, and Marketplace/action-name retirement warnings.
- After acceptance, open
https://github.com/Ambiguous-Interactive/DxMessagingdirectly and confirm the repository, issues, pull requests, tags, releases, and Actions tabs are visible to maintainers. - Confirm redirects from old public URLs are working, but do not keep old slugs in tracked configuration or docs.
- Run
npm run validate:repo-identityafter tracked URL updates so stale repository identity references are caught before release.
Reference: GitHub repository transfer documentation.
Unity workflows target self-hosted Windows runners by labels only. No
dedicated runner group is provisioned; runners may live in the organization's
default runner group. The Unity serial has only a small activation-seat pool
(typically ~2 seats) with no server-side reclaim, so cross-repository
serialization to one-Unity-at-a-time is provided by the central
Ambiguous-Interactive/ambiguous-organization-build-lock actions. Native
GitHub concurrency is repository-scoped and must not be used as the
organization lock.
-
Required runner labels on both Windows runners:
self-hosted,Windows,RAM-64GB. -
Additional speed marker applied only to
ELI-MACHINE:fast(kept for future opt-in hotfix dispatch; no job currently requests it). -
Every Unity-credential-using job validates Unity license secret shape, then acquires the central lock immediately before running the licensed Unity section
scripts/unity/run-ci-tests.ps1:- name: Validate Unity license secrets uses: ./.github/actions/validate-unity-license - name: Acquire organization Unity lock uses: Ambiguous-Interactive/ambiguous-organization-build-lock/.github/actions/acquire-build-lock@v1 with: lock-name: wallstop-organization-builds
The matching release step uses
release-build-lock@v1withif: always(). The workflow validator hard-rejectswallstop-organization-buildswhen it appears as native GitHubconcurrency.group. -
Each Unity-credential-using job runs
./.github/actions/validate-unity-licensebefore acquiring the central lock so missing GitHub secrets fail before blocking the shared Unity seat. IL2CPP is thestandaloneentry in theunity-teststest-modematrix, not a separate job. -
Publish
.ambiguous-organization-build-lock/toAmbiguous-Interactive/ambiguous-organization-build-lock, create thev1tag, and enable private action access for this repository before the Unity workflows are expected to pass. -
All Unity jobs declare the uniform
runs-on: [self-hosted, Windows, RAM-64GB]so either Windows machine can pick up any Unity job. Thefastlabel is no longer requested by any job. -
In the
Ambiguous-Interactiveorganization, open Settings, Actions, then Runners. -
Confirm at least one online self-hosted Windows runner has the labels
self-hosted,Windows, andRAM-64GB. -
Confirm
ELI-MACHINEretains itsfastlabel for future opt-in use. -
Confirm each of
.github/workflows/unity-tests.yml,.github/workflows/unity-benchmarks.yml, and theunity-checksjob in.github/workflows/release.ymlacquireswallstop-organization-builds, validates Unity license secrets, runsscripts/unity/run-ci-tests.ps1, and releases the lock withif: always(). -
Confirm the string
wallstop-organization-buildsappears only as a central lock action input, not as native GitHubconcurrency.group. -
Confirm
.github/workflows/stuck-job-watchdog.ymlis enabled. It audits queued runs every 5 minutes and cancels and (where safe) re-dispatches those that an idle runner could service, mitigating the GitHub Actions dispatcher bug tracked at https://github.com/orgs/community/discussions/186811. -
Confirm
.github/workflows/unstick-run.ymlis present for manual one-click recovery of a single run id. Operators dispatch it from the Actions tab with the stuck run's id when they cannot wait for the watchdog cron, or when the watchdog is not yet on the default branch (GitHubschedule:cron triggers fire only from the default branch). -
Keep fork pull requests off self-hosted runners. The Unity workflows only allow same-repository pull requests and protected branch pushes; do not replace those guards with
pull_request_target. -
Protect release tags before the first production release. The release workflow also runs trusted Unity checks on
v*tags, sovX.Y.Ztags must be covered by GitHub rulesets or tag protection that require the approved release process and reviewed release commit.
Reference: GitHub self-hosted runners documentation.
- Confirm the
github-pagesenvironment exists for.github/workflows/deploy-docs.yml. - Confirm
github-pagesallows deployments from the protected default branch path used by the docs workflow. - If a future npm publishing environment is added to
.github/workflows/release.yml, create the matching GitHub environment before adding it to npm Trusted Publishing. The current tracked release workflow does not declare a publish environment. - If reviewers or wait timers are required by organization policy, configure them in GitHub and record only the policy name in local notes.
The tracked workflows expose only secret names. Never write the values into a tracked file or generated artifact.
- Confirm Unity workflows can read the three required secret names:
UNITY_SERIAL,UNITY_EMAIL, andUNITY_PASSWORD(the classic-serial activation path; the single CI activation path). - Confirm the retired
UNITY_LICENSING_SERVERsecret is removed from the workflows. Thevalidate-unity-licenseaction fails the run if it is still set; a.ulf(UNITY_LICENSE/UNITY_LICENSE_B64) remains only as a local development fallback. - Confirm
.github/workflows/release.ymldoes not requireNPM_TOKEN; npm publishing should use Trusted Publishing and OIDC. - Confirm the release workflow grants
id-token: writeonly to jobs that need attestations or Trusted Publishing. - Rotate any transfer-only token after migration. Prefer environment, repository, or organization secrets only when OIDC is not supported.
- On self-hosted runners, treat environment secrets with the same care as repository and organization secrets because the runner host is not a clean hosted runner image.
Reference: GitHub environments documentation.
- Protect the default branch used for release commits, currently
masterunless maintainers intentionally migrate tomain. - Require pull request review before merging release changes.
- Require the checks that gate release readiness, at minimum script tests, npm package validation, docs validation, repo identity validation, and the Unity workflow checks that the organization expects before publishing.
- Keep force pushes and branch deletion disabled for protected branches.
- Restrict who can create or update
v*release tags if GitHub rulesets are available in the organization. - Confirm release automation can create GitHub Releases and upload release
assets through
.github/workflows/release.yml.
The npm package name is com.wallstop-studios.dxmessaging. The release workflow
publishes the packed package from .artifacts/release with
npm publish --provenance --access public through npm ^11.5.1.
- In npm, confirm the package exists under the expected owner or maintainer set and that active maintainers have two-factor authentication enabled.
- Remove maintainers who were only needed for transfer work.
- Configure npm Trusted Publishing for package
com.wallstop-studios.dxmessagingwith:repository owner = Ambiguous-Interactive,repository name = DxMessaging,workflow filename = release.yml, andenvironment = noneunless the release workflow later declares a publish environment. - Confirm the
publishjob in.github/workflows/release.ymlhasid-token: writeand does not readNPM_TOKEN. - Confirm the npm package provenance view links back to
Ambiguous-Interactive/DxMessagingafter the first Trusted Publishing release. - Run
npm run validate:npm-metabefore publishing to verify Unity.metafiles and package contents. - Use
npm pack --json --dry-run --ignore-scriptsornpm run validate:npm-metafor a non-publishing package check.
References:
.github/workflows/release.yml runs only on tags matching vX.Y.Z. It validates
that the tag exactly matches package.json version before packing, attesting,
creating or updating the GitHub Release, and publishing to npm.
- Update
package.jsonversionto the intended public version. - Update
CHANGELOG.mdfor the user-facing release. - Run
npm run test:scripts,npm run test:unity-contracts,npm run validate:npm-meta,npm run validate:llms-txt,npm run validate:repo-identity, andnpm run validate:all. - Merge the release commit to the protected default branch.
- Create the release tag from the exact release commit:
git tag -s vX.Y.Zwhen signing is available, or the repository-approved annotated tag method when signing is not available. - Push only the intended release tag:
git push origin vX.Y.Z. - Confirm
.github/workflows/release.ymlstarts on the tag and that theverify-tag,validate,unity-checks, andpublishjobs complete. - Confirm the GitHub Release includes the
.tgzpackage and.sha256artifact. - Confirm npm shows the new
com.wallstop-studios.dxmessagingversion with provenance linked to the release workflow.
OpenUPM uses package metadata YAML and monitors versioned Git tags. The package
page for this package is
https://openupm.com/packages/com.wallstop-studios.dxmessaging/.
- Find the OpenUPM metadata entry for
com.wallstop-studios.dxmessaging. - Confirm its
repoUrlishttps://github.com/Ambiguous-Interactive/DxMessaging. - Confirm the metadata still points to the root package path if
package.jsonremains at the repository root. - Confirm metadata values match
package.json: package idcom.wallstop-studios.dxmessaging, display nameDxMessaging, licenseMIT, and Unity version2021.3. - If any metadata changed, submit an OpenUPM metadata pull request using the package name in the title, then link the public PR from local operator notes only.
- After the PR merges, wait for OpenUPM indexing and confirm the package
page reports the latest
vX.Y.Ztag without build issues.
Reference: OpenUPM package metadata documentation.
Unity Asset Store UPM publishing is separate from npm and OpenUPM. It uses Unity Publisher Portal enrollment, publisher verification, package validation, upload, review, and Asset Store distribution.
- Confirm the publisher account is enrolled or eligible for UPM publishing before promising Asset Store availability.
- Confirm the namespace requested in Unity Publisher Portal is compatible
with package id
com.wallstop-studios.dxmessaging. - Validate the UPM package structure from the repository root, including
package.json,Runtime/**,Editor/**,Samples~/**,README.md,CHANGELOG.md,LICENSE.md, and all required.metafiles. - Confirm public links in
package.jsonresolve: documentationhttps://ambiguous-interactive.github.io/DxMessaging/, changeloghttps://raw.githubusercontent.com/Ambiguous-Interactive/DxMessaging/master/CHANGELOG.md, and licensehttps://github.com/Ambiguous-Interactive/DxMessaging/blob/master/LICENSE.md. - Use Unity's current UPM publishing tools or Publisher Portal upload flow for validation and upload. Do not commit upload receipts, portal screenshots, package signing output, or account-specific identifiers.
- Treat Asset Store package signing as Unity-controlled review output. Do not modify package contents after validation without re-running validation and upload.
- Record only the public listing URL in tracked follow-up issues or release notes.
References:
Run these checks after the transfer and again after the first tagged release.
- Fresh clone succeeds:
git clone https://github.com/Ambiguous-Interactive/DxMessaging.git. -
git remote -vuseshttps://github.com/Ambiguous-Interactive/DxMessaging.gitor the matching SSH remote for the same slug. -
git fetch --tags --prunereturns the expectedvX.Y.Zrelease tags. -
npm run validate:repo-identitypasses. -
npm run validate:npm-metapasses. -
npm run test:scriptspasses. -
.github/workflows/deploy-docs.ymldeploys tohttps://ambiguous-interactive.github.io/DxMessaging/. -
.github/workflows/unity-tests.ymlcan dispatch to self-hosted runners labeledself-hosted,Windows, andRAM-64GBfor same-repository pull requests or protected branch pushes. Either Windows machine can pick up any Unity job; cross-repository license serialization is enforced by the centralambiguous-organization-build-lockactions around the licensed Unity section. -
.github/workflows/release.ymlsucceeds for a real semver tag and does not requireNPM_TOKEN. - npm, OpenUPM, GitHub Releases, and GitHub Pages all point to
Ambiguous-Interactive/DxMessaging. - If Unity has approved and published the Asset Store UPM listing, confirm
the public listing points to
Ambiguous-Interactive/DxMessaging. If Unity approval is still pending, keep the approval state in Unity Publisher Portal or the approved organization password manager instead of treating the missing listing as a release blocker. - Maintainers can recover GitHub, npm, OpenUPM, and Unity Publisher Portal access without relying on private material committed to the repository.
- Getting-Started-Overview
- Getting-Started-Getting-Started
- Getting-Started-Install
- Getting-Started-Quick-Start
- Getting-Started-Visual-Guide
- Concepts-Message-Types
- Concepts-Listening-Patterns
- Concepts-Targeting-And-Context
- Concepts-Interceptors-And-Ordering
- Guides-Patterns
- Guides-Unity-Integration
- Guides-Testing
- Guides-Diagnostics
- Guides-Advanced
- Guides-Migration-Guide
- Advanced-Emit-Shorthands
- Advanced-Message-Bus-Providers
- Advanced-Runtime-Configuration
- Advanced-String-Messages
- Reference-Reference
- Reference-Quick-Reference
- Reference-Helpers
- Reference-Faq
- Reference-Glossary
- Reference-Troubleshooting
- Reference-Compatibility
Links