Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 2 additions & 0 deletions .github/workflows/gradle-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ jobs:
- name: Build with Gradle
id: gradle_build
continue-on-error: true
env:
TESTCONTAINERS_RYUK_DISABLED: true
run: ./gradlew build

- name: Publish to Maven Central with JReleaser
Expand Down
14 changes: 14 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
# Local frontend runtime config overrides (not for source control)
structures-frontend-next/public/app-config.override.json
structures-frontend-next/public/app-config.json.local
structures-frontend-next/public/config/app-config.override.json
structures-frontend-next/public/config/app-config.json.local
# Local service config overrides (not for source control)
structures-server/src/main/resources/application-local.yml

# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
.gradle
Expand Down Expand Up @@ -78,4 +86,10 @@ structures-js/structures-e2e/test/services/generated/

structures-sql/allure-results/

structures-auth/allure-results/

structures-server/allure-results/

structures-server/src/main/resources/webroot/

structures-server/src/main/resources/webroot2/
14 changes: 14 additions & 0 deletions .vscode/extensions.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"recommendations": [
"vscjava.vscode-java-pack",
"vscjava.vscode-gradle",
"redhat.java",
"vscjava.vscode-java-debug",
"vscjava.vscode-java-test",
"vscjava.vscode-maven",
"vscjava.vscode-java-dependency",
"vscjava.vscode-spring-initializr",
"vscjava.vscode-spring-boot",
"vscjava.vscode-lombok"
]
}
31 changes: 29 additions & 2 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,20 @@
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"command": "pnpm dev",
"name": "Start Structures Frontend",
"request": "launch",
"type": "node-terminal",
"cwd": "${workspaceFolder}/structures-frontend-next"
},
{
"name": "Launch Chrome Debugger for UI",
"request": "launch",
"type": "chrome",
"url": "http://localhost:5173",
"webRoot": "${workspaceFolder}/structures-frontend-next"
},
{
"type": "java",
"name": "StructuresServerApplication",
Expand All @@ -12,15 +26,28 @@
"projectName": "structures-server",
"vmArgs": "-XX:MaxDirectMemorySize=1g -Xmx4096m -XX:+AlwaysPreTouch -XX:+UseG1GC -XX:+ScavengeBeforeFullGC -XX:+DisableExplicitGC -cp ${workspaceFolder}/structures-core/src/main/resources",
"env": {
"SPRING_PROFILES_ACTIVE": "development,local",
"JAVA_TOOL_OPTIONS": "-javaagent:${workspaceFolder}/structures-server/src/main/resources/opentelemetry-javaagent.jar --add-opens=jdk.management/com.sun.management.internal=ALL-UNNAMED --add-opens=java.base/jdk.internal.misc=ALL-UNNAMED --add-opens=java.base/sun.nio.ch=ALL-UNNAMED --add-opens=java.management/com.sun.jmx.mbeanserver=ALL-UNNAMED --add-opens=jdk.internal.jvmstat/sun.jvmstat.monitor=ALL-UNNAMED --add-opens=java.base/sun.reflect.generics.reflectiveObjects=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED",
"OTEL_EXPORTER_OTLP_ENDPOINT": "http://127.0.0.1:4317",
"OTEL_EXPORTER_OTLP_PROTOCOL": "grpc",
"OTEL_LOGS_EXPORTER": "otlp",
"OTEL_METRICS_EXPORTER": "otlp",
"OTEL_TRACES_EXPORTER": "otlp",
"OTEL_SERVICE_NAME": "structures-server"
},
"args": "--spring.profiles.active=development"
}
},
{
"type": "java",
"name": "Run Java Tests",
"request": "launch",
"mainClass": "",
"projectName": "structures-server",
"args": "",
"vmArgs": "-XX:MaxDirectMemorySize=1g -Xmx4096m -XX:+AlwaysPreTouch -XX:+UseG1GC -XX:+ScavengeBeforeFullGC -XX:+DisableExplicitGC",
"env": {
"SPRING_PROFILES_ACTIVE": "test, local",
"JAVA_TOOL_OPTIONS": "--add-opens=jdk.management/com.sun.management.internal=ALL-UNNAMED --add-opens=java.base/jdk.internal.misc=ALL-UNNAMED --add-opens=java.base/sun.nio.ch=ALL-UNNAMED --add-opens=java.management/com.sun.jmx.mbeanserver=ALL-UNNAMED --add-opens=jdk.internal.jvmstat/sun.jvmstat.monitor=ALL-UNNAMED --add-opens=java.base/sun.reflect.generics.reflectiveObjects=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED"
}
}
]
}
40 changes: 40 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
{
"npm.packageManager": "pnpm",
"spring-boot.ls.java.home": "${userHome}/.sdkman/candidates/java/21.0.7-ms",
"java.configuration.runtimes": [
{
"name": "JavaSE-21",
"path": "${userHome}/.sdkman/candidates/java/21.0.7-ms",
"default": true
},
{
"name": "JavaSE-23",
"path": "${userHome}/.sdkman/candidates/java/23.0.2-amzn"
}
],
"gradle.debug": true,
"gradle.autoDetect": "on",
"gradle.nestedProjects": false,
"java.compile.nullAnalysis.mode": "automatic",
"java.configuration.updateBuildConfiguration": "interactive",
"java.import.gradle.wrapper.enabled": true,
"java.test.config": {
"name": "testConfig",
"testKind": "junit",
"env": {
"JAVA_HOME": "${userHome}/.sdkman/candidates/java/21.0.7-ms",
"JAVA_TOOL_OPTIONS": "-Dspring.profiles.active=development,test --add-opens=jdk.management/com.sun.management.internal=ALL-UNNAMED --add-opens=java.base/jdk.internal.misc=ALL-UNNAMED --add-opens=java.base/sun.nio.ch=ALL-UNNAMED --add-opens=java.management/com.sun.jmx.mbeanserver=ALL-UNNAMED --add-opens=jdk.internal.jvmstat/sun.jvmstat.monitor=ALL-UNNAMED --add-opens=java.base/sun.reflect.generics.reflectiveObjects=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.lang.in=ALL-UNNAMED"
},
"vmargs": [
"-XX:MaxDirectMemorySize=1g",
"-Xmx4096m",
"-XX:+AlwaysPreTouch",
"-XX:+UseG1GC",
"-XX:+ScavengeBeforeFullGC",
"-XX:+DisableExplicitGC"
],
"workingDirectory": "${workspaceFolder}"
},
"java.test.defaultConfig": "testConfig",
"java.debug.settings.onBuildFailureProceed": true
}
200 changes: 200 additions & 0 deletions .vscode/tasks.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,200 @@
{
"version": "2.0.0",
"tasks": [
{
"type": "gradle",
"id": "${workspaceFolder}/structures-core:build",
"script": "structures-core:build",
"group": "build",
"project": "structures-core",
"buildFile": "${workspaceFolder}/structures-core/build.gradle",
"projectFolder": "${workspaceFolder}",
"workspaceFolder": "${workspaceFolder}",
"rootProject": "structures",
"javaDebug": true,
"args": "-x test",
"problemMatcher": [
"$gradle"
],
"label": "Gradle: Build Core",
"description": "Build the core project"
},
{
"type": "gradle",
"id": "${workspaceFolder}/structures-sql:build",
"script": "structures-sql:build",
"group": "build",
"project": "structures-sql",
"buildFile": "${workspaceFolder}/structures-sql/build.gradle",
"projectFolder": "${workspaceFolder}",
"workspaceFolder": "${workspaceFolder}",
"rootProject": "structures",
"javaDebug": true,
"args": "-x test",
"problemMatcher": [
"$gradle"
],
"label": "Gradle: Build SQL",
"description": "Build the sql project"
},
{
"type": "gradle",
"id": "${workspaceFolder}/structures-server:build",
"script": "structures-server:build",
"group": "build",
"project": "structures-server",
"buildFile": "${workspaceFolder}/structures-server/build.gradle",
"projectFolder": "${workspaceFolder}",
"workspaceFolder": "${workspaceFolder}",
"rootProject": "structures",
"javaDebug": true,
"args": "-x test",
"problemMatcher": [
"$gradle"
],
"label": "Gradle: Build Server",
"description": "Build the server project"
},
{
"type": "gradle",
"id": "${workspaceFolder}/structures:build",
"script": "build",
"group": "build",
"project": "structures",
"buildFile": "${workspaceFolder}/build.gradle",
"projectFolder": "${workspaceFolder}",
"workspaceFolder": "${workspaceFolder}",
"rootProject": "structures",
"javaDebug": true,
"args": "-x test",
"problemMatcher": [
"$gradle"
],
"label": "Gradle: Build All",
"description": "Build all projects"
},
{
"type": "gradle",
"id": "${workspaceFolder}/structures:clean",
"script": "clean",
"group": "build",
"project": "structures",
"buildFile": "${workspaceFolder}/build.gradle",
"projectFolder": "${workspaceFolder}",
"workspaceFolder": "${workspaceFolder}",
"rootProject": "structures",
"javaDebug": true,
"args": "-x test",
"problemMatcher": [
"$gradle"
],
"label": "Gradle: Build All",
"description": "Clean all projects"
},
{
"type": "gradle",
"id": "${workspaceFolder}/structures:test",
"script": "test",
"group": "test",
"project": "structures",
"buildFile": "${workspaceFolder}/build.gradle",
"projectFolder": "${workspaceFolder}",
"workspaceFolder": "${workspaceFolder}",
"rootProject": "structures",
"javaDebug": true,
"problemMatcher": [
"$gradle"
],
"label": "Gradle: Test All",
"description": "Test all projects"
},
{
"type": "gradle",
"id": "${workspaceFolder}/structures-server:test",
"script": "structures-server:test",
"group": "test",
"project": "structures-server",
"buildFile": "${workspaceFolder}/structures-server/build.gradle",
"projectFolder": "${workspaceFolder}",
"workspaceFolder": "${workspaceFolder}",
"rootProject": "structures",
"javaDebug": true,
"problemMatcher": [
"$gradle"
],
"label": "Gradle: Test Server",
"description": "Test the server project"
},
{
"type": "gradle",
"id": "${workspaceFolder}/structures-core:test",
"script": "structures-core:test",
"group": "test",
"project": "structures-core",
"buildFile": "${workspaceFolder}/structures-core/build.gradle",
"projectFolder": "${workspaceFolder}",
"workspaceFolder": "${workspaceFolder}",
"rootProject": "structures",
"javaDebug": true,
"problemMatcher": [
"$gradle"
],
"label": "Gradle: Test Core",
"description": "Test the core project"
},
{
"type": "gradle",
"id": "${workspaceFolder}/structures-sql:test",
"script": "structures-sql:test",
"group": "test",
"project": "structures-sql",
"buildFile": "${workspaceFolder}/structures-sql/build.gradle",
"projectFolder": "${workspaceFolder}",
"workspaceFolder": "${workspaceFolder}",
"rootProject": "structures",
"javaDebug": true,
"problemMatcher": [
"$gradle"
],
"label": "Gradle: Test SQL",
"description": "Test the sql project"
},
{
"label": "Frontend: Install Dependencies",
"type": "shell",
"command": "pnpm install",
"options": {
"cwd": "${workspaceFolder}/structures-frontend-next"
},
"group": "build",
"presentation": {
"echo": true,
"reveal": "always",
"focus": false,
"panel": "shared",
"showReuseMessage": true,
"clear": false
},
"problemMatcher": []
},
{
"label": "Frontend: Dev Server",
"type": "shell",
"command": "pnpm dev",
"options": {
"cwd": "${workspaceFolder}/structures-frontend-next"
},
"group": "build",
"presentation": {
"echo": true,
"reveal": "always",
"focus": false,
"panel": "shared",
"showReuseMessage": true,
"clear": false
},
"isBackground": true,
"problemMatcher": []
}
]
}
27 changes: 23 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,16 +22,22 @@ docker-compose up -d

3. Visit [http://localhost:9090](http://localhost:9090) to access the Structures GUI

For detailed setup instructions, see the [Docker Compose documentation](docker-compose/README.md).

## Next Steps
- [Getting Started Guide](https://kinotic-foundation.github.io/structures/website/guide/getting-started.html) - Complete setup instructions and prerequisites

### Projects
* structures-core
* [structures-core](structures-core/README.md)
* Provides the core library for use in all other projects.
* structures-frontend
* [structures-frontend](structures-frontend/README.md)
* Provides a GUI for interacting with Structures.
* structures-server
* Provides Access to the core library via a REST API and a GUI.
* [structures-frontend-next](structures-frontend-next/README.md)
* Next-generation Vue 3 frontend application.
* [structures-server](structures-server/README.md)
* Provides access to the core library via a REST API and a GUI.
* [structures-auth](structures-auth/README.md)
* Authentication and authorization library with OIDC support.

### Environment Variables
These variables are available for custom configuration, presented are the defaults.
Expand Down Expand Up @@ -59,3 +65,16 @@ STRUCTURES_ENABLE_STATIC_FILE_SERVER: true
STRUCTURES_INITIALIZE_WITH_SAMPLE_DATA: false
```

### Testing Requirements
When running tests locally or in CI/CD environments, the following environment variable is required:

```bash
export TESTCONTAINERS_RYUK_DISABLED=true
```

**Why this is needed:** TestContainers uses a Ryuk container for resource cleanup, which can cause connectivity issues on certain systems (particularly macOS with Docker Desktop). Disabling Ryuk ensures reliable test execution.

**CI/CD Consideration:** Add this environment variable to your CI/CD pipeline configuration to ensure tests run successfully.

**For detailed testing information:** See [TESTING.md](TESTING.md) for comprehensive testing setup, troubleshooting, and CI/CD configuration examples.

Loading