Files
ma1sd/build.gradle
Anatoliy Sablin ae5864cd91 Bump dependencies.
2021-04-16 21:48:19 +03:00

311 lines
8.5 KiB
Groovy

/*
* ma1sd - Matrix Identity Server Daemon
* Copyright (C) 2017 Kamax Sarl
*
* https://www.kamax.io/
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
import java.util.regex.Pattern
apply plugin: 'java-library'
apply plugin: 'application'
apply plugin: 'com.github.johnrengelman.shadow'
apply plugin: 'idea'
apply plugin: 'com.github.ben-manes.versions'
def confFileName = "ma1sd.example.yaml"
def distDir = "${project.buildDir}/dist"
def debBinPath = "/usr/lib/ma1sd"
def debConfPath = "/etc/ma1sd"
def debDataPath = "/var/lib/ma1sd"
def debSystemdPath = "/etc/systemd/system"
def debConfFileName = confFileName
def debStartScriptFilename = "ma1sd"
def debBuildBasePath = "${project.buildDir}/tmp/debian"
def debBuildDebianPath = "${debBuildBasePath}/DEBIAN"
def debBuildBinPath = "${debBuildBasePath}${debBinPath}"
def debBuildConfPath = "${debBuildBasePath}${debConfPath}"
def debBuildDataPath = "${debBuildBasePath}${debDataPath}"
def debBuildSystemdPath = "${debBuildBasePath}${debSystemdPath}"
def dockerImageName = "ma1uta/ma1sd"
def dockerImageTag = "${dockerImageName}:${ma1sdVersion()}"
group = 'io.kamax'
mainClassName = 'io.kamax.mxisd.MxisdStandaloneExec'
sourceCompatibility = '1.8'
targetCompatibility = '1.8'
String ma1sdVersion() {
def versionPattern = Pattern.compile("v(\\d+\\.)?(\\d+\\.)?(\\d+)(-.*)?")
String version = System.getenv('MA1SD_BUILD_VERSION')
if (version == null || version.size() == 0) {
version = gitVersion()
}
return versionPattern.matcher(version).matches() ? version.substring(1) : version
}
String gitVersion() {
ByteArrayOutputStream out = new ByteArrayOutputStream()
exec {
commandLine = ['git', 'describe', '--tags', '--always', '--dirty']
standardOutput = out
}
return out.toString().replace(System.lineSeparator(), '')
}
buildscript {
repositories {
gradlePluginPortal()
mavenCentral()
}
dependencies {
classpath 'com.github.jengelman.gradle.plugins:shadow:6.1.0'
classpath 'com.github.ben-manes:gradle-versions-plugin:0.38.0'
}
}
repositories {
mavenCentral()
}
dependencies {
// Logging
api 'org.slf4j:slf4j-simple:1.7.25'
// Easy file management
api 'commons-io:commons-io:2.8.0'
// Config management
api 'org.yaml:snakeyaml:1.28'
// Dependencies from old Matrix-java-sdk
api 'org.apache.commons:commons-lang3:3.12.0'
api 'com.squareup.okhttp3:okhttp:4.2.2'
api 'commons-codec:commons-codec:1.15'
// ORMLite
api 'com.j256.ormlite:ormlite-jdbc:5.3'
// ed25519 handling
api 'net.i2p.crypto:eddsa:0.3.0'
// LDAP connector
api 'org.apache.directory.api:api-all:1.0.3'
// DNS lookups
api 'dnsjava:dnsjava:2.1.9'
// HTTP connections
api 'org.apache.httpcomponents:httpclient:4.5.13'
// Phone numbers validation
api 'com.googlecode.libphonenumber:libphonenumber:8.12.21'
// E-mail sending
api 'javax.mail:javax.mail-api:1.6.2'
api 'com.sun.mail:javax.mail:1.6.2'
// Google Firebase Authentication backend
api 'com.google.firebase:firebase-admin:5.3.0'
// Connection Pool
api 'com.mchange:c3p0:0.9.5.5'
// SQLite
api 'org.xerial:sqlite-jdbc:3.34.0'
// PostgreSQL
api 'org.postgresql:postgresql:42.2.19'
// MariaDB/MySQL
api 'org.mariadb.jdbc:mariadb-java-client:2.7.2'
// UNIX sockets
api 'com.kohlschutter.junixsocket:junixsocket-core:2.3.3'
// Twilio SDK for SMS
api 'com.twilio.sdk:twilio:7.45.0'
// SendGrid SDK to send emails from GCE
api 'com.sendgrid:sendgrid-java:2.2.2'
// ZT-Exec for exec identity store
api 'org.zeroturnaround:zt-exec:1.12'
// HTTP server
api 'io.undertow:undertow-core:2.2.7.Final'
// Command parser for AS interface
api 'commons-cli:commons-cli:1.4'
testImplementation 'junit:junit:4.13.2'
testImplementation 'com.github.tomakehurst:wiremock:2.27.2'
testImplementation 'com.unboundid:unboundid-ldapsdk:4.0.12'
testImplementation 'com.icegreen:greenmail:1.5.11'
}
jar {
manifest {
attributes(
'Implementation-Version': ma1sdVersion()
)
}
}
shadowJar {
baseName = project.name
classifier = null
version = null
}
task debBuild(dependsOn: shadowJar) {
doLast {
String debVersion = ma1sdVersion()
println "Version for package: ${debVersion}"
mkdir distDir
mkdir debBuildBasePath
mkdir debBuildDebianPath
mkdir debBuildBinPath
mkdir debBuildConfPath
mkdir debBuildDataPath
mkdir debBuildSystemdPath
copy {
from "${project.buildDir}/libs/ma1sd.jar"
into debBuildBinPath
}
copy {
from "${project.file("src/script/" + debStartScriptFilename)}"
into debBuildBinPath
}
copy {
from(project.file(confFileName)) {
rename confFileName, debConfFileName
}
into debBuildConfPath
}
ant.replaceregexp( // FIXME adapt to new config format
file: "${debBuildConfPath}/${debConfFileName}",
match: "key:\\R path:(.*)",
replace: "key:\n path: '${debDataPath}/keys'"
)
ant.replaceregexp( // FIXME adapt to new config format
file: "${debBuildConfPath}/${debConfFileName}",
match: "storage:\\R provider:\\R sqlite:\\R database:(.*)",
replace: "storage:\n provider:\n sqlite:\n database: '${debDataPath}/store.db'"
)
copy {
from project.file('src/debian')
into debBuildDebianPath
}
ant.replace(
file: "${debBuildDebianPath}/control",
token: 'Version: 0',
value: "Version: ${debVersion}"
)
ant.replace(
file: "${debBuildDebianPath}/postinst",
token: '%DEB_DATA_DIR%',
value: debDataPath
)
ant.replace(
file: "${debBuildDebianPath}/postinst",
token: '%DEB_CONF_FILE%',
value: "${debConfPath}/ma1sd.yaml"
)
ant.chmod(
file: "${debBuildDebianPath}/postinst",
perm: '0755'
)
ant.chmod(
file: "${debBuildDebianPath}/prerm",
perm: 'a+x'
)
copy {
from "${project.file('src/systemd/ma1sd.service')}"
into debBuildSystemdPath
}
exec {
commandLine(
'fakeroot',
'dpkg-deb',
'-b',
debBuildBasePath,
"${project.buildDir}/dist"
)
}
}
}
task dockerBuild(type: Exec) {
commandLine 'docker', 'build', '-t', dockerImageTag, project.rootDir
doLast {
exec {
commandLine 'docker', 'tag', dockerImageTag, "${dockerImageName}:latest-dev"
}
}
}
task dockerBuildX(type: Exec, dependsOn: shadowJar) {
commandLine 'docker', 'buildx', 'build', '--push', '--platform', 'linux/arm64,linux/amd64,linux/arm/v7', '-t', dockerImageTag , project.rootDir
doLast {
exec {
commandLine 'docker', 'buildx', 'build', '--push', '--platform', 'linux/arm64,linux/amd64,linux/arm/v7', '-t', "${dockerImageName}:latest-dev", project.rootDir
}
}
}
task dockerPush(type: Exec) {
commandLine 'docker', 'push', dockerImageTag
doLast {
exec {
commandLine 'docker', 'push', "${dockerImageName}:latest-dev"
}
}
}
task dockerPushX(type: Exec) {
commandLine 'docker', 'push', dockerImageTag
doLast {
exec {
commandLine 'docker', 'push', "${dockerImageName}:latest-dev"
commandLine 'docker', 'push', "${dockerImageName}:latest-amd64-dev"
commandLine 'docker', 'push', "${dockerImageName}:latest-arm64-dev"
}
}
}