mirror of
https://github.com/apple/pkl.git
synced 2026-07-13 08:33:04 +02:00
Initial commit
This commit is contained in:
@@ -0,0 +1,130 @@
|
||||
import java.security.MessageDigest
|
||||
|
||||
plugins {
|
||||
pklAllProjects
|
||||
pklKotlinLibrary
|
||||
}
|
||||
|
||||
// note: no need to publish this library
|
||||
|
||||
dependencies {
|
||||
api(libs.junitApi)
|
||||
api(libs.junitEngine)
|
||||
api(libs.junitParams)
|
||||
api(project(":pkl-commons")) // for convenience
|
||||
implementation(libs.assertj)
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Creates test packages from the `src/test/files/packages` directory.
|
||||
*
|
||||
* These packages are used by PackageServer to serve assets when running
|
||||
* LanguageSnippetTests and PackageResolversTest.
|
||||
*/
|
||||
val createTestPackages = tasks.create("createTestPackages")
|
||||
|
||||
fun toHex(hash: ByteArray): String {
|
||||
val hexDigitTable = charArrayOf('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f')
|
||||
val builder = StringBuilder(hash.size * 2)
|
||||
for (b in hash) {
|
||||
builder.append(hexDigitTable[b.toInt() shr 4 and 0xF])
|
||||
builder.append(hexDigitTable[b.toInt() and 0xF])
|
||||
}
|
||||
return builder.toString()
|
||||
}
|
||||
|
||||
fun File.computeChecksum(): String {
|
||||
val md = MessageDigest.getInstance("SHA-256")
|
||||
val hash = md.digest(readBytes())
|
||||
return toHex(hash)
|
||||
}
|
||||
|
||||
tasks.processResources {
|
||||
dependsOn(createTestPackages)
|
||||
dependsOn(generateCerts)
|
||||
}
|
||||
|
||||
val mainSourceSet by sourceSets.named("main") {
|
||||
resources {
|
||||
srcDir(buildDir.resolve("test-packages/"))
|
||||
srcDir(buildDir.resolve("keystore/"))
|
||||
}
|
||||
}
|
||||
|
||||
val sourcesJar = tasks.named("sourcesJar").get()
|
||||
|
||||
for (packageDir in file("src/main/files/packages").listFiles()!!) {
|
||||
if (!packageDir.isDirectory) continue
|
||||
val destinationDir = buildDir.resolve("test-packages/org/pkl/commons/test/packages/${packageDir.name}")
|
||||
val metadataJson = packageDir.resolve("${packageDir.name}.json")
|
||||
val packageContents = packageDir.resolve("package")
|
||||
val zipFileName = "${packageDir.name}.zip"
|
||||
val archiveFile = destinationDir.resolve(zipFileName)
|
||||
|
||||
tasks.create("zip-${packageDir.name}", Zip::class) {
|
||||
archiveFileName.set(zipFileName)
|
||||
from(packageContents)
|
||||
destinationDirectory.set(destinationDir)
|
||||
// required so that checksums are reproducible
|
||||
isPreserveFileTimestamps = false
|
||||
isReproducibleFileOrder = true
|
||||
}
|
||||
|
||||
val copyTask = tasks.create("copy-${packageDir.name}", Copy::class) {
|
||||
dependsOn("zip-${packageDir.name}")
|
||||
from(metadataJson)
|
||||
into(destinationDir)
|
||||
val shasumFile = file("$destinationDir/${packageDir.name}.json.sha256")
|
||||
outputs.file(shasumFile)
|
||||
doFirst {
|
||||
expand(mapOf("computedChecksum" to archiveFile.computeChecksum()))
|
||||
}
|
||||
doLast {
|
||||
val outputFile = file("$destinationDir").resolve("${packageDir.name}.json")
|
||||
shasumFile.writeText(outputFile.computeChecksum())
|
||||
}
|
||||
createTestPackages.dependsOn(this)
|
||||
}
|
||||
|
||||
sourcesJar.dependsOn.add(copyTask)
|
||||
}
|
||||
|
||||
val generateKeys by tasks.registering(JavaExec::class) {
|
||||
val outputFile = file("$buildDir/keystore/localhost.p12")
|
||||
outputs.file(outputFile)
|
||||
mainClass.set("sun.security.tools.keytool.Main")
|
||||
args = listOf(
|
||||
"-genkeypair",
|
||||
"-keyalg", "RSA",
|
||||
"-alias", "integ_tests",
|
||||
"-keystore", "localhost.p12",
|
||||
"-storepass", "password",
|
||||
"-dname", "CN=localhost"
|
||||
)
|
||||
workingDir = file("$buildDir/keystore/")
|
||||
onlyIf { !outputFile.exists() }
|
||||
doFirst {
|
||||
workingDir.mkdirs()
|
||||
}
|
||||
}
|
||||
|
||||
val generateCerts by tasks.registering(JavaExec::class) {
|
||||
dependsOn("generateKeys")
|
||||
val outputFile = file("$buildDir/keystore/localhost.pem")
|
||||
outputs.file(outputFile)
|
||||
mainClass.set("sun.security.tools.keytool.Main")
|
||||
args = listOf(
|
||||
"-exportcert",
|
||||
"-alias", "integ_tests",
|
||||
"-storepass", "password",
|
||||
"-keystore", "localhost.p12",
|
||||
"-rfc",
|
||||
"-file", "localhost.pem"
|
||||
)
|
||||
workingDir = file("$buildDir/keystore/")
|
||||
onlyIf { !outputFile.exists() }
|
||||
doFirst {
|
||||
workingDir.mkdirs()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user