diff --git a/.github/workflows/gradle-build-feature.yml b/.github/workflows/gradle-build-feature.yml index bdcb909e9b..5c7b5b1709 100644 --- a/.github/workflows/gradle-build-feature.yml +++ b/.github/workflows/gradle-build-feature.yml @@ -22,11 +22,11 @@ jobs: uses: actions/setup-node@v4 with: node-version: '22' - - name: Set up JDK 21 + - name: Set up JDK 23 uses: actions/setup-java@v4 with: distribution: 'temurin' # See 'Supported distributions' for available options - java-version: 21 + java-version: 23 - name: Cache Gradle packages uses: actions/cache@v4 with: diff --git a/.github/workflows/gradle-build-native-feature.yml b/.github/workflows/gradle-build-native-feature.yml index 464acf6882..0b5cf18861 100644 --- a/.github/workflows/gradle-build-native-feature.yml +++ b/.github/workflows/gradle-build-native-feature.yml @@ -22,11 +22,11 @@ jobs: uses: actions/setup-node@v4 with: node-version: '22' - - name: Set up GraalVM 21 - uses: graalvm/setup-graalvm@v1.1.8 + - name: Set up GraalVM 23 + uses: graalvm/setup-graalvm@v1.3.3 with: distribution: 'graalvm' - java-version: '21' + java-version: '23' - name: Cache Gradle packages uses: actions/cache@v4 with: diff --git a/.github/workflows/gradle-build-publish.yml b/.github/workflows/gradle-build-publish.yml index 0f7cec56ef..5a2bd2e3cf 100644 --- a/.github/workflows/gradle-build-publish.yml +++ b/.github/workflows/gradle-build-publish.yml @@ -13,14 +13,14 @@ jobs: steps: - uses: actions/checkout@v4 - name: Set up Node Stable - uses: actions/setup-node@v2-beta + uses: actions/setup-node@v4 with: node-version: '22' - - name: Set up JDK 21 + - name: Set up JDK 23 uses: actions/setup-java@v4 with: distribution: 'temurin' # See 'Supported distributions' for available options - java-version: 21 + java-version: 23 - name: Cache Gradle packages uses: actions/cache@v4 with: diff --git a/.github/workflows/gradle-dependency-submission.yml b/.github/workflows/gradle-dependency-submission.yml index 959013aeaf..9742c8c9c3 100644 --- a/.github/workflows/gradle-dependency-submission.yml +++ b/.github/workflows/gradle-dependency-submission.yml @@ -2,7 +2,7 @@ name: Gradle Dependency Submission on: push: - branches: [ 'develop', 'master', 'feature-2532/graal' ] + branches: [ 'develop', 'master' ] env: HUSKY: 0 permissions: @@ -18,6 +18,6 @@ jobs: uses: actions/setup-java@v4 with: distribution: 'temurin' - java-version: 21 + java-version: 23 - name: Generate and submit dependency graph uses: gradle/actions/dependency-submission@v4 diff --git a/.github/workflows/gradle-deploy-develop.yml b/.github/workflows/gradle-deploy-develop.yml index 878b04427d..4058ad0aea 100644 --- a/.github/workflows/gradle-deploy-develop.yml +++ b/.github/workflows/gradle-deploy-develop.yml @@ -22,11 +22,11 @@ jobs: uses: actions/setup-node@v4 with: node-version: '22' - - name: Set up Temurin 21 + - name: Set up Temurin 23 uses: actions/setup-java@v4 with: distribution: 'temurin' - java-version: 21 + java-version: 23 - name: Cache Gradle packages uses: actions/cache@v4 with: @@ -53,11 +53,11 @@ jobs: uses: actions/setup-node@v4 with: node-version: '22' - - name: Set up Temurin 21 + - name: Set up Temurin 23 uses: actions/setup-java@v4 with: distribution: 'temurin' # See 'Supported distributions' for available options - java-version: 21 + java-version: 23 - name: Cache Gradle packages uses: actions/cache@v4 with: diff --git a/.github/workflows/gradle-deploy-native-develop.yml b/.github/workflows/gradle-deploy-native-develop.yml index bcec8f7500..3041dc27b9 100644 --- a/.github/workflows/gradle-deploy-native-develop.yml +++ b/.github/workflows/gradle-deploy-native-develop.yml @@ -22,11 +22,11 @@ jobs: uses: actions/setup-node@v4 with: node-version: '22' - - name: Set up GraalVM 21 + - name: Set up GraalVM 23 uses: graalvm/setup-graalvm@v1.1.8 with: distribution: 'graalvm' - java-version: '21' + java-version: '23' - name: Cache Gradle packages uses: actions/cache@v4 with: @@ -53,11 +53,11 @@ jobs: uses: actions/setup-node@v4 with: node-version: '22' - - name: Set up GraalVM 21 + - name: Set up GraalVM 23 uses: graalvm/setup-graalvm@v1.1.8 with: distribution: 'graalvm' - java-version: '21' + java-version: '23' - name: Cache Gradle packages uses: actions/cache@v4 with: diff --git a/.gitignore b/.gitignore index c882aa27cf..1a4dd6ac0e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ Thumbs.db .DS_Store .gradle +.micronaut bin/ build/ target/ diff --git a/docs/getting-started/running/index.md b/docs/getting-started/running/index.md index ae46d1621d..8291497142 100644 --- a/docs/getting-started/running/index.md +++ b/docs/getting-started/running/index.md @@ -36,10 +36,10 @@ You can use any email that the system has in its loaded test data. The "password If you wish to use the native executables built with GraalVM, you will need to switch over to that Java compiler using the following command: ```shell -nvm use java 21.0.2-graalce +sdk use java 23.0.2-graalce ``` -21.0.2-graalce is the most recent version of GraalVM Community Edition, as of the time this was written. You can replace that version with a different Graal distribution as appropriate. +23.0.2-graalce is the most recent version of GraalVM Community Edition, as of the time this was written. You can replace that version with a different Graal distribution as appropriate. You can then run a native build using: diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 0aaefbcaf0..37f853b1c8 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/server/build.gradle b/server/build.gradle index 5da3a6765d..cf1bca73c4 100755 --- a/server/build.gradle +++ b/server/build.gradle @@ -1,14 +1,16 @@ import org.gradle.nativeplatform.platform.internal.DefaultNativePlatform plugins { - id 'maven-publish' + id('maven-publish') + id("io.micronaut.application") version "4.5.2" id("com.gradleup.shadow") version "8.3.6" - id("io.micronaut.application") version "4.5.0" - id "jacoco" + id("io.micronaut.test-resources") version "4.5.2" + id("io.micronaut.aot") version "4.5.2" + id("jacoco") } -version "0.8.17" -group "com.objectcomputing.checkins" +version="0.8.17" +group="com.objectcomputing.checkins" repositories { mavenCentral() @@ -17,6 +19,9 @@ repositories { micronaut { runtime("netty") testRuntime("junit5") + testResources { + explicitPort=61971 + } processing { incremental(true) annotations("com.objectcomputing.checkins.*") @@ -39,7 +44,10 @@ graalvmNative { // See https://github.com/micronaut-projects/micronaut-core/issues/10771 buildArgs.add("--initialize-at-build-time=kotlin.coroutines.intrinsics.CoroutineSingletons") - + buildArgs.add("--initialize-at-build-time=io.micronaut.security.authentication.AuthenticationMode") + buildArgs.add("--initialize-at-build-time=io.micronaut.flyway.StaticResourceProvider") + buildArgs.add("--initialize-at-build-time=com.nimbusds.jose.Requirement") + buildArgs.add("--initialize-at-build-time=io.micronaut.flyway.StaticResourceProvider\$StaticLoadableResource") // When we are building for production (on CI), we do not want to include the dev migrations. def isProduction = System.getenv('SERVICE_NAME') != null && System.getenv('SERVICE_NAME') == 'checkins-master' def migrationLocations = isProduction ? "db/common" : "db/common,db/dev" @@ -71,9 +79,10 @@ dependencies { compileOnly ("org.projectlombok:lombok") annotationProcessor ("org.projectlombok:lombok") - annotationProcessor ("io.micronaut:micronaut-inject-java") +// annotationProcessor ("io.micronaut:micronaut-inject-java") annotationProcessor("io.micronaut.validation:micronaut-validation-processor") annotationProcessor("io.micronaut.data:micronaut-data-processor") + annotationProcessor("io.micronaut:micronaut-http-validation") annotationProcessor("io.micronaut.openapi:micronaut-openapi") annotationProcessor("io.micronaut.security:micronaut-security-annotations") @@ -81,7 +90,6 @@ dependencies { implementation("net.steppschuh.markdowngenerator:markdowngenerator:1.3.1.1") implementation("io.micronaut:micronaut-jackson-databind") - implementation("io.micronaut:micronaut-http-client") implementation("io.micronaut:micronaut-management") implementation('io.micronaut:micronaut-runtime') implementation("io.micronaut.cache:micronaut-cache-caffeine") @@ -94,7 +102,8 @@ dependencies { implementation("io.micronaut.validation:micronaut-validation") implementation("io.micronaut.views:micronaut-views-thymeleaf") implementation("io.micronaut.email:micronaut-email-mailjet") - implementation "io.micronaut:micronaut-http-server-netty" + implementation("io.micronaut:micronaut-http-server-netty") + implementation("io.micronaut:micronaut-http-client") implementation("io.swagger.core.v3:swagger-annotations") diff --git a/server/gradle.properties b/server/gradle.properties index 87a21df3dd..16cfe3dd74 100644 --- a/server/gradle.properties +++ b/server/gradle.properties @@ -1,2 +1,2 @@ -micronautVersion=4.7.6 +micronautVersion=4.8.0 seleniumVersion=4.24.0 diff --git a/server/gradle/wrapper/gradle-wrapper.properties b/server/gradle/wrapper/gradle-wrapper.properties index 48c0a02ca4..2733ed5dc3 100644 --- a/server/gradle/wrapper/gradle-wrapper.properties +++ b/server/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/server/src/main/java/com/objectcomputing/checkins/services/file/FileServicesBaseImpl.java b/server/src/main/java/com/objectcomputing/checkins/services/file/FileServicesBaseImpl.java index ec4d9ceca0..efd5a372b3 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/file/FileServicesBaseImpl.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/file/FileServicesBaseImpl.java @@ -28,7 +28,6 @@ import static com.objectcomputing.checkins.services.validate.PermissionsValidation.NOT_AUTHORIZED_MSG; -@Singleton abstract public class FileServicesBaseImpl implements FileServices { private static final Logger LOG = LoggerFactory.getLogger(FileServicesBaseImpl.class); diff --git a/server/src/main/java/com/objectcomputing/checkins/services/guild/GuildController.java b/server/src/main/java/com/objectcomputing/checkins/services/guild/GuildController.java index 8f8f9992c8..ef126b57ba 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/guild/GuildController.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/guild/GuildController.java @@ -69,8 +69,8 @@ public GuildResponseDTO readGuild(@NotNull UUID id) { * return all guilds that match the filled in params */ @Get("/{?name,memberid}") - public Set findGuilds(@Nullable String name, @Nullable UUID memberId) { - return guildService.findByFields(name, memberId); + public Set findGuilds(@Nullable String name, @Nullable UUID memberid) { + return guildService.findByFields(name, memberid); } /** diff --git a/server/src/main/java/com/objectcomputing/checkins/services/kudos/KudosController.java b/server/src/main/java/com/objectcomputing/checkins/services/kudos/KudosController.java index a10499f7c9..269b049586 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/kudos/KudosController.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/kudos/KudosController.java @@ -63,7 +63,7 @@ public KudosResponseDTO getById(@NotNull UUID id) { return kudosServices.getById(id); } - @Get("/{?recipientId,?senderId,?isPending}") + @Get("/{?recipientId,senderId,isPending}") public List get(@Nullable UUID recipientId, @Nullable UUID senderId, @Nullable Boolean isPending) { return kudosServices.findByValues(recipientId, senderId, isPending); } diff --git a/server/src/main/java/com/objectcomputing/checkins/services/kudos/KudosConverter.java b/server/src/main/java/com/objectcomputing/checkins/services/kudos/KudosConverter.java index 5a8fdb2773..4e4ab5e224 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/kudos/KudosConverter.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/kudos/KudosConverter.java @@ -7,7 +7,6 @@ import com.objectcomputing.checkins.services.memberprofile.MemberProfileUtils; import com.objectcomputing.checkins.services.memberprofile.MemberProfile; -import com.slack.api.model.block.LayoutBlock; import com.slack.api.model.block.RichTextBlock; import com.slack.api.model.block.element.RichTextElement; import com.slack.api.model.block.element.RichTextSectionElement; diff --git a/server/src/main/resources/META-INF/native-image/com.objectcomputing/checkins/reflect-config.json b/server/src/main/resources/META-INF/native-image/com.objectcomputing/checkins/reflect-config.json index 7fd10e40e0..97a9e6c5cc 100644 --- a/server/src/main/resources/META-INF/native-image/com.objectcomputing/checkins/reflect-config.json +++ b/server/src/main/resources/META-INF/native-image/com.objectcomputing/checkins/reflect-config.json @@ -3,6 +3,33 @@ "name": "java.lang.reflect.RecordComponent", "allPublicMethods": true }, + { + "name": "com.slack.api.model.BotProfile", + "allDeclaredFields": true, + "allDeclaredConstructors" : true, + "allPublicConstructors" : true, + "allPublicMethods": true, + "queryAllDeclaredConstructors": true, + "queryAllDeclaredMethods": true + }, + { + "name": "com.slack.api.model.BotProfile$Icons", + "allDeclaredFields": true, + "allDeclaredConstructors" : true, + "allPublicConstructors" : true, + "allPublicMethods": true, + "queryAllDeclaredConstructors": true, + "queryAllDeclaredMethods": true + }, + { + "name": "com.slack.api.model.Message", + "allDeclaredFields": true, + "allDeclaredConstructors" : true, + "allPublicConstructors" : true, + "allPublicMethods": true, + "queryAllDeclaredConstructors": true, + "queryAllDeclaredMethods": true + }, { "name": "com.slack.api.model.block.LayoutBlock", "allDeclaredFields": true, @@ -40,7 +67,7 @@ "queryAllDeclaredMethods": true }, { - "name": "com.slack.api.model.block.element.RichTextSectionElement.LimitedTextStyle", + "name": "com.slack.api.model.block.element.RichTextSectionElement$LimitedTextStyle", "allDeclaredFields": true, "allDeclaredConstructors" : true, "allPublicConstructors" : true, @@ -49,7 +76,7 @@ "queryAllDeclaredMethods": true }, { - "name": "com.slack.api.model.block.element.RichTextSectionElement.TextStyle", + "name": "com.slack.api.model.block.element.RichTextSectionElement$TextStyle", "allDeclaredFields": true, "allDeclaredConstructors" : true, "allPublicConstructors" : true, @@ -58,7 +85,7 @@ "queryAllDeclaredMethods": true }, { - "name": "com.slack.api.model.block.element.RichTextSectionElement.Color", + "name": "com.slack.api.model.block.element.RichTextSectionElement$Color", "allDeclaredFields": true, "allDeclaredConstructors" : true, "allPublicConstructors" : true, @@ -67,7 +94,7 @@ "queryAllDeclaredMethods": true }, { - "name": "com.slack.api.model.block.element.RichTextSectionElement.Broadcast", + "name": "com.slack.api.model.block.element.RichTextSectionElement$Broadcast", "allDeclaredFields": true, "allDeclaredConstructors" : true, "allPublicConstructors" : true, @@ -76,7 +103,7 @@ "queryAllDeclaredMethods": true }, { - "name": "com.slack.api.model.block.element.RichTextSectionElement.UserGroup", + "name": "com.slack.api.model.block.element.RichTextSectionElement$UserGroup", "allDeclaredFields": true, "allDeclaredConstructors" : true, "allPublicConstructors" : true, @@ -85,7 +112,7 @@ "queryAllDeclaredMethods": true }, { - "name": "com.slack.api.model.block.element.RichTextSectionElement.Team", + "name": "com.slack.api.model.block.element.RichTextSectionElement$Team", "allDeclaredFields": true, "allDeclaredConstructors" : true, "allPublicConstructors" : true, @@ -94,7 +121,7 @@ "queryAllDeclaredMethods": true }, { - "name": "com.slack.api.model.block.element.RichTextSectionElement.Emoji", + "name": "com.slack.api.model.block.element.RichTextSectionElement$Emoji", "allDeclaredFields": true, "allDeclaredConstructors" : true, "allPublicConstructors" : true, @@ -103,7 +130,7 @@ "queryAllDeclaredMethods": true }, { - "name": "com.slack.api.model.block.element.RichTextSectionElement.User", + "name": "com.slack.api.model.block.element.RichTextSectionElement$User", "allDeclaredFields": true, "allDeclaredConstructors" : true, "allPublicConstructors" : true, @@ -112,7 +139,7 @@ "queryAllDeclaredMethods": true }, { - "name": "com.slack.api.model.block.element.RichTextSectionElement.Channel", + "name": "com.slack.api.model.block.element.RichTextSectionElement$Channel", "allDeclaredFields": true, "allDeclaredConstructors" : true, "allPublicConstructors" : true, @@ -121,7 +148,7 @@ "queryAllDeclaredMethods": true }, { - "name": "com.slack.api.model.block.element.RichTextSectionElement.Date", + "name": "com.slack.api.model.block.element.RichTextSectionElement$Date", "allDeclaredFields": true, "allDeclaredConstructors" : true, "allPublicConstructors" : true, @@ -130,7 +157,7 @@ "queryAllDeclaredMethods": true }, { - "name": "com.slack.api.model.block.element.RichTextSectionElement.Link", + "name": "com.slack.api.model.block.element.RichTextSectionElement$Link", "allDeclaredFields": true, "allDeclaredConstructors" : true, "allPublicConstructors" : true, @@ -139,7 +166,7 @@ "queryAllDeclaredMethods": true }, { - "name": "com.slack.api.model.block.element.RichTextSectionElement.Text", + "name": "com.slack.api.model.block.element.RichTextSectionElement$Text", "allDeclaredFields": true, "allDeclaredConstructors" : true, "allPublicConstructors" : true, @@ -183,6 +210,15 @@ "queryAllDeclaredConstructors": true, "queryAllDeclaredMethods": true }, + { + "name": "com.slack.api.methods.response.conversations.ConversationsHistoryResponse", + "allDeclaredFields": true, + "allDeclaredConstructors" : true, + "allPublicConstructors" : true, + "allPublicMethods": true, + "queryAllDeclaredConstructors": true, + "queryAllDeclaredMethods": true + }, { "name": "com.slack.api.methods.response.emoji.EmojiListResponse", "allDeclaredFields": true, diff --git a/server/src/main/resources/application-local.yml b/server/src/main/resources/application-local.yml index c474d1f1ee..b3ec32e0ff 100755 --- a/server/src/main/resources/application-local.yml +++ b/server/src/main/resources/application-local.yml @@ -1,4 +1,7 @@ micronaut: + test: + resources: + port: 8081 server: cors: enabled: true diff --git a/settings.gradle b/settings.gradle index 116e75ae76..ae01a893a4 100644 --- a/settings.gradle +++ b/settings.gradle @@ -2,10 +2,10 @@ pluginManagement { repositories { google() maven { - url "https://repo1.maven.org/maven2" + url="https://repo1.maven.org/maven2" } maven { - url "https://plugins.gradle.org/m2/" + url="https://plugins.gradle.org/m2/" } } }