import de.undercouch.gradle.tasks.download.Download import de.undercouch.gradle.tasks.download.Verify buildscript { repositories { mavenCentral() } } plugins { id 'de.undercouch.download' version '3.1.1' id 'nebula.ospackage' version '3.5.0' } ext { sshKeyfile = new File(System.getProperty('user.home'), '.ssh/id_rsa') sshKnownHosts = new File(System.getProperty('user.home'), '.ssh/known_hosts') sshUser = 'yvesf' sshHost = 'xapek.org' sshTargetDir = 'public_html/public/debian/files' sshReindexCommand = 'cd public_html/public/debian && make' } final getGitHash = { File file -> final hashStdOut = new ByteArrayOutputStream() exec { commandLine "git", "log", "-n", "1", "--format=format:%h", file.path standardOutput = hashStdOut } return hashStdOut.toString().trim() } allprojects { configurations { sshAntTask } repositories { mavenLocal() mavenCentral() } dependencies { sshAntTask 'org.apache.ant:ant-jsch:1.9.2' } } final reindex = tasks.create('reindex') reindex.doLast { ant.taskdef( name: 'antSsh', classname: 'org.apache.tools.ant.taskdefs.optional.ssh.SSHExec', classpath: configurations.sshAntTask.asPath) ant.antSsh( host: sshHost, username: sshUser, keyfile: file(sshKeyfile), knownhosts: file(sshKnownHosts), command: sshReindexCommand, verbose: true) } subprojects { group 'org.xapek.yvesf.debian' apply plugin: 'nebula.ospackage' ant.taskdef( name: 'antScp', classname: 'org.apache.tools.ant.taskdefs.optional.ssh.Scp', classpath: configurations.sshAntTask.asPath) ospackage { user = 'root' } // meta task final download = tasks.create('download') ext.makeDownloadTask = { Map params -> final url = params.url final basename = url.substring(url.lastIndexOf("/") + 1) .grep { c -> c == '.' || Character.isAlphabetic((int) (c as char)) || Character.isDigit((int) (c as char)) } .join('') final taskname = params.name ?: basename final dest = new File(buildDir, "download_${basename}") dest.parentFile.mkdirs() final downloadTask = tasks.create(name: "download_${taskname}", type: Download) downloadTask.src url downloadTask.dest dest downloadTask.overwrite false final verifyTask = tasks.create(name: "verify_${taskname}", type: Verify) verifyTask.src downloadTask.dest verifyTask.algorithm 'SHA-256' verifyTask.checksum params.sha256 verifyTask.onlyIf { // only verify if download was executed !downloadTask.state.skipped } downloadTask.finalizedBy(verifyTask) download.dependsOn(downloadTask) return downloadTask } final buildDeb = project.getTasks().getByName('buildDeb') final upload = tasks.create('upload') upload.doLast { ant.antScp( file: buildDeb.archivePath, todir: "${sshUser}@${sshHost}:${sshTargetDir}", keyfile: file(sshKeyfile), knownhosts: file(sshKnownHosts), verbose: true) } upload.group = 'build' upload.dependsOn(buildDeb) project.afterEvaluate { ospackage.version = project.version ospackage.release = "${getGitHash(project.projectDir)}" } final activatorExtension = [ env : [:], bin : [:], ] project.extensions.add('activator', activatorExtension) final activatorTask = task('activator') final activatorDir = new File(project.buildDir, 'activator') activatorTask.doLast { activatorExtension.bin.each { entry -> final starter = new File(activatorDir, "bin/${entry.key}") starter.parentFile.mkdirs() starter.withPrintWriter { it.append '#!/bin/sh\n' it.append "${entry.value} \$*" } } activatorExtension.env.each { entry -> final envFile = new File(activatorDir, "env/${entry.key}") envFile.parentFile.mkdirs() envFile.write(entry.value as String) } } activatorTask.inputs.property('extension', activatorExtension) activatorTask.onlyIf { !(activatorExtension.env.isEmpty() && activatorExtension.bin.isEmpty()) } project.afterEvaluate { project.extensions.getByName('ospackage').from(new File(activatorDir, 'env')) { into("/opt/activator/${project.name}/env") fileMode = 0444 } activatorExtension.env.each { activatorTask.outputs.file(new File(activatorDir, "env/${it.key}")) } activatorExtension.bin.each { activatorTask.outputs.file(new File(activatorDir, "bin/${it.key}")) } project.extensions.getByName('ospackage').from(new File(activatorDir, 'bin')) { into("/opt/activator/${project.name}/bin") fileMode = 0555 } } tasks.getByName('buildDeb').dependsOn(activatorTask) tasks.getByName('buildRpm').dependsOn(activatorTask) }