Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
79 commits
Select commit Hold shift + click to select a range
766e5b9
ci: correct key name from baseBranches to baseBranchPatterns in renov…
OliverDudgeon Dec 27, 2025
7796a3b
chore(deps): pin dependencies
renovate[bot] Dec 27, 2025
0d26a36
chore(deps): update dependency @squonk/data-manager-client to v5.0.0
renovate[bot] Dec 16, 2025
403949f
ci: update renovate configuration to set minimum release age for pack…
OliverDudgeon Dec 27, 2025
6170701
chore(deps): update dependency dayjs to v1.11.19
renovate[bot] Dec 15, 2025
3ed1945
ci: correct matchPackagePatterns to matchPackageNames in renovate con…
OliverDudgeon Dec 27, 2025
eb9e738
ci: remove package rule for nextjs-routes from renovate configuration
OliverDudgeon Dec 27, 2025
482c541
chore(deps): update dependency @types/react-plotly.js to v2.6.4
renovate[bot] Dec 15, 2025
720b162
chore(deps): update dependency lodash-es to v4.17.22
renovate[bot] Dec 16, 2025
a28f6c9
chore(deps): update dependency nanoid to v5.1.6
renovate[bot] Dec 15, 2025
6302e73
chore(deps): update dependency semver to v7.7.3
renovate[bot] Dec 27, 2025
55e834f
chore(deps): update mdx monorepo to v3.1.1
renovate[bot] Dec 15, 2025
ca0cafe
ci: add workflow concurrency settings for release
OliverDudgeon Dec 27, 2025
0a9390d
chore(deps): update dependency sharp to v0.34.5
renovate[bot] Dec 27, 2025
156d825
chore(deps): update rjsf monorepo to v5.24.13
renovate[bot] Dec 15, 2025
9192bf7
chore(deps): update semantic-release monorepo
renovate[bot] Dec 27, 2025
09e0b8e
chore(deps): update dependency @bufbuild/buf to v1.61.0
renovate[bot] Dec 15, 2025
641a485
chore(deps): update dependency @bufbuild/protobuf to v2.10.2
renovate[bot] Dec 15, 2025
b6bfbdb
ci: update renovate configuration to group packages
OliverDudgeon Dec 27, 2025
f71e9ca
chore(deps): update dependency @bufbuild/protoc-gen-es to v2.10.2
renovate[bot] Dec 27, 2025
b38bccf
chore(deps): update dependency @playwright/test to v1.57.0
renovate[bot] Dec 27, 2025
6531591
chore(deps): update dependency axios to v1.13.2
renovate[bot] Dec 27, 2025
c67c608
chore(deps): update dependency immer to v10.2.0
renovate[bot] Dec 27, 2025
dbf908a
chore(deps): update material-ui monorepo
renovate[bot] Dec 27, 2025
bc84f62
chore(deps): update tanstack-query monorepo
renovate[bot] Dec 27, 2025
6e8e7a9
ci: add package rule to keep NodeJS at LTS
OliverDudgeon Dec 27, 2025
6c7aa11
chore(deps): update dependency jotai to v2.16.1
renovate[bot] Dec 27, 2025
b7329fc
chore(deps): update dependency prettier to v3.7.4
renovate[bot] Dec 27, 2025
17b5106
chore(deps): update dependency typescript to v5.9.3
renovate[bot] Dec 27, 2025
3104e38
ci: update NodeJS package rule to include 'node'
OliverDudgeon Dec 27, 2025
f32cbfb
chore: update libc settings for sharp and parcel packages
OliverDudgeon Dec 27, 2025
fe810f3
chore(deps): update tanstack-query monorepo
renovate[bot] Dec 28, 2025
1234246
chore: add libc settings for sharp packages in pnpm-lock.yaml
OliverDudgeon Dec 29, 2025
fbd4200
refactor: upgrade mui to v7 and rjsf to v6
OliverDudgeon Dec 29, 2025
72a4da7
refactor: remove unnecessary webpack alias resolution for monorepo mode
OliverDudgeon Dec 29, 2025
08aaf7a
chore: add mcp configuration for mui
OliverDudgeon Dec 30, 2025
0dc04fd
chore(deps): upgrade @squonk/mui-theme to version 6.0.0
OliverDudgeon Dec 30, 2025
f99899b
Merge pull request #1752 from InformaticsMatters/mui-v7
OliverDudgeon Dec 30, 2025
3924b58
chore: upgrade es target to es2022
OliverDudgeon Dec 30, 2025
2d8c816
refactor: replace direct base path usage with withBasePath utility
OliverDudgeon Dec 30, 2025
31c33b3
refactor: consolidate test jobs
OliverDudgeon Dec 30, 2025
ea09cd1
chore(deps): update dependency @tanstack/react-form to v1.27.7
renovate[bot] Dec 29, 2025
65c8a8f
chore(deps): update dependency @squonk/eslint-config to v3.0.1
renovate[bot] Dec 31, 2025
6245e8e
chore(deps): update dependency eslint to v9.39.2
renovate[bot] Dec 31, 2025
f7ccc9e
refactor: upgrade squonk eslint to 3.0.4 and fix changes
OliverDudgeon Dec 31, 2025
1f0b2d9
refactor: replace monorepo environment variable with module resolutio…
OliverDudgeon Dec 29, 2025
9148d2d
Merge pull request #1753 from InformaticsMatters/monorepo-env-var
OliverDudgeon Dec 31, 2025
5f3d45a
ci: capture release SHA and use it in Docker build args
OliverDudgeon Jan 2, 2026
77ca5b8
refactor: extract websocket codes and descriptions
OliverDudgeon Jan 2, 2026
0ee2e36
refactor: switch to css grid layout for cards on run page to allow va…
OliverDudgeon Jan 2, 2026
e2fecfc
feat: display events in dockable sidebar instead of inside the user menu
OliverDudgeon Jan 2, 2026
05514e6
ci: fix token permission and upgrade npm
OliverDudgeon Jan 2, 2026
667767f
chore: release 6.1.0-dev.1 [skip ci]
semantic-release-bot Jan 2, 2026
5c5492f
fix: fix footer layout
OliverDudgeon Jan 3, 2026
7bc8c23
feat: display unread event count in event stream toggle button
OliverDudgeon Jan 3, 2026
ba4cd72
chore: release 6.1.0-dev.2 [skip ci]
semantic-release-bot Jan 3, 2026
2b1c938
fix: fix awx triggers
OliverDudgeon Jan 3, 2026
754895e
chore: release 6.1.0-dev.3 [skip ci]
semantic-release-bot Jan 3, 2026
88784f7
ci: extract image build to separate job
OliverDudgeon Jan 3, 2026
9b02d84
fix: set fetch-depth and ref for checkout in build-image job
OliverDudgeon Jan 7, 2026
ed50ccf
chore: release 6.1.0-dev.4 [skip ci]
semantic-release-bot Jan 7, 2026
90fb649
fix: update checkout ref to use new_release_git_tag in release workflow
OliverDudgeon Jan 7, 2026
8abbc9c
chore: release 6.1.0-dev.5 [skip ci]
semantic-release-bot Jan 7, 2026
9ed6400
fix: update checkout ref to use correct format
OliverDudgeon Jan 7, 2026
c62538d
chore: release 6.1.0-dev.6 [skip ci]
semantic-release-bot Jan 7, 2026
59df3a7
fix: update checkout step to fetch tags and use release SHA
OliverDudgeon Jan 7, 2026
29dd640
chore: release 6.1.0-dev.7 [skip ci]
semantic-release-bot Jan 7, 2026
a85991c
fix: remove unnecessary pnpm approve-builds command from Dockerfile
OliverDudgeon Jan 7, 2026
6afbe50
fix: specify context and Dockerfile path in build and push image step
OliverDudgeon Jan 7, 2026
53a408c
chore: release 6.1.0-dev.8 [skip ci]
semantic-release-bot Jan 7, 2026
cd4016d
ci: remove debug steps from release workflow
OliverDudgeon Jan 7, 2026
0329e4d
fix: adjust maxHeight of event list box to 100%
OliverDudgeon Jan 8, 2026
a3aedae
fix: update event stream button text to include 'new' for clarity
OliverDudgeon Jan 8, 2026
a3d4cec
chore: release 6.1.0-dev.9 [skip ci]
semantic-release-bot Jan 8, 2026
4cd775d
fix: add zIndex to CookiesBanner to fix overlapping issue caused by l…
OliverDudgeon Jan 8, 2026
9c4654d
chore: release 6.1.0-dev.10 [skip ci]
semantic-release-bot Jan 8, 2026
34c93df
fix: fix event panel layout on systems when viewport width is reduced…
OliverDudgeon Jan 12, 2026
47a2013
chore: release 6.1.0-dev.11 [skip ci]
semantic-release-bot Jan 12, 2026
513ce73
chore(deps): update dependency @squonk/data-manager-client to v5.0.1
renovate[bot] Jan 12, 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
25 changes: 21 additions & 4 deletions .github/renovate.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"dependencyDashboardAutoclose": true,
"extends": [
":dependencyDashboard",
Expand All @@ -17,14 +18,30 @@
"constraints": {
"pnpm": "10"
},
"baseBranches": [
"baseBranchPatterns": [
"dev"
],
"minimumReleaseAge": "2 days",
"packageRules": [
{
"matchPackageNames": [
"!nextjs-routes"
]
"description": "Allow latest squonk packages by ignoring minimum release age",
"matchPackageNames": ["@squonk/**"],
"minimumReleaseAge": null
},
{
"description": "Group Bufbuild packages together",
"matchPackageNames": ["@bufbuild/**"],
"groupName": "Bufbuild monorepo"
},
{
"description": "Group Ketcher packages together",
"matchPackageNames": ["ketcher-*"],
"groupName": "Ketcher monorepo"
},
{
"description": "Keep NodeJS at LTS",
"matchPackageNames": ["node", "@types/node"],
"versioning": "node,"
}
]
}
4 changes: 2 additions & 2 deletions .github/workflows/lint.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ jobs:
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 22
node-version: 22.21.1
cache: 'pnpm'
- name: Install dependencies
run: pnpm install
Expand All @@ -53,7 +53,7 @@ jobs:
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 22
node-version: 22.21.1
cache: 'pnpm'
- name: Install dependencies
run: pnpm install --frozen-lockfile
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/nextjs_bundle_analysis.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ jobs:
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 22
node-version: 22.21.1
cache: 'pnpm'
- name: Install dependencies
run: pnpm install
Expand Down
64 changes: 49 additions & 15 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,20 @@ permissions:
contents: write
issues: write
pull-requests: write
id-token: write

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
release:
runs-on: ubuntu-latest
environment: semantic-release
outputs:
new_release_published: ${{ steps.semantic.outputs.new_release_published }}
new_release_version: ${{ steps.semantic.outputs.new_release_version }}
release_sha: ${{ steps.release-sha.outputs.sha }}
steps:
- name: Checkout
uses: actions/checkout@v4
Expand All @@ -30,9 +39,12 @@ jobs:
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 22
node-version: 22.21.1
cache: pnpm

- name: Upgrade npm to latest
run: npm install -g npm@latest

- name: Install dependencies
run: pnpm install --frozen-lockfile

Expand All @@ -49,57 +61,79 @@ jobs:
GITHUB_TOKEN: ${{ steps.app-token.outputs.token }}
SEMANTIC_RELEASE_DEBUG: true

- name: Capture release SHA
id: release-sha
run: echo "sha=$(git rev-parse HEAD)" >> "$GITHUB_OUTPUT"

build-image:
needs: release
if: needs.release.outputs.new_release_published == 'true'
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
fetch-tags: true
ref: ${{ needs.release.outputs.release_sha }}

- name: Login to DockerHub
# Only login if we are actually going to build (a release happened)
if: steps.semantic.outputs.new_release_published == 'true'
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}

- name: Docker Metadata
id: meta
if: steps.semantic.outputs.new_release_published == 'true'
uses: docker/metadata-action@v5
with:
images: informaticsmatters/squonk2-data-manager-ui
tags: |
type=raw,value=${{ steps.semantic.outputs.new_release_version }}
type=raw,value=stable,enable=${{ !contains(steps.semantic.outputs.new_release_version, '-dev.') }}
type=raw,value=latest,enable=${{ !contains(steps.semantic.outputs.new_release_version, '-dev.') }}
type=raw,value=${{ needs.release.outputs.new_release_version }}
type=raw,value=stable,enable=${{ !contains(needs.release.outputs.new_release_version, '-dev.') }}
type=raw,value=latest,enable=${{ !contains(needs.release.outputs.new_release_version, '-dev.') }}

- name: Build and push image
if: steps.semantic.outputs.new_release_published == 'true'
uses: docker/build-push-action@v6
with:
context: .
file: ./Dockerfile
push: true
build-args: |
GIT_SHA=${{ github.sha }}
GIT_SHA=${{ needs.release.outputs.release_sha }}
SKIP_CHECKS=1
BASE_PATH=/data-manager-ui
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}

trigger-awx-test:
needs: [release, build-image]
if: needs.release.outputs.new_release_published == 'true' && contains(needs.release.outputs.new_release_version, '-dev.')
runs-on: ubuntu-latest
environment: awx/dls-test
steps:
- name: Trigger AWX test
# Run only if released AND it is a dev version
if: ${{ steps.semantic.outputs.new_release_published == 'true' && contains(steps.semantic.outputs.new_release_version, '-dev.') }}
uses: informaticsmatters/trigger-awx-action@v2
with:
template: Squonk/2 Data Manager UI -test-
template-host: ${{ secrets.AWX_HOST }}
template-user: ${{ secrets.AWX_USER }}
template-user-password: ${{ secrets.AWX_USER_PASSWORD }}
template-var: maui_image_tag
template-var-value: ${{ steps.semantic.outputs.new_release_version }}
template-var-value: ${{ needs.release.outputs.new_release_version }}

trigger-awx-production:
needs: [release, build-image]
if: needs.release.outputs.new_release_published == 'true' && !contains(needs.release.outputs.new_release_version, '-dev.')
runs-on: ubuntu-latest
environment: awx/im-main
steps:
- name: Trigger AWX production
# Run only if released AND it is NOT a dev version
if: ${{ steps.semantic.outputs.new_release_published == 'true' && !contains(steps.semantic.outputs.new_release_version, '-dev.') }}
uses: informaticsmatters/trigger-awx-action@v1
with:
template: Data Manager UI -production-
template-host: ${{ secrets.AWX_HOST }}
template-user: ${{ secrets.AWX_USER }}
template-user-password: ${{ secrets.AWX_USER_PASSWORD }}
template-var: maui_image_tag
template-var-value: ${{ steps.semantic.outputs.new_release_version }}
template-var-value: ${{ needs.release.outputs.new_release_version }}
88 changes: 4 additions & 84 deletions .github/workflows/test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ jobs:
curl -f -X 'GET' \
'https://account-server-test.xchem-dev.diamond.ac.uk/account-server-api/version' \
-H 'accept: application/json'
test-base-path:
test:
needs: check-api # tests are skipped if APIs are down to avoid false negatives
# Setup
runs-on: ubuntu-latest
Expand All @@ -54,7 +54,7 @@ jobs:
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 22
node-version: 22.21.1
cache: 'pnpm'
- name: Install dependencies
run: pnpm install
Expand All @@ -80,15 +80,6 @@ jobs:
# Ok for tests/dev but we don't do this on prod. This is to prevent some flakely tests from causing problems
- name: Disable strict SSL
run: npm config set strict-ssl=false
# Manually add a "test concurrency"
# This ensures only one test job runs at a time (across all workflows)
# If this workflow is billed by the elapsed time, this will add a lot to this cost
- name: Turnstyle
uses: softprops/turnstyle@v2
with:
abort-after-seconds: 600
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Test with base path
env:
AUTH0_CLIENT_ID: "${{ secrets.AUTH0_CLIENT_ID }}"
Expand All @@ -107,80 +98,9 @@ jobs:
PW_PASSWORD: "${{ secrets.DMIT_USER_A_PASSWORD }}"
TEST_PORT: 3000
run: pnpm test:ci
- name: Upload results for bath path
if: always()
uses: actions/upload-artifact@v4
with:
name: Base Path Results
path: test-results
test-no-base-path:
needs: check-api # tests are skipped if APIs are down to avoid false negatives
# Setup
runs-on: ubuntu-latest
environment: data-manager-ui/test
steps:
- name: Checkout
uses: actions/checkout@v4
- uses: pnpm/action-setup@v4.1.0
with:
version: 10.24.0
run_install: false
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 22
cache: 'pnpm'
- name: Install dependencies
run: pnpm install
- run: node -v
- name: Setup Playwright
run: pnpm exec playwright install --with-deps
- name: Load cached build for speed
uses: actions/cache@v4
with:
path: |
${{ github.workspace }}/.next/cache
# Generate a new cache whenever packages or source files change.
key: ${{ runner.os }}-nextjs-${{ hashFiles('**/pnpm-lock.yaml') }}-${{
hashFiles('**.[jt]s', '**.[jt]sx') }}
# If source files changed but packages didn't, rebuild from a prior cache.
restore-keys: |
${{ runner.os }}-nextjs-${{ hashFiles('**/pnpm-lock.yaml') }}-
# Test withOUT base path set
- name: Build without base path
run: pnpm build
env:
BASE_PATH: ""
# Ok for tests/dev but we don't do this on prod. This is to prevent some flakely tests from causing problems
- name: Disable strict SSL
run: npm config set strict-ssl=false
- name: Turnstyle
uses: softprops/turnstyle@v2
with:
abort-after-seconds: 600
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Test without base path
env:
AUTH0_CLIENT_ID: "${{ secrets.AUTH0_CLIENT_ID }}"
AUTH0_CLIENT_SECRET: "${{ secrets.AUTH0_CLIENT_SECRET }}"
DMIT_USER_A_PASSWORD: "${{ secrets.DMIT_USER_A_PASSWORD }}"
AUTH0_SECRET: "LONG_RANDOM_VALUE"
BASE_URL: "http://localhost:3000"
DONT_USE_STANDALONE_OUTPUT: true
DANGEROUS__DISABLE_SSL_CERT_CHECK_IN_API_PROXY: 1
BASE_PATH: ""
DATA_MANAGER_API_SERVER: "https://data-manager-test.xchem-dev.diamond.ac.uk/data-manager-api"
ACCOUNT_SERVER_API_SERVER: "https://account-server-test.xchem-dev.diamond.ac.uk\
/account-server-api"
KEYCLOAK_URL: "https://keycloak-test.xchem-dev.diamond.ac.uk/auth/realms/squonk"
PW_USERNAME: "dmit-user-a"
PW_PASSWORD: "${{ secrets.DMIT_USER_A_PASSWORD }}"
TEST_PORT: 3000
run: pnpm test:ci
- name: Upload results for no bath path
- name: Upload test results
if: always()
uses: actions/upload-artifact@v4
with:
name: No Base Path Results
name: Test Results
path: test-results
12 changes: 12 additions & 0 deletions .vscode/mcp.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"servers": {
"mui-mcp": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@mui/mcp@latest"
]
}
}
}
Loading
Loading