Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
a45c7b5
update Dockerfile to use uv for virtual environment and command execu…
wduckitt Jan 6, 2026
57a1569
refactor: update Dockerfile to use uv as the base image and installer
wduckitt Jan 6, 2026
61aa6b1
style: fix formatting in Dockerfile for consistency
wduckitt Jan 7, 2026
91f6604
refactor: update Dockerfile to set UV_PYTHON_CACHE_DIR and install Py…
wduckitt Jan 7, 2026
f6e2668
style: update CMD instruction format in Dockerfile for consistency
wduckitt Jan 7, 2026
2a8f93a
style: fix CMD instruction format in Dockerfile for consistency
wduckitt Jan 7, 2026
f863b74
style: fix casing in Dockerfile FROM instruction for consistency
wduckitt Jan 7, 2026
df40bf7
style: update Dockerfile to improve structure and command consistency
wduckitt Jan 7, 2026
c24a083
style: update CMD instruction format in Dockerfile for consistency
wduckitt Jan 7, 2026
2027e5a
style: fix CMD instruction format in Dockerfile for consistency
wduckitt Jan 7, 2026
408bb5c
style: update docker-compose.yml and Dockerfile for additional contex…
wduckitt Jan 7, 2026
9ab8c41
style: migrate pyproject.toml to new project structure and update dep…
wduckitt Jan 7, 2026
debae38
style: add additional_contexts to services in docker-compose.yml for …
wduckitt Jan 7, 2026
20b12c4
style: migrate from requirements.txt to pyproject.toml and update Doc…
wduckitt Jan 7, 2026
9991e31
style: add additional_contexts to adminDbInit service in docker-compo…
wduckitt Jan 7, 2026
21126d0
style: migrate from requirements.txt to pyproject.toml for improved d…
wduckitt Jan 8, 2026
7df3e84
style: add additional_contexts to services for improved service linki…
wduckitt Jan 8, 2026
2b38e66
style: add additional_contexts to services in docker-compose-dev.yml …
wduckitt Jan 8, 2026
8cf2efe
style: add additional_contexts to services in docker-compose-dev-styl…
wduckitt Jan 8, 2026
e25cbb1
style: update package version to 8.0.0 and upgrade dependencies for i…
wduckitt Jan 8, 2026
4fb6ed9
style: upgrade Storybook and related dependencies to version 10.1.11 …
wduckitt Jan 8, 2026
e29189c
style: update base node image to version 24.12.0 for improved perform…
wduckitt Jan 8, 2026
684fc07
update version to 8.0.0 and dependencies for improved performance and…
wduckitt Jan 8, 2026
87afd0e
style: update MongoDB version to 8.2.3 for improved performance and c…
wduckitt Jan 8, 2026
91ed386
docs: add migration guide for upgrading to V8.0.0 with breaking chang…
wduckitt Jan 8, 2026
169a9a1
chore: update version to V8.0.0 and document major updates in MainDas…
wduckitt Jan 8, 2026
c7b987e
chore: update release version to V8.0.0 and document major updates in…
wduckitt Jan 8, 2026
3431738
docs: update Docker version and mention orchestration updates in README
wduckitt Jan 8, 2026
dadf5ac
change UV cache path in Dockerfiles to /opt/uv-cache/uv for consistency
wduckitt Feb 18, 2026
7c73eb9
add setuptools dependency to pyproject.toml for alarmHandlerServer an…
wduckitt Feb 18, 2026
25eae26
chore: update dependencies and devDependencies in package.json for im…
wduckitt Feb 18, 2026
a642c2c
update Node.js version to 24.13.1
wduckitt Feb 18, 2026
6491227
docs: update migration guide for V8.0.0 with key changes and troubles…
wduckitt Feb 18, 2026
5c73c59
docs: enhance README with detailed migration guides and breaking chan…
wduckitt Feb 18, 2026
de6765a
docs: update README with Node.js version change to 24.13.1
wduckitt Feb 18, 2026
9773d6e
chore: update MongoDB version to 8.2.3 in docker-compose files
wduckitt Feb 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
179 changes: 141 additions & 38 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,65 @@
Current Release: V7.0.0

[Migrate from-V6.x.x to V7.x.x](docs/migrate-from-V6-to-V7.md)

[Migrate from-V5.x.x to V6.x.x](docs/migrate-from-V5-to-V6.md)

[Migrate from V4.0.3 to V5.2.X](docs/migrate-from-V4-to-V5.md)
Current Release: V8.0.0

**Migration Guides:**
- [Migrate from V7.x.x to V8.x.x](docs/migrate-from-V7-to-V8.md)
- [Migrate from V6.x.x to V7.x.x](docs/migrate-from-V6-to-V7.md)
- [Migrate from V5.x.x to V6.x.x](docs/migrate-from-V5-to-V6.md)
- [Migrate from V4.0.3 to V5.2.X](docs/migrate-from-V4-to-V5.md)

## ⚠️ V8.0.0 Breaking Changes Summary

**If you use the standard RAS containers with the latest Docker, no action is required.**

### Important Requirements

| Item | Requirement | Impact |
|------|-------------|--------|
| **Docker Version** | 28.1.1+ | Required - New Docker Compose features |
| **Docker Compose** | Latest version | Required - Bake feature support |
| **Python Package Manager** | UV (automatic) | Internal change - transparent to users |
| **Base OS** | Ubuntu 24.04 LTS | Backend containers only |

### Key Changes

1. **Python Package Management → UV**
- Unified local cache shared across all containers
- Faster builds and consistent dependencies
- **Action needed:** Only if you have custom Python backend containers

2. **EPICS Base Image Foundation**
- `epicsbase` is now the foundational layer for all backend containers
- Includes: EPICS, Python, and shared dependencies
- **Action needed:** Update custom compose files to reference epicsbase

3. **Custom Docker Compose Configurations**
- If you maintain custom `docker-compose.yml` files, add to backend services:
```yaml
build:
additional_contexts:
epicsbase: "service:epicsbase"
depends_on:
- epicsbase
```

4. **Optional Performance Boost**
- Enable Docker Compose Bake for 2-3x faster multi-container builds
- Edit `$HOME/.docker/config.json`:
```json
{
"plugins": {
"compose": {
"build": "bake"
}
}
}
```
- Reference: https://docs.docker.com/compose/how-tos/dependent-images/

**For detailed migration steps, see [Migrate from V7.x.x to V8.x.x](docs/migrate-from-V7-to-V8.md)**

# Introduction

React Automation Studio is a new software platform to enable the control of large scientific equipment through EPICS.
React Automation Studio is a software platform to enable the control of large scientific equipment through EPICS.

The system has been containerized with Docker and version controlled as a mono-repository using Git.

Expand Down Expand Up @@ -117,7 +168,7 @@ React hooks are available that setup a watch, perform an update or an insert to

See the documentation in the style guide.

Currently the Alarm Handler component and LoadSave component make use of the MongoDB database.
Currently, the Alarm Handler component and LoadSave component make use of the MongoDB database.

*6. AlarmHandler*

Expand All @@ -143,14 +194,14 @@ It is advised to only use the containerized version with a Linux environment. (S

Prerequisites: git, latest version of docker-ce and docker compose

( At the time of writing the system used Docker V25.0.2 and docker compose V2.24.5 )
(At the time of writing the system used Docker V28.1.1)

To install docker-ce on Unbuntu follow:
V8.0.0 includes updates to the docker compose orchestration. See the migration guide for more info.

To install Docker CE on Ubuntu, follow:
https://docs.docker.com/engine/install/ubuntu/

It is advised to the follow the Post Installation steps for Linux:

For post-installation setup on Linux:
https://docs.docker.com/engine/install/linux-postinstall/


Expand All @@ -162,9 +213,9 @@ https://docs.docker.com/engine/install/linux-postinstall/

```bash
git clone https://github.com/React-Automation-Studio/React-Automation-Studio.git

```
or

Or using SSH:

```bash
git clone git@github.com:React-Automation-Studio/React-Automation-Studio.git
Expand All @@ -174,68 +225,105 @@ Then in React Automation Studio installation folder run:
```bash
touch .env
```
# 2 Launching the Docker compose files
The systems uses Docker to create isolated production and development environments. There are several docker-compose configuration files.
# 2 Launching the Docker Compose Files

The system uses Docker to create isolated production and development environments. Several docker-compose configuration files are available for different use cases.

### Production Environment

Launch the compiled production version with demo IOCs and styleguide:
```bash
docker compose up
docker compose up
```
or

Or explicitly:
```bash
docker compose -f docker-compose.yml up
```
Will launch the compiled production version with the demoIOC's and styleguide

This will serve the app at http://127.0.0.1:5000 and the styleguide at http://127.0.0.1:6060.

### Development Environment

Launch the development version with live reload for React and styleguide:
```bash
docker compose -f docker-compose-dev.yml up
```
Will launch the development version with the demoIOC's and styleguide.

This will launch the pvServer, demo IOC, styleguide, and React development environment with hot reload enabled. The app will be served at http://127.0.0.1:3000 and styleguide at http://127.0.0.1:6060.

### Styleguide Development Only

To work on the styleguide in isolation:
```bash
docker compose -f docker-compose-dev-styleguide-dev.yml up
```

And:
### Building and Rebuilding

Add `--build` flag to any command to rebuild images:
```bash
docker compose -f docker-compose-dev-styleguide-dev.yml up
docker compose up --build
```
Will launch the development version of the styleguide.

**Note**: Any of the above containers can be rebuilt by add **--build** at the end of the command.
> **Tip:** First run may take several minutes as Docker pulls and builds all images. Subsequent runs use cached layers and are much faster. Do not be alarmed by red build warnings—they are usually harmless.

### Performance Optimization - Docker Compose Bake

For significantly faster builds (2-3x speedup) on systems with multiple backend services, enable Docker Compose Bake:

1. Edit `$HOME/.docker/config.json`:
```json
{
"plugins": {
"compose": {
"build": "bake"
}
}
}
```

2. Restart Docker daemon
3. Builds will now use buildx for parallel compilation

Reference: https://docs.docker.com/compose/how-tos/dependent-images/

**Initially to check that everything is working only bring up the production version by running**
### Custom Docker Compose Files

```bash
docker compose up --build
```
If you maintain custom `docker-compose.yml` files for your backend containers, ensure they reference the updated epicsbase container:

This installation process of all the docker images may take a while the first time. There after it is fast as all the repeated build and up commands uses cached installations. The longest process is the installation of the node modules. Do not be deterred by the red warnings.
```yaml
your_service:
build:
context: ./docker/your_service
additional_contexts:
epicsbase: "service:epicsbase"
depends_on:
- epicsbase
```

This default installation will serve the app at http://127.0.0.1:5000 and the style guide at http://127.0.0.1:6060.
### Development Workflow

When developing the React application:

To launch the development environment make sure the production version is stopped,and the run :
1. Run the development environment:
```bash
docker compose -f docker-compose-dev.yml up
```
This will launch the pvServer, demo IOC ,style guide and the React Development environment. As with the production version the first run may take awhile. There after it is fast as all the repeated build and up commands uses cached installations.

The react development environment app will be served on http://127.0.0.1:3000 and the styleguide at http://127.0.0.1:6060.
2. Edit source files in your favorite editor (VS Code, Atom, etc.)
3. The React development environment automatically recompiles and refreshes the browser
4. Focus work in the `/src/components/staging/` directory

> **Note:** Always stop the production environment before launching the development environment to avoid port conflicts.

### First-Time Setup

The source can then be edited using your favorite editor like Atom, when the file is saved the project automatically re-compiles and the web page is refreshed. It is recommended to only work in the
/src/components/staging/ folders.
Initial builds may several minutes as Docker downloads and builds all images. Subsequent runs use cached layers and start much faster. The longest step is typically the Node.js module installation.

Bug fixes and contributions can be submitted via pull requests.
### Submitting Changes

To change the URL, ports, and enable user authentication See section 6.1 and 6.2
Bug fixes and feature contributions can be submitted via pull requests on GitHub.



Expand Down Expand Up @@ -578,6 +666,21 @@ or: https://doi.org/10.18429/JACoW-ICALEPCS2023-FR2BCO01


# Changelog

V8.0.0 Wednesday 18 February 2026
<br />
Major Updates:
<ul>
<li>Updated to the latest Node LTS 24.13.1 </li>
<li>Switched to UV Python package management</li>
<li>Updated to Python 3.13.11</li>
<li>Updated to PyEpics 3.5.9</li>
<li>Updated to MongoDb 8.2.3</li>
<li>Updated docker compose organisation</li>
<li>Package updates to frontend modules</li>
<li>Package updates to backend modules</li>
</ul>

V7.0.0 Tuesday 16 September 2025
<br />
Major Updates:
Expand Down
2 changes: 1 addition & 1 deletion ReactApp/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
work correctly both with client-side routing and a non-root public URL.
Learn how to configure a non-root public URL by running `npm run build`.
-->
<title>React Automation Studio V7.0.0</title>
<title>React Automation Studio V8.0.0</title>
</head>
<body>
<div id="root"></div>
Expand Down
76 changes: 38 additions & 38 deletions ReactApp/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "react-automation-studio",
"version": "7.0.0",
"version": "8.0.0",
"private": true,
"type": "module",
"scripts": {
Expand All @@ -17,61 +17,61 @@
"@date-io/date-fns": "3.2.1",
"@emotion/react": "11.14.0",
"@emotion/styled": "11.14.1",
"@mui/icons-material": "7.3.2",
"@mui/material": "7.3.2",
"@mui/system": "7.3.2",
"@mui/x-date-pickers": "8.11.2",
"@react-oauth/google": "0.12.2",
"@react-three/fiber": "9.2.0",
"@types/three": "0.178.1",
"axios": "1.12.2",
"@mui/icons-material": "7.3.8",
"@mui/material": "7.3.8",
"@mui/system": "7.3.8",
"@mui/x-date-pickers": "8.27.0",
"@react-oauth/google": "0.13.4",
"@react-three/fiber": "9.5.0",
"@types/three": "0.182.0",
"axios": "1.13.5",
"colormap": "2.3.2",
"date-fns": "4.1.0",
"lodash": "4.17.21",
"mathjs": "14.7.0",
"lodash": "4.17.23",
"mathjs": "15.1.1",
"mdi-material-ui": "7.9.4",
"plotly.js": "3.1.0",
"plotly.js": "3.3.1",
"rc-slider": "11.1.9",
"react": "19.1.1",
"react": "19.2.4",
"react-device-detect": "2.2.3",
"react-dom": "19.1.1",
"react-dom": "19.2.4",
"react-plotly.js": "2.6.0",
"react-router-dom": "7.9.1",
"socket.io-client": "4.8.1",
"three": "0.178.0",
"react-router-dom": "7.13.0",
"socket.io-client": "4.8.3",
"three": "0.183.0",
"typeface-roboto": "1.1.13",
"uuid": "13.0.0"
},
"devDependencies": {
"@storybook/addon-docs": "9.1.6",
"@storybook/addon-links": "9.1.6",
"@storybook/addon-onboarding": "9.1.6",
"@storybook/builder-vite": "9.1.6",
"@storybook/react": "9.1.6",
"@storybook/react-vite": "9.1.6",
"@storybook/addon-docs": "10.2.10",
"@storybook/addon-links": "10.2.10",
"@storybook/addon-onboarding": "10.2.10",
"@storybook/builder-vite": "10.2.10",
"@storybook/react": "10.2.10",
"@storybook/react-vite": "10.2.10",
"@storybook/testing-library": "0.2.2",
"@testing-library/react": "16.3.0",
"@types/react": "19.1.13",
"@types/react-dom": "19.1.9",
"@vitejs/plugin-react": "5.0.2",
"cross-env": "10.0.0",
"eslint": "9.35.0",
"@testing-library/react": "16.3.2",
"@types/react": "19.2.14",
"@types/react-dom": "19.2.3",
"@vitejs/plugin-react": "5.1.4",
"cross-env": "10.1.0",
"eslint": "10.0.0",
"eslint-plugin-react": "7.37.5",
"eslint-plugin-react-hooks": "5.2.0",
"eslint-plugin-react-refresh": "0.4.20",
"eslint-plugin-storybook": "9.1.6",
"jsdom": "27.0.0",
"eslint-plugin-react-hooks": "7.0.1",
"eslint-plugin-react-refresh": "0.5.0",
"eslint-plugin-storybook": "10.2.10",
"jsdom": "28.1.0",
"prop-types": "15.8.1",
"socket.io": "4.8.1",
"storybook": "9.1.6",
"vite": "7.1.5",
"vitest": "3.2.4"
"socket.io": "4.8.3",
"storybook": "10.2.10",
"vite": "7.3.1",
"vitest": "4.0.18"
},
"homepage": ".",
"eslintConfig": {
"extends": [
"plugin:storybook/recommended"
]
},
"packageManager": "pnpm@10.16.1"
"packageManager": "pnpm@10.30.0"
}
2 changes: 1 addition & 1 deletion ReactApp/src/AppRoutes.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ const AppRoutes = (props) => {
<Route
exact
path="/Login"
element={<Login version="V7.0.0" timeout={5000} />}
element={<Login version="V8.0.0" timeout={5000} />}
/>
)}

Expand Down
2 changes: 1 addition & 1 deletion ReactApp/src/components/SystemComponents/Login.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ To customize the footer text try the example below:
``` js
<Login
footerString= "Login is now customizable"
version="V7.0.0"
version="V8.0.0"
timeout={5000}/>
```
Set the following in .env file to enable Login and authentication
Expand Down
Loading
Loading