Skip to content

Instantly share code, notes, and snippets.

@ieugen
Last active March 6, 2016 08:57
Show Gist options
  • Save ieugen/95832f0e5aabea3bda92 to your computer and use it in GitHub Desktop.
Save ieugen/95832f0e5aabea3bda92 to your computer and use it in GitHub Desktop.
My gradle recipe to build and deploy static websites with Jbake
plugins {
id 'org.ajoberstar.github-pages' version '1.4.2'
}
githubPages {
repoUri = 'git@github.com:ieugen/ieugen.ro.git'
pages {
from 'output'
}
}
task jbake(type: Exec){
inputs.files files('content', 'templates')
outputs.dir 'output'
workingDir './'
commandLine 'jbake'
}
task installBowerComponents(type: Exec){
inputs.file 'bower.json'
outputs.dir 'bower_components'
workingDir './'
commandLine 'bower','install'
}
task copyBower(type: Copy, dependsOn: 'installBowerComponents'){
inputs.dir 'bower_components'
outputs.dir 'output/bower_components'
from 'bower_components'
into 'output/bower_components'
}
task copyAssets(type: Copy){
from 'assets'
into 'output'
}
task bake(dependsOn: ['jbake', 'copyBower', 'copyAssets'])
publishGhPages.dependsOn 'clean', 'bake'
task clean(type: Delete) {
delete "output"
}
buildscript {
dependencies {
classpath 'com.jcraft:jsch:0.1.53'
classpath 'com.jcraft:jsch.agentproxy.connector-factory:0.0.9'
classpath 'com.jcraft:jsch.agentproxy.jsch:0.0.9'
}
}
plugins {
id "com.moowork.node" version "0.11"
id 'org.hidetake.ssh' version '1.3.0'
id 'org.ajoberstar.release-base' version '1.4.2'
id 'distribution'
}
import org.ajoberstar.grgit.Grgit
import org.ajoberstar.gradle.git.release.opinion.Strategies
release {
// need to specify the repository to interact with
grgit = Grgit.open(project.file('.'))
defaultVersionStrategy = Strategies.DEVELOPMENT
}
node {
version = '5.7.1'
npmVersion = '3.6.0'
download = true
}
task npmCacheConfig(type: NpmTask) {
description = "Configure the NPM cache"
def npmCacheDir = "${gradle.getGradleUserHomeDir()}/caches/npm"
args = ['config', 'set', 'cache', npmCacheDir]
}
task npmPackages(type: NpmTask, dependsOn: npmCacheConfig) {
description = "Install Node.js packages"
args = ['install']
}
task bowerInstall(type: NodeTask) {
dependsOn npmPackages
script = file("node_modules/bower/bin/bower")
args = ["--config.storage.cache=${gradle.getGradleUserHomeDir()}/caches/bower/cache",
"--config.storage.packages=${gradle.getGradleUserHomeDir()}/caches/bower/packages",
"--config.storage.registry=${gradle.getGradleUserHomeDir()}/caches/bower/registry",
'install']
}
task jbake(type: Exec){
inputs.files files('content', 'templates')
outputs.dir 'output'
workingDir './'
commandLine 'jbake'
}
task copyBower(type: Copy, dependsOn: 'bowerInstall'){
inputs.dir 'bower_components'
outputs.dir 'output/bower_components'
from 'bower_components'
into 'output/bower_components'
}
task copyAssets(type: Copy){
from 'assets'
into 'output'
}
task build(dependsOn: ['jbake', 'copyBower', 'copyAssets'])
task clean {
delete "output"
}
distZip.enabled = false
distTar {
dependsOn build
compression Compression.GZIP
extension 'tar.gz'
from 'output'
}
ssh.settings {
knownHosts = allowAnyHosts
}
remotes {
def knownHosts = "${System.getProperty("user.home")}/.ssh/known_hosts"
def sshKey = "${System.getProperty("user.home")}/.ssh/id_rsa"
webServer {
host = 'netdava.com'
user = "${System.getProperty('user.name')}"
agent = true
identity = file(sshKey)
}
}
task upload(dependsOn: distTar) << {
ssh.run {
session(remotes.webServer) {
put distTar.outputs.files.singleFile, '/tmp'
}
}
}
def targz = distTar.outputs.files.singleFile.name
def deployName = targz.minus('.tar.gz')
println targz
println deployName
task unpack << {
ssh.run {
session(remotes.webServer) {
execute "mkdir -p /tmp/${deployName}"
execute "tar -xf /tmp/${targz} -C /tmp/${deployName}"
execute "rsync --remove-source-files -rlv --chown=:www-data --chmod=g=rwX /tmp/${deployName}/ /var/www/netdava.com/"
execute "rm -rf /tmp/${targz} /tmp/${deployName}"
}
}
}
upload.mustRunAfter build
unpack.mustRunAfter upload
task deploy(dependsOn: ['build', 'upload', 'unpack'])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment