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.");