halo/application/build.gradle

248 lines
7.6 KiB
Groovy

import de.undercouch.gradle.tasks.download.Download
import org.gradle.crypto.checksum.Checksum
import org.springframework.boot.gradle.tasks.bundling.BootBuildImage
import org.springframework.boot.gradle.tasks.bundling.BootJar
import org.springframework.util.StringUtils
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)
alias(libs.plugins.grgit)
}
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')
dependsOn ':ui:doBuild'
}
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
}
}
def name = 'halo'
def branchName = grgit.branch.current().name.replaceAll("/", "-")
def tagName = "${project.version}-cnb"
def isRelease = Objects.equals(project.findProperty('release'), 'true')
if (!isRelease) {
name = 'halo-dev'
tagName = "sha-${grgit.head().abbreviatedId}-cnb"
}
tasks.register('publishToGhcr', BootBuildImage) {
group = 'publishing'
description = 'Build and publish the Docker image to GitHub Container Registry.'
imageName = "ghcr.io/halo-dev/${name}:${tagName}"
publish = StringUtils.hasText(System.getenv('GHCR_TOKEN'))
if (!isRelease) {
tags = ["ghcr.io/halo-dev/${name}:${branchName}-cnb".toString()]
}
docker {
publishRegistry {
username = System.getenv('GHCR_USERNAME')
password = System.getenv('GHCR_TOKEN')
}
}
archiveFile = tasks.named('bootJar', BootJar).get().archiveFile
}
tasks.register('publishToDockerHub', BootBuildImage) {
group = 'publishing'
description = 'Build and publish the Docker image to Docker Hub.'
imageName = "halohub/${name}:${tagName}"
publish = StringUtils.hasText(System.getenv('DOCKER_TOKEN'))
if (!isRelease) {
tags = ["halohub/${name}:${branchName}-cnb".toString()]
}
docker {
publishRegistry {
username = System.getenv("DOCKER_USERNAME")
password = System.getenv("DOCKER_TOKEN")
}
}
archiveFile = tasks.named('bootJar', BootJar).get().archiveFile
}
tasks.register('publishToAllRegistries') {
group = 'publishing'
description = 'Build and publish the Docker image to all configured registries.'
dependsOn tasks.named('publishToGhcr'), tasks.named('publishToDockerHub')
}