@ankhorage/devtools 1.15.7 → 1.15.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -1
- package/dist/tools/workflows/files/release.yml +33 -5
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
# @ankhorage/devtools
|
|
5
5
|
|
|
6
|
-
         
|
|
7
7
|
|
|
8
8
|
Shared tooling, repository automation, runtime policies, and agent standards for Ankhorage TypeScript projects
|
|
9
9
|
|
|
@@ -363,6 +363,8 @@ A repository participates in Changesets synchronization when `.changeset/config.
|
|
|
363
363
|
|
|
364
364
|
CI and Release render their `bun-version` from the same managed Bun runtime policy used for `package.json`. They also render Changesets status, version, and publish commands from the same policy that owns the synchronized package scripts. The CI workflow installs that Bun version with the frozen lockfile, builds before repository-provider validation, runs `bunx @ankhorage/ankh doctor validate .`, and conditionally runs lint, formatting, Knip, tests, typecheck, and the strict `changeset:status --since=origin/main` guard for pull requests. After a green change reaches `main`, Release uses the scoped Ankhorage Renovate Sync App token to apply Changesets versioning directly to `main` in a `chore(release)` `[skip ci]` commit and publishes without creating a second Version Packages pull request. Release publishing calls the Devtools-owned runner through the synchronized package script; it never resolves an ambient or mutable Changesets executable. Changesets v3 creates the local release tags; the managed workflow pushes those exact tags and creates any missing GitHub Releases directly, without parsing Changesets’ human-readable publish output.
|
|
365
365
|
|
|
366
|
+
For the **first npm publication** of a new `@ankhorage/*` package, the organization publishing credential must be able to create/publish packages in the `@ankhorage` scope. With a granular npm token, grant package permission **Read and write (publish and stage)** to the `@ankhorage` scope or **All Packages**. If initial publication fails after Changesets has already pushed the release commit, correct the npm credential and rerun Release; the current unpublished version is reused and must not be bumped again. The managed workflow diagnoses this first-publish state separately from registry/network failures.
|
|
367
|
+
|
|
366
368
|
The Renovate workflow accepts only same-repository branches created by `renovate[bot]`. It calls the SHA-pinned `ankhorage/renovate` workflow to add a release Changeset for runtime Ankhorage dependency updates or an empty Changeset for dev-only updates. The trusted workflow scopes the Ankhorage Renovate Sync GitHub App token to the current repository and uses it only for the validated commit, allowing every normal pull-request CI workflow to start without manual approval. It never checks out or executes pull-request code in the privileged `pull_request_target` context.
|
|
367
369
|
|
|
368
370
|
## Managed VS Code configuration
|
|
@@ -79,7 +79,16 @@ jobs:
|
|
|
79
79
|
git checkout -B main origin/main
|
|
80
80
|
|
|
81
81
|
if [ -z "$(find .changeset -maxdepth 1 -type f -name '*.md' ! -name README.md -print -quit)" ]; then
|
|
82
|
-
|
|
82
|
+
current_subject="$(git log -1 --pretty=%s)"
|
|
83
|
+
if [ "$current_subject" = "chore(release): version packages [skip ci]" ]; then
|
|
84
|
+
echo "Recovering the canonical versioned release commit without another version bump."
|
|
85
|
+
echo "versioned=true" >> "$GITHUB_OUTPUT"
|
|
86
|
+
echo "package_name=$(node -p "require('./package.json').name")" >> "$GITHUB_OUTPUT"
|
|
87
|
+
echo "package_version=$(node -p "require('./package.json').version")" >> "$GITHUB_OUTPUT"
|
|
88
|
+
echo "release_sha=$(git rev-parse HEAD)" >> "$GITHUB_OUTPUT"
|
|
89
|
+
else
|
|
90
|
+
echo "versioned=false" >> "$GITHUB_OUTPUT"
|
|
91
|
+
fi
|
|
83
92
|
exit 0
|
|
84
93
|
fi
|
|
85
94
|
|
|
@@ -126,7 +135,26 @@ jobs:
|
|
|
126
135
|
if: hashFiles('.changeset/config.json') != ''
|
|
127
136
|
run: |
|
|
128
137
|
if ! node -e "const p=require('./package.json'); process.exit(p.ankh?.apm === undefined ? 1 : 0)"; then
|
|
129
|
-
|
|
138
|
+
package_name="$(node -p "require('./package.json').name")"
|
|
139
|
+
package_version="$(node -p "require('./package.json').version")"
|
|
140
|
+
registry_evidence="${RUNNER_TEMP}/npm-package-preflight.json"
|
|
141
|
+
package_absent=false
|
|
142
|
+
|
|
143
|
+
if npm view "$package_name" version --json > "$registry_evidence"; then
|
|
144
|
+
:
|
|
145
|
+
elif node -e "const p=require(process.argv[1]); if(p.error?.code !== 'E404') process.exit(1)" "$registry_evidence"; then
|
|
146
|
+
package_absent=true
|
|
147
|
+
else
|
|
148
|
+
echo "::error title=npm registry preflight failed::Could not determine whether $package_name already exists in npm. Refusing to treat an authentication or network failure as first-publish bootstrap."
|
|
149
|
+
exit 1
|
|
150
|
+
fi
|
|
151
|
+
|
|
152
|
+
if ! __ANKH_CHANGESETS_PUBLISH_COMMAND__; then
|
|
153
|
+
if [ "$package_absent" = true ]; then
|
|
154
|
+
echo "::error title=npm scope publish access required::Initial publish of ${package_name}@${package_version} failed while the package is absent from npm. Verify that the configured npm publishing credential has Read and write (publish and stage) access to the @ankhorage scope or All Packages, then rerun Release. The already-versioned release commit on main is reusable; do not create another version bump. Bootstrap guidance: https://github.com/ankhorage/devtools/issues/225"
|
|
155
|
+
fi
|
|
156
|
+
exit 1
|
|
157
|
+
fi
|
|
130
158
|
exit 0
|
|
131
159
|
fi
|
|
132
160
|
|
|
@@ -184,9 +212,9 @@ jobs:
|
|
|
184
212
|
last_stage="registry-metadata"
|
|
185
213
|
|
|
186
214
|
if npm view "$package_spec" version dist.tarball dist.integrity --json > "$registry_evidence"; then
|
|
187
|
-
resolved_version="$(node -e "const
|
|
188
|
-
tarball="$(node -e "const
|
|
189
|
-
integrity="$(node -e "const
|
|
215
|
+
resolved_version="$(node -e "const raw=require(process.argv[1]); const p=Array.isArray(raw)&&raw.length===1?raw[0]:raw; process.stdout.write(typeof p?.version==='string'?p.version:'')" "$registry_evidence")"
|
|
216
|
+
tarball="$(node -e "const raw=require(process.argv[1]); const p=Array.isArray(raw)&&raw.length===1?raw[0]:raw; process.stdout.write(typeof p?.['dist.tarball']==='string'?p['dist.tarball']:'')" "$registry_evidence")"
|
|
217
|
+
integrity="$(node -e "const raw=require(process.argv[1]); const p=Array.isArray(raw)&&raw.length===1?raw[0]:raw; process.stdout.write(typeof p?.['dist.integrity']==='string'?p['dist.integrity']:'')" "$registry_evidence")"
|
|
190
218
|
|
|
191
219
|
if [ "$resolved_version" = "$PUBLISHED_PACKAGE_VERSION" ] && [ -n "$tarball" ] && [ -n "$integrity" ]; then
|
|
192
220
|
last_stage="tarball-download"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ankhorage/devtools",
|
|
3
|
-
"version": "1.15.
|
|
3
|
+
"version": "1.15.8",
|
|
4
4
|
"description": "Shared tooling, repository automation, runtime policies, and agent standards for Ankhorage TypeScript projects",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://github.com/ankhorage/devtools#readme",
|