Chakru 51863325a5
build: use versioning in gradle consistent with ci (#13259)
Enable use of gradle for all image builds for publishing, eliminating the per-image build action in docker-unified.yml that duplicated what was in gradle but used slightly different mechanisms to determine what is the tag. Enabled gradle build to consume tags provided by the workflow and produce tags same as earlier.

Use bake matrix builds to build slim/full versions of datahub-ingestion, datahub-actions.

Publish images and scan relies on gradle to get the list of images, via depot.

Image publish and scans run once a day on schedule or on manual triggers only.
Pending work: Separate the publish and scans into a separate workflow that runs on a schedule and could also run other tests.
2025-04-24 23:00:03 +05:30

135 lines
4.7 KiB
Groovy

plugins {
id 'org.springframework.boot'
id 'java'
}
apply from: '../../gradle/coverage/java-coverage.gradle'
apply from: "../../gradle/versioning/versioning.gradle"
apply from: "../../gradle/docker/docker.gradle"
ext {
docker_repo = 'datahub-gms'
}
ext.apiProject = project(':metadata-service:restli-api')
dependencies {
implementation project(':metadata-service:factories')
implementation project(':metadata-service:auth-filter')
implementation project(':metadata-service:servlet')
implementation project(':metadata-service:auth-servlet-impl')
implementation project(':metadata-service:graphql-servlet-impl')
implementation project(':metadata-service:openapi-servlet')
implementation project(':metadata-service:openapi-entity-servlet')
implementation project(':metadata-service:openapi-analytics-servlet')
implementation project(':metadata-service:schema-registry-servlet')
implementation project(':metadata-service:iceberg-catalog')
implementation 'org.apache.iceberg:iceberg-core:1.6.1'
runtimeOnly project(':metadata-jobs:mce-consumer')
runtimeOnly project(':metadata-jobs:mae-consumer')
runtimeOnly project(':metadata-jobs:pe-consumer')
runtimeOnly externalDependency.awsSecretsManagerJdbc
runtimeOnly externalDependency.h2
runtimeOnly externalDependency.mariadbConnector
runtimeOnly externalDependency.mysqlConnector
runtimeOnly externalDependency.postgresql
implementation(externalDependency.springBootStarterWeb) {
exclude module: "spring-boot-starter-tomcat"
}
implementation(externalDependency.springBootStarterJetty) {
exclude group: 'org.apache.tomcat.embed', module: 'tomcat-embed-el'
}
implementation(externalDependency.springBootStarterValidation) {
exclude group: 'org.apache.tomcat.embed', module: 'tomcat-embed-el'
}
implementation externalDependency.jettyJmx
implementation externalDependency.springWebMVC
implementation externalDependency.springBootAutoconfigure
implementation externalDependency.servletApi
runtimeOnly externalDependency.opentelemetryExporter
runtimeOnly externalDependency.openTelemetryExporterLogging
runtimeOnly externalDependency.openTelemetryExporterCommon
implementation spec.product.pegasus.restliDocgen
implementation spec.product.pegasus.restliSpringBridge
compileOnly externalDependency.lombok
annotationProcessor externalDependency.lombok
runtimeOnly externalDependency.log4jCore
runtimeOnly externalDependency.log4j2Api
runtimeOnly externalDependency.logbackClassic
implementation externalDependency.awsMskIamAuth
testRuntimeOnly externalDependency.logbackClassic
implementation externalDependency.charle
testImplementation externalDependency.testng
testImplementation externalDependency.springBootTest
testRuntimeOnly externalDependency.logbackClassic
}
configurations.all{
exclude group: "com.charleskorn.kaml", module:"kaml"
}
tasks.register('run') {
group = 'application' // Add a group for better organization
description = 'Runs the application with Gretty'
dependsOn 'bootRun' // spring task
}
bootJar {
// backwards compatible with old war archive name
archiveFileName = 'war.war'
mainClass = 'com.linkedin.gms.GMSApplication'
}
bootRun {
environment "SCHEMA_REGISTRY_TYPE", "INTERNAL"
environment "KAFKA_SCHEMAREGISTRY_URL", "http://localhost:8080/schema-registry/api"
}
docker {
dependsOn bootJar
name "${docker_registry}/${docker_repo}:${versionTag}"
dockerfile file("${rootProject.projectDir}/docker/${docker_repo}/Dockerfile")
files bootJar.outputs.files
files fileTree(rootProject.projectDir) {
include '.dockerignore'
include 'docker/monitoring/*'
include "docker/${docker_repo}/*"
include 'metadata-models/src/main/resources/*'
}.exclude {
i -> (!i.file.name.endsWith(".dockerignore") && i.file.isHidden())
}
additionalTag("Debug", "${docker_registry}/${docker_repo}:debug")
// Add build args if they are defined (needed for some CI or enterprise environments)
def dockerBuildArgs = [:]
if (project.hasProperty('alpineApkRepositoryUrl')) {
dockerBuildArgs.ALPINE_REPO_URL = project.getProperty('alpineApkRepositoryUrl')
}
if (project.hasProperty('githubMirrorUrl')) {
dockerBuildArgs.GITHUB_REPO_URL = project.getProperty('githubMirrorUrl')
}
if (project.hasProperty('mavenCentralRepositoryUrl')) {
dockerBuildArgs.MAVEN_CENTRAL_REPO_URL = project.getProperty('mavenCentralRepositoryUrl')
}
if (dockerBuildArgs.size() > 0) {
buildArgs(dockerBuildArgs)
}
debugBuildArgs = [APP_ENV: 'dev']
}
test {
jacoco {
// This contains quickstart tested code for jetty startup
excludes = ["com.linkedin.gms.CommonApplicationConfig",
"com.linkedin.gms.ServletConfig",
"com.linkedin.gms.GMSApplication"]
}
}