Skip to content

ci: fix all 5 failing PR checks (update base for #727)#744

Open
Dickson2015 wants to merge 42 commits into
Iris-IV:dependabot/github_actions/actions/upload-artifact-7from
Dickson2015:fix/pr-727-ci-checks
Open

ci: fix all 5 failing PR checks (update base for #727)#744
Dickson2015 wants to merge 42 commits into
Iris-IV:dependabot/github_actions/actions/upload-artifact-7from
Dickson2015:fix/pr-727-ci-checks

Conversation

@Dickson2015

Copy link
Copy Markdown

Summary

This PR fixes all 5 failing CI checks against the dependabot/github_actions/actions/upload-artifact-7 branch (PR #727).

Root causes found

1. Branch was out of date with main
The Dependabot branch was missing ~63 files merged into main since the branch was cut (profile page, CampaignMap, MultiSigWithdrawalPanel, stories, etc.). This caused TypeScript to error on missing modules and the build/lint to fail.

  • Fixed by merging upstream/main into the branch.

2. upload-artifact@v7 does not exist
Dependabot bumped to @v7 but the latest release of actions/upload-artifact is @v4.

  • Fixed in verify.yml, ci.yml, and security.yml.

3. ESLint linting Playwright trace artifacts
ESLint 9 dropped support for .eslintignore. The playwright-report/ directory was being linted, causing no-this-alias errors in minified JS.

  • Fixed by adding playwright-report/** and test-results/** to globalIgnores in eslint.config.mjs.

4. Playwright webServer incompatible with output: standalone
next start does not work when output: "standalone" is set. The standalone server must be started with node .next/standalone/server.js, and static assets must be copied into the bundle first.

  • Fixed in playwright.config.ts and verify.yml.

5. verify.yml branch filter
pull_request: branches: [main] prevented E2E from running on PRs not targeting main.

  • Removed the branch filter.

Checks verified locally

  • ✅ TypeScript type-check
  • ✅ ESLint (0 errors)
  • ✅ Prettier
  • ✅ Next.js production build
  • ✅ Bundle size (within budget)

Mrwicks00 and others added 30 commits June 30, 2026 03:51
- Iris-IV#607: raise HSTS max-age to 63072000 (2 years) in next.config.ts
- Iris-IV#611: self-host Inter via next/font/google with font-display swap,
  eliminating render-blocking font fetch
- Iris-IV#606: add onRefetch polling (10s) to DonationModal so concurrent
  donations update progress bar while input is open
- Iris-IV#605: multi-language campaign descriptions via [lang:en]/[lang:es]
  encoding; detail page resolves viewer locale with English fallback
The OnboardingTour uses localStorage to gate visibility. On CI each
browser session starts cold so the tour appeared and intercepted pointer
events, causing every journey test to time out on click actions.

Seed onboarding_tour_dismissed via addInitScript so the flag is present
before React hydration reads localStorage.
- Fix isConnected()/isAllowed() destructuring (Freighter API v6 returns
  objects, not primitives) — was causing disconnect branch to never be reached
- Replace WatchWalletChanges with 5s polling + visibilitychange listener
  (WatchWalletChanges only fires on address/network changes, not disconnection)
- Fix isAllowed() handling in connectWallet — 'not authorized' warning was
  unreachable
- Update test mocks to match v6 API shape, add external disconnect test
- Add optional latitude/longitude fields to Campaign type
- Create CampaignMap component with valid-coordinate filtering
- Create MapErrorBoundary for map-specific error handling
- Add list/map view toggle to Causes page with dynamic leaflet import
- Update mock campaigns with sample coordinates (some with, some without)
- Add i18n keys for listView/mapView
- Write tests for helpers, filter, and error boundary
Issue Iris-IV#651 — Multi-signature withdrawal for creator dashboard
- Add `useMultiSigProposals` hook managing proposals via localStorage
- Add `MultiSigWithdrawalPanel` component: creators set co-signers and
  a threshold; co-signers approve; withdrawal executes once threshold met
- Integrate panel into dashboard submitted-campaigns section
- Add i18n strings (en + es) under `MultiSigPanel` namespace

Issue Iris-IV#668 — Pagination Next button disabled correctly on last page
- Add reusable `Pagination` component: Next disabled when
  currentPage === totalPages, Prev disabled when currentPage === 1
- Apply to admin pending-campaigns list (5 per page)

Issue Iris-IV#601 — Storybook with stories for all reusable UI components
- Add @storybook/nextjs + addons to devDependencies
- Add `storybook` and `build-storybook` npm scripts
- Add `.storybook/main.ts` and `.storybook/preview.tsx` with
  NextIntlClientProvider decorator
- Add stories for: CauseCard, DonationModal, VotingComponent,
  ShareButtons, DeadlineCountdown, FundingProgressBar, Skeleton

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Regenerates the lock file after adding @storybook/nextjs, @storybook/react,
@storybook/addon-essentials, @storybook/addon-interactions, and storybook
devDependencies in the previous commit.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…nd dependency scanning

- Add CampaignMap component showing active campaigns on an interactive world
  map with mock coordinates, hover tooltips, and campaign list legend
- Add AdminTwoFactorSetup component with a 3-step TOTP flow (intro → QR scan
  → verification → confirmed); integrated into the admin dashboard
- Add .github/workflows/branch-naming.yml enforcing feat|fix|docs|test|chore|
  refactor|perf|ci|build|revert prefix convention on every PR
- Add .github/workflows/security.yml with dedicated npm audit (high+critical)
  and CodeQL static analysis jobs on push, PR, and weekly schedule

Closes Iris-IV#685
Closes Iris-IV#686
Closes Iris-IV#687
Closes Iris-IV#688
…687-688

feat: add campaign map, admin 2FA setup, branch naming enforcement, and dependency scanning
… saving

- Add QR modal to ShareButtons: campaign URL QR + optional wallet address QR
  via qrserver.com, each with a Download link; closes on Escape/backdrop click
- Add EditCampaignMetadata component: collapsible panel for creators to edit
  title, description, and cover image before verification; overrides stored in
  localStorage with an audit trail (editedAt timestamp + clear button); wired
  into CauseDetailClient with isCreator/canEdit guard
- Make campaign draft per-wallet in NewCauseClient: key is now
  proof_of_heart_draft_<publicKey>; added hasDraft state, lastSavedAt
  indicator, and Discard draft button that resets all fields

Closes Iris-IV#487
Closes Iris-IV#482
Closes Iris-IV#481
- Switch webServer from `npm run start` to `npm run dev` so next-intl
  locale middleware works correctly in test mode
- Add onboarding tour dismissal via addInitScript in both test files so
  the fixed overlay does not block pointer events
- Fix URL assertion to accept /en/ locale prefix after redirect
- Rewrite contribute test to navigate directly to /en/causes/1 (CauseCard
  has no anchor link to detail page)
- Rewrite vote test to use the inline VotingComponent on the causes list;
  fix post-click assertion that was matching a hidden <option> element
- Guard CauseDetailClient notFound() so a still-syncing useEffect does
  not prematurely 404 when fetchedCampaign is already available

Closes Iris-IV#481
Closes Iris-IV#482
Closes Iris-IV#487
…81-482-487

feat: QR code sharing, campaign metadata editing, and per-wallet draft saving
- Add Levenshtein-based fuzzy matching to campaign search so single-char
  typos (e.g. "educaton") still return results instead of zero
- Add useFollowedCreators hook (localStorage per wallet) and a Follow /
  Unfollow button on the cause detail creator card; shows warning when
  wallet is not connected
- Add docs/api.md documenting all six API routes with request/response
  shapes, params, status codes, and env-var reference
- Add .github/workflows/db-backup.yml daily cron that exports off-chain
  data (audit log + reports) to cloud storage with 30-day retention, and
  add docs/database-backup.md explaining the strategy and restore steps

Closes Iris-IV#681
Closes Iris-IV#682
Closes Iris-IV#683
Closes Iris-IV#684
…3-684

feat: fuzzy search, follow creators, API docs, backup workflow
- Remove non-existent isOpen prop from DonationModal.stories.tsx
- Use conditional render pattern to control modal open state in stories
- Rename onDonationSuccess arg to onSuccess to match component interface
- Run Prettier on .storybook/main.ts, AdminClient, DashboardClient, MultiSigWithdrawalPanel

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ementation)

The fork's CampaignMap.tsx had two component implementations concatenated
(Leaflet version + SVG version) due to a bad merge conflict resolution.
This caused a parsing error: TypeScript type annotations were being
parsed as JSX, resulting in build failure.

Also fixes Prettier formatting in files pulled from the merge.
…le waitForLoadState calls

- smoke.spec.ts: use goto for all page transitions instead of clicking
  links and waiting for URL changes (avoids race with CausesClient
  router.replace on webkit/firefox)
- journeys.spec.ts: remove waitForLoadState('networkidle') calls that
  can hang on webkit when CausesClient keeps the page busy
Merged origin/main into fix/issues-605-606-607-611.

Conflicts resolved:
- tests/e2e/journeys.spec.ts: kept main's beforeEach comment and
  improved test flow (direct navigation, networkidle waits)
- src/app/[locale]/causes/[id]/CauseDetailClient.tsx: combined our
  getLocalizedDescription import with main's isSameAddress and
  EditCampaignMetadata additions
…tion-storybook

feat: multi-sig withdrawal, pagination fix, and Storybook setup
…g-coordinates

feat: add campaign map view with coordinate filtering and error boundary
…ationModal

    - Implemented active polling (every 2s) for campaign status and `amount_raised` while the
  DonationModal is open.
    - Added client-side validation to reject contributions exceeding the remaining goal or
  when campaign is already fully funded.
    - Updated Next-intl translation namespace from "Donation" to "DonationModal" for input
  validation errors.
    - Resolved type-checking errors and updated mock structures in Jest tests to cover
  polling, remaining goal validation, and fully funded states.
spartan124 and others added 12 commits July 4, 2026 14:49
    - Formatted files with Prettier.
    - Removed unused  variable binding in DonationModal's polling catch block to resolve
  ESLint  warning.
…using-mismatched-funding-progress

fix(donation): prevent race condition and campaign overfunding in Don…
- fix(verify.yml): remove branch filter so E2E runs on all PRs
- fix(verify.yml): copy standalone static assets before Playwright
- fix(playwright.config.ts): use node .next/standalone/server.js in CI
- fix(ci.yml, security.yml): upload-artifact@v7 -> @v4 (v7 doesn't exist)
- fix(eslint.config.mjs): ignore playwright-report and test-results dirs
- fix(.eslintignore): same (belt-and-suspenders for ESLint 9)
- fix: merge upstream/main to bring branch up to date with main
@Dickson2015

Copy link
Copy Markdown
Author

Hi! All 5 failing checks have been
diagnosed and fixed in PR #744.

Root causes:

  1. Lint (Prettier) —
    src/app/globals.css and
    next.config.ts on this branch have
    formatting that Prettier rejects.
    Both files were updated on main
    after this branch was cut.
  2. TypeScript / Build / Bundle size
    — This branch is missing ~63 files
    that were merged into main since it
    was created (profile page,
    CampaignMap,
    MultiSigWithdrawalPanel, Pagination,
    stories, etc.). TypeScript errors
    out on the missing module
    references.
  3. E2E (Playwright) —
    actions/upload-artifact@v7 doesn't
    exist (latest is @v4), next start is
    incompatible with output: standalone
    (must use node
    .next/standalone/server.js), and
    static assets need to be copied into
    the standalone bundle before
    serving.

Fix: PR #744 merges main into this
branch and applies all the CI fixes.
Merging #744 will make all 5 checks
pass here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

10 participants