From 2543b8d40322effc71f7c0d7fa64cd5a8c606f2f Mon Sep 17 00:00:00 2001 From: "sumit shinde ( Roni )" <110285294+sumitshinde-84@users.noreply.github.com> Date: Thu, 2 Jul 2026 15:24:24 +0530 Subject: [PATCH 1/3] Documentation Update For 2.32 --- docs/user/devops-pipelines.md | 65 +++++++++++++++++++++++++++++------ 1 file changed, 54 insertions(+), 11 deletions(-) diff --git a/docs/user/devops-pipelines.md b/docs/user/devops-pipelines.md index b8a16b11ab..6bcdc6a91b 100644 --- a/docs/user/devops-pipelines.md +++ b/docs/user/devops-pipelines.md @@ -8,7 +8,7 @@ navTitle: DevOps Pipelines **Navigation**: `Team > Application > Pipelines` - +![Overview of a DevOps Pipeline in FlowFuse](./images/ui-devops-pipelines.png){data-zoomable} In FlowFuse it is possible to configure a DevOps pipeline for your Node-RED instances. @@ -40,7 +40,7 @@ See [Pipeline Stage details](#pipeline-stage-details) below for more info. ## Running a Pipeline Stage - +![Running a pipeline stage by clicking the play icon on the source stage](./images/ui-devops-run.png){data-zoomable} Each stage currently is deployed manually. To do so, click the "play" icon on the source stage. In the example above, it will push from the "Development" stage to the "Production" stage. @@ -66,13 +66,12 @@ There are four types of stage to chose from: 1. **[Instance](./concepts.md#hosted-instance)** - a single Node-RED instance. 2. **[Device](./concepts.md#remote-instance)** - a single remote instance. 3. **[Device Group](./concepts.md#device-groups)** - a group of remote instances. -4. **Git Repository** - a remote GitHub/Azure DevOps repository. - - This stage currently only supports: - - Repositories hosted on GitHub.com or dev.azure.com +4. **Git Repository** - a remote Git repository. + - This stage supports GitHub, Azure DevOps, and any other Git server accessible over HTTPS (for example GitLab, Bitbucket, Gitea, or a self-hosted instance). ### Actions - +![Selecting an action for a pipeline stage](./images/ui-devops-select-action.png){data-zoomable} The action defines what happens when the stage is deployed. The available actions depend on the stage type selected for the stage. @@ -103,15 +102,59 @@ When a Device Group stage is triggered, it will push the current active snapshot #### Git Repository stage -Git Repository stages can be used to push and pull snapshots from a GitHub or Azure DevOps hosted repository. The stage can be configured with -the branch to push/pull from as well as the filename to use for the snapshot. +Git Repository stages can be used to push and pull snapshots to and from a remote Git repository. FlowFuse supports GitHub, Azure DevOps, and any other Git server that is accessible over HTTPS, for example GitLab, Bitbucket, Gitea, or a self-hosted instance. + +> This feature is available to Team and Enterprise tier teams on FlowFuse Cloud, and to Enterprise licensed self-hosted installations from version 2.32 onwards. Support for generic HTTPS Git servers (anything other than GitHub and Azure DevOps) requires version 2.32 or later. + +##### Adding a Git token + +Before you can create a Git Repository stage, you need to add a token that grants FlowFuse access to your repository. Tokens are managed per team, under `Team > Team Settings > Integrations`. + +1. Go to **Team Settings** and open the **Integrations** tab. +2. In the Git integration section, click **Add Token**. +3. In the **Add Git Personal Access Token** popup, choose the tab that matches your Git server (**GitHub**, **Azure DevOps**, or **Other**) and follow the instructions for that provider (below). +4. Give the token a **Name**, complete the required fields, and click **Add**. + +![Add Git Personal Access Token popup with tabs for GitHub, Azure DevOps, and Other providers](./images/generic-git-provider.png){data-zoomable} + +###### GitHub + +1. Open GitHub Personal Access Tokens Settings. +2. Click on **Generate a new token**. +3. Select the **Only select repositories** option and pick which repositories to grant access to. +4. Expand the **Repository permissions** section and ensure the **Contents** option is set to **Read and write**. +5. Click on **Generate token**. +6. This will be the only time GitHub shows you the token value. Copy the token into the **Token** field. + +###### Azure DevOps + +1. Open `https://dev.azure.com/[org-name]/_usersSettings/tokens` to create a new Personal Access Token. +2. Click the **+ New Token** button. +3. Give the token a name and set the **Expiry** date. +4. Select **Custom defined** for the Scopes. +5. Check **Read & Write** in the **Code** section. +6. Hit **Save**. +7. This will be the only time Azure shows you the token value. Copy the token into the **Token** field. + +###### Other + +Use this tab to connect to any Git server (GitLab, Bitbucket, Gitea, or a self-hosted instance) over HTTPS. + +1. Create a Personal Access Token (or App Password) on your Git server with read & write access to the repository. +2. Enter the **Username** associated with that token. +3. Paste the token value into the **Token** field. +4. **CA Certificate (optional)**: only needed for self-hosted servers that use a private certificate authority. Paste the certificate (in PEM format, including the `-----BEGIN CERTIFICATE-----` and `-----END CERTIFICATE-----` lines) into this field so that FlowFuse can trust the connection. No changes to your infrastructure are required. + +##### Configuring the stage + +When adding a Git Repository stage, select the token you created and enter the repository URL (for example `https://github.com/your-org/nodered-flows.git`). The stage can be configured with the branch to push/pull from as well as the filename to use for the snapshot. If a filename is not configured, it will generate the filename when pushing to the repository based on the name of Instance, Device or Device Group that provided the snapshot. The provided filename can include directory structures, allowing the snapshot to be stored in a subdirectory of the repository. When pulling from a repository, if the stage has not previously been used to push to the repository, the filename is a required property. -It is also possible to configure the stage with different branches for the push and pull actions. This enables a GitHub-based review process as part of the pipeline; using a Pull Request process to review and approve the changes before merging between the two branches. +It is also possible to configure the stage with different branches for the push and pull actions. This enables a Git-based review process as part of the pipeline; using a Pull Request process to review and approve the changes before merging between the two branches. #### Deploy to Devices @@ -126,8 +169,8 @@ and updates to the flows can only be made by a Team Owner running a DevOps pipel Protected mode is activated under Instance > Settings > Protect Instance - +![The Protect Instance setting under Instance Settings](./images/protected-instance.png){data-zoomable} A Protected Instance will be marked by a status badge next to it's running state. Click on this badge will take you to the Settings page. - +![Protected status badge shown next to the instance running state](./images/protected-instance-pill.png){data-zoomable} From 934c0ad06fc8cbd8eac1e76e18e26cc80dfd92b5 Mon Sep 17 00:00:00 2001 From: "sumit shinde ( Roni )" <110285294+sumitshinde-84@users.noreply.github.com> Date: Thu, 2 Jul 2026 15:25:17 +0530 Subject: [PATCH 2/3] Add files via upload --- docs/user/images/generic-git-provider.png | Bin 0 -> 19533 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/user/images/generic-git-provider.png diff --git a/docs/user/images/generic-git-provider.png b/docs/user/images/generic-git-provider.png new file mode 100644 index 0000000000000000000000000000000000000000..1e5cdeec3042765f9f03e6ee8831640747b89156 GIT binary patch literal 19533 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 PSQ+(n_dUvXJDu_m=Yf Date: Thu, 2 Jul 2026 15:25:50 +0530 Subject: [PATCH 3/3] Update user-settings.md --- docs/user/user-settings.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/user/user-settings.md b/docs/user/user-settings.md index c42ebdf9d4..04a316ece4 100644 --- a/docs/user/user-settings.md +++ b/docs/user/user-settings.md @@ -15,6 +15,7 @@ In the Settings section, you can modify various characteristics of your personal - **Username** - **Name** - **E-Mail** (modifiable only if SSO is disabled) +- **Theme** - choose **Light**, **Dark**, or **System** for the FlowFuse interface. **System** follows your operating system setting and updates live when it changes. Your choice is saved per browser. This applies to the FlowFuse application only; the Node-RED editor and Dashboard manage their own themes separately. Additionally, you can select a default Team, especially useful if your account is associated with multiple Teams.