mirror of
https://github.com/callstack/agent-device.git
synced 2026-09-14 20:06:34 +08:00
fix(android): derive helper version codes from prerelease semver cores
This commit is contained in:
+2
-2
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "agent-device",
|
||||
"version": "0.20.11-a1",
|
||||
"version": "0.20.11-a2",
|
||||
"description": "Mobile app automation and verification for AI coding agents. CLI, MCP server, and typed Node.js API for iOS, Android, HarmonyOS, TV, web, macOS, and Linux.",
|
||||
"mcpName": "io.github.callstack/agent-device",
|
||||
"license": "MIT",
|
||||
@@ -101,7 +101,7 @@
|
||||
"package:android-snapshot-helper": "AGENT_DEVICE_ANDROID_HELPER=snapshot sh ./scripts/package-android-helper.sh $(node -p \"require('./package.json').version\") v$(node -p \"require('./package.json').version\") .tmp/android-snapshot-helper",
|
||||
"package:android-snapshot-helper:npm": "rm -rf android/snapshot-helper/dist && AGENT_DEVICE_ANDROID_HELPER=snapshot sh ./scripts/package-android-helper.sh $(node -p \"require('./package.json').version\") v$(node -p \"require('./package.json').version\") android/snapshot-helper/dist",
|
||||
"package:apple-runner:npm": "node scripts/package-apple-runner-source.mjs",
|
||||
"build:android": "pnpm package:android-snapshot-helper:npm && pnpm package:android-ime-helper:npm",
|
||||
"build:android": "node --experimental-strip-types scripts/node-test-tmpdir.ts --test scripts/android-helper-version-code.test.mjs && pnpm package:android-snapshot-helper:npm && pnpm package:android-ime-helper:npm",
|
||||
"build:android-ime-helper": "AGENT_DEVICE_ANDROID_HELPER=ime sh ./scripts/build-android-helper.sh $(node -p \"require('./package.json').version\") .tmp/android-ime-helper",
|
||||
"package:android-ime-helper": "AGENT_DEVICE_ANDROID_HELPER=ime sh ./scripts/package-android-helper.sh $(node -p \"require('./package.json').version\") .tmp/android-ime-helper",
|
||||
"package:android-ime-helper:npm": "rm -rf android/ime-helper/dist && AGENT_DEVICE_ANDROID_HELPER=ime sh ./scripts/package-android-helper.sh $(node -p \"require('./package.json').version\") android/ime-helper/dist",
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
import { pathToFileURL } from 'node:url';
|
||||
|
||||
export function androidHelperVersionCode(version) {
|
||||
const [major, minor, patch] = parseSemverCore(version);
|
||||
const code = major * 1000000 + minor * 1000 + patch;
|
||||
assertRepresentableCode(code, minor, patch);
|
||||
return code;
|
||||
}
|
||||
|
||||
function parseSemverCore(version) {
|
||||
const match =
|
||||
/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/.exec(
|
||||
version,
|
||||
);
|
||||
if (!match || match[4]?.split('.').some((part) => /^0\d+$/.test(part))) {
|
||||
throw new Error('Android helper version must be valid SemVer');
|
||||
}
|
||||
return match.slice(1, 4).map(Number);
|
||||
}
|
||||
|
||||
function assertRepresentableCode(code, minor, patch) {
|
||||
if (minor >= 1000 || patch >= 1000 || !isAndroidVersionCode(code)) {
|
||||
throw new Error('Android helper version cannot be represented as an Android version code');
|
||||
}
|
||||
}
|
||||
|
||||
function isAndroidVersionCode(code) {
|
||||
return code >= 1 && code <= 2100000000;
|
||||
}
|
||||
|
||||
if (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) {
|
||||
process.stdout.write(`${androidHelperVersionCode(process.argv[2])}\n`);
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
import assert from 'node:assert/strict';
|
||||
import { test } from 'node:test';
|
||||
import { androidHelperVersionCode } from './android-helper-version-code.mjs';
|
||||
|
||||
for (const version of ['0.20.11', '0.20.11-a2', '0.20.11-alpha.2+build.7', '0.20.11+build.7']) {
|
||||
test(`helper version ${version} retains its semver core code`, () => {
|
||||
assert.equal(androidHelperVersionCode(version), 20011);
|
||||
});
|
||||
}
|
||||
|
||||
for (const version of [
|
||||
'',
|
||||
'dev',
|
||||
'v0.20.11',
|
||||
'00.20.11',
|
||||
'0.20.11-01',
|
||||
'0.20.11+',
|
||||
'0.1000.0',
|
||||
'0.0.0',
|
||||
'2148.0.0',
|
||||
]) {
|
||||
test(`invalid or unrepresentable helper version ${version} is rejected`, () => {
|
||||
assert.throws(() => androidHelperVersionCode(version));
|
||||
});
|
||||
}
|
||||
@@ -64,15 +64,7 @@ if [ -z "$BUILD_TOOLS_DIR" ] || [ ! -x "$BUILD_TOOLS_DIR/aapt2" ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
VERSION_CODE="$(
|
||||
printf '%s\n' "$VERSION" | awk -F. '
|
||||
/^[0-9]+[.][0-9]+[.][0-9]+$/ {
|
||||
print ($1 * 1000000) + ($2 * 1000) + $3
|
||||
next
|
||||
}
|
||||
{ print 1 }
|
||||
'
|
||||
)"
|
||||
VERSION_CODE="$(node "$PROJECT_DIR/scripts/android-helper-version-code.mjs" "$VERSION")"
|
||||
|
||||
BUILD_DIR="$HELPER_DIR/build"
|
||||
CLASSES_DIR="$BUILD_DIR/classes"
|
||||
|
||||
+2
-2
@@ -7,12 +7,12 @@
|
||||
"url": "https://github.com/callstack/agent-device",
|
||||
"source": "github"
|
||||
},
|
||||
"version": "0.20.11-a1",
|
||||
"version": "0.20.11-a2",
|
||||
"packages": [
|
||||
{
|
||||
"registryType": "npm",
|
||||
"identifier": "agent-device",
|
||||
"version": "0.20.11-a1",
|
||||
"version": "0.20.11-a2",
|
||||
"transport": {
|
||||
"type": "stdio"
|
||||
},
|
||||
|
||||
@@ -65,6 +65,7 @@ test('the npm package build covers every package-owned output before verificatio
|
||||
assert.equal(script('package:npm'), 'pnpm build:package && pnpm check:package');
|
||||
|
||||
assert.deepEqual(script('build:android').split(' && '), [
|
||||
'node --experimental-strip-types scripts/node-test-tmpdir.ts --test scripts/android-helper-version-code.test.mjs',
|
||||
'pnpm package:android-snapshot-helper:npm',
|
||||
'pnpm package:android-ime-helper:npm',
|
||||
]);
|
||||
|
||||
Reference in New Issue
Block a user