CodeForPhilly / CodeForPhilly/codeforphilly-ng

flaky api tests: git clone from shared full-data fixture repo loses objects mid-copy under parallel workers

Open
#171 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
TypeScript
Stars
1
Forks
1
Avg merge
5d 3h
Merged PRs (30d)
9

Description

Seen twice on 2026-09-09 in CI on the same commit (`96b71ef`, merge of #157, which touched only `apps/web`):

- push run: `tests/slug-redirect.test.ts > never intercepts /api/* paths`
- pull_request run: `tests/avatar-upload.test.ts > 404s for a missing person` and `> rejects unsupported MIME types with 422`

All with the same error from `apps/api/tests/helpers/seed-fixtures.ts` cloning the bare fixture repo created by `tests/helpers/test-full-repo.ts`:

```
Error: Command failed: git clone /tmp/cfp-full-data-XXXX/data.git /tmp/cfp-seed-wt-YYYY
fatal: failed to copy file to '/tmp/cfp-seed-wt-YYYY/.git/objects/71/fdd3...': No such file or directory
```

Different test files, different temp dirs, same shape: a local `git clone` (hardlink/copy of loose objects) races with something mutating the source repo's object store while it runs. Suspects: another worker's transaction on the same shared fixture repo (gitsheets 2.x Rust core landed on `develop` via #151 and may repack/prune loose objects), or a cleanup `rm` in a sibling file's `afterEach`. Locally the suite passes with `--maxWorkers=2`; CI uses the default worker count.

Options: give each test file its own fixture repo (no shared source), clone with `--no-hardlinks`/`file://` (forces a pack transfer instead of per-object copies), or serialize the clone behind a lock. Re-running the job passes, so this is a flake, not a regression, but it will keep failing release CI at random.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

https://claude.ai/code/session_01RdRwHvDupRLV8GuJpYKzEr

Contributor guide

No contributing guide indexed for this repository

Research direction

Start with apps/api/tests/helpers/seed-fixtures.ts and tests/helpers/test-full-repo.ts, then reproduce the listed slug-redirect and avatar-upload tests using CI's default worker count. Trace shared fixture creation, cloning, and cleanup while parallel workers run; done means those tests no longer intermittently fail during git clone and the full parallel suite remains stable.

Written by the indexing model from the issue text.

Assessment

Tech stack
git, typescript
Domain
ci-cd, testing
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
52/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.