import java.nio.file.Paths import groovy.json.JsonOutput import groovy.json.JsonSlurper import org.redline_rpm.header.Flags plugins { id "io.spinnaker.artifactregistry-publish" version "$spinnakerGradleVersion" id "nebula.node" version "1.3.1" } group = "com.netflix.spinnaker.deck" apply plugin: "nebula.ospackage" node { // Pulls node and npm versions from package.json. def packageSlurper = new JsonSlurper() def packageJson = packageSlurper.parse file('package.json') version = packageJson.engines.node.replaceAll(/[^\d\.]/, '') npmVersion = packageJson.engines.npm.replaceAll(/[^\d\.]/, '') yarnVersion = packageJson.engines.yarn.replaceAll(/[^\d\.]/, '') // Enabled the automatic download. False is the default (for now). download = true } task modules(type: YarnTask) { dependsOn "yarn" yarnCommand = ["modules"] } task eslintPluginCompile(type: YarnTask) { dependsOn "modules" workingDir = file(Paths.get("packages", "eslint-plugin")) yarnCommand = ["tsc"] } task eslintPluginTest(type: YarnTask) { dependsOn "eslintPluginCompile" workingDir = file(Paths.get("packages", "eslint-plugin")) yarnCommand = ["test"] } project.tasks.register('eslintPlugin') { dependsOn 'eslintPluginCompile' dependsOn 'eslintPluginTest' } task lint(type: YarnTask) { dependsOn "eslintPlugin" yarnCommand = ["lint"] } task prettier(type: YarnTask) { dependsOn "eslintPlugin" dependsOn "lint" yarnCommand = ["prettier:check"] } project.tasks.register('runLinters') { dependsOn "lint" dependsOn "prettier" } task karma(type: YarnTask) { dependsOn "modules" yarnCommand = ["test"] args = ["--single-run", "--reporters", "dots"] if (project.hasProperty('skipTests')) { karma.enabled = false } } task functionalTests(type: YarnTask) { dependsOn "modules" dependsOn "karma" yarnCommand = ["functional"] if (project.hasProperty('skipTests')) { functionalTests.enabled = false } } project.tasks.register('test') { dependsOn 'karma' dependsOn 'functionalTests' } task webpack(type: YarnTask) { dependsOn "yarn" dependsOn "modules" dependsOn "runLinters" dependsOn "test" yarnCommand = ["build"] environment = [ "NODE_ENV": "production", "GATE_HOST": "spinnaker-api-prestaging.prod.netflix.net", "NODE_OPTIONS": "--max_old_space_size=8192", ] } webpack.outputs.dir file('build/webpack') task copyFavicon(type: Copy) { dependsOn "webpack" from "packages/app/icons/prod-favicon.ico" into "build/webpack" rename "prod-favicon.ico", "favicon.ico" } task generateVersionFile { doLast { 'git update-index --assume-unchanged version.json'.execute() def buildInfo = [ version: project.hasProperty('deckVersion') ? "${deckVersion}" : "n/a", created: new Date().getTime() ] def buildJson = JsonOutput.prettyPrint(JsonOutput.toJson(buildInfo)) mkdir "build/webpack" file(Paths.get("build", "webpack", "version.json")).write(buildJson) file("version.json").write(buildJson) } } yarn.dependsOn 'generateVersionFile' buildDeb.dependsOn 'copyFavicon' buildRpm.dependsOn 'webpack' build.dependsOn 'buildDeb' String toVers(String v) { int idx = v.indexOf('-') if (idx != -1) { return v.substring(0, idx) } return v } String toRelease(String v) { int idx = v.lastIndexOf('-') if (idx != -1) { return v.substring(idx + 1) } return '' } ospackage { packageName = "spinnaker-deck" version = toVers(project.version.toString()) release toRelease(project.version.toString()) into "/opt/deck/html" from "build/webpack" os = LINUX } buildRpm { requires('httpd') } buildDeb { requires('apache2', '2.4.7', Flags.GREATER | Flags.EQUAL) }