Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
437188d
Fix #3621, #3622 #3623
luis100 Feb 11, 2026
321ba99
audit logs new design. (#3643)
eduardojst10 Apr 21, 2026
6be5a43
notification logs UI update. (#3642)
eduardojst10 Apr 21, 2026
ac0de51
update ui for representation information. (#3645)
eduardojst10 Apr 21, 2026
4b23e9c
ui updated for risk detailed layout. (#3651)
eduardojst10 Apr 21, 2026
9061faf
Add .claude/ to .gitignore
luis100 Apr 27, 2026
1305988
Fix BreadcrumbUtils imports
hmiguim Apr 21, 2026
bc18fc4
Apply new layout to disposal policy page (schedule, holds and rules) …
hmiguim Apr 21, 2026
03a9d09
Update create/edit user and group forms to use the new generic form
hmiguim Apr 29, 2026
612f7f6
Update create/edit disposal schedules, holds and rules to use the new…
hmiguim Apr 30, 2026
ccf1b95
Update UI from disposal confirmation workflow #3374 #3369
hmiguim Apr 30, 2026
9b5c16e
Bump actions/upload-artifact from 4 to 7
hmiguim May 4, 2026
b59c8dc
Bump actions/download-artifact from 4 to 8
hmiguim May 4, 2026
6dedec4
Bump actions/upload-pages-artifact from 4 to 5
hmiguim May 4, 2026
bbae67b
Update create/edit user and group forms to use the new generic form
hmiguim Apr 29, 2026
6f03685
Remove unused imports and change the toast message when a user is cre…
hmiguim May 4, 2026
f36d466
fix: pom.xml to reduce vulnerabilities (#3668)
AntonioG70 May 4, 2026
3699333
Add roda-api-tests E2E module and fix IndexService NPE
luis100 May 8, 2026
7d387d3
Phase 0: EmailArchive nested-document metadata schema (#3660)
luis100 Apr 30, 2026
b99a0fb
feat(search): Phase 1 — Advanced AIP Search nested filter groups
luis100 Apr 30, 2026
cb04aaf
feat(emailarchive): add title/level to ingest XSLT and HTML dissemina…
luis100 Apr 30, 2026
fbcc75c
fix(emailarchive): use composite title in ingest XSLT
luis100 Apr 30, 2026
5c30f36
fix(emailarchive): add state=ACTIVE to nested email child documents
luis100 Apr 30, 2026
df621b1
Adding test for nested documents indexing and search
luis100 Apr 30, 2026
e15cc1b
fix(search): add missing appendANDOperator in block-join filter builders
luis100 May 4, 2026
b12541f
fix(i18n): add missing GWT plural forms across locale files
luis100 May 4, 2026
d1ecd59
fix(search): remove space in block-join queries to fix q.op=AND inter…
luis100 May 4, 2026
ef3154a
fix(search): fix block-join query format for q.op=AND compatibility
luis100 May 4, 2026
60b833a
fix(emailarchive): index dateStart/dateEnd as standard dateInitial/da…
luis100 May 4, 2026
dc7a849
revert: remove AllFilterParameter suppression from parseFilter block-…
luis100 May 4, 2026
0d4d5c0
fix(search): handle wildcard values in block-join child sub-query bui…
luis100 May 4, 2026
78f098d
fix(search): fix email sent date filter format and selector type
luis100 May 4, 2026
561ad40
Update Spanish translations
luis100 May 5, 2026
0b787fd
fix(search): exclude nested child documents from normal AIP queries
luis100 May 6, 2026
b07ed52
feat(catalogue): add virtual catalogue for email archives and individ…
luis100 May 6, 2026
4d8a4a7
fix(catalogue): fix email column rendering and enable advanced search…
luis100 May 7, 2026
e808afd
fix(crosswalk): emit dateStart_dt and dateEnd_dt alongside dateInitia…
luis100 Jun 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
8 changes: 4 additions & 4 deletions .github/workflows/development.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ jobs:
mkdir -p /tmp/roda-jar
cp roda-ui/roda-wui/target/roda-wui-*.jar /tmp/roda-jar/
- name: Upload JAR artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
with:
name: roda-jar
path: /tmp/roda-jar/
Expand All @@ -66,7 +66,7 @@ jobs:
- name: Prepare platform tag
run: echo "platform_tag=$(echo "${{ matrix.platform }}" | tr '/' '-')" >> $GITHUB_ENV
- name: Download JAR artifact
uses: actions/download-artifact@v4
uses: actions/download-artifact@v8
with:
name: roda-jar
path: docker/target
Expand Down Expand Up @@ -99,7 +99,7 @@ jobs:
digest="${{ steps.build.outputs.digest }}"
touch "/tmp/digests/${digest#sha256:}"
- name: Upload digest
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
with:
name: digests-${{ env.platform_tag }}
path: /tmp/digests/*
Expand All @@ -111,7 +111,7 @@ jobs:
needs: docker
steps:
- name: Download digests
uses: actions/download-artifact@v4
uses: actions/download-artifact@v8
with:
path: /tmp/digests
pattern: digests-*
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/jekyll-gh-pages.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ jobs:
source: ./
destination: ./_site
- name: Upload artifact
uses: actions/upload-pages-artifact@v4
uses: actions/upload-pages-artifact@v5

# Deployment job
deploy:
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/latest.yml
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ jobs:
mkdir -p /tmp/roda-jar
cp roda-ui/roda-wui/target/roda-wui-*.jar /tmp/roda-jar/
- name: Upload JAR artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
with:
name: roda-jar
path: /tmp/roda-jar/
Expand All @@ -65,7 +65,7 @@ jobs:
- name: Prepare platform tag
run: echo "platform_tag=$(echo "${{ matrix.platform }}" | tr '/' '-')" >> $GITHUB_ENV
- name: Download JAR artifact
uses: actions/download-artifact@v4
uses: actions/download-artifact@v8
with:
name: roda-jar
path: docker/target
Expand Down Expand Up @@ -98,7 +98,7 @@ jobs:
digest="${{ steps.build.outputs.digest }}"
touch "/tmp/digests/${digest#sha256:}"
- name: Upload digest
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
with:
name: digests-${{ env.platform_tag }}
path: /tmp/digests/*
Expand All @@ -110,7 +110,7 @@ jobs:
needs: docker
steps:
- name: Download digests
uses: actions/download-artifact@v4
uses: actions/download-artifact@v8
with:
path: /tmp/digests
pattern: digests-*
Expand Down
10 changes: 5 additions & 5 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ jobs:
mkdir -p /tmp/roda-jar
cp roda-ui/roda-wui/target/roda-wui-${{ steps.get_version.outputs.release_version }}.jar /tmp/roda-jar/
- name: Upload JAR artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
with:
name: roda-jar
path: /tmp/roda-jar/
Expand All @@ -73,7 +73,7 @@ jobs:
- name: Prepare platform tag
run: echo "platform_tag=$(echo "${{ matrix.platform }}" | tr '/' '-')" >> $GITHUB_ENV
- name: Download JAR artifact
uses: actions/download-artifact@v4
uses: actions/download-artifact@v8
with:
name: roda-jar
path: docker/target
Expand Down Expand Up @@ -106,7 +106,7 @@ jobs:
digest="${{ steps.build.outputs.digest }}"
touch "/tmp/digests/${digest#sha256:}"
- name: Upload digest
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
with:
name: digests-${{ env.platform_tag }}
path: /tmp/digests/*
Expand All @@ -118,7 +118,7 @@ jobs:
needs: [build, docker]
steps:
- name: Download digests
uses: actions/download-artifact@v4
uses: actions/download-artifact@v8
with:
path: /tmp/digests
pattern: digests-*
Expand Down Expand Up @@ -164,7 +164,7 @@ jobs:
- name: Inspect image
run: docker buildx imagetools inspect ghcr.io/keeps/roda:${{ steps.meta.outputs.version }}
- name: Download JAR artifact for release
uses: actions/download-artifact@v4
uses: actions/download-artifact@v8
with:
name: roda-jar
- name: Upload artifact to release
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/staging.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ jobs:
mkdir -p /tmp/roda-jar
cp roda-ui/roda-wui/target/roda-wui-*.jar /tmp/roda-jar/
- name: Upload JAR artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
with:
name: roda-jar
path: /tmp/roda-jar/
Expand All @@ -62,7 +62,7 @@ jobs:
- name: Prepare platform tag
run: echo "platform_tag=$(echo "${{ matrix.platform }}" | tr '/' '-')" >> $GITHUB_ENV
- name: Download JAR artifact
uses: actions/download-artifact@v4
uses: actions/download-artifact@v8
with:
name: roda-jar
path: docker/target
Expand Down Expand Up @@ -95,7 +95,7 @@ jobs:
digest="${{ steps.build.outputs.digest }}"
touch "/tmp/digests/${digest#sha256:}"
- name: Upload digest
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
with:
name: digests-${{ env.platform_tag }}
path: /tmp/digests/*
Expand All @@ -107,7 +107,7 @@ jobs:
needs: docker
steps:
- name: Download digests
uses: actions/download-artifact@v4
uses: actions/download-artifact@v8
with:
path: /tmp/digests
pattern: digests-*
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ roda-installer/roda-installer_v*
**/.DS_Store
roda-core/roda-core/velocity.log.1
.idea/
.claude/
*.iml
independent_plugin_script.sh
compile_plugin.sh
Expand Down
28 changes: 15 additions & 13 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ roda/

1. **Java 21** (Oracle JDK) — strictly required for compilation
2. **Maven 3.8.6+** — build tool
3. **Docker & Docker Compose** — for running Solr, PostgreSQL, LDAP, etc.
3. **Docker** — required for running the application locally and for tests (via Testcontainers — no manual `docker compose` needed for tests)
4. **GitHub account with PAT** — required for GitHub Packages dependency resolution

**Configure Maven for GitHub Packages** (`~/.m2/settings.xml`):
Expand Down Expand Up @@ -112,6 +112,10 @@ The PAT must have `read:packages` permission. Without this, the build will fail

### Starting Development Dependencies

**For running tests:** No manual setup needed — tests use **Testcontainers** (`TestContainersManager`) which automatically starts ZooKeeper, Solr, PostgreSQL, Mailpit, ClamAV, and Siegfried as ephemeral Docker containers. The `RodaContainersLifecycleListener` TestNG suite listener wires this up before any test class loads. Docker must be running on the host, but no `docker compose` command is required.

**For running the application locally:**

```bash
# Create required data directories
mkdir -p $HOME/.roda/data/{storage,staging-storage}
Expand All @@ -120,7 +124,7 @@ mkdir -p $HOME/.roda/data/{storage,staging-storage}
docker compose -f deploys/standalone/docker-compose-dev.yaml up -d
```

Services and ports:
Services and ports (for local app, not tests):
- ZooKeeper: `2181`
- Apache Solr: `8983`
- PostgreSQL: `5432`
Expand Down Expand Up @@ -196,25 +200,23 @@ mvn -f dev/codeserver gwt:codeserver -DrodaPath=$(pwd)

### Running Tests

Tests use **Testcontainers** — no environment variables or `docker compose` setup required. Docker must be available on the host.

```bash
# All tests (requires Docker services running)
mvn clean test
# All tests
mvn clean test -Pcore

# CI subset only (faster)
mvn -Dtestng.groups="travis" -Denforcer.skip=true clean org.jacoco:jacoco-maven-plugin:prepare-agent test
mvn -Dtestng.groups="travis" -Denforcer.skip=true clean org.jacoco:jacoco-maven-plugin:prepare-agent test -Pcore

# Specific test class
mvn -pl roda-core/roda-core-tests -am test -Dtest=NestedDocumentSearchTest -Dtestng.groups=dev -Denforcer.skip=true -DfailIfNoTests=false

# Skip tests
mvn clean package -Dmaven.test.skip=true
```

### Required Environment Variables (for tests matching CI)

```
RODA_CORE_SOLR_TYPE=CLOUD
SIEGFRIED_MODE=standalone
```

See `.github/workflows/CI.yml` for the full CI test environment configuration.
See `.github/workflows/CI.yml` for the full CI configuration.

### Key Test Classes

Expand Down
109 changes: 109 additions & 0 deletions deploys/standalone/docker-compose-e2e.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
services:

zoo:
image: docker.io/zookeeper:3.9-jre-17
restart: unless-stopped
environment:
- ZOO_4LW_COMMANDS_WHITELIST=mntr,conf,ruok
volumes:
- zookeeper_data:/data
- zookeeper_datalog:/datalog

solr:
image: docker.io/solr:9.8.1
restart: unless-stopped
ports:
- "8983:8983"
environment:
SOLR_HEAP: 2g
ZK_HOST: zoo:2181
command: -c
volumes:
- solr_data:/var/solr

clamd:
image: docker.io/clamav/clamav:1.4
restart: unless-stopped
volumes:
- clam_data:/var/lib/clamav
- roda_data:/roda/data/

siegfried:
image: ghcr.io/keeps/siegfried:v1.11.0
restart: unless-stopped
environment:
SIEGFRIED_HOST: 0.0.0.0
SIEGFRIED_PORT: 5138
volumes:
- siegfried_data:/root/siegfried/
- roda_data:/roda/data/

mailpit:
image: axllent/mailpit:v1.24
restart: unless-stopped
ports:
- "1025:1025"
- "8025:8025"

openldap:
image: docker.io/bitnamilegacy/openldap:2.6
restart: unless-stopped
user: 1001:root
ports:
- "1389:1389"
- "1636:1636"
environment:
- BITNAMI_DEBUG=true
- LDAP_ROOT=dc=roda,dc=org
- LDAP_SKIP_DEFAULT_TREE=yes
- LDAP_ADMIN_USERNAME=admin
- LDAP_ADMIN_PASSWORD=roda
- LDAP_EXTRA_SCHEMAS=cosine,inetorgperson,nis,pbkdf2
volumes:
- ./ldap/ldif/pbkdf2.ldif:/opt/bitnami/openldap/etc/schema/pbkdf2.ldif

roda:
image: docker.io/keeps/roda:development
restart: unless-stopped
ports:
- "8080:8080"
depends_on:
- solr
- clamd
- siegfried
- postgres
volumes:
- roda_data:/roda/data/
- ./roda/config/roda-core.properties:/roda/config/roda-core.properties:ro
environment:
- SPRING_DATASOURCE_URL=jdbc:postgresql://postgres:5432/roda_core_db
- RODA_CORE_SOLR_TYPE=CLOUD
- RODA_CORE_SOLR_CLOUD_URLS=zoo:2181
- SOLR_NUM_SHARDS=4
- SOLR_REPLICATION_FACTOR=1
- SIEGFRIED_SERVER_URL=http://siegfried:5138
- CLAMD_TCPADDR=clamd
- CLAMD_TCPSOCKET=3310
- SMTP_HOST=mailpit
- SMTP_PORT=1025

postgres:
image: docker.io/postgres:17
restart: unless-stopped
environment:
POSTGRES_USER: admin
POSTGRES_PASSWORD: roda
POSTGRES_DB: roda_core_db
ports:
- "5432:5432"
volumes:
- pg_data:/var/lib/postgresql/data

volumes:
zookeeper_data:
zookeeper_datalog:
solr_data:
clam_data:
siegfried_data:
roda_data:
pg_data:
10 changes: 9 additions & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@
<cas.client.version>4.1.0</cas.client.version>
<swagger.version>2.2.41</swagger.version>
<jackson.version>2.20.1</jackson.version>
<spring.version>6.2.17</spring.version>
<spring.version>6.2.18</spring.version>
<solr.version>9.10.0</solr.version>
<pekko.version>1.4.0</pekko.version>
<httpcomponents.version>5.5</httpcomponents.version>
Expand Down Expand Up @@ -200,6 +200,14 @@
<module>roda-core/roda-core-tests</module>
</modules>
</profile>
<profile>
<!-- Black-box E2E API tests. Run with: mvn test -Pe2e
Requires Docker with Compose V2 and docker.io/keeps/roda:development. -->
<id>e2e</id>
<modules>
<module>roda-api-tests</module>
</modules>
</profile>
</profiles>
<build>
<plugins>
Expand Down
Loading
Loading