Skip to content

Merge pull request #34 from link-foundation/issue-33-2c527aa50b81 #38

Merge pull request #34 from link-foundation/issue-33-2c527aa50b81

Merge pull request #34 from link-foundation/issue-33-2c527aa50b81 #38

Triggered via push May 5, 2026 20:04
Status Success
Total duration 2m 14s
Artifacts

js.yml

on: push
Detect Changes
5s
Detect Changes
Check for Manual Version Changes
0s
Check for Manual Version Changes
Create Changeset PR
0s
Create Changeset PR
Lint and Format Check
11s
Lint and Format Check
Check for Changesets
0s
Check for Changesets
Matrix: test
Release
58s
Release
Instant Release
0s
Instant Release
Fit to window
Zoom out
Zoom in

Annotations

4 errors, 11 warnings, and 1 notice
Release
` annotations in green runs) by retrying the registry verification with exponential backoff and pre-checking the registry before re-running `changeset publish`. Standardize GitHub Release titles to `[JavaScript] X.Y.Z` and tag prefix to `js_v`. Fix the shields.io badge URL so it embeds bare SemVer instead of leaving the `js-v` language prefix in the badge and npm links.\n\n**Related Pull Request:** #34\n\n---\n\n[![npm version](https://img.shields.io/badge/npm-0.3.6-blue.svg)](https://www.npmjs.com/package/lino-objects-codec/v/0.3.6)"}✅ Formatted release notes for v0.3.6
Release
` annotation in a green run.\n- Standardized release titles to `[Language] X.Y.Z` and tag prefixes to `<lang>_v` across all four languages.\n- Added a NuGet propagation verification step to `csharp.yml` (the only language that had none).\n- Added a `gh` exit-code check to `csharp/scripts/create-github-release.mjs` (it had none — same false-positive class as Rust before issue #31).\n- Fixed the JavaScript badge URL bug in `format-release-notes.mjs`: `replace(/^v/, '')` left language prefixes intact, producing broken `npm-js-v0.3.5-blue.svg` shields.io URLs and `/v/js-v0.3.5` npm links in the 0.3.5 release.\n\n## Evidence and Case Study\n\n`docs/case-studies/issue-33/` contains the original GitHub Actions log (`run-25288053638-js.log`), run metadata, and a README that cites exact log lines for each finding (4321, 4322, 4330–4331, 4346, 4356, 4370).\n\n## Changes\n\n### Shared release-format helpers\n\nEach language has a small helper module exposing the same four operations:\n\n- `normalizeReleaseVersionForBadge` — strips `lang-`, `lang_`, or bare `v` prefix, returns clean SemVer (preserving pre-release/build metadata).\n- `encodeShieldsStaticBadgeSegment` — applies shields.io static-badge escape rules (`-` → `--`, `_` → `__`).\n- `build<Registry>VersionBadge(packageName, version)` — npm/crates.io/NuGet/PyPI.\n- `buildReleaseTitle(language, version)` and `buildReleaseTag(prefix, version)`.\n\nFiles:\n\n- `js/scripts/release-format-helpers.mjs` + 11 tests in `js/tests/test_release_format_helpers.test.js`\n- `rust/scripts/release-format-helpers.mjs` + 4 tests\n- `csharp/scripts/release-format-helpers.mjs` + 5 tests\n- `python/scripts/create_github_release.py` (helpers inline) + 4 tests in `python/tests/test_create_github_release_helpers.py`\n\n### npm publish verification\n\n`js/scripts/publish-to-npm.mjs`: new `verifyPublishedWithRetry` with `VERIFY_MAX_ATTEMPTS=5` and exponential backoff (3s, 6s, 12s, 24s, 30s capped). The outer retry loop guards re-runs of `changeset publish` with a pre-check, so the first publish succeeding plus a slow CDN no longer causes a second publish attempt.\n\n### Release-creation scripts\n\nAll four `create-github-release` scripts now:\n\n- Default `--tag-prefix` to `<lang>_v` and accept `--language` and a registry-package arg.\n- Build the title via `buildReleaseTitle(\"Language\", version)` so titles read `[JavaScript] 0.3.5`, `[Rust] 0.2.1`, `[Python] 0.2.0`, `[C#] 0.2.0`.\n- Append a registry badge to the body if `img.shields.io` is not already present.\n- Inspect the publish/release-create exit code, treat `already_exists` as idempotent, otherwise fail.\n\n### Workflows\n\n- `.github/workflows/js.yml` — `--tag-prefix \"js-v\"` → `--tag-prefix \"js_v\" --language \"JavaScript\"`.\n- `.github/workflows/rust.yml` — `--tag-prefix \"rust-v\"` → `--tag-prefix \"rust_v\" --language \"Rust\"`.\n- `.github/workflows/python.yml` — `--tag-prefix \"python-v\"` → `--tag-prefix \"python_v\" --language \"Python\"`.\n- `.github/workflows/csharp.yml` — `--tag-prefix \"csharp-v\"` → `--tag-prefix \"csharp_v\" --language \"C#\"`, **plus** a new `Verify package on NuGet` step that polls `https://api.nuget.org/v3-flatcontainer/<id>/<version>/<id>.nuspec` between `dotnet nuget push` and `Create GitHub Release`.\n\n## Reproduction Tests\n\nEach new helper test fails on the bug it fixes and passes on the fix:\n\n- `normalizeReleaseVersionForBadge('js-v0.3.5') === '0.3.5'` (badge prefix)\n- `buildNpmVersionBadge('lino-objects-codec', 'js-v0.3.5')` does not contain `js-v` and links to `/v/0.3.5` (broken npm link)\n- `buildReleaseTitle('JavaScript', 'js-v0.3.5') === '[JavaScript] 0.3.5'` (`name: tag` bug)\n- `buildReleaseTag('js_v', '0.3.5') === 'js_v0.3.5'` (new tag prefix convention)\n\n## Verification\n\n- JavaScript: `npm test` — 160 pass, `npm run lint` — clean (5 pre-existing warnings), `npm run format:check` — clean.\n- Rust: `cargo test` — 32 pass, `cargo fmt --check` — clean, `cargo clippy --all-targets --all-features` — clean, `node --test scripts/*.test.mjs` — 12
Release
` annotations in green runs) by retrying the registry verification with exponential backoff and pre-checking the registry before re-running `changeset publish`. Standardize GitHub Release titles to `[JavaScript] X.Y.Z` and tag prefix to `js_v`. Fix the shields.io badge URL so it embeds bare SemVer instead of leaving the `js-v` language prefix in the badge and npm links."}ℹ️ Found Patch Changes section
Release
` annotations in green runs) by retrying the registry verification with exponential backoff and pre-checking the registry before re-running `changeset publish`. Standardize GitHub Release titles to `[JavaScript] X.Y.Z` and tag prefix to `js_v`. Fix the shields.io badge URL so it embeds bare SemVer instead of leaving the `js-v` language prefix in the badge and npm links."}{"url":"https://api.github.com/repos/link-foundation/lino-objects-codec/releases/318040784","assets_url":"https://api.github.com/repos/link-foundation/lino-objects-codec/releases/318040784/assets","upload_url":"https://uploads.github.com/repos/link-foundation/lino-objects-codec/releases/318040784/assets{?name,label}","html_url":"https://github.com/link-foundation/lino-objects-codec/releases/tag/js_v0.3.6","id":318040784,"author":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot]","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot]/followers","following_url":"https://api.github.com/users/github-actions%5Bbot]/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot]/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot]/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot]/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot]/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot]/repos","events_url":"https://api.github.com/users/github-actions%5Bbot]/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot]/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOQWrSmc4S9OrQ","tag_name":"js_v0.3.6","target_commitish":"main","name":"[JavaScript] 0.3.6","draft":false,"immutable":false,"prerelease":false,"created_at":"2026-05-05T20:05:48Z","updated_at":"2026-05-05T20:06:19Z","published_at":"2026-05-05T20:06:19Z","assets":[],"tarball_url":"https://api.github.com/repos/link-foundation/lino-objects-codec/tarball/js_v0.3.6","zipball_url":"https://api.github.com/repos/link-foundation/lino-objects-codec/zipball/js_v0.3.6","body":"### Patch Changes\n\n- d0fe09b: Fix the npm publish false positive (`##[error]` annotations in green runs) by retrying the registry verification with exponential backoff and pre-checking the registry before re-running `changeset publish`. Standardize GitHub Release titles to `[JavaScript] X.Y.Z` and tag prefix to `js_v`. Fix the shields.io badge URL so it embeds bare SemVer instead of leaving the `js-v` language prefix in the badge and npm links."}
Detect Changes
Node.js 20 actions are deprecated. The following actions are running on Node.js 20 and may not work as expected: actions/checkout@v4. Actions will be forced to run with Node.js 24 by default starting June 2nd, 2026. Node.js 20 will be removed from the runner on September 16th, 2026. Please check if updated versions of these actions are available that support Node.js 24. To opt into Node.js 24 now, set the FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true environment variable on the runner or in your workflow file. Once Node.js 24 becomes the default, you can temporarily opt out by setting ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
Lint and Format Check
Node.js 20 actions are deprecated. The following actions are running on Node.js 20 and may not work as expected: actions/checkout@v4, actions/setup-node@v4. Actions will be forced to run with Node.js 24 by default starting June 2nd, 2026. Node.js 20 will be removed from the runner on September 16th, 2026. Please check if updated versions of these actions are available that support Node.js 24. To opt into Node.js 24 now, set the FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true environment variable on the runner or in your workflow file. Once Node.js 24 becomes the default, you can temporarily opt out by setting ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
Lint and Format Check: js/src/format.js#L449
Function 'parseIndented' has a complexity of 16. Maximum allowed is 15
Lint and Format Check: js/src/codec.js#L273
Method '_decodeLink' has too many statements (95). Maximum allowed is 60
Lint and Format Check: js/src/codec.js#L273
Method '_decodeLink' has a complexity of 55. Maximum allowed is 15
Lint and Format Check: js/src/codec.js#L148
Method '_encodeValue' has a complexity of 23. Maximum allowed is 15
Lint and Format Check: js/examples/basic_usage.js#L7
Function 'main' has too many statements (71). Maximum allowed is 60
Test (Node.js on macos-latest)
Node.js 20 actions are deprecated. The following actions are running on Node.js 20 and may not work as expected: actions/checkout@v4, actions/setup-node@v4. Actions will be forced to run with Node.js 24 by default starting June 2nd, 2026. Node.js 20 will be removed from the runner on September 16th, 2026. Please check if updated versions of these actions are available that support Node.js 24. To opt into Node.js 24 now, set the FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true environment variable on the runner or in your workflow file. Once Node.js 24 becomes the default, you can temporarily opt out by setting ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
Test (Node.js on ubuntu-latest)
Node.js 20 actions are deprecated. The following actions are running on Node.js 20 and may not work as expected: actions/checkout@v4, actions/setup-node@v4. Actions will be forced to run with Node.js 24 by default starting June 2nd, 2026. Node.js 20 will be removed from the runner on September 16th, 2026. Please check if updated versions of these actions are available that support Node.js 24. To opt into Node.js 24 now, set the FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true environment variable on the runner or in your workflow file. Once Node.js 24 becomes the default, you can temporarily opt out by setting ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
Test (Node.js on windows-latest)
Node.js 20 actions are deprecated. The following actions are running on Node.js 20 and may not work as expected: actions/checkout@v4, actions/setup-node@v4. Actions will be forced to run with Node.js 24 by default starting June 2nd, 2026. Node.js 20 will be removed from the runner on September 16th, 2026. Please check if updated versions of these actions are available that support Node.js 24. To opt into Node.js 24 now, set the FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true environment variable on the runner or in your workflow file. Once Node.js 24 becomes the default, you can temporarily opt out by setting ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
Release
Node.js 20 actions are deprecated. The following actions are running on Node.js 20 and may not work as expected: actions/checkout@v4, actions/setup-node@v4. Actions will be forced to run with Node.js 24 by default starting June 2nd, 2026. Node.js 20 will be removed from the runner on September 16th, 2026. Please check if updated versions of these actions are available that support Node.js 24. To opt into Node.js 24 now, set the FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true environment variable on the runner or in your workflow file. Once Node.js 24 becomes the default, you can temporarily opt out by setting ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
Test (Node.js on windows-latest)
NOTICE: windows-2025 requests are being redirected to windows-2025-vs2026 by May 12, 2026