Skip to content

fix(dashboard): set NODE_ENV=development to restore guest auth after Backstage upgrade#11520

Merged
sylvainsf merged 1 commit intomainfrom
fix/dashboard-guest-auth-node-env
Mar 26, 2026
Merged

fix(dashboard): set NODE_ENV=development to restore guest auth after Backstage upgrade#11520
sylvainsf merged 1 commit intomainfrom
fix/dashboard-guest-auth-node-env

Conversation

@sylvainsf
Copy link
Copy Markdown
Contributor

@sylvainsf sylvainsf commented Mar 26, 2026

Description

The dashboard is completely inoperative on Radius 0.56.0, returning 401 Unauthorized with "Missing credentials" on all pages (screenshots in issue).

Root cause: The dashboard repo's PR radius-project/dashboard#206 ("migrate to node 24 and upgrade deps") bumped @backstage/plugin-auth-backend from ^0.25.7 to ^0.27.2. Starting in Backstage auth-backend 0.26.x, the guest auth provider is silently disabled when NODE_ENV=production. The dashboard Dockerfile has always set NODE_ENV=production (standard Node.js practice), so this behavior change broke guest auth without any visible error.

Fix: Set NODE_ENV=development on the dashboard container via the Helm chart deployment template. This re-enables the Backstage guest auth provider. The value is configurable through dashboard.nodeEnv in values.yaml and defaults toFix: Set NODE_ENV=development on the aFixper toolFix: Set NODE_ENV=development on the dashboard container via the Helm chart deployment template. This re-enables the Backstage guest auth provider. The value is configurable through dashboard.nodeEnv k required).

Fixes: #11519

Contributor checklist

Please verify that the PR meets the following requirements, where applicable:

  • An overview of proposed schema changes is included in a linked GitHub issue.
    • Yes
    • Not applicable
  • A design document PR is created in the design-notes repository, if new APIs are being introduced.
    • Yes
    • Not applicable
  • The design document has been reviewed and approved by Radius maintainers/approvers.
    • Yes
    • Not applicable
  • A PR for the [samples repository](https://github.com/radius- A PR fosamples) is created, if existing samples are affected by the changes in this PR.
    • Yes
    • Not applicable
  • A PR for the documentation repository is created, if the change- A PR for the [documentation repository](https://gacing updates are made.
    • Yes
    • Not applicable
  • A PR for the recipes repository is created, if existing recipes are affected by the changes in this PR.
    • Yes
    • Not applicable

…Backstage upgrade

The dashboard's Backstage dependency upgrade in radius-project/dashboard#206
bumped @backstage/plugin-auth-backend from 0.25.x to 0.27.x. Starting in
0.26.x, the guest auth provider is silently disabled when NODE_ENV=production
(set in the dashboard Dockerfile). This causes 401 'Missing credentials'
errors on all dashboard pages.

Set NODE_ENV=development via the Helm chart so the Backstage guest auth
provider remains active. The value is configurable through
dashboard.nodeEnv in values.yaml and defaults to 'development'.

Fixes: #11519
@sylvainsf sylvainsf requested review from a team as code owners March 26, 2026 15:17
Copilot AI review requested due to automatic review settings March 26, 2026 15:17
@sylvainsf sylvainsf temporarily deployed to external-contributor-approval March 26, 2026 15:17 — with GitHub Actions Inactive
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Fixes the Radius Helm chart configuration so the Backstage dashboard container runs with NODE_ENV=development by default, restoring guest authentication behavior after the Backstage auth-backend upgrade that disables guest auth in production mode.

Changes:

  • Add dashboard.nodeEnv to Helm values (default: development) to control the dashboard container’s NODE_ENV.
  • Inject NODE_ENV into the dashboard Deployment manifest from .Values.dashboard.nodeEnv.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.

File Description
deploy/Chart/values.yaml Adds a configurable dashboard.nodeEnv value (defaulting to development) with explanatory comments.
deploy/Chart/templates/dashboard/deployment.yaml Sets the dashboard container NODE_ENV env var from Helm values (defaulting to development).

Comment on lines +33 to +35
env:
- name: NODE_ENV
value: {{ .Values.dashboard.nodeEnv | default "development" | quote }}
Copy link

Copilot AI Mar 26, 2026

Choose a reason for hiding this comment

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

Add/update Helm chart unit tests to cover this new behavior: assert that spec.template.spec.containers[0].env includes NODE_ENV with the default value (development) and that it can be overridden via dashboard.nodeEnv. There are existing chart tests in deploy/Chart/tests/helpers_test.yaml that already validate dashboard settings but don't validate this new env var.

Copilot generated this review using guidance from repository custom instructions.
@radius-functional-tests
Copy link
Copy Markdown

radius-functional-tests bot commented Mar 26, 2026

Radius functional test overview

🔍 Go to test action run

Click here to see the test run details
Name Value
Repository radius-project/radius
Commit ref a71bb49
Unique ID func9a62768c42
Image tag pr-func9a62768c42
  • gotestsum 1.13.0
  • KinD: v0.29.0
  • Dapr: 1.14.4
  • Azure KeyVault CSI driver: 1.4.2
  • Azure Workload identity webhook: 1.3.0
  • Bicep recipe location ghcr.io/radius-project/dev/test/testrecipes/test-bicep-recipes/<name>:pr-func9a62768c42
  • Terraform recipe location http://tf-module-server.radius-test-tf-module-server.svc.cluster.local/<name>.zip (in cluster)
  • applications-rp test image location: ghcr.io/radius-project/dev/applications-rp:pr-func9a62768c42
  • dynamic-rp test image location: ghcr.io/radius-project/dev/dynamic-rp:pr-func9a62768c42
  • controller test image location: ghcr.io/radius-project/dev/controller:pr-func9a62768c42
  • ucp test image location: ghcr.io/radius-project/dev/ucpd:pr-func9a62768c42
  • deployment-engine test image location: ghcr.io/radius-project/deployment-engine:latest

Test Status

⌛ Building Radius and pushing container images for functional tests...
✅ Container images build succeeded
⌛ Publishing Bicep Recipes for functional tests...
✅ Recipe publishing succeeded
⌛ Starting ucp-cloud functional tests...
⌛ Starting corerp-cloud functional tests...
✅ ucp-cloud functional tests succeeded
✅ corerp-cloud functional tests succeeded

Copy link
Copy Markdown
Member

@DariuszPorowski DariuszPorowski left a comment

Choose a reason for hiding this comment

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

development by default is not best practices, approving due to urgency and quick workaround but we have to rethink how to do it right in the future with proper production flag.

@sylvainsf sylvainsf merged commit ddd4eeb into main Mar 26, 2026
51 of 53 checks passed
@sylvainsf sylvainsf deleted the fix/dashboard-guest-auth-node-env branch March 26, 2026 15:30
@codecov
Copy link
Copy Markdown

codecov bot commented Mar 26, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 51.23%. Comparing base (1506c2f) to head (a71bb49).
⚠️ Report is 1 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main   #11520      +/-   ##
==========================================
+ Coverage   51.21%   51.23%   +0.01%     
==========================================
  Files         699      699              
  Lines       44050    44050              
==========================================
+ Hits        22560    22568       +8     
+ Misses      19330    19326       -4     
+ Partials     2160     2156       -4     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

sk593 pushed a commit that referenced this pull request Mar 26, 2026
…Backstage upgrade (#11520)

# Description

The dashboard is completely inoperative on Radius 0.56.0, returning `401
Unauthorized` with `"Missing credentials"` on all pages ([screenshots in
issue](https://github.com/radius-project/radius/issues/11519)).

**Root cause**: The dashboard repo's PR
[radius-project/dashboard#206](radius-project/dashboard#206)
("migrate to node 24 and upgrade deps") bumped
`@backstage/plugin-auth-backend` from `^0.25.7` to `^0.27.2`. Starting
in Backstage auth-backend 0.26.x, the **guest auth provider is silently
disabled when `NODE_ENV=production`**. The dashboard Dockerfile has
always set `NODE_ENV=production` (standard Node.js practice), so this
behavior change broke guest auth without any visible error.

**Fix**: Set `NODE_ENV=development` on the dashboard container via the
Helm chart deployment template. This re-enables the Backstage guest auth
provider. The value is configurable through `dashboard.nodeEnv` in
`values.yaml` and defaults to**Fix**: Set `NODE_ENV=development` on the
a**Fix**per tool**Fix**: Set `NODE_ENV=development` on the dashboard
container via the Helm chart deployment template. This re-enables the
Backstage guest auth provider. The value is configurable through
`dashboard.nodeEnv` k required).

Fixes: #11519

## Contributor checklist
Please verify that the PR meets the following requirements, where
applicable:

<!--
This checklist uses "TaskRadio" comments to make certain options
mutually exclusive.
See:
https://github.com/mheap/require-checklist-action?tab=readme-ov-file#radio-groups
For details on how this works and why it's required.
-->

- An overview of proposed schema changes is included in a linked GitHub
issue.
    - [ ] Yes <!-- TaskRadio schema -->
    - [x] Not applicable <!-- TaskRadio schema -->
- A design document PR is created in the [design-notes
repository](https://github.com/radius-project/design-notes/), if new
APIs are being introduced.
    - [ ] Yes <!-- TaskRadio design-pr -->
    - [x] Not applicable <!-- TaskRadio design-pr -->
- The design document has been reviewed and approved by Radius
maintainers/approvers.
    - [ ] Yes <!-- TaskRadio design-review -->
    - [x] Not applicable <!-- TaskRadio design-review -->
- A PR for the [samples repository](https://github.com/radius- A PR
fosamples) is created, if existing samples are affected by the changes
in this PR.
    - [ ] Yes <!-- TaskRadio samples-pr -->
    - [x] Not applicable <!-- TaskRadio samples-pr -->
- A PR for the [documentation
repository](https://github.com/radius-project/docs) is created, if the
change- A PR for the [documentation repository](https://gacing updates
are made.
    - [ ] Yes <!-- TaskRadio docs-pr -->
    - [x] Not applicable <!-- TaskRadio docs-pr -->
- A PR for the [recipes
repository](https://github.com/radius-project/recipes) is created, if
existing recipes are affected by the changes in this PR.
    - [ ] Yes <!-- TaskRadio recipes-pr -->
    - [x] Not applicable <!-- TaskRadio recipes-pr -->

(cherry picked from commit ddd4eeb)
sk593 pushed a commit that referenced this pull request Mar 26, 2026
…Backstage upgrade (#11520)

# Description

The dashboard is completely inoperative on Radius 0.56.0, returning `401
Unauthorized` with `"Missing credentials"` on all pages ([screenshots in
issue](https://github.com/radius-project/radius/issues/11519)).

**Root cause**: The dashboard repo's PR
[radius-project/dashboard#206](radius-project/dashboard#206)
("migrate to node 24 and upgrade deps") bumped
`@backstage/plugin-auth-backend` from `^0.25.7` to `^0.27.2`. Starting
in Backstage auth-backend 0.26.x, the **guest auth provider is silently
disabled when `NODE_ENV=production`**. The dashboard Dockerfile has
always set `NODE_ENV=production` (standard Node.js practice), so this
behavior change broke guest auth without any visible error.

**Fix**: Set `NODE_ENV=development` on the dashboard container via the
Helm chart deployment template. This re-enables the Backstage guest auth
provider. The value is configurable through `dashboard.nodeEnv` in
`values.yaml` and defaults to**Fix**: Set `NODE_ENV=development` on the
a**Fix**per tool**Fix**: Set `NODE_ENV=development` on the dashboard
container via the Helm chart deployment template. This re-enables the
Backstage guest auth provider. The value is configurable through
`dashboard.nodeEnv` k required).

Fixes: #11519

## Contributor checklist
Please verify that the PR meets the following requirements, where
applicable:

<!--
This checklist uses "TaskRadio" comments to make certain options
mutually exclusive.
See:
https://github.com/mheap/require-checklist-action?tab=readme-ov-file#radio-groups
For details on how this works and why it's required.
-->

- An overview of proposed schema changes is included in a linked GitHub
issue.
    - [ ] Yes <!-- TaskRadio schema -->
    - [x] Not applicable <!-- TaskRadio schema -->
- A design document PR is created in the [design-notes
repository](https://github.com/radius-project/design-notes/), if new
APIs are being introduced.
    - [ ] Yes <!-- TaskRadio design-pr -->
    - [x] Not applicable <!-- TaskRadio design-pr -->
- The design document has been reviewed and approved by Radius
maintainers/approvers.
    - [ ] Yes <!-- TaskRadio design-review -->
    - [x] Not applicable <!-- TaskRadio design-review -->
- A PR for the [samples repository](https://github.com/radius- A PR
fosamples) is created, if existing samples are affected by the changes
in this PR.
    - [ ] Yes <!-- TaskRadio samples-pr -->
    - [x] Not applicable <!-- TaskRadio samples-pr -->
- A PR for the [documentation
repository](https://github.com/radius-project/docs) is created, if the
change- A PR for the [documentation repository](https://gacing updates
are made.
    - [ ] Yes <!-- TaskRadio docs-pr -->
    - [x] Not applicable <!-- TaskRadio docs-pr -->
- A PR for the [recipes
repository](https://github.com/radius-project/recipes) is created, if
existing recipes are affected by the changes in this PR.
    - [ ] Yes <!-- TaskRadio recipes-pr -->
    - [x] Not applicable <!-- TaskRadio recipes-pr -->

(cherry picked from commit ddd4eeb)
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.

3 participants