Skip to content

Release#1043

Merged
philipbrembeck merged 21 commits intomainfrom
staging
Apr 19, 2026
Merged

Release#1043
philipbrembeck merged 21 commits intomainfrom
staging

Conversation

@philipbrembeck
Copy link
Copy Markdown
Collaborator

@philipbrembeck philipbrembeck commented Apr 19, 2026

Summary by Sourcery

Update frontend configuration, tooling, and workflows while simplifying language handling and modal behavior.

Bug Fixes:

  • Adjust locale selection to set the NEXT_LOCALE cookie via document.cookie for client-side language persistence.

Enhancements:

  • Remove Million compiler integration from the Next.js configuration to streamline the build setup.
  • Tighten TypeScript configuration with modern module resolution, updated target, and refined compiler options.
  • Refine ESLint configuration to better integrate TypeScript and React Compiler, expand ignores, and enforce consistent import ordering.
  • Apply consistent formatting and minor cleanup across page and modal components.

Build:

  • Upgrade package manager, core dependencies (Next.js, React-related types, next-intl, sharp, sass), and testing/tooling libraries to newer versions.
  • Simplify dependencies by removing unused packages such as next-pwa, nookies, million, prom-client, and related overrides.

CI:

  • Simplify GitHub Actions workflows by removing staging build/test pipelines and updating Docker and kubectl actions to newer pinned versions.
  • Update PR workflow to use the latest pnpm setup action and align with the new pnpm version.

Deployment:

  • Keep only the production deployment pipeline in the build workflow and ensure it always runs on successful builds from main and release branches.

Tests:

  • Upgrade Jest, Playwright, and Testing Library packages to their latest major versions to modernize the test stack.

Chores:

  • Update pnpm overrides and peer dependency rules to align with upgraded dependencies and security patches.

dependabot Bot and others added 21 commits December 12, 2025 13:03
Bumps [next-intl](https://github.com/amannn/next-intl) from 4.4.0 to 4.5.8.
- [Release notes](https://github.com/amannn/next-intl/releases)
- [Changelog](https://github.com/amannn/next-intl/blob/main/CHANGELOG.md)
- [Commits](amannn/next-intl@v4.4.0...v4.5.8)

---
updated-dependencies:
- dependency-name: next-intl
  dependency-version: 4.5.8
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
…/next-intl-4.5.8

build(deps): bump next-intl from 4.4.0 to 4.5.8
Bumps [next](https://github.com/vercel/next.js) from 16.0.10 to 16.1.7.
- [Release notes](https://github.com/vercel/next.js/releases)
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js)
- [Commits](vercel/next.js@v16.0.10...v16.1.7)

---
updated-dependencies:
- dependency-name: next
  dependency-version: 16.1.7
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [azure/setup-kubectl](https://github.com/azure/setup-kubectl) from 4 to 5.
- [Release notes](https://github.com/azure/setup-kubectl/releases)
- [Changelog](https://github.com/Azure/setup-kubectl/blob/main/CHANGELOG.md)
- [Commits](Azure/setup-kubectl@v4...v5)

---
updated-dependencies:
- dependency-name: azure/setup-kubectl
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
…/next-16.1.7

build(deps): bump next from 16.0.10 to 16.1.7
Bumps [next](https://github.com/vercel/next.js) from 16.1.7 to 16.2.3.
- [Release notes](https://github.com/vercel/next.js/releases)
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js)
- [Commits](vercel/next.js@v16.1.7...v16.2.3)

---
updated-dependencies:
- dependency-name: next
  dependency-version: 16.2.3
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
…/next-16.2.3

build(deps): bump next from 16.1.7 to 16.2.3
Bumps [next-intl](https://github.com/amannn/next-intl) from 4.5.8 to 4.9.1.
- [Release notes](https://github.com/amannn/next-intl/releases)
- [Changelog](https://github.com/amannn/next-intl/blob/main/CHANGELOG.md)
- [Commits](amannn/next-intl@v4.5.8...v4.9.1)

---
updated-dependencies:
- dependency-name: next-intl
  dependency-version: 4.9.1
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
…/next-intl-4.9.1

build(deps): bump next-intl from 4.5.8 to 4.9.1
…ns/azure/setup-kubectl-5

build(deps): bump azure/setup-kubectl from 4 to 5
- Remove unused dependencies: @ducanh2912/next-pwa (service worker was
  fully commented out), prom-client, jest-worker, nookies, million,
  eslint-config-sznm (not imported in eslint config)
- Replace nookies setCookie with a native document.cookie one-liner
- Remove million compiler wrapper from next.config.ts; Next 16 + React 19
  provide equivalent optimisation built-in
- Update all remaining packages to their latest compatible versions
  (next, react/react-dom stable, sass, sharp, playwright, testing-library,
  jest 30, typescript-eslint, eslint 9.x latest, quagga2, etc.)
- Add scoped pnpm overrides to patch transitive dep versions that
  upstream packages have not yet bumped (flatted, minimatch, picomatch,
  brace-expansion, js-yaml, babel helpers, form-data, qs, diff)
- Add coverage/** to eslint ignores
- Remove staging branch trigger and staging/e2e jobs from build workflow;
  the target deployment no longer exists
Bumps [pnpm/action-setup](https://github.com/pnpm/action-setup) from 4 to 5.
- [Release notes](https://github.com/pnpm/action-setup/releases)
- [Commits](pnpm/action-setup@v4...v5)

---
updated-dependencies:
- dependency-name: pnpm/action-setup
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [docker/metadata-action](https://github.com/docker/metadata-action) from 5.10.0 to 6.0.0.
- [Release notes](https://github.com/docker/metadata-action/releases)
- [Commits](docker/metadata-action@c299e40...030e881)

---
updated-dependencies:
- dependency-name: docker/metadata-action
  dependency-version: 6.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6.18.0 to 7.0.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](docker/build-push-action@2634353...d08e5c3)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-version: 7.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [docker/login-action](https://github.com/docker/login-action) from 3.6.0 to 4.0.0.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](docker/login-action@5e57cd1...b45d80f)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-version: 4.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
…ns/pnpm/action-setup-5

build(deps): bump pnpm/action-setup from 4 to 5
…ns/docker/metadata-action-6.0.0

build(deps): bump docker/metadata-action from 5.10.0 to 6.0.0
…ns/docker/build-push-action-7.0.0

build(deps): bump docker/build-push-action from 6.18.0 to 7.0.0
…ns/docker/login-action-4.0.0

build(deps): bump docker/login-action from 3.6.0 to 4.0.0
- Bump TypeScript 5.7.3 → 6.0.3
- Replace deprecated target 'ES5' with 'ES2017' (Next.js handles
  browser transpilation; ES5 output is not needed)
- Remove deprecated standalone 'baseUrl'; paths alias @/* resolves
  correctly from tsconfig location without it
@bolt-new-by-stackblitz
Copy link
Copy Markdown

Review PR in StackBlitz Codeflow Run & review this pull request in StackBlitz Codeflow.

@sourcery-ai
Copy link
Copy Markdown

sourcery-ai Bot commented Apr 19, 2026

Reviewer's Guide

Update release pipeline and tooling: move to newer Node/pnpm/Next/TypeScript/Jest/Playwright/ESLint stack, simplify CI to a single production build/deploy workflow, switch locale cookie handling to use document.cookie, adjust TS/ESLint configs, remove Million integration, and apply consistent tab-based formatting.

File-Level Changes

Change Details Files
Switch locale persistence in the More page from nookies to direct browser cookie manipulation and reformat component with tabs.
  • Replace setCookie from nookies with document.cookie assignment including max-age and path for NEXT_LOCALE
  • Keep language modal logic and routing intact while updating indentation to tabs across the file
src/app/[locale]/more/page.tsx
Refine ModalWrapper client component while keeping behavior stable and align formatting.
  • Remove obsolete top-level ESLint disable comment for react-compiler
  • Retain modal open/close logic with escape key and swipe handling, but re-indent with tabs and modern TSX style
src/components/elements/modalwrapper.tsx
Modernize package, dependency, and toolchain configuration.
  • Bump pnpm to 10.19.0 and update packageManager field
  • Update Next, React type definitions, next-intl, quagga2, sharp, sass, and @frontendnetwork/veganify versions
  • Remove unused runtime dependencies like @ducanh2912/next-pwa, million, nookies, prom-client and dev dependency eslint-config-sznm
  • Upgrade Jest, Playwright, ESLint, eslint-config-next, typescript, typescript-eslint, and related @types packages
  • Simplify pnpm overrides to match the new React 19.2.0 toolchain and update various transitive security/compat versions
package.json
pnpm-lock.yaml
Simplify and modernize CI build pipeline, dropping staging-specific flows and updating actions.
  • Limit build workflow branches to main and release and remove staging branch logic and jobs
  • Update docker/login-action, docker/metadata-action, docker/build-push-action, and azure/setup-kubectl to newer pinned SHAs/versions
  • Remove staging build/deploy/e2e Playwright jobs to focus workflow on production deployment only
  • Remove conditional guards that excluded staging branch from prod build/deploy since staging flow is gone
.github/workflows/build.yml
Update PR validation workflow to current pnpm action and version.
  • Switch pnpm/action-setup from v4 to v6 in PR workflow
  • Align pnpm version in CI with updated packageManager setting, and partially update fallback job (still referencing older version)
.github/workflows/pr.yml
Tighten ESLint configuration with React Compiler plugin and additional ignores.
  • Normalize eslint.config.mjs to use tabs and consistent quotes
  • Integrate TypeScript strict and stylistic configs alongside next/core-web-vitals and next/typescript
  • Enable react-compiler/react-compiler rule as a warning and keep custom import/order and hooks rules
  • Extend ignores to include coverage directory
eslint.config.mjs
Adjust TypeScript compiler configuration for modern targets and bundler resolution.
  • Change target from es5 to ES2017 and moduleResolution from node to bundler
  • Remove baseUrl in favor of direct paths, while preserving @/* path mapping to src
  • Keep strict, noEmit, JSX, and plugin settings, updating indentation to tabs
tsconfig.json
Remove Million compiler integration from Next.js configuration and keep next-intl plugin.
  • Drop million/compiler import and million.next wrapping
  • Export a plain NextConfig with standalone output, strict mode, source maps, sass options, and datenschutz rewrite, wrapped only by withNextIntl
next.config.ts
Housekeeping for VCS and lockfile to align with new tooling.
  • Possibly adjust .gitignore (no functional diff shown)
  • Regenerate pnpm-lock.yaml to reflect dependency and toolchain updates
.gitignore
pnpm-lock.yaml

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@philipbrembeck philipbrembeck merged commit 8be5122 into main Apr 19, 2026
4 checks passed
Copy link
Copy Markdown

@sourcery-ai sourcery-ai Bot left a comment

Choose a reason for hiding this comment

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

Hey - I've found 3 issues, and left some high level feedback:

  • In .github/workflows/pr.yml, the fallback if_regular_build_fails job still installs pnpm 9.12.1 while the main job and packageManager now use 10.19.0; consider aligning these versions to avoid confusing or inconsistent CI behavior.
  • In More's handleLanguageChange, now that you're managing cookies manually with document.cookie, consider adding appropriate attributes (e.g. SameSite and Secure where applicable) to better match modern browser defaults and the behavior previously handled by nookies.
Prompt for AI Agents
Please address the comments from this code review:

## Overall Comments
- In `.github/workflows/pr.yml`, the fallback `if_regular_build_fails` job still installs pnpm `9.12.1` while the main job and `packageManager` now use `10.19.0`; consider aligning these versions to avoid confusing or inconsistent CI behavior.
- In `More`'s `handleLanguageChange`, now that you're managing cookies manually with `document.cookie`, consider adding appropriate attributes (e.g. `SameSite` and `Secure` where applicable) to better match modern browser defaults and the behavior previously handled by `nookies`.

## Individual Comments

### Comment 1
<location path="src/app/[locale]/more/page.tsx" line_range="25-28" />
<code_context>
-      path: "/",
-    });
-  }
+	function handleLanguageChange(locale: string) {
+		const maxAge = 30 * 24 * 60 * 60; // 30 days
+		document.cookie = `NEXT_LOCALE=${locale};max-age=${maxAge};path=/`;
+	}

</code_context>
<issue_to_address>
**🚨 suggestion (security):** Consider setting SameSite and Secure attributes on the locale cookie for better security and consistency.

The previous `nookies` usage likely set safer cookie defaults. Now that we set the cookie manually, consider explicitly adding `SameSite=Lax` (or `Strict` if appropriate) and `Secure` (when over HTTPS), for example:

```ts
const isSecure = window.location.protocol === "https:";
const attributes = [
  `max-age=${maxAge}`,
  "path=/",
  "samesite=lax",
  ...(isSecure ? ["secure"] : []),
].join(";");

document.cookie = `NEXT_LOCALE=${locale};${attributes}`;
```

This keeps behavior predictable across browsers instead of relying on default attributes.

```suggestion
	function handleLanguageChange(locale: string) {
		const maxAge = 30 * 24 * 60 * 60; // 30 days
		const isSecure = typeof window !== "undefined" && window.location.protocol === "https:";
		const attributes = [
			`max-age=${maxAge}`,
			"path=/",
			"samesite=lax",
			...(isSecure ? ["secure"] : []),
		].join(";");

		document.cookie = `NEXT_LOCALE=${locale};${attributes}`;
	}
```
</issue_to_address>

### Comment 2
<location path=".github/workflows/pr.yml" line_range="8-9" />
<code_context>
     steps:
       - uses: actions/checkout@v6
-      - uses: pnpm/action-setup@v4
+      - uses: pnpm/action-setup@v6
         with:
-          version: 9.12.1
+          version: 10.19.0
</code_context>
<issue_to_address>
**issue (bug_risk):** The second job still pins pnpm 9.x even though the project now uses pnpm 10.19.0.

This version mismatch can cause different install/lockfile behavior between jobs. Please update this step to use the same pnpm version as the primary job, for example:

```yaml
      - uses: pnpm/action-setup@v6
        with:
          version: 10.19.0
```
</issue_to_address>

### Comment 3
<location path="package.json" line_range="36-45" />
<code_context>
+		"react-dom": "19.2.0",
+		"sass": "^1.99.0",
+		"sharp": "^0.34.5",
+		"typescript": "6.0.3"
+	},
+	"devDependencies": {
+		"@playwright/test": "^1.59.1",
+		"@testing-library/jest-dom": "^6.9.1",
+		"@testing-library/react": "^16.3.2",
+		"@testing-library/user-event": "^14.6.1",
+		"@types/jest": "^30.0.0",
+		"@types/react": "19.2.14",
+		"eslint": "9.39.4",
+		"eslint-config-next": "16.2.4",
+		"eslint-import-resolver-typescript": "^4.4.4",
+		"eslint-plugin-import": "^2.32.0",
+		"eslint-plugin-react-compiler": "19.1.0-rc.2",
+		"jest": "^30.3.0",
+		"jest-environment-jsdom": "^30.3.0",
+		"ts-node": "^10.9.2",
+		"typescript-eslint": "^8.58.2"
+	},
</code_context>
<issue_to_address>
**issue (bug_risk):** ts-node 10.9.2 may not be compatible with TypeScript 6.0.3, which could break TS-powered tooling.

Given `ts-node` 10.x targets TS 4/5, using it with TS 6 may cause runtime issues in any `ts-node`-based tooling (e.g., Jest transforms, CLIs). Please either:
- Align `ts-node` with a version that officially supports TS 6 (when available), or
- Replace `ts-node` with a better-supported alternative for your use case (e.g., native ESM, `tsx`, `ts-jest`).

Also, rerun existing `ts-node`-driven flows against TS 6 to confirm they still work as expected.
</issue_to_address>

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

Comment on lines +25 to +28
function handleLanguageChange(locale: string) {
const maxAge = 30 * 24 * 60 * 60; // 30 days
document.cookie = `NEXT_LOCALE=${locale};max-age=${maxAge};path=/`;
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🚨 suggestion (security): Consider setting SameSite and Secure attributes on the locale cookie for better security and consistency.

The previous nookies usage likely set safer cookie defaults. Now that we set the cookie manually, consider explicitly adding SameSite=Lax (or Strict if appropriate) and Secure (when over HTTPS), for example:

const isSecure = window.location.protocol === "https:";
const attributes = [
  `max-age=${maxAge}`,
  "path=/",
  "samesite=lax",
  ...(isSecure ? ["secure"] : []),
].join(";");

document.cookie = `NEXT_LOCALE=${locale};${attributes}`;

This keeps behavior predictable across browsers instead of relying on default attributes.

Suggested change
function handleLanguageChange(locale: string) {
const maxAge = 30 * 24 * 60 * 60; // 30 days
document.cookie = `NEXT_LOCALE=${locale};max-age=${maxAge};path=/`;
}
function handleLanguageChange(locale: string) {
const maxAge = 30 * 24 * 60 * 60; // 30 days
const isSecure = typeof window !== "undefined" && window.location.protocol === "https:";
const attributes = [
`max-age=${maxAge}`,
"path=/",
"samesite=lax",
...(isSecure ? ["secure"] : []),
].join(";");
document.cookie = `NEXT_LOCALE=${locale};${attributes}`;
}

Comment thread .github/workflows/pr.yml
Comment on lines +8 to 9
- uses: pnpm/action-setup@v6
with:
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

issue (bug_risk): The second job still pins pnpm 9.x even though the project now uses pnpm 10.19.0.

This version mismatch can cause different install/lockfile behavior between jobs. Please update this step to use the same pnpm version as the primary job, for example:

      - uses: pnpm/action-setup@v6
        with:
          version: 10.19.0

Comment thread package.json
Comment on lines +36 to +45
"typescript": "6.0.3"
},
"devDependencies": {
"@playwright/test": "^1.59.1",
"@testing-library/jest-dom": "^6.9.1",
"@testing-library/react": "^16.3.2",
"@testing-library/user-event": "^14.6.1",
"@types/jest": "^30.0.0",
"@types/react": "19.2.14",
"eslint": "9.39.4",
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

issue (bug_risk): ts-node 10.9.2 may not be compatible with TypeScript 6.0.3, which could break TS-powered tooling.

Given ts-node 10.x targets TS 4/5, using it with TS 6 may cause runtime issues in any ts-node-based tooling (e.g., Jest transforms, CLIs). Please either:

  • Align ts-node with a version that officially supports TS 6 (when available), or
  • Replace ts-node with a better-supported alternative for your use case (e.g., native ESM, tsx, ts-jest).

Also, rerun existing ts-node-driven flows against TS 6 to confirm they still work as expected.

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.

1 participant