Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 14 additions & 8 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ env:
NODE_VERSION: '22'
ELECTRON_CACHE: ~/.cache/electron
ELECTRON_BUILDER_CACHE: ~/.cache/electron-builder
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true

jobs:
build:
Expand All @@ -23,7 +22,10 @@ jobs:
include:
- os: macos-14
platform: mac
- os: windows-latest
# Pin Windows runner explicitly. `windows-latest` migrates to
# `windows-2025-vs2026` on 2026-06-15; pinning ahead avoids a
# surprise toolchain swap mid-release. Revisit on each new GA.
- os: windows-2025-vs2026
platform: win
- os: ubuntu-latest
platform: linux
Expand All @@ -32,7 +34,7 @@ jobs:

steps:
- name: Checkout tag
uses: actions/checkout@v4
uses: actions/checkout@v5
with:
ref: ${{ github.ref }}
fetch-depth: 0
Expand All @@ -41,20 +43,20 @@ jobs:
uses: pnpm/action-setup@v5

- name: Setup Node.js
uses: actions/setup-node@v4
uses: actions/setup-node@v5
with:
node-version: ${{ env.NODE_VERSION }}
cache: 'pnpm'

- name: Cache pnpm store
uses: actions/cache@v4
uses: actions/cache@v5
with:
path: ~/.pnpm-store
key: pnpm-${{ matrix.platform }}-${{ hashFiles('pnpm-lock.yaml') }}
restore-keys: pnpm-${{ matrix.platform }}-

- name: Cache Electron downloads
uses: actions/cache@v4
uses: actions/cache@v5
with:
path: ${{ env.ELECTRON_CACHE }}
key: electron-v3-${{ matrix.platform }}-${{ hashFiles('apps/desktop/package.json') }}
Expand Down Expand Up @@ -105,7 +107,7 @@ jobs:
run: pnpm dist:linux --publish always

- name: Upload artifacts (backup)
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
with:
name: ${{ matrix.platform }}-build
path: |
Expand All @@ -116,7 +118,11 @@ jobs:
apps/desktop/release/*.deb
apps/desktop/release/latest*.yml
apps/desktop/release/*.blockmap
if-no-files-found: ignore
# `error` (was `ignore`) — if the build silently produced zero
# artefacts (signing failure, electron-builder swallowed an
# error, wrong working-directory, etc.) we want the job to fail
# loud here, not let the release un-draft with no installers.
if-no-files-found: error
retention-days: 30

publish:
Expand Down
63 changes: 34 additions & 29 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,25 +19,32 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5

- name: Setup pnpm
uses: pnpm/action-setup@v5

- name: Setup Node.js
uses: actions/setup-node@v4
uses: actions/setup-node@v5
with:
node-version: ${{ env.NODE_VERSION }}
cache: 'pnpm'

- name: Force HTTPS for GitHub git dependencies
run: git config --global 'url.https://github.com/.insteadOf' 'git@github.com:'

# CI only runs lint/test/typecheck/build — none of those exercise
# better-sqlite3 at runtime. Skipping postinstall avoids apps/desktop's
# electron-builder install-app-deps step, which rebuilds better-sqlite3
# against the bundled Electron headers — that rebuild can break the
# whole setup job when better-sqlite3 lags an Electron major (see the
# v0.15.0 incident where Electron 42's V8 API broke better-sqlite3
# 12.10.0). Same pattern used in release.yml and deploy-api.yml.
- name: Install dependencies
run: pnpm install --frozen-lockfile
run: pnpm install --frozen-lockfile --ignore-scripts

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Install Electron before running E2E

Because this setup cache is populated from pnpm install --ignore-scripts, dependency install scripts such as Electron's binary download are skipped. The later e2e job restores this same node_modules cache and launches the app via Playwright's Electron fixture (apps/desktop/e2e/fixtures.ts uses _electron.launch), but it never reruns installs without --ignore-scripts, so a clean CI run will have the electron package without its dist executable and the E2E job will fail before exercising the app. Keep scripts enabled for the E2E dependency path or add a targeted Electron install in that job.

Useful? React with 👍 / 👎.


- name: Cache node_modules
uses: actions/cache/save@v4
uses: actions/cache/save@v5
with:
path: |
node_modules
Expand All @@ -50,14 +57,14 @@ jobs:
needs: setup
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
- uses: pnpm/action-setup@v5
- uses: actions/setup-node@v4
- uses: actions/setup-node@v5
with:
node-version: ${{ env.NODE_VERSION }}

- name: Restore node_modules
uses: actions/cache/restore@v4
uses: actions/cache/restore@v5
with:
path: |
node_modules
Expand All @@ -71,25 +78,23 @@ jobs:
- name: Prettier
run: pnpm format:check

- name: Commitlint (PR title)
if: github.event_name == 'pull_request'
env:
PR_TITLE: ${{ github.event.pull_request.title }}
run: echo "$PR_TITLE" | pnpm commitlint
# PR title commitlint moved to .github/workflows/pr-title.yml so it
# exposes a stable, standalone status-check name for branch protection
# (squash-merge makes the PR title the release-trigger commit message).

# ── Tier 1: Tests + Coverage ───────────────────────
test:
needs: setup
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
- uses: pnpm/action-setup@v5
- uses: actions/setup-node@v4
- uses: actions/setup-node@v5
with:
node-version: ${{ env.NODE_VERSION }}

- name: Restore node_modules
uses: actions/cache/restore@v4
uses: actions/cache/restore@v5
with:
path: |
node_modules
Expand All @@ -105,7 +110,7 @@ jobs:

- name: Upload coverage
if: always()
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
with:
name: coverage-report
path: |
Expand All @@ -118,14 +123,14 @@ jobs:
needs: setup
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
- uses: pnpm/action-setup@v5
- uses: actions/setup-node@v4
- uses: actions/setup-node@v5
with:
node-version: ${{ env.NODE_VERSION }}

- name: Restore node_modules
uses: actions/cache/restore@v4
uses: actions/cache/restore@v5
with:
path: |
node_modules
Expand All @@ -151,14 +156,14 @@ jobs:
runs-on: ubuntu-latest
continue-on-error: true
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
- uses: pnpm/action-setup@v5
- uses: actions/setup-node@v4
- uses: actions/setup-node@v5
with:
node-version: ${{ env.NODE_VERSION }}

- name: Restore node_modules
uses: actions/cache/restore@v4
uses: actions/cache/restore@v5
with:
path: |
node_modules
Expand All @@ -181,7 +186,7 @@ jobs:

- name: Upload Playwright report on failure
if: failure()
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
with:
name: playwright-report
path: apps/desktop/playwright-report/
Expand All @@ -192,14 +197,14 @@ jobs:
needs: setup
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
- uses: pnpm/action-setup@v5
- uses: actions/setup-node@v4
- uses: actions/setup-node@v5
with:
node-version: ${{ env.NODE_VERSION }}

- name: Restore node_modules
uses: actions/cache/restore@v4
uses: actions/cache/restore@v5
with:
path: |
node_modules
Expand All @@ -220,14 +225,14 @@ jobs:
runs-on: ubuntu-latest
if: github.event_name == 'pull_request'
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
- uses: pnpm/action-setup@v5
- uses: actions/setup-node@v4
- uses: actions/setup-node@v5
with:
node-version: ${{ env.NODE_VERSION }}

- name: Restore node_modules
uses: actions/cache/restore@v4
uses: actions/cache/restore@v5
with:
path: |
node_modules
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ jobs:
security-events: write
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5

- name: Initialize CodeQL
uses: github/codeql-action/init@v4
Expand Down
15 changes: 11 additions & 4 deletions .github/workflows/deploy-api.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,23 @@ on:
- staging
- production

# Minimum-privilege default. The Cloudflare deploy doesn't push commits
# or create issues; checkout + read of the workflow definition is all
# the GITHUB_TOKEN side needs. Wrangler authenticates via the
# CLOUDFLARE_API_TOKEN secret separately.
permissions:
contents: read

jobs:
test:
name: Test API
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5

- uses: pnpm/action-setup@v5

- uses: actions/setup-node@v4
- uses: actions/setup-node@v5
with:
node-version: '22'
cache: 'pnpm'
Expand All @@ -49,11 +56,11 @@ jobs:
needs: test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5

- uses: pnpm/action-setup@v5

- uses: actions/setup-node@v4
- uses: actions/setup-node@v5
with:
node-version: '22'
cache: 'pnpm'
Expand Down
20 changes: 14 additions & 6 deletions .github/workflows/docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,31 +9,39 @@ on:
- '.github/workflows/docs.yml'
workflow_dispatch:

permissions:
contents: read

jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5

- uses: pnpm/action-setup@v5

- uses: actions/setup-node@v4
- uses: actions/setup-node@v5
with:
node-version: '22'
cache: 'pnpm'

- name: Force HTTPS for GitHub git dependencies
run: git config --global 'url.https://github.com/.insteadOf' 'git@github.com:'

- run: pnpm install
# Marketing site only needs @readied/web + product-config's transitive
# deps. Plain `pnpm install` would also run apps/desktop's postinstall
# (electron-builder install-app-deps -> better-sqlite3 native rebuild),
# which fails on the Linux + Node 22 runner. See #287 for the
# deploy-api workflow and #288 for release.yml — same fix shape.
- run: pnpm install --filter '@readied/web...' --ignore-scripts

- name: Build web app
working-directory: apps/web
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
cd apps/web
pnpm exec fumadocs-mdx
pnpm exec next build
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Deploy to Cloudflare Pages
env:
Expand Down
Loading
Loading