-
-
Notifications
You must be signed in to change notification settings - Fork 41
/
Setup.kt
61 lines (48 loc) · 2.05 KB
/
Setup.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package com.supercilex.robotscouter.build.tasks
import child
import com.supercilex.robotscouter.build.internal.isRelease
import com.supercilex.robotscouter.build.internal.orNull
import com.supercilex.robotscouter.build.internal.secrets
import com.supercilex.robotscouter.build.internal.shell
import org.gradle.api.DefaultTask
import org.gradle.api.tasks.TaskAction
open class Setup : DefaultTask() {
@TaskAction
fun setup() {
extractSecrets()
if (isRelease) prepForReleaseBuild()
}
private fun extractSecrets() {
var success = extractRawSecrets()
if (!success) success = extractEncryptedSecrets()
if (!success) success = extractDummies()
check(success) { "Project file extraction failed." }
}
private fun extractRawSecrets(): Boolean {
val secrets = project.file("secrets.tar").orNull() ?: return false
shell("tar -xvf ${secrets.name}")
return true
}
private fun extractEncryptedSecrets(): Boolean {
val secrets = project.file("secrets.tar.enc").orNull() ?: return false
val key = System.getenv("encrypted_c4fd8e842577_key") ?: return false
val iv = System.getenv("encrypted_c4fd8e842577_iv") ?: return false
shell("openssl aes-256-cbc -K $key -iv $iv -in ${secrets.name} -out ${secrets.nameWithoutExtension} -d",
false)
return extractRawSecrets()
}
private fun extractDummies(): Boolean {
check(!isRelease) { "Cannot use dummies for release builds." }
val dummies = project.file("ci-dummies").listFiles() ?: return false
for (dummy in dummies) {
val dest = secrets.first { it.name == dummy.name }
if (!dest.exists()) dummy.copyTo(dest)
}
return true
}
private fun prepForReleaseBuild() {
shell("echo y | \${ANDROID_HOME}tools/bin/sdkmanager --channel=3 \"build-tools;\${BUILD_TOOLS_VERSION}\"")
shell("npm install -gq firebase-tools@4.2.1")
shell("npm install -q") { directory(project.child("functions").projectDir) }
}
}