Skip to content

🐛 (clear-signing-tester) [NO-ISSUE]: Skip pre-release OS versions in auto-resolution#1395

Open
lcastillo-ledger wants to merge 1 commit intodevelopfrom
fix/skip-prerelease-os-versions
Open

🐛 (clear-signing-tester) [NO-ISSUE]: Skip pre-release OS versions in auto-resolution#1395
lcastillo-ledger wants to merge 1 commit intodevelopfrom
fix/skip-prerelease-os-versions

Conversation

@lcastillo-ledger
Copy link
Copy Markdown
Contributor

Summary

  • Filter out pre-release OS versions (e.g. 1.6.0-rc1, 1.4.0-rc3) from the AppVersionResolverService auto-resolution, so the latest stable OS is selected by default
  • Prevents automatic selection of coin-apps requiring SDK api_levels not yet supported by the bundled Speculos in ledger-app-dev-tools:latest
  • Falls back to pre-releases only if no stable versions exist at all
  • Explicitly requested versions via --os-version are unaffected

Context

The coin-apps repository contains both stable and pre-release OS directories (e.g. flex/1.6.0-rc1/). The auto-resolver was picking 1.6.0-rc1 (api_level 26) over the stable 1.5.1 (api_level 25), causing Speculos to fail with invalid SDK api_level: 26 since the bundled Speculos only supports up to api_level 25.

Test plan

  • Verified auto-resolution now picks flex/1.5.1 instead of flex/1.6.0-rc1
  • Verified Speculos starts successfully with the resolved version
  • Explicit --os-version 1.6.0-rc1 still works when intentionally requested

Made with Cursor

…auto-resolution

The app version resolver now filters out pre-release OS versions (e.g.
1.6.0-rc1) when auto-resolving the latest version, preventing selection
of coin-apps requiring SDK api_levels not yet supported by the bundled
Speculos. Falls back to pre-releases only if no stable versions exist.
Explicitly requested versions via --os-version are unaffected.

Made-with: Cursor
Copilot AI review requested due to automatic review settings March 27, 2026 15:30
@lcastillo-ledger lcastillo-ledger requested a review from a team as a code owner March 27, 2026 15:30
@vercel
Copy link
Copy Markdown

vercel bot commented Mar 27, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
device-sdk-ts-sample Ready Ready Preview, Comment Mar 27, 2026 3:31pm
1 Skipped Deployment
Project Deployment Actions Updated (UTC)
doc-device-management-kit Ignored Ignored Mar 27, 2026 3:31pm

Request Review

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates the clear-signing-tester’s OS auto-resolution behavior to prefer stable OS directory versions over pre-releases (e.g., -rcN) when selecting a default OS version from coin-apps.

Changes:

  • Filter OS version directories to prefer stable SemVer versions (non-prerelease) during version discovery.
  • Add debug/warn logging around skipped pre-release selection and fallback behavior.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +144 to +161
const stableVersions = allVersions.filter(
(v) => semver.valid(v) && semver.prerelease(v) === null,
);

if (stableVersions.length > 0) {
const skipped = allVersions.length - stableVersions.length;
if (skipped > 0) {
this.logger.debug(
`Filtered out ${skipped} pre-release OS version(s) from auto-resolution`,
);
}
return stableVersions;
}

this.logger.warn(
"No stable OS versions found, falling back to all versions including pre-releases",
);
return allVersions;
Copy link

Copilot AI Mar 27, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The “fallback to pre-releases if no stable versions exist” logic here won’t take effect in auto-resolution: resolve() still calls getStableOsVersions(availableOsVersions) for the auto OS paths, which will filter out all pre-releases again (and can leave an empty list when only RCs exist). Consider moving the stable-vs-prerelease preference/fallback into getStableOsVersions (return stable if any, else return all), or stop filtering in resolve() and let the downstream selection logic handle the fallback.

Suggested change
const stableVersions = allVersions.filter(
(v) => semver.valid(v) && semver.prerelease(v) === null,
);
if (stableVersions.length > 0) {
const skipped = allVersions.length - stableVersions.length;
if (skipped > 0) {
this.logger.debug(
`Filtered out ${skipped} pre-release OS version(s) from auto-resolution`,
);
}
return stableVersions;
}
this.logger.warn(
"No stable OS versions found, falling back to all versions including pre-releases",
);
return allVersions;
const semverVersions = allVersions.filter((v) => semver.valid(v));
const skipped = allVersions.length - semverVersions.length;
if (skipped > 0) {
this.logger.debug(
`Filtered out ${skipped} non-semver OS version(s) from auto-resolution`,
);
}
if (semverVersions.length === 0 && allVersions.length > 0) {
this.logger.warn(
"No semver-valid OS versions found in device directory; auto-resolution may fail",
);
}
return semverVersions;

Copilot uses AI. Check for mistakes.
Comment on lines +149 to +152
const skipped = allVersions.length - stableVersions.length;
if (skipped > 0) {
this.logger.debug(
`Filtered out ${skipped} pre-release OS version(s) from auto-resolution`,
Copy link

Copilot AI Mar 27, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The debug message/skip count is misleading: stableVersions excludes both pre-releases and any non-semver directory names (because of semver.valid(v)), so skipped can include more than just pre-release versions. Either compute/log pre-release vs invalid counts separately, or adjust the filter so the message matches what’s actually being filtered out.

Suggested change
const skipped = allVersions.length - stableVersions.length;
if (skipped > 0) {
this.logger.debug(
`Filtered out ${skipped} pre-release OS version(s) from auto-resolution`,
const nonStableVersions = allVersions.filter(
(v) => !semver.valid(v) || semver.prerelease(v) !== null,
);
const skipped = nonStableVersions.length;
if (skipped > 0) {
this.logger.debug(
`Filtered out ${skipped} non-stable OS version(s) (pre-release or invalid semver directory names) from auto-resolution`,

Copilot uses AI. Check for mistakes.
@github-actions
Copy link
Copy Markdown
Contributor

Fails
🚫

node failed.

Danger Check Results

Failures

🚫

Please fix the PR branch name to match the convention, see CONTRIBUTING.md.

Wrong branch name: fix/skip-prerelease-os-versions

ℹ️ Regex to match: /^(release|chore\/backmerge(-.+){0,}|(feature|feat|bugfix|bug|hotfix|fix|support|chore|core|doc|refacto|refactor)\/((dsdk|live)-[0-9]+|no-issue|NOISSUE|issue-[0-9]+)-.+)/i

  • Rules:
    • Must start with a type (feature, feat, bugfix, bug, hotfix, fix, support, chore, core, doc, refacto, refactor)
    • Followed by a SLASH ("/")
    • Followed by a JIRA issue number (DSDK-1234) (LIVE-1234) or "no-issue" or "issue-1234" if fixing a Github issue
    • Followed by a DASH ("-")
    • Followed by a description

ℹ️ Example: feat/dsdk-1234-my-feature

Messages

⚠️

No changeset file found. Please make sure this is intended or add a changeset file.

Log

Details
PR Actor: lcastillo-ledger
danger-results://tmp/danger-results-37fb754f.json

Generated by 🚫 dangerJS against 4beb361

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants