import de.undercouch.gradle.tasks.download.Download import org.gradle.crypto.checksum.Checksum plugins { id "checkstyle" id 'java' id 'idea' id 'jacoco' alias(libs.plugins.spring.boot) alias(libs.plugins.spring.dependency.management) alias(libs.plugins.git.properties) alias(libs.plugins.undercouch.download) alias(libs.plugins.lombok) alias(libs.plugins.checksum) alias(libs.plugins.springdoc.openapi) alias(libs.plugins.versions) } group = 'run.halo.app' tasks.withType(JavaCompile).configureEach { options.release = 21 options.encoding = 'UTF-8' } java { toolchain { languageVersion = JavaLanguageVersion.of(21) } } idea { module { resourceDirs += file("../ui/build/dist/") } } checkstyle { toolVersion = "9.3" showViolations = false ignoreFailures = false } repositories { mavenCentral() maven { url = 'https://repo.spring.io/milestone' } maven { url = 'https://s01.oss.sonatype.org/content/repositories/snapshots' } } configurations { compileOnly { extendsFrom annotationProcessor } } springBoot { buildInfo { properties { artifact = 'halo' name = 'halo' } } } bootJar { archiveBaseName = 'halo' manifest { attributes 'Implementation-Title': 'Halo Application', 'Implementation-Vendor': 'Halo OSS Team' } } gitProperties { dotGitDirectory = layout.settingsDirectory.dir('.git') } tasks.named('jar') { enabled = false } dependencies { implementation(project(':api')) { exclude group: 'org.thymeleaf', module: 'thymeleaf-spring6' } implementation 'org.thymeleaf:thymeleaf' // Fix https://github.com/halo-dev/halo/issues/7289 // Build from https://github.com/halo-dev/thymeleaf/commit/097a51cbaae114c87973e5de4ae9b88115976221 implementation files('libs/thymeleaf-spring6-3.1.4-rc.1+halo.2.21.6.jar') annotationProcessor platform(project(':platform:application')) annotationProcessor "org.springframework.boot:spring-boot-configuration-processor" annotationProcessor "org.springframework:spring-context-indexer" testImplementation 'org.springframework.boot:spring-boot-starter-test' testImplementation 'org.springframework.security:spring-security-test' testImplementation 'io.projectreactor:reactor-test' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' annotationProcessor 'com.github.therapi:therapi-runtime-javadoc-scribe' // webjars runtimeOnly 'org.webjars.npm:jsencrypt:3.3.2' runtimeOnly 'org.webjars.npm:normalize.css:8.0.1' } tasks.register('createChecksums', Checksum) { dependsOn tasks.named('bootJar') inputFiles.setFrom(layout.buildDirectory.files('libs')) outputDirectory = layout.buildDirectory.dir("libs") checksumAlgorithm = Checksum.Algorithm.SHA256 } tasks.register('copyUiDist', Copy) { from project(':ui').layout.buildDirectory.dir('dist') into layout.buildDirectory.dir('resources/main') configure { mustRunAfter project(':ui').tasks.named('build') } } tasks.named('processResources', ProcessResources) { dependsOn tasks.named('copyUiDist') } tasks.named('build') { dependsOn tasks.named('createChecksums') } tasks.named('test', Test) { useJUnitPlatform() maxHeapSize = '1G' finalizedBy jacocoTestReport } tasks.named('jacocoTestReport', JacocoReport) { reports { xml.required = true html.required = false } } ext.presetPluginUrls = [ 'https://github.com/halo-dev/plugin-comment-widget/releases/download/v3.0.0/plugin-comment-widget-3.0.0.jar' : 'plugin-comment-widget.jar', 'https://github.com/halo-dev/plugin-search-widget/releases/download/v1.7.0/plugin-search-widget-1.7.0.jar' : 'plugin-search-widget.jar', 'https://github.com/halo-dev/plugin-sitemap/releases/download/v1.1.2/plugin-sitemap-1.1.2.jar' : 'plugin-sitemap.jar', 'https://github.com/halo-dev/plugin-feed/releases/download/v1.5.0/plugin-feed-1.5.0.jar' : 'plugin-feed.jar', // Currently, plugin-app-store is not open source, so we need to download it from the official website. // Please see https://github.com/halo-dev/plugin-app-store/issues/55 // https://www.halo.run/store/apps/app-VYJbF 'https://www.halo.run/store/apps/app-VYJbF/releases/download/app-release-uadbam6p/assets/app-release-uadbam6p-kwbir0ge': 'appstore.jar', ] tasks.register('downloadPluginPresets', Download) { doFirst { delete 'src/main/resources/presets/plugins' } src presetPluginUrls.keySet() dest 'src/main/resources/presets/plugins' eachFile { f -> f.name = presetPluginUrls[f.sourceURL.toString()] } } openApi { outputDir = file("$rootDir/api-docs/openapi/v3_0") groupedApiMappings = [ 'http://localhost:8091/v3/api-docs/apis_aggregated.api_v1alpha1': 'aggregated.json', 'http://localhost:8091/v3/api-docs/apis_public.api_v1alpha1' : 'apis_public.api_v1alpha1.json', 'http://localhost:8091/v3/api-docs/apis_console.api_v1alpha1' : 'apis_console.api_v1alpha1.json', 'http://localhost:8091/v3/api-docs/apis_uc.api_v1alpha1' : 'apis_uc.api_v1alpha1.json', 'http://localhost:8091/v3/api-docs/apis_extension.api_v1alpha1' : 'apis_extension.api_v1alpha1.json', ] customBootRun { args = ['--server.port=8091', '--spring.profiles.active=doc', "--halo.work-dir=${layout.buildDirectory.get()}/tmp/workdir-for-generating-apidocs"] } } tasks.named('forkedSpringBootRun') { dependsOn ':api:jar' } tasks.named('generateOpenApiDocs') { outputs.upToDateWhen { false } }