| ... | @@ -22,12 +22,10 @@ jobs: | ... | @@ -22,12 +22,10 @@ jobs: |
| 22 | outputs: | 22 | outputs: |
| 23 | version: ${{ steps.release_meta.outputs.version }} | 23 | version: ${{ steps.release_meta.outputs.version }} |
| 24 | tag: ${{ steps.release_meta.outputs.tag }} | 24 | tag: ${{ steps.release_meta.outputs.tag }} |
| 25 | ref: ${{ steps.release_ref.outputs.value }} | 25 | ref: ${{ github.sha }} |
| 26 | steps: | 26 | steps: |
| 27 | - name: Checkout | 27 | - name: Checkout |
| 28 | uses: actions/checkout@v4 | 28 | uses: actions/checkout@v4 |
| 29 | with: | | |
| 30 | fetch-depth: 0 | | |
| 31 | | 29 | |
| 32 | - id: release_meta | 30 | - id: release_meta |
| 33 | name: Resolve release version | 31 | name: Resolve release version |
| ... | @@ -58,32 +56,6 @@ jobs: | ... | @@ -58,32 +56,6 @@ jobs: |
| 58 | with: | 56 | with: |
| 59 | node-version-file: package.json | 57 | node-version-file: package.json |
| 60 | | 58 | |
| 61 | - name: Update version strings | | |
| 62 | if: github.event_name == 'workflow_dispatch' | | |
| 63 | env: | | |
| 64 | RELEASE_VERSION: ${{ steps.release_meta.outputs.version }} | | |
| 65 | run: | | | |
| 66 | node --input-type=module -e ' | | |
| 67 | import { readFileSync, writeFileSync } from "node:fs"; | | |
| 68 | | | |
| 69 | const files = [ | | |
| 70 | "apps/server/package.json", | | |
| 71 | "apps/desktop/package.json", | | |
| 72 | "apps/web/package.json", | | |
| 73 | "packages/contracts/package.json", | | |
| 74 | ]; | | |
| 75 | | | |
| 76 | for (const file of files) { | | |
| 77 | const packageJson = JSON.parse(readFileSync(file, "utf8")); | | |
| 78 | packageJson.version = process.env.RELEASE_VERSION; | | |
| 79 | writeFileSync(file, `${JSON.stringify(packageJson, null, 2)}\n`); | | |
| 80 | } | | |
| 81 | ' | | |
| 82 | | | |
| 83 | - name: Refresh lockfile | | |
| 84 | if: github.event_name == 'workflow_dispatch' | | |
| 85 | run: bun install | | |
| 86 | | | |
| 87 | - name: Install dependencies | 59 | - name: Install dependencies |
| 88 | run: bun install --frozen-lockfile | 60 | run: bun install --frozen-lockfile |
| 89 | | 61 | |
| ... | @@ -96,39 +68,6 @@ jobs: | ... | @@ -96,39 +68,6 @@ jobs: |
| 96 | - name: Test | 68 | - name: Test |
| 97 | run: bun run test | 69 | run: bun run test |
| 98 | | 70 | |
| 99 | - name: Commit and push release version + tag | | |
| 100 | if: github.event_name == 'workflow_dispatch' | | |
| 101 | shell: bash | | |
| 102 | env: | | |
| 103 | RELEASE_TAG: ${{ steps.release_meta.outputs.tag }} | | |
| 104 | run: | | | |
| 105 | if git ls-remote --exit-code --tags origin "$RELEASE_TAG" >/dev/null 2>&1; then | | |
| 106 | echo "Tag $RELEASE_TAG already exists on origin." >&2 | | |
| 107 | exit 1 | | |
| 108 | fi | | |
| 109 | | | |
| 110 | git config user.name "github-actions[bot]" | | |
| 111 | git config user.email "41898282+github-actions[bot]@users.noreply.github.com" | | |
| 112 | | | |
| 113 | if ! git diff --quiet -- apps/server/package.json apps/desktop/package.json apps/web/package.json packages/contracts/package.json bun.lock; then | | |
| 114 | git add apps/server/package.json apps/desktop/package.json apps/web/package.json packages/contracts/package.json bun.lock | | |
| 115 | git commit -m "chore(release): prepare $RELEASE_TAG" -m "Co-authored-by: codex <codex@users.noreply.github.com>" | | |
| 116 | fi | | |
| 117 | | | |
| 118 | git tag "$RELEASE_TAG" | | |
| 119 | git push origin "HEAD:${GITHUB_REF_NAME}" | | |
| 120 | git push origin "refs/tags/$RELEASE_TAG" | | |
| 121 | | | |
| 122 | - id: release_ref | | |
| 123 | name: Resolve source ref | | |
| 124 | shell: bash | | |
| 125 | run: | | | |
| 126 | if [[ "${GITHUB_EVENT_NAME}" == "workflow_dispatch" ]]; then | | |
| 127 | echo "value=refs/tags/${{ steps.release_meta.outputs.tag }}" >> "$GITHUB_OUTPUT" | | |
| 128 | else | | |
| 129 | echo "value=${GITHUB_SHA}" >> "$GITHUB_OUTPUT" | | |
| 130 | fi | | |
| 131 | | | |
| 132 | build: | 71 | build: |
| 133 | name: Build ${{ matrix.label }} | 72 | name: Build ${{ matrix.label }} |
| 134 | needs: preflight | 73 | needs: preflight |
| ... | @@ -320,6 +259,7 @@ jobs: | ... | @@ -320,6 +259,7 @@ jobs: |
| 320 | tag_name: ${{ needs.preflight.outputs.tag }} | 259 | tag_name: ${{ needs.preflight.outputs.tag }} |
| 321 | name: T3 Code v${{ needs.preflight.outputs.version }} | 260 | name: T3 Code v${{ needs.preflight.outputs.version }} |
| 322 | generate_release_notes: true | 261 | generate_release_notes: true |
| | 262 | make_latest: true |
| 323 | files: | | 263 | files: | |
| 324 | release-assets/*.dmg | 264 | release-assets/*.dmg |
| 325 | release-assets/*.zip | 265 | release-assets/*.zip |
| ... | @@ -328,3 +268,73 @@ jobs: | ... | @@ -328,3 +268,73 @@ jobs: |
| 328 | release-assets/*.blockmap | 268 | release-assets/*.blockmap |
| 329 | release-assets/latest*.yml | 269 | release-assets/latest*.yml |
| 330 | fail_on_unmatched_files: true | 270 | fail_on_unmatched_files: true |
| | 271 | |
| | 272 | finalize: |
| | 273 | name: Finalize release |
| | 274 | needs: [preflight, release] |
| | 275 | runs-on: ubuntu-24.04 |
| | 276 | steps: |
| | 277 | - name: Checkout |
| | 278 | uses: actions/checkout@v4 |
| | 279 | with: |
| | 280 | ref: main |
| | 281 | fetch-depth: 0 |
| | 282 | |
| | 283 | - name: Setup Bun |
| | 284 | uses: oven-sh/setup-bun@v2 |
| | 285 | with: |
| | 286 | bun-version-file: package.json |
| | 287 | |
| | 288 | - name: Setup Node |
| | 289 | uses: actions/setup-node@v4 |
| | 290 | with: |
| | 291 | node-version-file: package.json |
| | 292 | |
| | 293 | - name: Update version strings |
| | 294 | env: |
| | 295 | RELEASE_VERSION: ${{ needs.preflight.outputs.version }} |
| | 296 | run: | |
| | 297 | node --input-type=module -e ' |
| | 298 | import { readFileSync, writeFileSync } from "node:fs"; |
| | 299 | |
| | 300 | const files = [ |
| | 301 | "apps/server/package.json", |
| | 302 | "apps/desktop/package.json", |
| | 303 | "apps/web/package.json", |
| | 304 | "packages/contracts/package.json", |
| | 305 | ]; |
| | 306 | |
| | 307 | let changed = false; |
| | 308 | for (const file of files) { |
| | 309 | const packageJson = JSON.parse(readFileSync(file, "utf8")); |
| | 310 | if (packageJson.version !== process.env.RELEASE_VERSION) { |
| | 311 | packageJson.version = process.env.RELEASE_VERSION; |
| | 312 | writeFileSync(file, `${JSON.stringify(packageJson, null, 2)}\n`); |
| | 313 | changed = true; |
| | 314 | } |
| | 315 | } |
| | 316 | |
| | 317 | if (!changed) { |
| | 318 | console.log("All package.json versions already match release version."); |
| | 319 | } |
| | 320 | ' |
| | 321 | |
| | 322 | - name: Refresh lockfile |
| | 323 | run: bun install |
| | 324 | |
| | 325 | - name: Commit and push version bump |
| | 326 | shell: bash |
| | 327 | env: |
| | 328 | RELEASE_TAG: ${{ needs.preflight.outputs.tag }} |
| | 329 | run: | |
| | 330 | if git diff --quiet -- apps/server/package.json apps/desktop/package.json apps/web/package.json packages/contracts/package.json bun.lock; then |
| | 331 | echo "No version changes to commit." |
| | 332 | exit 0 |
| | 333 | fi |
| | 334 | |
| | 335 | git config user.name "github-actions[bot]" |
| | 336 | git config user.email "41898282+github-actions[bot]@users.noreply.github.com" |
| | 337 | |
| | 338 | git add apps/server/package.json apps/desktop/package.json apps/web/package.json packages/contracts/package.json bun.lock |
| | 339 | git commit -m "chore(release): prepare $RELEASE_TAG" |
| | 340 | git push origin HEAD:main |