Skip to content

[15.x] Default deploy e2e tests to the repo next version - #96899

Open
eps1lon wants to merge 1 commit into
next-15-5from
sebbie/backport-96895-to-next-15-5
Open

[15.x] Default deploy e2e tests to the repo next version#96899
eps1lon wants to merge 1 commit into
next-15-5from
sebbie/backport-96895-to-next-15-5

Conversation

@eps1lon

@eps1lon eps1lon commented Aug 7, 2026

Copy link
Copy Markdown
Member

Backports #96895 to next-15-5, adapted to this branch's layout (a single test-deploy job, no adapter jobs). This branch had a bug where test-deploy resolved NEXT_TEST_VERSION as github.event.inputs.nextVersion || 'canary', so release runs always installed canary and ignored the released version.

Backports #96895 to `next-15-5`, adapted to this branch's layout (a single `test-deploy` job and no adapter jobs). This branch had the underlying bug in full: `test-deploy` resolved `NEXT_TEST_VERSION` as `github.event.inputs.nextVersion || 'canary'`, so release runs always installed `canary` and ignored the released version. The `nextVersion` input loses its `default: canary`, the setup job now resolves and logs the version to test (the dispatch input when provided, otherwise the version checked into `packages/next/package.json`), and `test-deploy` consumes the setup job's output. The run name shows the release tag for release runs under the documented assumption that the tag matches the checked-in version.
@github-actions

github-actions Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Failing test suites

Commit: 1ff441f | About building and testing Next.js

__NEXT_EXPERIMENTAL_PPR=true pnpm test-dev test/e2e/prerender.test.ts (PPR) (job)

  • Prerender > should navigate between pages successfully (DD)
  • Prerender > should SSR normal page correctly (DD)
  • Prerender > should SSR incremental page correctly (DD)
  • Prerender > should SSR blocking path correctly (blocking) (DD)
  • Prerender > should SSR blocking path correctly (pre-rendered) (DD)
  • Prerender > should have gsp in NEXT_DATA (DD)
  • Prerender > should not have gsp in NEXT_DATA for non-GSP page (DD)
  • Prerender > should not supply query values to params or useRouter non-dynamic page SSR (DD)
  • Prerender > should not supply query values to params in /_next/data request (DD)
  • Prerender > should not supply query values to params or useRouter dynamic page SSR (DD)
  • Prerender > should return data correctly (DD)
  • Prerender > should return data correctly for dynamic page (DD)
  • Prerender > should return data correctly for dynamic page (non-seeded) (DD)
  • Prerender > should navigate to a normal page and back (DD)
  • Prerender > should parse query values on mount correctly (DD)
  • Prerender > should reload page on failed data request (DD)
  • Prerender > should SSR dynamic page with brackets in param as object (DD)
  • Prerender > should navigate to dynamic page with brackets in param as object (DD)
  • Prerender > should SSR dynamic page with brackets in param as string (DD)
  • Prerender > should navigate to dynamic page with brackets in param as string (DD)
  • Prerender > should not return data for fallback: false and missing dynamic page (DD)
  • Prerender > should server prerendered path correctly for SSG pages that starts with api-docs (DD)
  • Prerender > should render correctly for SSG pages that starts with api-docs (DD)
  • Prerender > should return data correctly for SSG pages that starts with api-docs (DD)
  • Prerender > should SSR catch-all page with brackets in param as string (DD)
  • Prerender > should navigate to catch-all page with brackets in param as string (DD)
  • Prerender > should SSR catch-all page with brackets in param as object (DD)
  • Prerender > should navigate to catch-all page with brackets in param as object (DD)
  • Prerender > should support prerendered catchall route (DD)
  • Prerender > should support lazy catchall route (DD)
  • Prerender > should support nested lazy catchall route (DD)
  • Prerender > should support prerendered catchall-explicit route (nested) (DD)
  • Prerender > should support prerendered catchall-explicit route (single) (DD)
  • Prerender > should handle fallback only page correctly HTML (DD)
  • Prerender > should handle fallback only page correctly data (DD)
  • Prerender > should 404 for a missing catchall explicit route (DD)
  • Prerender > should 404 for an invalid data url (DD)
  • Prerender > should allow rewriting to SSG page with fallback: false (DD)
  • Prerender > should allow rewriting to SSG page with fallback: 'blocking' (DD)
  • Prerender > should fetch /_next/data correctly with mismatched href and as (DD)
  • Prerender > should not error when rewriting to fallback dynamic SSG page (DD)
  • Prerender > should show warning when large amount of page data is returned (DD)
  • Prerender > should show warning every time page with large amount of page data is returned (DD)
  • Prerender > should not show warning from url prop being returned (DD)
  • Prerender > should always show fallback for page not in getStaticPaths (DD)
  • Prerender > should not show fallback for page in getStaticPaths (DD)
  • Prerender > should never show fallback for page not in getStaticPaths when blocking (DD)
  • Prerender > should not show fallback for page in getStaticPaths when blocking (DD)
  • Prerender > should always call getStaticProps without caching in dev (DD)
  • Prerender > should error on bad object from getStaticProps (DD)
  • Prerender > should error on dynamic page without getStaticPaths (DD)
  • Prerender > should error on dynamic page without getStaticPaths returning fallback property (DD)
  • Prerender > should not re-call getStaticProps when updating query (DD)
  • Prerender > should show fallback before invalid JSON is returned from getStaticProps (DD)
  • Prerender > should not fallback before invalid JSON is returned from getStaticProps when blocking fallback (DD)
  • Prerender > should show error for invalid JSON returned from getStaticProps on SSR (DD)
  • Prerender > should show error for invalid JSON returned from getStaticProps on CST (DD)
  • Prerender > should respond for catch-all deep folder (DD)
Expand output

● Prerender › should navigate between pages successfully

page.waitForSelector: Timeout 5000ms exceeded.
Call log:
  - waiting for locator('p')

  491 |
  492 |     return this.startChain(async () => {
> 493 |       const el = await page.waitForSelector(selector, {
      |                             ^
  494 |         timeout,
  495 |         state,
  496 |       })

  at waitForSelector (lib/browsers/playwright.ts:493:29)
  at Playwright._chain (lib/browsers/playwright.ts:616:23)
  at Playwright._chain [as startChain] (lib/browsers/playwright.ts:597:17)
  at Playwright.startChain [as waitForElementByCss] (lib/browsers/playwright.ts:492:17)
  at Playwright.waitForElementByCss [as elementByCss] (lib/browsers/playwright.ts:390:17)
  at Object.elementByCss (e2e/prerender.test.ts:389:32)
  at Proxy._chain (lib/browsers/playwright.ts:616:23)
  at Proxy._chain (lib/browsers/playwright.ts:592:17)
  at Proxy.continueChain (lib/browsers/playwright.ts:418:17)
  at Object.text (e2e/prerender.test.ts:389:50)

● Prerender › should SSR normal page correctly

expect(received).toMatch(expected)

Expected pattern: /hello.*?world/
Received string:  "Internal Server Error"

  575 |     it('should SSR normal page correctly', async () => {
  576 |       const html = await renderViaHTTP(next.url, '/')
> 577 |       expect(html).toMatch(/hello.*?world/)
      |                    ^
  578 |     })
  579 |
  580 |     it('should SSR incremental page correctly', async () => {

  at Object.toMatch (e2e/prerender.test.ts:577:20)

● Prerender › should SSR incremental page correctly

SyntaxError: Unexpected end of JSON input
    at JSON.parse (<anonymous>)

  582 |
  583 |       const $ = cheerio.load(html)
> 584 |       expect(JSON.parse($('#__NEXT_DATA__').text()).isFallback).toBe(false)
      |                   ^
  585 |       expect(html).toMatch(/Post:.*?post-1/)
  586 |     })
  587 |

  at Object.parse (e2e/prerender.test.ts:584:19)

● Prerender › should SSR blocking path correctly (blocking)

SyntaxError: Unexpected end of JSON input
    at JSON.parse (<anonymous>)

  592 |       )
  593 |       const $ = cheerio.load(html)
> 594 |       expect(JSON.parse($('#__NEXT_DATA__').text()).isFallback).toBe(false)
      |                   ^
  595 |       expect($('p').text()).toBe('Post: random-path')
  596 |     })
  597 |

  at Object.parse (e2e/prerender.test.ts:594:19)

● Prerender › should SSR blocking path correctly (pre-rendered)

SyntaxError: Unexpected end of JSON input
    at JSON.parse (<anonymous>)

  599 |       const html = await renderViaHTTP(next.url, '/blocking-fallback-some/a')
  600 |       const $ = cheerio.load(html)
> 601 |       expect(JSON.parse($('#__NEXT_DATA__').text()).isFallback).toBe(false)
      |                   ^
  602 |       expect($('p').text()).toBe('Post: a')
  603 |     })
  604 |

  at Object.parse (e2e/prerender.test.ts:601:19)

● Prerender › should have gsp in NEXT_DATA

SyntaxError: Unexpected end of JSON input
    at JSON.parse (<anonymous>)

  606 |       const html = await renderViaHTTP(next.url, '/')
  607 |       const $ = cheerio.load(html)
> 608 |       expect(JSON.parse($('#__NEXT_DATA__').text()).gsp).toBe(true)
      |                   ^
  609 |     })
  610 |
  611 |     it('should not have gsp in __NEXT_DATA__ for non-GSP page', async () => {

  at Object.parse (e2e/prerender.test.ts:608:19)

● Prerender › should not have gsp in NEXT_DATA for non-GSP page

SyntaxError: Unexpected end of JSON input
    at JSON.parse (<anonymous>)

  612 |       const html = await renderViaHTTP(next.url, '/normal')
  613 |       const $ = cheerio.load(html)
> 614 |       expect('gsp' in JSON.parse($('#__NEXT_DATA__').text())).toBe(false)
      |                            ^
  615 |     })
  616 |
  617 |     it('should not supply query values to params or useRouter non-dynamic page SSR', async () => {

  at Object.parse (e2e/prerender.test.ts:614:28)

● Prerender › should not supply query values to params or useRouter non-dynamic page SSR

SyntaxError: Unexpected end of JSON input
    at JSON.parse (<anonymous>)

  619 |       const $ = cheerio.load(html)
  620 |       const query = $('#query').text()
> 621 |       expect(JSON.parse(query)).toEqual({})
      |                   ^
  622 |       const params = $('#params').text()
  623 |       expect(JSON.parse(params)).toEqual({})
  624 |     })

  at Object.parse (e2e/prerender.test.ts:621:19)

● Prerender › should not supply query values to params in /_next/data request

SyntaxError: Unexpected token 'I', "Internal S"... is not valid JSON
    at JSON.parse (<anonymous>)

  625 |
  626 |     it('should not supply query values to params in /_next/data request', async () => {
> 627 |       const data = JSON.parse(
      |                         ^
  628 |         await renderViaHTTP(
  629 |           next.url,
  630 |           `/_next/data/${next.buildId}/something.json?hello=world`

  at Object.parse (e2e/prerender.test.ts:627:25)

● Prerender › should not supply query values to params or useRouter dynamic page SSR

SyntaxError: Unexpected end of JSON input
    at JSON.parse (<anonymous>)

  639 |
  640 |       const params = $('#params').text()
> 641 |       expect(JSON.parse(params)).toEqual({ post: 'post-1' })
      |                   ^
  642 |
  643 |       const query = $('#query').text()
  644 |       expect(JSON.parse(query)).toEqual({ post: 'post-1' })

  at Object.parse (e2e/prerender.test.ts:641:19)

● Prerender › should return data correctly

SyntaxError: Unexpected token 'I', "Internal S"... is not valid JSON
    at JSON.parse (<anonymous>)

  646 |
  647 |     it('should return data correctly', async () => {
> 648 |       const data = JSON.parse(
      |                         ^
  649 |         await renderViaHTTP(
  650 |           next.url,
  651 |           `/_next/data/${next.buildId}/something.json`

  at Object.parse (e2e/prerender.test.ts:648:25)

● Prerender › should return data correctly for dynamic page

SyntaxError: Unexpected token 'I', "Internal S"... is not valid JSON
    at JSON.parse (<anonymous>)

  656 |
  657 |     it('should return data correctly for dynamic page', async () => {
> 658 |       const data = JSON.parse(
      |                         ^
  659 |         await renderViaHTTP(
  660 |           next.url,
  661 |           `/_next/data/${next.buildId}/blog/post-1.json`

  at Object.parse (e2e/prerender.test.ts:658:25)

● Prerender › should return data correctly for dynamic page (non-seeded)

SyntaxError: Unexpected token 'I', "Internal S"... is not valid JSON
    at JSON.parse (<anonymous>)

  666 |
  667 |     it('should return data correctly for dynamic page (non-seeded)', async () => {
> 668 |       const data = JSON.parse(
      |                         ^
  669 |         await renderViaHTTP(
  670 |           next.url,
  671 |           `/_next/data/${next.buildId}/blog/post-3.json`

  at Object.parse (e2e/prerender.test.ts:668:25)

● Prerender › should navigate to a normal page and back

page.waitForSelector: Timeout 5000ms exceeded.
Call log:
  - waiting for locator('p')

  491 |
  492 |     return this.startChain(async () => {
> 493 |       const el = await page.waitForSelector(selector, {
      |                             ^
  494 |         timeout,
  495 |         state,
  496 |       })

  at waitForSelector (lib/browsers/playwright.ts:493:29)
  at Playwright._chain (lib/browsers/playwright.ts:616:23)
  at Playwright._chain [as startChain] (lib/browsers/playwright.ts:597:17)
  at Playwright.startChain [as waitForElementByCss] (lib/browsers/playwright.ts:492:17)
  at Playwright.waitForElementByCss [as elementByCss] (lib/browsers/playwright.ts:390:17)
  at Object.elementByCss (e2e/prerender.test.ts:756:32)
  at Proxy._chain (lib/browsers/playwright.ts:616:23)
  at Proxy._chain (lib/browsers/playwright.ts:592:17)
  at Proxy.continueChain (lib/browsers/playwright.ts:418:17)
  at Object.text (e2e/prerender.test.ts:756:50)

● Prerender › should parse query values on mount correctly

page.waitForSelector: Timeout 5000ms exceeded.
Call log:
  - waiting for locator('#query')

  491 |
  492 |     return this.startChain(async () => {
> 493 |       const el = await page.waitForSelector(selector, {
      |                             ^
  494 |         timeout,
  495 |         state,
  496 |       })

  at waitForSelector (lib/browsers/playwright.ts:493:29)
  at Playwright._chain (lib/browsers/playwright.ts:616:23)
  at Playwright._chain [as startChain] (lib/browsers/playwright.ts:597:17)
  at Playwright.startChain [as waitForElementByCss] (lib/browsers/playwright.ts:492:17)
  at Playwright.waitForElementByCss [as elementByCss] (lib/browsers/playwright.ts:390:17)
  at Object.elementByCss (e2e/prerender.test.ts:767:34)
  at Proxy._chain (lib/browsers/playwright.ts:616:23)
  at Proxy._chain (lib/browsers/playwright.ts:592:17)
  at Proxy.continueChain (lib/browsers/playwright.ts:418:17)
  at Object.text (e2e/prerender.test.ts:767:57)

● Prerender › should reload page on failed data request

page.waitForSelector: Timeout 5000ms exceeded.
Call log:
  - waiting for locator('#broken-post')

  491 |
  492 |     return this.startChain(async () => {
> 493 |       const el = await page.waitForSelector(selector, {
      |                             ^
  494 |         timeout,
  495 |         state,
  496 |       })

  at waitForSelector (lib/browsers/playwright.ts:493:29)
  at Playwright._chain (lib/browsers/playwright.ts:616:23)
  at Playwright._chain [as startChain] (lib/browsers/playwright.ts:597:17)
  at Playwright.startChain [as waitForElementByCss] (lib/browsers/playwright.ts:492:17)
  at Playwright.waitForElementByCss [as elementByCss] (lib/browsers/playwright.ts:390:17)
  at Object.elementByCss (e2e/prerender.test.ts:775:21)
  at Proxy._chain (lib/browsers/playwright.ts:616:23)
  at Proxy._chain (lib/browsers/playwright.ts:592:17)
  at Proxy.continueChain (lib/browsers/playwright.ts:456:17)
  at Object.click (e2e/prerender.test.ts:775:50)

● Prerender › should SSR dynamic page with brackets in param as object

expect(received).toMatch(expected)

Expected pattern: /Hi \[first\]!/
Received string:  ""

  786 |       const html = await renderViaHTTP(next.url, '/dynamic/[first]')
  787 |       const $ = cheerio.load(html)
> 788 |       expect($('#param').text()).toMatch(/Hi \[first\]!/)
      |                                  ^
  789 |     })
  790 |
  791 |     it('should navigate to dynamic page with brackets in param as object', async () => {

  at Object.toMatch (e2e/prerender.test.ts:788:34)

● Prerender › should navigate to dynamic page with brackets in param as object

page.waitForSelector: Timeout 5000ms exceeded.
Call log:
  - waiting for locator('#dynamic-first')

  491 |
  492 |     return this.startChain(async () => {
> 493 |       const el = await page.waitForSelector(selector, {
      |                             ^
  494 |         timeout,
  495 |         state,
  496 |       })

  at waitForSelector (lib/browsers/playwright.ts:493:29)

... truncated ...

@eps1lon eps1lon changed the title sebbie/backport 96895 to next 15 5 [15.x] Default deploy e2e tests to the repo next version Aug 7, 2026
@eps1lon
eps1lon requested review from bgw and ztanner August 7, 2026 12:51
@eps1lon
eps1lon marked this pull request as ready for review August 7, 2026 12:51
@eps1lon
eps1lon enabled auto-merge (squash) August 7, 2026 17:32
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.

2 participants