Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
70 commits
Select commit Hold shift + click to select a range
dea65ff
Trigger Build
jthrilly Feb 9, 2026
97d2df7
Trigger Build
buckhalt Feb 9, 2026
df160c7
fix: include VERCEL_DEPLOYMENT_ID in cache keys when options not prov…
jthrilly Feb 10, 2026
ee23e6b
refactor: use shared setup-pnpm action for CI workflows
jthrilly Feb 10, 2026
a731d83
feat: add Netlify deploy preview with Neon database branching
jthrilly Feb 10, 2026
e0cbe30
fix: resolve Netlify deploy preview runtime errors
jthrilly Feb 10, 2026
cd5a220
fix: remove duplicate setup spec that broke onboarding tests
jthrilly Feb 10, 2026
1d79f29
Update docker-compose.prod.yml
jthrilly Feb 10, 2026
cd823ad
Update app/dashboard/_components/RecruitmentTestSection.tsx
jthrilly Feb 10, 2026
33e560b
docs: update NodeBin docstring to include FAMILY_TREE_NODE
Copilot Feb 10, 2026
975fa25
Fix SuperJSON import to use default import instead of named import
Copilot Feb 10, 2026
348ad8d
fix: prevent unstable_cache key collisions by using tags as keyParts
buckhalt Feb 11, 2026
44e8454
Update lib/__tests__/cache-collision.test.ts
buckhalt Feb 11, 2026
05feb39
knip
buckhalt Feb 11, 2026
a61d0e0
Merge pull request #625 from complexdatacollective/fix/cache-collision
buckhalt Feb 11, 2026
6232828
fix neon api key name
buckhalt Feb 11, 2026
ff2e1f6
Merge pull request #626 from complexdatacollective/fix/netlify-branch…
buckhalt Feb 11, 2026
c07aa18
lint
buckhalt Feb 11, 2026
8cedd3a
fix silent migration failure and add build visibility
jthrilly Feb 13, 2026
e05a6a4
make e2e tests manually triggered instead of running on every PR commit
jthrilly Feb 13, 2026
e95c5c4
run database migrations as separate visible step in deploy preview
jthrilly Feb 13, 2026
29eb151
add --debug flag to netlify deploy for build visibility
jthrilly Feb 13, 2026
8b96a20
split netlify build and deploy for visible build output
jthrilly Feb 13, 2026
cf85e0b
trigger deploy preview
buckhalt Feb 13, 2026
39997bd
fix: use push trigger for deploy preview to run with merge conflicts
buckhalt Feb 13, 2026
177708c
fix: use pull_request trigger with head checkout for deploy preview
buckhalt Feb 16, 2026
8f9ba95
fix: prevent reuse of assets from failed preview uploads
buckhalt Feb 16, 2026
c9e024f
Revert "fix: use pull_request trigger with head checkout for deploy p…
buckhalt Feb 16, 2026
de61973
refactor: migrate preview API to versioned route structure
buckhalt Feb 17, 2026
6c21631
feat: add greaterThanOrEqualToVariable and lessThanOrEqualToVariable…
buckhalt Feb 16, 2026
855e859
update protocol-validation
buckhalt Feb 17, 2026
f99ba83
Merge pull request #637 from complexdatacollective/feature/gte-lte-va…
buckhalt Feb 17, 2026
be38051
Fix numeric string comparison in field validation
buckhalt Feb 17, 2026
d636990
add apiToken to reset app settings action
buckhalt Feb 19, 2026
280b553
Extract resetDatabase utility and add schema-driven test
buckhalt Feb 20, 2026
95aa71c
fix: family tree hydration to read labels and isEgo from node attributes
buckhalt Feb 20, 2026
0ceabf7
fix: finish interview flow for preview mode
buckhalt Feb 20, 2026
bf01ac9
fix: restore default attribute merging in updateEgo
buckhalt Feb 23, 2026
fa1c7bb
lint & type check fixes
buckhalt Feb 23, 2026
dbbb5a3
fix: textarea data not saving
buckhalt Feb 23, 2026
cbcdd7b
replace you text on node with person icon
buckhalt Feb 24, 2026
75195bf
center tree
buckhalt Feb 24, 2026
a66993f
add padding to prevent cutoff of disease nomination on top row
buckhalt Feb 24, 2026
c24044f
fix activity table interview completion details
buckhalt Feb 24, 2026
88b3898
fix: additional partners not able to be deleted
buckhalt Feb 24, 2026
2583da6
fix: prevent duplicate Neon branches on preview deploy
buckhalt Feb 24, 2026
b19c433
knip
buckhalt Feb 24, 2026
2fa85ac
fix: use global netlify-cli install instead of pnpm dlx
buckhalt Feb 24, 2026
4933671
increase spacing between rows to improve label overlap
buckhalt Feb 24, 2026
5344830
improve deploy comment to mimic automatic netlify deployment comment
buckhalt Feb 24, 2026
fd2cc0c
fix comment title and correctly search for it
buckhalt Feb 24, 2026
d724202
fix: ordinal bin should use small node size
buckhalt Feb 24, 2026
0f20ef1
move generate family tree button to footer
buckhalt Feb 24, 2026
40bf0b2
include ego in disease nomination step
buckhalt Feb 24, 2026
f113905
fix: progress bar overshoot when navigating between stages
buckhalt Feb 24, 2026
d73d3b0
use adapted add a person icon for family tree you node
buckhalt Feb 25, 2026
aa99533
fix: ordinal bin node clipping and animation issues
buckhalt Feb 25, 2026
bde5975
fix: dropzone overflow
buckhalt Feb 25, 2026
b4b5ea3
rm changes related to netlify deployment
buckhalt Feb 26, 2026
4693c49
fix: add ariaLabel prop to Node for accessible family tree nodes
buckhalt Feb 26, 2026
f623858
fix: register uploads with UploadThing to enable CORS for browser upl…
buckhalt Feb 26, 2026
0a15621
remove isDev to fix 60s delay in upload
buckhalt Feb 26, 2026
e3f20c4
refactor: improve type safety and robustness in presigned upload regi…
buckhalt Feb 27, 2026
4eb4741
fix: uploadthing version sync and aria-label improvements
buckhalt Feb 27, 2026
7ee541f
remvoe uploadthing version from headers
buckhalt Feb 27, 2026
8f4d48c
feature: separate preview protocols table and fix asset upload ordering
buckhalt Mar 2, 2026
ec1e035
knip
buckhalt Mar 2, 2026
1d7c419
add asset cleanup
buckhalt Mar 2, 2026
73940a0
Merge pull request #646 from complexdatacollective/pedigree-bugfixes
buckhalt Mar 2, 2026
a50c3a1
fix table name
buckhalt Mar 2, 2026
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
72 changes: 0 additions & 72 deletions .github/actions/pnpm-cache/action.yml

This file was deleted.

152 changes: 18 additions & 134 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,140 +11,24 @@ on:
- '*'

jobs:
lint:
check:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- name: Lint
command: pnpm lint
- name: Type check
command: pnpm typecheck
- name: Unit tests
command: pnpm test:unit
- name: Knip
command: pnpm knip
name: ${{ matrix.name }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup
uses: complexdatacollective/github-actions/setup-pnpm@v1

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'

- name: Install pnpm
uses: pnpm/action-setup@v4

- name: Restore pnpm cache
id: cache
uses: ./.github/actions/pnpm-cache
with:
mode: restore

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Lint
run: pnpm lint

- name: Save pnpm cache
if: always()
uses: ./.github/actions/pnpm-cache
with:
mode: save
cache-hit: ${{ steps.cache.outputs.cache-hit }}
cache-key: ${{ steps.cache.outputs.cache-key }}

typecheck:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'

- name: Install pnpm
uses: pnpm/action-setup@v4

- name: Restore pnpm cache
id: cache
uses: ./.github/actions/pnpm-cache
with:
mode: restore

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Type check
run: pnpm typecheck

- name: Save pnpm cache
if: always()
uses: ./.github/actions/pnpm-cache
with:
mode: save
cache-hit: ${{ steps.cache.outputs.cache-hit }}
cache-key: ${{ steps.cache.outputs.cache-key }}

test:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'

- name: Install pnpm
uses: pnpm/action-setup@v4

- name: Restore pnpm cache
id: cache
uses: ./.github/actions/pnpm-cache
with:
mode: restore

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Run unit tests
run: pnpm test:unit

- name: Save pnpm cache
if: always()
uses: ./.github/actions/pnpm-cache
with:
mode: save
cache-hit: ${{ steps.cache.outputs.cache-hit }}
cache-key: ${{ steps.cache.outputs.cache-key }}

knip:
env:
SKIP_ENV_VALIDATION: true
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'

- name: Install pnpm
uses: pnpm/action-setup@v4

- name: Restore pnpm cache
id: cache
uses: ./.github/actions/pnpm-cache
with:
mode: restore

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Run knip
run: pnpm knip

- name: Save pnpm cache
if: always()
uses: ./.github/actions/pnpm-cache
with:
mode: save
cache-hit: ${{ steps.cache.outputs.cache-hit }}
cache-key: ${{ steps.cache.outputs.cache-key }}
- name: ${{ matrix.name }}
run: ${{ matrix.command }}
14 changes: 4 additions & 10 deletions .github/workflows/chromatic.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,11 @@ jobs:
name: Run Chromatic
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup
uses: complexdatacollective/github-actions/setup-pnpm@v1
with:
fetch-depth: 0
- name: Install pnpm
uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4
with:
cache: 'pnpm'
- name: Install dependencies
run: pnpm install --frozen-lockfile
fetch-depth: '0'

- name: Run Chromatic
uses: chromaui/action@latest
with:
Expand Down
81 changes: 48 additions & 33 deletions .github/workflows/e2e.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@ permissions:
pull-requests: write

on:
workflow_dispatch:
push:
branches: [main, next]
pull_request:

jobs:
e2e:
Expand All @@ -19,24 +19,13 @@ jobs:
test-result: ${{ steps.test.outcome }}

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
- name: Setup
id: setup
uses: complexdatacollective/github-actions/setup-pnpm@v1
with:
node-version-file: '.nvmrc'

- name: Install pnpm
uses: pnpm/action-setup@v4

- name: Restore pnpm cache
id: cache
uses: ./.github/actions/pnpm-cache
with:
mode: restore
path: .pnpm-docker-store
key-prefix: pnpm-docker-store
install: 'false'
cache-path: .pnpm-docker-store
cache-key-prefix: pnpm-docker-store

- name: Run E2E tests
id: test
Expand All @@ -63,26 +52,52 @@ jobs:
retention-days: 7

- name: Save pnpm cache
if: always()
uses: ./.github/actions/pnpm-cache
if: always() && steps.setup.outputs.cache-hit != 'true'
uses: actions/cache/save@v4
with:
mode: save
path: .pnpm-docker-store
cache-hit: ${{ steps.cache.outputs.cache-hit }}
cache-key: ${{ steps.cache.outputs.cache-key }}
key: ${{ steps.setup.outputs.cache-key }}

# Resolve PR context for both pull_request and workflow_dispatch events
resolve-pr:
if: failure() && needs.e2e.outputs.test-result == 'failure'
needs: e2e
runs-on: ubuntu-latest
outputs:
pr-number: ${{ steps.pr.outputs.number }}
head-sha: ${{ steps.pr.outputs.head_sha }}
branch: ${{ steps.pr.outputs.branch }}
steps:
- name: Resolve PR context
id: pr
env:
GH_TOKEN: ${{ github.token }}
run: |
if [ "${{ github.event_name }}" = "pull_request" ]; then
echo "number=${{ github.event.pull_request.number }}" >> "$GITHUB_OUTPUT"
echo "head_sha=${{ github.event.pull_request.head.sha }}" >> "$GITHUB_OUTPUT"
echo "branch=${{ github.head_ref }}" >> "$GITHUB_OUTPUT"
else
PR_NUMBER=$(gh pr list --repo "${{ github.repository }}" --head "${{ github.ref_name }}" --json number --jq '.[0].number')
if [ -n "$PR_NUMBER" ] && [ "$PR_NUMBER" != "null" ]; then
echo "number=$PR_NUMBER" >> "$GITHUB_OUTPUT"
fi
echo "head_sha=${{ github.sha }}" >> "$GITHUB_OUTPUT"
echo "branch=${{ github.ref_name }}" >> "$GITHUB_OUTPUT"
fi

# Deploy report to GitHub Pages on test failure (PR-specific subdirectory)
deploy-report:
if: failure() && github.event_name == 'pull_request' && needs.e2e.outputs.test-result == 'failure'
needs: e2e
if: failure() && needs.resolve-pr.outputs.pr-number != ''
needs: [e2e, resolve-pr]
runs-on: ubuntu-latest
# Single concurrency group for all Pages deployments to prevent race conditions
concurrency:
group: e2e-pages-deploy
cancel-in-progress: false
environment:
name: github-pages
url: https://complexdatacollective.github.io/Fresco/pr-${{ github.event.pull_request.number }}/
url: https://complexdatacollective.github.io/Fresco/pr-${{ needs.resolve-pr.outputs.pr-number }}/

steps:
- name: Download playwright report
Expand Down Expand Up @@ -110,8 +125,8 @@ jobs:
fi

# Create PR-specific subdirectory with new report
mkdir -p merged/pr-${{ github.event.pull_request.number }}
cp -r new-report/playwright-report/* merged/pr-${{ github.event.pull_request.number }}/
mkdir -p merged/pr-${{ needs.resolve-pr.outputs.pr-number }}
cp -r new-report/playwright-report/* merged/pr-${{ needs.resolve-pr.outputs.pr-number }}/

# Generate index page listing all reports
echo "<ul>" > merged/index.html.tmp
Expand Down Expand Up @@ -159,21 +174,21 @@ jobs:
uses: actions/deploy-pages@v4

- name: Comment on PR with report link
uses: peter-evans/create-or-update-comment@v4
uses: peter-evans/create-or-update-comment@v5
with:
issue-number: ${{ github.event.pull_request.number }}
issue-number: ${{ needs.resolve-pr.outputs.pr-number }}
body: |
## Playwright E2E Test Report

Tests failed. View the full report here:

**[https://complexdatacollective.github.io/Fresco/pr-${{ github.event.pull_request.number }}/](https://complexdatacollective.github.io/Fresco/pr-${{ github.event.pull_request.number }}/)**
👉 **[https://complexdatacollective.github.io/Fresco/pr-${{ needs.resolve-pr.outputs.pr-number }}/](https://complexdatacollective.github.io/Fresco/pr-${{ needs.resolve-pr.outputs.pr-number }}/)**

<details>
<summary>Report details</summary>

- **Workflow run:** [View logs](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }})
- **Commit:** ${{ github.event.pull_request.head.sha }}
- **Branch:** `${{ github.head_ref }}`
- **Commit:** ${{ needs.resolve-pr.outputs.head-sha }}
- **Branch:** `${{ needs.resolve-pr.outputs.branch }}`

</details>
Loading