Skip to content

Commit be2aaa7

Browse files
authored
Merge branch 'main' into dependabot/npm_and_yarn/google-auth-library-10.5.0
2 parents 686249a + 392a993 commit be2aaa7

97 files changed

Lines changed: 3420 additions & 1440 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/scripts/initial-setup.sh

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,8 @@ curl -ks -w "\n" -XPOST \
184184
https://$FLOWFUSE_URL/api/v1/project-types/
185185

186186
### Create stacks
187-
create_stack "Default" "Default" 30 256 "flowfuse/node-red:$(get_latest_image_tag "4.0.x")"
187+
create_stack "Default" "Default (4.1.x)" 30 256 "flowfuse/node-red:$(get_latest_image_tag "4.1.x")"
188+
create_stack "NR-40x" "4.0.x" 30 256 "flowfuse/node-red:$(get_latest_image_tag "4.0.x")"
188189
create_stack "NR-30x" "3.0.x" 30 256 "flowfuse/node-red:latest"
189190
create_stack "NR-31x" "3.1.x" 30 256 "flowfuse/node-red:$(get_latest_image_tag "3.1.x")"
190191

.github/workflows/branch-deploy.yaml

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ on:
4040
- 'docs/**'
4141

4242
concurrency:
43-
group: ${{ github.workflow }}-${{ github.event.number }}
43+
group: ${{ github.workflow }}-${{ github.event.number || inputs.pr_number }}
4444
cancel-in-progress: false
4545

4646
env:
@@ -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
@@ -262,7 +262,7 @@ jobs:
262262
mask-password: true
263263

264264
- name: Login to GHCR
265-
uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0
265+
uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3.7.0
266266
with:
267267
registry: ghcr.io
268268
username: ${{ github.actor }}
@@ -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/docs.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ jobs:
4949
path: 'blueprint-library'
5050
token: ${{ steps.generate_token.outputs.token }}
5151
- name: Cache image pipeline output
52-
uses: actions/cache@8b402f58fbc84540c8b491a91e594a4576fec3d7 # v5.0.2
52+
uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3
5353
with:
5454
key: img-pipeline-cache
5555
path: website/_site/img

.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@8a35f965fbd13e3b18d9fb3bdc5f50ae2f4a5e76 # v7.1.0
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@8a35f965fbd13e3b18d9fb3bdc5f50ae2f4a5e76 # v7.1.0
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: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,63 @@
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+
36+
#### 2.26.2: Release
37+
38+
- Bump cypress-io/github-action from 7.1.0 to 7.1.1 (#6616)
39+
- Bump docker/login-action from 3.6.0 to 3.7.0 (#6617)
40+
- Bump actions/cache from 5.0.2 to 5.0.3 (#6615)
41+
- Bump flowfuse/github-actions-workflows/.github/workflows/build_container_image.yml (#6574)
42+
- Bump flowfuse/github-actions-workflows/.github/workflows/publish_node_package.yml (#6575)
43+
- Bump flowfuse/github-actions-workflows/.github/workflows/sast_scan.yaml (#6576)
44+
- Bump fastify from 5.6.2 to 5.7.4 (#6620) @app/dependabot
45+
- chore: Update features for teams on pre-staging (#6595) @ppawlowski
46+
- Add issues and suggestions display to `ExpertChatMessage` component with icon support (#6607) @cstns
47+
- Allow team owners to edit their application roles (#6555) @cstns
48+
- Update Assistant Link (#6596) @sumitshinde-84
49+
- Rename FlowFuse Assistant and related references to FlowFuse Expert (#6571) @sumitshinde-84
50+
- Alter the expert's chat input (#6581) @cstns
51+
- Create UI component to include selected flows (#6580) @cstns
52+
- Add confirmation dialog for administrator privilege grant (#6548) @dimitrieh
53+
- Fix Device based MCP error log in app log (#6587) @Steve-Mcl
54+
- Fix Expert errors when device are present in MCPRegistrations (#6584) @cstns
55+
- docs: add hosted vs remote instance comparison table (#6481) @dgatti0213
56+
- Bump jsonwebtoken from 9.0.2 to 9.0.3 (#6469) @app/dependabot
57+
- Bump @node-red/util from 4.0.2 to 4.1.2 (#6468) @app/dependabot
58+
- Bump nodemailer from 7.0.11 to 7.0.12 (#6467) @app/dependabot
59+
- Bump lodash from 4.17.21 to 4.17.23 (#6550) @app/dependabot
60+
161
#### 2.26.1: Release
262

363
- Bump cypress-io/github-action from 6.10.8 to 7.1.0 (#6577)

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/device-agent/running.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ Options
5151
-i, --interval secs
5252
-p, --port number
5353
-m, --moduleCache Use local npm module cache rather than install
54+
--node-options Adds NodeJS command line arguments, can be specified multiple times
5455
5556
Web UI Options
5657
@@ -89,6 +90,12 @@ _Start the agent with a different working directory and the Web UI enabled_
8990
flowfuse-device-agent -d /path/to/working/directory -w --ui-user admin --ui-pass password --ui-port 8081
9091
```
9192

93+
_Start the agent with a larger NodeJS memory space and using the openssl CA certs_
94+
95+
```bash
96+
flowfuse-device-agent -d /path/to/working/directory --node-options='--max_old_space_size=1024' --node_options='--use-openssl-ca'
97+
```
98+
9299
## Running behind a HTTP Proxy
93100

94101
If the Remote Instance is behind a HTTP proxy, the agent can be configured to use the proxy by setting the `http_proxy`, `https_proxy` or `all_proxy` environment variables.
@@ -146,4 +153,4 @@ OS and Architecture as your target device, and then copy the modules on to your
146153
2. Place this file in an empty directory on your local device.
147154
3. Run `npm install` to install the modules. This will create a `node_modules` directory.
148155
4. On your target Remote Instance, create a directory called `module_cache` inside the Device Agent Configuration directory.
149-
5. Copy the `node_modules` directory from your local instance to the target instance so that it is under the `module_cache` directory.
156+
5. Copy the `node_modules` directory from your local instance to the target instance so that it is under the `module_cache` directory.

docs/install/kubernetes/aws.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,13 @@ controller:
125125
configNameSpace: $(POD_NAMESPACE)/udp-services
126126
config:
127127
proxy-body-size: "0"
128+
annotations-risk-level: "Critical"
129+
use-gzip: true
128130
use-proxy-protocol: true
131+
enable-real-ip: true
132+
use-forwarded-headers: true
133+
server-snippet: |
134+
real_ip_header X-Forwarded-For;
129135
service:
130136
# AWS Annotations for LoadBalaner with Certificate ARN
131137
annotations:
@@ -141,6 +147,7 @@ controller:
141147
externalTrafficPolicy: Cluster
142148
ingressClassResource:
143149
default: true
150+
allowSnippetAnnotations: true
144151
```
145152

146153
> The `proxy-body-size: "0"` removes the `1m` nginx default limit, you can set this to a

0 commit comments

Comments
 (0)