diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml
new file mode 100644
index 0000000..7dc08a1
--- /dev/null
+++ b/.github/workflows/checks.yml
@@ -0,0 +1,27 @@
+name: Checks
+
+on:
+ pull_request:
+ workflow_dispatch:
+
+permissions:
+ contents: read
+
+jobs:
+ bridge-contract:
+ runs-on: ubuntu-latest
+ timeout-minutes: 10
+ steps:
+ - uses: actions/checkout@v4
+ - uses: actions/setup-node@v4
+ with:
+ node-version: 22
+ cache: yarn
+ cache-dependency-path: plugin/yarn.lock
+ - name: Verify frozen assignment contract
+ run: node scripts/test-frozen-assignment-contract.mjs
+ - name: Build TypeScript bridge
+ working-directory: plugin
+ run: |
+ yarn install --frozen-lockfile
+ yarn build
diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
index 3f95937..a3d8543 100644
--- a/.github/workflows/publish.yml
+++ b/.github/workflows/publish.yml
@@ -29,6 +29,9 @@ jobs:
- name: Upgrade npm
run: npm install -g npm@11.7.0
+ - name: Verify frozen assignment contract
+ run: node scripts/test-frozen-assignment-contract.mjs
+
- name: Build
run: |
cd plugin
diff --git a/plugin/plugin.xml b/plugin/plugin.xml
index b2d95a8..c56e3e1 100644
--- a/plugin/plugin.xml
+++ b/plugin/plugin.xml
@@ -70,7 +70,7 @@
-
+
@@ -96,7 +96,7 @@
-
+
diff --git a/plugin/src/plugin/Mapper.ts b/plugin/src/plugin/Mapper.ts
index a315736..89ecc22 100644
--- a/plugin/src/plugin/Mapper.ts
+++ b/plugin/src/plugin/Mapper.ts
@@ -1161,6 +1161,8 @@ class Mapper {
return RemoteConfigurationAssignmentType.AUTO;
case "manual":
return RemoteConfigurationAssignmentType.MANUAL;
+ case "frozen":
+ return RemoteConfigurationAssignmentType.FROZEN;
default:
return RemoteConfigurationAssignmentType.UNKNOWN;
}
diff --git a/plugin/src/plugin/enums.ts b/plugin/src/plugin/enums.ts
index 2aedf43..0dead3d 100644
--- a/plugin/src/plugin/enums.ts
+++ b/plugin/src/plugin/enums.ts
@@ -257,6 +257,7 @@ export enum RemoteConfigurationAssignmentType {
UNKNOWN = "unknown",
AUTO = "auto",
MANUAL = "manual",
+ FROZEN = "frozen",
}
export enum ActionType {
diff --git a/scripts/test-frozen-assignment-contract.mjs b/scripts/test-frozen-assignment-contract.mjs
new file mode 100644
index 0000000..e585b79
--- /dev/null
+++ b/scripts/test-frozen-assignment-contract.mjs
@@ -0,0 +1,14 @@
+import assert from "node:assert/strict";
+import { readFileSync } from "node:fs";
+
+const mapper = readFileSync("plugin/src/plugin/Mapper.ts", "utf8");
+const enums = readFileSync("plugin/src/plugin/enums.ts", "utf8");
+const plugin = readFileSync("plugin/plugin.xml", "utf8");
+
+assert.match(enums, /FROZEN\s*=\s*["']frozen["']/);
+assert.match(mapper, /case\s+["']frozen["']:[\s\S]*RemoteConfigurationAssignmentType\.FROZEN/);
+assert.match(mapper, /default:[\s\S]*RemoteConfigurationAssignmentType\.UNKNOWN/);
+assert.match(plugin, /io\.qonversion:sandwich:7\.13\.0/);
+assert.match(plugin, /QonversionSandwich" spec="7\.13\.0"/);
+
+console.log("Frozen assignment bridge contract is intact.");