1010 description : " Release version (for example 1.2.3 or v1.2.3)"
1111 required : true
1212 type : string
13+ publish_cli :
14+ description : " Publish the okcodes CLI to npm after the desktop release finalizes"
15+ required : false
16+ default : false
17+ type : boolean
1318
1419permissions :
1520 contents : write
@@ -520,19 +525,20 @@ jobs:
520525
521526 publish_cli :
522527 name : Publish CLI
523- needs : [preflight, desktop_build, ios_signing_preflight, ios_testflight]
524- if : ${{ always() && !cancelled() && needs.preflight.result == 'success' && needs.desktop_build.result == 'success' && needs.ios_signing_preflight.result == 'success' && (needs.ios_testflight.result == 'success' || needs.ios_testflight.result == 'skipped') }}
528+ needs : [preflight, finalize]
529+ if : ${{ !cancelled() && needs.finalize.result == 'success' && github.event_name == 'workflow_dispatch' && inputs.publish_cli }}
530+ continue-on-error : true
525531 runs-on : ubuntu-24.04
526532 env :
527533 NODE_AUTH_TOKEN : ${{ secrets.NODE_AUTH_TOKEN }}
528534 OKCODE_COMMIT_HASH : ${{ github.sha }}
529535 OKCODE_BUILD_TIMESTAMP : ${{ needs.preflight.outputs.build_timestamp }}
530536 OKCODE_RELEASE_CHANNEL : ${{ needs.preflight.outputs.release_channel }}
531537 steps :
532- - name : Checkout
538+ - name : Checkout finalized main
533539 uses : actions/checkout@v6
534540 with :
535- ref : ${{ needs.preflight.outputs.ref }}
541+ ref : main
536542 fetch-depth : 0
537543
538544 - name : Setup Bun
@@ -549,8 +555,29 @@ jobs:
549555 - name : Install dependencies
550556 run : bun install --frozen-lockfile
551557
552- - name : Align package versions to release version
553- run : node scripts/update-release-package-versions.ts "${{ needs.preflight.outputs.version }}"
558+ - name : Assert package versions match stated release version
559+ env :
560+ RELEASE_VERSION : ${{ needs.preflight.outputs.version }}
561+ run : |
562+ node <<'NODE'
563+ const fs = require('fs');
564+ const files = [
565+ 'apps/server/package.json',
566+ 'apps/desktop/package.json',
567+ 'apps/web/package.json',
568+ 'apps/mobile/package.json',
569+ 'packages/contracts/package.json',
570+ ];
571+ const expected = process.env.RELEASE_VERSION;
572+ const mismatches = files.filter((file) => {
573+ const version = JSON.parse(fs.readFileSync(file, 'utf8')).version;
574+ return version !== expected;
575+ });
576+ if (mismatches.length > 0) {
577+ console.error(`Package version mismatch for release ${expected}: ${mismatches.join(', ')}`);
578+ process.exit(1);
579+ }
580+ NODE
554581
555582 - name : Build CLI package
556583 run : bun run build --filter=@okcode/web --filter=okcodes
@@ -580,8 +607,8 @@ jobs:
580607
581608 release :
582609 name : Publish GitHub Release
583- needs : [preflight, desktop_build, ios_signing_preflight, ios_testflight, publish_cli ]
584- if : ${{ always() && !cancelled() && needs.preflight.result == 'success' && needs.desktop_build.result == 'success' && needs.ios_signing_preflight.result == 'success' && (needs.ios_testflight.result == 'success' || needs.ios_testflight.result == 'skipped') && needs.publish_cli.result == 'success' }}
610+ needs : [preflight, desktop_build, ios_signing_preflight, ios_testflight]
611+ if : ${{ always() && !cancelled() && needs.preflight.result == 'success' && needs.desktop_build.result == 'success' && needs.ios_signing_preflight.result == 'success' && (needs.ios_testflight.result == 'success' || needs.ios_testflight.result == 'skipped') }}
585612 runs-on : ubuntu-24.04
586613 steps :
587614 - name : Checkout
0 commit comments