Skip to content

Commit 74b871d

Browse files
Merge branch 'develop' into feature/exam-mode/iPad-attendance-checker-endpoints
2 parents 4b45e49 + 2c3e90b commit 74b871d

File tree

742 files changed

+12436
-6852
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

742 files changed

+12436
-6852
lines changed

.github/workflows/bean-instantiations.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ jobs:
1717
MAX_STARTUP_DEPENDENCY_CHAIN_LENGTH: 9
1818
MAX_DEFERRED_CHAIN_LENGTH: 16
1919
MIN_INSTANTIATED_BEANS: 20
20-
MAX_INSTANTIATED_BEANS: 100
20+
MAX_INSTANTIATED_BEANS: 102
2121
MIN_DEFERRED_CHAIN_LENGTH: 1
2222

2323
steps:

.github/workflows/quality.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ jobs:
3535
complex_beans=$(echo "$output" | grep -o "Found [0-9]* Spring beans with constructors having more than" | grep -o "[0-9]*")
3636
3737
# TODO these values should become zero in the future
38-
max_large_classes=9
38+
max_large_classes=11
3939
max_complex_beans=10
4040
4141
echo "=========================================="

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ Refer to [Using JHipster in production](http://www.jhipster.tech/production) for
205205
The following command can automate the deployment to a server. The example shows the deployment to the main Artemis test server (which runs a virtual machine):
206206

207207
```shell
208-
./artemis-server-cli deploy [email protected] -w build/libs/Artemis-8.5.0.war
208+
./artemis-server-cli deploy [email protected] -w build/libs/Artemis-8.5.1.war
209209
```
210210

211211
## Architecture

build.gradle

Lines changed: 33 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -19,20 +19,20 @@ plugins {
1919
id "com.github.andygoossens.modernizer" version "${modernizer_plugin_version}"
2020
id "com.github.ben-manes.versions" version "0.53.0"
2121
id "com.github.node-gradle.node" version "${gradle_node_plugin_version}"
22-
id "com.google.cloud.tools.jib" version "3.4.5"
22+
id "com.google.cloud.tools.jib" version "3.5.0"
2323
id "com.gorylenko.gradle-git-properties" version "2.5.3"
2424
id "io.spring.dependency-management" version "1.1.7"
2525
id "nebula.lint" version "21.1.3"
2626
id "org.liquibase.gradle" version "${liquibase_plugin_version}"
27-
id "org.owasp.dependencycheck" version "12.1.8"
27+
id "org.owasp.dependencycheck" version "12.1.9"
2828
id "org.springframework.boot" version "${spring_boot_version}"
2929
id "org.springdoc.openapi-gradle-plugin" version "1.9.0"
3030
id "org.openapi.generator" version "7.17.0"
3131
id "com.google.osdetector" version "1.7.3"
3232
}
3333

3434
group = "de.tum.cit.aet.artemis"
35-
version = "8.5.0"
35+
version = "8.5.1"
3636
description = "Interactive Learning with Individual Feedback"
3737

3838
java {
@@ -166,7 +166,7 @@ dependencies {
166166
implementation "org.apache.httpcomponents:httpmime:4.5.14"
167167

168168
implementation "jakarta.ws.rs:jakarta.ws.rs-api:4.0.0"
169-
implementation "org.glassfish.jersey.core:jersey-common:3.1.11"
169+
implementation "org.glassfish.jersey.core:jersey-common:4.0.0"
170170

171171
implementation "de.jplag:jplag:${jplag_version}"
172172

@@ -184,8 +184,14 @@ dependencies {
184184
implementation "de.jplag:text:${jplag_version}"
185185
implementation "de.jplag:typescript:${jplag_version}"
186186

187-
implementation platform("org.springframework.ai:spring-ai-bom:1.0.3")
187+
// Align all Spring AI modules to the same version
188+
implementation platform("org.springframework.ai:spring-ai-bom:1.1.0")
189+
// Azure OpenAI (prod, or when you want Azure)
188190
implementation "org.springframework.ai:spring-ai-starter-model-azure-openai" // can also use non-azure models
191+
implementation "org.springframework.ai:spring-ai-starter-model-chat-memory-repository-jdbc"
192+
// OpenAI / OpenAI-compatible (dev, localhost:1234, etc.)
193+
implementation "org.springframework.ai:spring-ai-starter-model-openai"
194+
189195

190196
// we have to override those values to use the latest version
191197
implementation "org.slf4j:jcl-over-slf4j:${slf4j_version}"
@@ -214,8 +220,9 @@ dependencies {
214220
implementation "org.apache.sshd:sshd-osgi:${sshd_version}"
215221
implementation "org.apache.sshd:sshd-sftp:${sshd_version}"
216222

217-
// https://mvnrepository.com/artifact/net.sourceforge.plantuml/plantuml
218-
implementation "net.sourceforge.plantuml:plantuml:1.2025.9"
223+
// Allows generating UML diagrams from text descriptions in problem statement markdown files for programming exercises
224+
implementation "net.sourceforge.plantuml:plantuml-mit:1.2025.10"
225+
219226
implementation "me.xdrop:fuzzywuzzy:1.4.0"
220227
implementation("org.yaml:snakeyaml") {
221228
version {
@@ -237,7 +244,7 @@ dependencies {
237244

238245
implementation "org.jsoup:jsoup:1.21.2"
239246
// needed by e.g. spring security saml2, we explicitly use the newest version to avoid security vulnerabilities
240-
implementation "commons-codec:commons-codec:1.19.0"
247+
implementation "commons-codec:commons-codec:1.20.0"
241248

242249
// use the latest version to avoid security vulnerabilities
243250
implementation "org.springframework:spring-aop:${spring_framework_version}"
@@ -273,7 +280,7 @@ dependencies {
273280
implementation "io.micrometer:micrometer-jakarta9:${micrometer_version}"
274281

275282
// Prometheus requires the protobuf-java dependency, but we explicitly use the latest version to avoid security vulnerabilities
276-
implementation "com.google.protobuf:protobuf-java:4.33.0"
283+
implementation "com.google.protobuf:protobuf-java:4.33.1"
277284

278285
implementation "tech.jhipster:jhipster-framework:${jhipster_dependencies_version}"
279286

@@ -339,6 +346,8 @@ dependencies {
339346
implementation "org.apache.commons:commons-text:${commons_text_version}"
340347
implementation "org.apache.commons:commons-math3:3.6.1"
341348
implementation "org.apache.commons:commons-lang3:${commons_lang3_version}"
349+
implementation "org.apache.commons:commons-collections4:4.5.0"
350+
342351
// required by eureka, but actually superseded by commons-lang3 above
343352
implementation "commons-lang:commons-lang:2.6"
344353

@@ -376,29 +385,33 @@ dependencies {
376385
implementation "org.springframework.cloud:spring-cloud-commons:${spring_cloud_version}"
377386

378387
// required by the Websocket Broker Connection in WebsocketConfiguration (due to multi node setup support)
379-
implementation "io.projectreactor.netty:reactor-netty-core:1.2.11"
388+
// Note: this should be upgraded to 1.3.x when Spring is updated to 4.x
389+
implementation "io.projectreactor.netty:reactor-netty-core:1.2.12"
380390

381391
// required for the connection to Hermes (push notifications)
382392
implementation "org.springframework.retry:spring-retry:2.0.12"
383393

384394
// passkey functionality to simplify login
385395
implementation "com.webauthn4j:webauthn4j-spring-security-core:0.11.2.RELEASE"
386-
implementation "com.webauthn4j:webauthn4j-core:0.29.7.RELEASE"
396+
implementation "com.webauthn4j:webauthn4j-core:0.30.0.RELEASE"
387397

388398
implementation "org.springframework.security:spring-security-config:${spring_security_version}"
389399
implementation "org.springframework.security:spring-security-data:${spring_security_version}"
390400
implementation "org.springframework.security:spring-security-core:${spring_security_version}"
391401
implementation "org.springframework.security:spring-security-oauth2-core:${spring_security_version}"
392402
implementation "org.springframework.security:spring-security-oauth2-client:${spring_security_version}"
393403
// use newest version of nimbus-jose-jwt to avoid security issues through outdated dependencies
394-
implementation "com.nimbusds:nimbus-jose-jwt:10.5"
404+
implementation "com.nimbusds:nimbus-jose-jwt:10.6"
395405

396406
implementation "org.springframework.security:spring-security-oauth2-jose:${spring_security_version}"
397407
implementation "org.springframework.security:spring-security-crypto:${spring_security_version}"
398408
implementation "org.springframework.security:spring-security-web:${spring_security_version}"
399409
implementation "org.springframework.security:spring-security-messaging:${spring_security_version}"
400410
implementation "org.springframework.security:spring-security-ldap:${spring_security_version}"
401411

412+
// Nullable annotations for improved static analysis
413+
implementation "org.jspecify:jspecify:1.0.0"
414+
402415
// Helios push-based status updates
403416
implementation "de.tum.cit.aet:helios-status-spring-starter:${helios_status_version}"
404417

@@ -446,12 +459,13 @@ dependencies {
446459
// make sure to use the latest version to avoid security vulnerabilities
447460
runtimeOnly "commons-beanutils:commons-beanutils:1.11.0"
448461
checkstyle "commons-beanutils:commons-beanutils:1.11.0"
462+
449463
checkstyle "org.apache.commons:commons-lang3:${commons_lang3_version}"
450464
checkstyle "org.apache.commons:commons-text:${commons_text_version}"
451465

452-
implementation "com.google.errorprone:error_prone_annotations:2.43.0"
466+
implementation "com.google.errorprone:error_prone_annotations:2.44.0"
453467
// needed for OpenAPI generation
454-
implementation "org.springdoc:springdoc-openapi-starter-webmvc-ui:2.8.13"
468+
implementation "org.springdoc:springdoc-openapi-starter-webmvc-ui:2.8.14"
455469

456470

457471
// NOTE: we want to keep the same unique version for all configurations, implementation and annotationProcessor
@@ -466,7 +480,7 @@ dependencies {
466480
annotationProcessor "org.glassfish.jaxb:jaxb-runtime:${jaxb_runtime_version}"
467481
annotationProcessor "org.springframework.boot:spring-boot-configuration-processor:${spring_boot_version}"
468482

469-
implementation "org.mnode.ical4j:ical4j:4.2.0"
483+
implementation "org.mnode.ical4j:ical4j:4.2.1"
470484

471485

472486
// ---- CHECKSTYLE DEPENDENCIES ----
@@ -496,7 +510,7 @@ dependencies {
496510
testImplementation "org.apache.maven.shared:maven-invoker:3.3.0"
497511
testImplementation "org.gradle:gradle-tooling-api:9.2.0"
498512
testImplementation "org.apache.maven.surefire:surefire-report-parser:3.5.4"
499-
testImplementation "io.zonky.test:embedded-database-spring-test:2.6.0"
513+
testImplementation "io.zonky.test:embedded-database-spring-test:2.7.0"
500514
testImplementation "com.redis:testcontainers-redis:2.2.4"
501515
testImplementation "com.tngtech.archunit:archunit:1.4.1"
502516
testImplementation "org.skyscreamer:jsonassert:1.5.3"
@@ -513,9 +527,9 @@ dependencies {
513527
testImplementation "org.junit.jupiter:junit-jupiter-params:${junit_version}"
514528

515529
// NOTE: make sure this corresponds to the version used for JUnit in the testImplementation
516-
testImplementation "org.junit.platform:junit-platform-commons:${junit_platform_version}"
517-
testImplementation "org.junit.platform:junit-platform-engine:${junit_platform_version}"
518-
testImplementation "org.junit.platform:junit-platform-launcher:${junit_platform_version}"
530+
testImplementation "org.junit.platform:junit-platform-commons:${junit_version}"
531+
testImplementation "org.junit.platform:junit-platform-engine:${junit_version}"
532+
testImplementation "org.junit.platform:junit-platform-launcher:${junit_version}"
519533
}
520534

521535
// we have to apply the test.gradle file after the dependencies block, otherwise we get the error Cannot change dependencies of dependency configuration ':mockitoAgent' after it has been resolved

docs/admin/setup/pyris.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ Overview
1515

1616
Iris is an intelligent virtual tutor integrated into Artemis, providing one-on-one programming assistance, course content support,
1717
and competency generation for students. Iris relies on Pyris, an intermediary service from the EduTelligence suite that brokers
18-
requests to Large Language Models (LLMs) via a FastAPI backend.
18+
requests to Large Language Models (LLMs) using FastAPI.
1919

2020
This guide consolidates everything you need to configure both Artemis and Pyris so they communicate securely and reliably.
2121

docs/dev/guidelines/database.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ In order to load the relationships of an entity on demand, we then use one of 3
223223
224224
225225
// ProgrammingExerciseRepository.java
226-
@NotNull
226+
@NonNull
227227
default ProgrammingExercise findByIdWithDynamicFetchElseThrow(long exerciseId, Collection<ProgrammingExerciseFetchOptions> fetchOptions) throws EntityNotFoundException {
228228
var specification = getDynamicSpecification(fetchOptions);
229229
return findOneByIdElseThrow(specification, exerciseId, "Programming Exercise");

docs/user/exercises/programming-exercise-setup.inc

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,12 +106,30 @@ Generate programming exercise
106106
- **Sequential Test Runs:** Activate this option to first run structural and then behavior tests.
107107
This feature allows students to better concentrate on the immediate challenge at hand.
108108
Not supported together with static code analysis. Cannot be changed after the exercise creation.
109-
- **Customize Build Plan** Activate this option if you want to customize the build plan of your exercise.
109+
- **Customize Build Plan:** Activate this option if you want to customize the build plan of your exercise.
110110
This feature is available for all programming languages, and works with LocalCI and Jenkins, Artemis provides templates for the build plan configuration.
111111
The build plan can also be customized after the exercise creation.
112112

113113
|
114114

115+
.. figure:: programming/programming-options-version-control.png
116+
:align: center
117+
118+
- **Allow Custom Branches:** Activate this option if students should be able to push (to) other branches than the default one.
119+
120+
.. warning::
121+
122+
Artemis does not show those branches in the UI, and also offers no merge support in the UI.
123+
124+
Pushing to other (non-default) branches does not trigger any builds, and does not create submissions.
125+
Students are therefore fully responsible for managing their branches locally. Further features that deal with branches
126+
in the Artemis UI are out of scope and will not be implemented in the future.
127+
Please only activate this option if it is absolutely necessary!
128+
129+
- **Regular Expression for the branch name:** The custom branch name is matched against this Java regular expression and pushing is only allowed, if it matches.
130+
131+
|
132+
115133
.. figure:: programming/programming-options-score.png
116134
:align: center
117135

29.2 KB
Loading

documentation/.readthedocs.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@
88
version: 2
99

1010
build:
11-
os: "ubuntu-22.04"
11+
os: "ubuntu-24.04"
1212
tools:
13-
nodejs: "20"
13+
nodejs: "22"
1414
commands:
1515
# Install dependencies
1616
- cd documentation && npm ci

documentation/docusaurus.config.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -160,15 +160,15 @@ const config: Config = {
160160
items: [
161161
{
162162
label: 'AET Website',
163-
href: 'https://aet.cit.tum.de/',
163+
href: 'https://aet.cit.tum.de',
164164
},
165165
{
166166
label: 'AET LinkedIn',
167-
href: 'https://www.linkedin.com/company/tumaet/posts/?feedView=all',
167+
href: 'https://www.linkedin.com/company/tumaet',
168168
},
169169
{
170170
label: 'AET Instagram',
171-
href: 'https://www.instagram.com/tum.aet/',
171+
href: 'https://www.instagram.com/tum.aet',
172172
},
173173
],
174174
},
@@ -199,7 +199,7 @@ const config: Config = {
199199
],
200200
},
201201
],
202-
copyright: `© 2025 Technische Universität München – Built with ❤️ by the Artemis Team at Applied Education Technologies (AET)`,
202+
copyright: `© 2025 Technical University of Munich – Built with ❤️ by the Artemis Team at Applied Education Technologies (AET)`,
203203
},
204204
prism: {
205205
theme: prismThemes.github,

0 commit comments

Comments
 (0)