Skip to content

Commit b5c448d

Browse files
authored
release: make cli publish optional and final (#339)
1 parent 75727c7 commit b5c448d

1 file changed

Lines changed: 35 additions & 8 deletions

File tree

.github/workflows/release.yml

Lines changed: 35 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,11 @@ on:
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

1419
permissions:
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

Comments
 (0)