Skip to content

Commit 1022e1e

Browse files
authored
Merge branch 'main' into dependabot/npm_and_yarn/webpack-5.105.0
2 parents 7e4f520 + e93f39f commit 1022e1e

69 files changed

Lines changed: 1848 additions & 577 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/branch-deploy.yaml

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ jobs:
8989
needs.validate-user.outputs.is_org_member == 'true' &&
9090
github.event_name == 'workflow_dispatch' &&
9191
inputs.driver_k8s_branch != 'main'
92-
uses: 'flowfuse/github-actions-workflows/.github/workflows/publish_node_package.yml@v0.47.0'
92+
uses: 'flowfuse/github-actions-workflows/.github/workflows/publish_node_package.yml@v0.48.0'
9393
with:
9494
package_name: driver-k8s
9595
publish_package: true
@@ -106,7 +106,7 @@ jobs:
106106
needs.validate-user.outputs.is_org_member == 'true' &&
107107
github.event_name == 'workflow_dispatch' &&
108108
inputs.nr_project_nodes_branch != 'main'
109-
uses: 'flowfuse/github-actions-workflows/.github/workflows/publish_node_package.yml@v0.47.0'
109+
uses: 'flowfuse/github-actions-workflows/.github/workflows/publish_node_package.yml@v0.48.0'
110110
with:
111111
package_name: nr-project-nodes
112112
publish_package: true
@@ -123,7 +123,7 @@ jobs:
123123
needs.validate-user.outputs.is_org_member == 'true' &&
124124
github.event_name == 'workflow_dispatch' &&
125125
inputs.nr_file_nodes_branch != 'main'
126-
uses: 'flowfuse/github-actions-workflows/.github/workflows/publish_node_package.yml@v0.47.0'
126+
uses: 'flowfuse/github-actions-workflows/.github/workflows/publish_node_package.yml@v0.48.0'
127127
with:
128128
package_name: nr-file-nodes
129129
publish_package: true
@@ -140,7 +140,7 @@ jobs:
140140
needs.validate-user.outputs.is_org_member == 'true' &&
141141
github.event_name == 'workflow_dispatch' &&
142142
inputs.nr_assistant_branch != 'main'
143-
uses: 'flowfuse/github-actions-workflows/.github/workflows/publish_node_package.yml@v0.47.0'
143+
uses: 'flowfuse/github-actions-workflows/.github/workflows/publish_node_package.yml@v0.48.0'
144144
with:
145145
package_name: nr-assistant
146146
publish_package: true
@@ -157,7 +157,7 @@ jobs:
157157
needs.validate-user.outputs.is_org_member == 'true' &&
158158
github.event_name == 'workflow_dispatch' &&
159159
inputs.nr_tables_nodes_branch != 'main'
160-
uses: 'flowfuse/github-actions-workflows/.github/workflows/publish_node_package.yml@v0.47.0'
160+
uses: 'flowfuse/github-actions-workflows/.github/workflows/publish_node_package.yml@v0.48.0'
161161
with:
162162
package_name: nr-tables-nodes
163163
publish_package: true
@@ -179,7 +179,7 @@ jobs:
179179
needs.validate-user.outputs.is_org_member == 'true' &&
180180
github.event_name == 'workflow_dispatch' &&
181181
(always() && inputs.nr_launcher_branch != 'main') || needs.publish_nr_project_nodes.result == 'success' || needs.publish_nr_file_nodes.result == 'success' || needs.publish_nr_assistant.result == 'success' || needs.publish_nr_tables_nodes.result == 'success'
182-
uses: 'flowfuse/github-actions-workflows/.github/workflows/publish_node_package.yml@v0.47.0'
182+
uses: 'flowfuse/github-actions-workflows/.github/workflows/publish_node_package.yml@v0.48.0'
183183
with:
184184
package_name: flowfuse-nr-launcher
185185
publish_package: true
@@ -203,7 +203,7 @@ jobs:
203203
needs.validate-user.outputs.is_org_member == 'true' &&
204204
github.event_name == 'workflow_dispatch' &&
205205
(always() && needs.publish_nr_launcher.result == 'success')
206-
uses: flowfuse/github-actions-workflows/.github/workflows/build_container_image.yml@v0.47.0
206+
uses: flowfuse/github-actions-workflows/.github/workflows/build_container_image.yml@v0.48.0
207207
with:
208208
image_name: 'node-red'
209209
dockerfile_path: Dockerfile
@@ -247,7 +247,7 @@ jobs:
247247

248248
- name: Configure AWS credentials for ECR interaction
249249
id: aws-config
250-
uses: aws-actions/configure-aws-credentials@61815dcd50bd041e203e49132bacad1fd04d2708 # v5.1.1
250+
uses: aws-actions/configure-aws-credentials@8df5847569e6427dd6c4fb1cf565c83acfa8afa7 # v6.0.0
251251
with:
252252
role-to-assume: arn:aws:iam::${{ secrets.AWS_ACCOUNT_ID }}:role/${{ env.AWS_ECR_PUSH_ROLE }}
253253
role-session-name: GithubActionsRoleSession
@@ -386,7 +386,7 @@ jobs:
386386

387387
- name: Configure AWS credentials for ECR interaction
388388
id: aws-config
389-
uses: aws-actions/configure-aws-credentials@61815dcd50bd041e203e49132bacad1fd04d2708 # v5.1.1
389+
uses: aws-actions/configure-aws-credentials@8df5847569e6427dd6c4fb1cf565c83acfa8afa7 # v6.0.0
390390
with:
391391
role-to-assume: arn:aws:iam::${{ secrets.AWS_ACCOUNT_ID }}:role/${{ env.AWS_ECR_PUSH_ROLE }}
392392
role-session-name: GithubActionsRoleSession
@@ -406,7 +406,7 @@ jobs:
406406
docker push ${{ steps.aws-config.outputs.aws-account-id }}.dkr.ecr.eu-west-1.amazonaws.com/flowforge/${{ env.tagged_image }}-${{ env.timestamp }}
407407
408408
- name: Configure AWS credentials for EKS interaction
409-
uses: aws-actions/configure-aws-credentials@61815dcd50bd041e203e49132bacad1fd04d2708 # v5.1.1
409+
uses: aws-actions/configure-aws-credentials@8df5847569e6427dd6c4fb1cf565c83acfa8afa7 # v6.0.0
410410
with:
411411
role-to-assume: arn:aws:iam::${{ secrets.AWS_ACCOUNT_ID }}:role/${{ env.AWS_EKS_DEPLOY_ROLE }}
412412
role-session-name: GithubActionsRoleSessio
@@ -617,7 +617,7 @@ jobs:
617617
id-token: write
618618
steps:
619619
- name: Configure AWS credentials for EKS interaction
620-
uses: aws-actions/configure-aws-credentials@61815dcd50bd041e203e49132bacad1fd04d2708 # v5.1.1
620+
uses: aws-actions/configure-aws-credentials@8df5847569e6427dd6c4fb1cf565c83acfa8afa7 # v6.0.0
621621
with:
622622
role-to-assume: arn:aws:iam::${{ secrets.AWS_ACCOUNT_ID }}:role/${{ env.AWS_EKS_DEPLOY_ROLE }}
623623
role-session-name: GithubActionsRoleSession

.github/workflows/publish.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ jobs:
9797
if: |
9898
needs.check-tests-status.outputs.tests_status == 'success' && github.ref == 'refs/heads/main'
9999
needs: check-tests-status
100-
uses: 'flowfuse/github-actions-workflows/.github/workflows/publish_node_package.yml@v0.47.0'
100+
uses: 'flowfuse/github-actions-workflows/.github/workflows/publish_node_package.yml@v0.48.0'
101101
with:
102102
package_name: flowfuse
103103
build_package: true

.github/workflows/release-publish.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,6 @@ jobs:
1818
- run: npm ci
1919
- run: npm run build
2020
# - run: npm run test
21-
- uses: JS-DevTools/npm-publish@4ce4bd0f334d5316473155078da1955d42148494 # v4.1.4
21+
- uses: JS-DevTools/npm-publish@0fd2f4369c5d6bcfcde6091a7c527d810b9b5c3f # v4.1.5
2222
with:
2323
token: ${{ secrets.NPM_PUBLISH_TOKEN }}

.github/workflows/tests.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ jobs:
140140
- name: Install Dependencies
141141
run: npm ci
142142
- name: Run UI E2E (Cypress) Tests - OS
143-
uses: cypress-io/github-action@0f330ebf0d60f87608ed72f1d6232e5644aa3171 # v7.1.1
143+
uses: cypress-io/github-action@84d178e4bbce871e23f2ffa3085898cde0e4f0ec # v7.1.2
144144
with:
145145
install: false
146146
config-file: config/cypress-os.config.js
@@ -180,7 +180,7 @@ jobs:
180180
- name: Install Dependencies
181181
run: npm ci
182182
- name: Run UI E2E (Cypress) Tests - EE
183-
uses: cypress-io/github-action@0f330ebf0d60f87608ed72f1d6232e5644aa3171 # v7.1.1
183+
uses: cypress-io/github-action@84d178e4bbce871e23f2ffa3085898cde0e4f0ec # v7.1.2
184184
with:
185185
install: false
186186
config-file: config/cypress-ee.config.js

CHANGELOG.md

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,38 @@
1+
#### 2.27.0: Release
2+
3+
- Bump JS-DevTools/npm-publish from 4.1.4 to 4.1.5 (#6614)
4+
- Bump aws-actions/configure-aws-credentials from 5.1.1 to 6.0.0 (#6673)
5+
- Bump cypress-io/github-action from 7.1.1 to 7.1.2 (#6674)
6+
- Bump flowfuse/github-actions-workflows/.github/workflows/build_container_image.yml (#6676)
7+
- Bump flowfuse/github-actions-workflows/.github/workflows/publish_node_package.yml (#6675)
8+
- Fix concurrency group setting in `Create pre-staging environment` workflow (#6656)
9+
- Add X-Forwarded headers to nginx ingress docs (#6630)
10+
- Ensure UI honors TeamType Enable All flag (#6686) @hardillb
11+
- Bump @modelcontextprotocol/sdk from 1.25.3 to 1.26.0 (#6632) @app/dependabot
12+
- Update device editor navigation to use named route configuration (#6690) @cstns
13+
- Add 4.1.5 to Device Agent Node-RED versions (#6688) @hardillb
14+
- Improve clarity of instance assignment in docs (#6554) @sumitshinde-84
15+
- Allow snapshot to be restored to a remote instance in dev mode (#6679) @knolleary
16+
- Hide billing selector when billing is disabled (#6671) @cstns
17+
- fix(ui): wrap DialogBox in Teleport to fix positioning in drawer cont… (#6255) @dimitrieh
18+
- Reenable immersive mode for remote instances (#6684) @cstns
19+
- Use correct favicon and use provided link to package (#6678) @Steve-Mcl
20+
- Ensure consistent Open Editor behavior — always default to immersive experience (#6670) @dimitrieh
21+
- FlowFuse Expert context UI (#6631) @Steve-Mcl
22+
- Remove WebSocket communication handling and associated methods from the immersive device editor (#6668) @cstns
23+
- Add WebSocket disconnection details by logging event details (#6667) @cstns
24+
- Enhance remote instance editor with connection polling, communication… (#6647) @cstns
25+
- Add the drawer sub routes and the FF Expert to the immersive remote instance (#6629) @cstns
26+
- Add the embedded remote instance editor route (#6628) @cstns
27+
- Relocate immersive editor components to a common namespace (#6624) @cstns
28+
- ci: Update NR versions on pre-staging stacks (#6641) @ppawlowski
29+
- Refactor device routes and update references to use consistent naming convention (#6623) @cstns
30+
- Chore: extract common immersive styling (#6622) @cstns
31+
- Refactor drawer: extract reusable functionality into composable (#6621) @cstns
32+
- Chore/use the resizing helper to resize the instance immersive drawer (#6610) @cstns
33+
- Bump @isaacs/brace-expansion from 5.0.0 to 5.0.1 (#6627) @app/dependabot
34+
- Bump dompurify from 3.3.0 to 3.3.1 (#6612) @app/dependabot
35+
136
#### 2.26.2: Release
237

338
- Bump cypress-io/github-action from 7.1.0 to 7.1.1 (#6616)

docs/device-agent/register.md

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,6 @@ flowfuse-device-agent
147147
You will see the Device Agent start and perform a 'call-home' where it connects back
148148
to the platform to check what it should be running.
149149

150-
151150
#### Additional Information
152151

153152
If you copy or download a **Device Provisioning Configuration** file to your hardware,
@@ -164,12 +163,12 @@ you've followed [Single Device Registration](#single-remote-instance-registratio
164163
[Bulk Registration](#bulk-registration) to register your device, it will
165164
automatically be assigned to an Application or Instance.
166165

167-
### Applications (Recommended)
168-
169-
#### Assign to Application
166+
### Applications
170167

171168
This step will permit you to push Snapshots to your Remote Instance via [DevOps Pipelines](/docs/user/devops-pipelines.md), or via a [Target Snapshot](/docs/user/snapshots/#application-owned-devices) from the Application.
172169

170+
#### Assign to Application
171+
173172
1. Go to your teams's **Remote Instances** page.
174173
2. Open the dropdown menu to the right of the Remote Instance you want to assign and
175174
select the **Add to Application** option.
@@ -206,14 +205,17 @@ NOTE: If you wish to keep the flows currently running on the Remote Instance, it
206205

207206
### Hosted Instances
208207

209-
This method permits you to set a [Target Snapshot](/docs/user/snapshots/#instance-owned-devices) from the Hosted Instance to the Remote Instance. Note though, you can only push nodes and flows that are supported by _both_ Hosted and Remote Instances. The best use case for Remote Instances are generally to be assigned by an Application instead.
208+
This method establishes a deployment relationship where a Hosted Instance becomes the source for snapshot deployments to your Remote Instance(s).
209+
210+
**Important:** This is a legacy feature; [assigning to Applications](./register.md#applications) is the recommended approach as it provides better fleet management and DevOps Pipeline capabilities. For guidance, see [when to use each approach](/docs/user/concepts.md#when-to-use-instance-assignment-vs-devops-pipelines).
210211

211212
#### Assign to Hosted Instance
212213

213-
1. Go to your teams's **Remote Instances** page.
214-
2. Open the dropdown menu to the right of the Remote Instance you want to assign and
215-
select the **Add to Hosted Instance** option.
216-
3. Select the instance in the dialog and click **Add** to continue.
214+
1. Go to your team's **Remote Instances** page.
215+
2. Open the dropdown menu to the right of the Remote Instance you want to assign and select the **Add to Instance** option.
216+
3. Select the Hosted Instance in the dialog and click **Add** to continue.
217+
218+
**Note:** There are constraints on which instances can be assigned to each other. For detailed information, refer to [Assignment Rules and Constraints](/docs/user/concepts.md#assignment-rules).
217219

218220
### Remove from Hosted Instance
219221

docs/user/concepts.md

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ navOrder: 2
55

66
# FlowFuse Concepts
77

8-
FlowFuse makes it easy to create, manage, and scale Node-RED instances. The platform introduces a few core concepts to help you organize and work with it effectively. Throughout the platform, youll also see ⓘ icons that you can click on to get pop-up explanations for different features and terms.
8+
FlowFuse makes it easy to create, manage, and scale Node-RED instances. The platform introduces a few core concepts to help you organize and work with it effectively. Throughout the platform, you'll also see ⓘ icons that you can click on to get pop-up explanations for different features and terms.
99

1010
## Table of Contents
1111

@@ -25,7 +25,11 @@ FlowFuse makes it easy to create, manage, and scale Node-RED instances. The plat
2525
- [Template](#template)
2626
- [Snapshot](#snapshot)
2727
- [Hosted Instance Snapshot](#hosted-instance-snapshot)
28-
- [Remote Instances (Device Snapshot)](#remote-instance-snapshot)
28+
- [Remote Instance Snapshot](#remote-instance-snapshot)
29+
- [Assigning Remote Instances to Hosted Instances](#assigning-remote-instances-to-hosted-instances)
30+
- [How It Works](#how-it-works)
31+
- [Assignment Rules](#assignment-rules)
32+
- [When to Use Instance Assignment vs DevOps Pipelines](#when-to-use-instance-assignment-vs-devops-pipelines)
2933
- [Device](#device)
3034
- [Device Agent](#device-agent)
3135
- [Fleet Mode vs Developer Mode](#fleet-mode-vs-developer-mode)
@@ -50,7 +54,7 @@ To organize your Node-RED instances, they are grouped within Applications. With
5054

5155
Applications provide logical organization of related instances, support for DevOps pipeline workflows, simplified device group management, application-level audit logging, and clear organizational boundaries for managing multiple instances and devices.
5256

53-
With FlowFuses Granular RBAC, Applications can now also act as an authorization boundary. This means user roles and permissions can be managed at the application level, providing finer control over access to instances, snapshots, and devices within a given application.
57+
With FlowFuse's Granular RBAC, Applications can now also act as an authorization boundary. This means user roles and permissions can be managed at the application level, providing finer control over access to instances, snapshots, and devices within a given application.
5458

5559
### DevOps Pipeline
5660

@@ -125,6 +129,35 @@ A user can create an hosted instance snapshot and then mark it as the *target* s
125129

126130
Similar to instance snapshots, a device snapshot is a point-in-time backup of a Node-RED instance running on a remote device. It captures the flows, credentials, and runtime settings. The difference is that local changes made on a device during developer mode are pulled into the FlowFuse platform and stored as a snapshot. The dashboard also allows you to see and manage these snapshots. With devices assigned to an application, a user can create a device snapshot from the remote device.
127131

132+
### Assigning Remote Instances to Hosted Instances
133+
134+
**Note:** This is a legacy feature that predates DevOps Pipelines. For new deployments, consider using [DevOps Pipelines](#devops-pipeline) instead, which provide more flexible and powerful deployment workflows.
135+
136+
Instance assignment establishes a parent-child deployment relationship between a hosted instance and remote instances. When assigned, the hosted instance becomes the source of truth and automatically pushes snapshots to the remote instance. You can only push nodes and flows that are supported by both Hosted and Remote Instances. For more information on how this works, see [How Instance Assignment Works](/docs/user/concepts.md#how-it-works).
137+
138+
#### How It Works
139+
140+
Instance assignment creates a parent-child deployment relationship with the following behavior:
141+
142+
- **Hosted Instance (Parent)**: Acts as the deployment controller and source of truth for snapshots
143+
- **Remote Instance (Child)**: Receives and applies snapshot updates from the parent
144+
- **Deployment Flow**: When you set a [Target Snapshot](/docs/user/snapshots/#instance-owned-devices) on the hosted instance, all assigned remote instances automatically restart on that snapshot
145+
- **One-Way Relationship**: Changes flow exclusively from the hosted instance to remote instances, ensuring consistent deployments across your fleet
146+
147+
#### Assignment Rules
148+
149+
FlowFuse enforces specific constraints on instance assignment:
150+
151+
- Remote instances can be assigned to hosted instances
152+
- Remote instances cannot be assigned to other remote instances
153+
- Hosted instances cannot be assigned to any other instances
154+
155+
#### When to Use Instance Assignment vs DevOps Pipelines
156+
157+
Instance assignment suits straightforward scenarios where you need to push snapshots from a single hosted instance directly to one or more remote instances. It works well for maintaining existing deployments or when you simply need one hosted instance deploying to multiple remote instances without staging environments.
158+
159+
DevOps Pipelines are recommended for most deployment workflows. They support staged environments for testing changes in development before promoting to production, enable deployment to device groups for easier fleet management, and offer more flexibility aligned with modern development practices. If you're setting up a new deployment process, use DevOps Pipelines.
160+
128161
## Device
129162

130163
The FlowFuse platform can be used to manage Node-RED applications running on remote devices. A Device is essentially a **Remote Instance** that runs a software agent to connect back to the platform and receive updates.
@@ -155,4 +188,4 @@ Device groups allow you to organize your devices into logical groups. These grou
155188

156189
Device groups provide logical organization of devices by location, function, environment, or other criteria. They enable simplified mass deployments through DevOps pipelines, allow you to target specific device groups for staged rollouts, and let you manage subsets of devices independently.
157190

158-
Read more [about Device Groups](./device-groups.md).
191+
Read more [about Device Groups](./device-groups.md).

docs/user/ff-tables.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ navTitle: FlowFuse Tables
55
# FlowFuse Tables
66

77
<div class="bg-yellow-100 border-l-4 border-yellow-500 text-yellow-700 px-4 py-4 mb-4 rounded" role="alert">
8-
<span class="block leading-none">This feature is currently in <a href="https://flowfuse.com/handbook/development/releases/#beta-release">the beta state</a></span>
8+
<span class="block leading-none">This feature is currently in <a href="https://flowfuse.com/handbook/engineering/releases/#beta-release">the beta state</a></span>
99
</div>
1010

1111
From FlowFuse v2.20.0 Teams (Enterprise teams only) can create a relational database to use to store data.

0 commit comments

Comments
 (0)