blob: 5ea75ed62442342096fbed59b6569bd1b5f713da [file]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
plugins {
id 'java'
id 'distribution'
id 'signing'
alias(libs.plugins.nebula)
alias(libs.plugins.checksum)
}
apply from: "$rootDir/buildscripts/utils.gradle"
java {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
import org.apache.tools.ant.filters.FixCrLfFilter
import org.apache.tools.ant.filters.ReplaceTokens
import org.gradle.crypto.checksum.Checksum
configurations {
cliArtifacts
cliScripts
}
dependencies {
cliArtifacts(project(':ignite-cli'))
cliScripts(project(path: ':ignite-cli', configuration: 'cliScripts'))
}
// Common for ZIP and RPM/DEB
def tokens = [
PRODUCT_NAME : 'ignite3-cli',
PRODUCT_DISPLAY_NAME: 'Apache Ignite CLI',
LOG_DIR : '${HOME}/.ignite3',
APP_JAR : "${project(':ignite-cli').name}-${project(':ignite-cli').version}.jar".toString(),
SETUP_JAVA_FILE_NAME: 'setup-java.sh',
MAIN_CLASS : 'org.apache.ignite.internal.cli.Main',
]
def createChecksums = tasks.register('createChecksums', Checksum) {
inputFiles.from distZip
checksumAlgorithm = Checksum.Algorithm.SHA512
}
// ZIP packaging
def zipTokens = tokens + [
LIB_DIR : '$(dirname "$0")/../lib',
]
def replaceScriptVarsZip = tasks.register('replaceScriptVarsZip', Copy) {
from 'start.sh'
filter(ReplaceTokens, tokens: zipTokens)
filter(FixCrLfFilter, eol: FixCrLfFilter.CrLf.newInstance("lf"))
into "$buildDir/zip"
rename {
'ignite3'
}
}
// task that generates start script for cli
def cliStartScript = tasks.register('cliStartScript', CreateStartScripts) {
// will be passed to exec "java ... <mainClassName>"
mainClass = "org.apache.ignite.internal.cli.Main"
// forms a classpath string that will be passed to exec "java -cp <classpath> .."
// it is expected to locate the "lib" dir together with "bin"
classpath = files(new File("../lib/*"))
outputDir = file "$buildDir/scripts"
applicationName = 'ignite3'
defaultJvmOpts += [
'--add-opens=java.base/java.lang=ALL-UNNAMED',
'-Xmx256m',
'-XX:TieredStopAtLevel=1',
'-XX:+UseSerialGC'
]
}
def windowsCliStartScript = tasks.register('windowsCliStartScript', Copy) {
from cliStartScript
include '*.bat'
into "$buildDir/windows"
}
distributions {
main {
distributionBaseName = 'ignite3-cli'
contents {
into('') {
from "$rootDir/LICENSE"
from "$rootDir/NOTICE"
from "$rootDir/assembly/README.md"
}
into('bin') {
duplicatesStrategy= DuplicatesStrategy.EXCLUDE
from configurations.cliScripts
from replaceScriptVarsZip
from windowsCliStartScript
fileMode 0755
}
into('lib') {
from configurations.cliArtifacts
from "$rootDir/packaging/common/linux/setup-java.sh"
}
}
}
}
// Expose zip artifacts to be consumed by others
configurations {
cliZip {
canBeConsumed = true
canBeResolved = false
}
}
artifacts {
cliZip(distZip)
}
// Explicitly create task so that the resulting artifact is not added to the configuration
def signCliZip = tasks.register('signCliZip', Sign) {
sign configurations.cliZip
}
// DEB/RPM packaging
def linuxTokens = tokens + [
INSTALL_DIR : '/usr/bin',
LIB_DIR : '/usr/lib/ignite3'
]
def replaceScriptVarsLinux = tasks.register('replaceScriptVarsLinux', Copy) {
from 'start.sh'
from 'postInstall.sh'
filter(ReplaceTokens, tokens: linuxTokens)
filter(FixCrLfFilter, eol: FixCrLfFilter.CrLf.newInstance("lf"))
into "$buildDir/linux"
}
buildDeb {
dependsOn replaceScriptVarsLinux
signingKeyId = project.findProperty("signing.keyId")
signingKeyPassphrase = project.findProperty("signing.password")
signingKeyRingFile = project.hasProperty("signing.secretKeyRingFile") ? file(project.property("signing.secretKeyRingFile")) : null
into("/usr/share/bash-completion/completions/") {
from configurations.cliScripts
fileMode 0755
}
}
buildRpm {
dependsOn replaceScriptVarsLinux
into("/etc/bash_completion.d/") {
from configurations.cliScripts
fileMode 0755
}
}
ospackage {
license "ASL 2.0"
packageName linuxTokens.PRODUCT_NAME
packageGroup "CLI"
url "https://ignite.apache.org"
packageDescription "This package will install Apache Ignite CLI"
os LINUX
user 'root'
release getCommitNum()
into(linuxTokens.INSTALL_DIR) {
from "$buildDir/linux/start.sh"
fileMode 0755
rename {
'ignite3'
}
}
into(linuxTokens.LIB_DIR) {
from configurations.cliArtifacts
from "$rootDir/packaging/common/linux/setup-java.sh"
}
postInstall file("$buildDir/linux/postInstall.sh")
}
configurations {
cliRelease {
canBeConsumed = true
canBeResolved = false
}
}
if (project.hasProperty('prepareRelease')) {
artifacts {
cliRelease(file("$buildDir/distributions")) {
builtBy signCliZip, buildDeb, buildRpm
}
cliRelease(file("$buildDir/checksums")) {
builtBy createChecksums
}
}
}