mirror of
https://github.com/apple/pkl.git
synced 2026-01-11 22:30:54 +01:00
199 lines
4.9 KiB
Plaintext
199 lines
4.9 KiB
Plaintext
amends "@pkl.impl.ghactions/PklCI.pkl"
|
|
|
|
import "@gha/Workflow.pkl"
|
|
|
|
import "jobs/BuildJavaExecutableJob.pkl"
|
|
import "jobs/BuildNativeJob.pkl"
|
|
import "jobs/DeployJob.pkl"
|
|
import "jobs/GithubRelease.pkl"
|
|
import "jobs/GradleJob.pkl"
|
|
import "jobs/PklJob.pkl"
|
|
import "jobs/SimpleGradleJob.pkl"
|
|
|
|
triggerDocsBuild = "both"
|
|
|
|
testReports {
|
|
junit {
|
|
"**/build/test-results/**/*.xml"
|
|
}
|
|
html {
|
|
"**/build/reports/tests/**/*"
|
|
}
|
|
excludeJobs {
|
|
"bench"
|
|
"deploy-release"
|
|
"github-release"
|
|
}
|
|
}
|
|
|
|
local baseGradleCheck: SimpleGradleJob = new {
|
|
isRelease = false
|
|
command = "check"
|
|
fetchDepth = 0
|
|
}
|
|
|
|
local gradleCheck = (baseGradleCheck) {
|
|
os = "linux"
|
|
}
|
|
|
|
local gradleCheckWindows = (baseGradleCheck) {
|
|
os = "windows"
|
|
}
|
|
|
|
local typealias PklJobs = Mapping<String, PklJob>
|
|
|
|
local toWorkflowJobs: (PklJobs) -> Workflow.Jobs = (it) -> new Workflow.Jobs {
|
|
for (k, v in it) {
|
|
[k] = v.job
|
|
}
|
|
}
|
|
|
|
local gradleCheckJobs: PklJobs = new {
|
|
["gradle-check"] = gradleCheck
|
|
["gradle-check-windows"] = gradleCheckWindows
|
|
}
|
|
|
|
local buildNativeJobs: Mapping<String, BuildNativeJob> = new {
|
|
for (_dist in List("release", "snapshot")) {
|
|
for (_project in List("pkl-cli", "pkl-doc")) {
|
|
for (_arch in List("amd64", "aarch64")) {
|
|
for (_os in List("macOS", "linux")) {
|
|
["\(_project)-\(_os)-\(_arch)-\(_dist)"] {
|
|
arch = _arch
|
|
os = _os
|
|
isRelease = _dist == "release"
|
|
project = _project
|
|
}
|
|
}
|
|
}
|
|
["\(_project)-alpine-linux-amd64-\(_dist)"] {
|
|
arch = "amd64"
|
|
os = "linux"
|
|
musl = true
|
|
isRelease = _dist == "release"
|
|
project = _project
|
|
}
|
|
["\(_project)-windows-amd64-\(_dist)"] {
|
|
arch = "amd64"
|
|
os = "windows"
|
|
isRelease = _dist == "release"
|
|
project = _project
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
local buildNativeSnapshots = buildNativeJobs.toMap().filter((key, _) -> key.endsWith("snapshot"))
|
|
|
|
local buildNativeReleases = buildNativeJobs.toMap().filter((key, _) -> key.endsWith("release"))
|
|
|
|
local benchmarkJob: SimpleGradleJob = new { command = "bench:jmh" }
|
|
|
|
local gradleCompatibilityJob: SimpleGradleJob = new {
|
|
command = ":pkl-gradle:build :pkl-gradle:compatibilityTestReleases"
|
|
fetchDepth = 0
|
|
}
|
|
|
|
local buildJavaExecutableJob: BuildJavaExecutableJob = new {
|
|
fetchDepth = 0
|
|
}
|
|
|
|
local buildAndTestJobs: PklJobs = new {
|
|
...gradleCheckJobs
|
|
["bench"] = benchmarkJob
|
|
["gradle-compatibility"] = gradleCompatibilityJob
|
|
["java-executables-snapshot"] = (buildJavaExecutableJob) { isRelease = false }
|
|
...buildNativeSnapshots
|
|
}
|
|
|
|
local releaseJobs: PklJobs = new {
|
|
...gradleCheckJobs
|
|
["bench"] = benchmarkJob
|
|
["gradle-compatibility"] = gradleCompatibilityJob
|
|
["java-executables-release"] = (buildJavaExecutableJob) { isRelease = true }
|
|
...buildNativeReleases
|
|
}
|
|
|
|
// By default, just run ./gradlew check on linux.
|
|
// Trigger other checks based on GitHub PR description. Examples:
|
|
//
|
|
// * [windows] -- Test on Windows
|
|
// * [native] -- Test all native builds
|
|
// * [native-pkl-cli] -- Test all pkl-cli os/arch pairs
|
|
// * [native-pkl-cli-macos] -- Test pkl-cli on macOS
|
|
prb {
|
|
local prbJobs: Mapping<String, GradleJob> = new {
|
|
["gradle-check"] = gradleCheck
|
|
["gradle-check-windows"] = (gradleCheckWindows) {
|
|
`if` = "contains(github.event.pull_request.body, '[windows]')"
|
|
}
|
|
for (jobName, job in buildNativeSnapshots) {
|
|
[jobName] = (job) {
|
|
local tags = new Listing {
|
|
"[native]"
|
|
"[native-\(job.project)]"
|
|
"[native-\(job.project)-\(job.os)]"
|
|
"[native-\(job.project)-\(job.os)-\(job.arch)]"
|
|
"[native-\(job.project)-\(job.os)-\(job.arch)]"
|
|
when (job.musl) {
|
|
"[native-\(job.project)-alpine-\(job.os)-\(job.arch)]"
|
|
}
|
|
}
|
|
`if` =
|
|
tags
|
|
.toList()
|
|
.map((it) -> "contains(github.event.pull_request.body, '\(it)')")
|
|
.join(" || ")
|
|
}
|
|
}
|
|
}
|
|
local prbJobs2 = (prbJobs) {
|
|
[[true]] {
|
|
// better SLA when not running on nightly
|
|
nightlyMacOS = false
|
|
}
|
|
}
|
|
jobs = prbJobs2 |> toWorkflowJobs
|
|
}
|
|
|
|
build {
|
|
jobs = buildAndTestJobs |> toWorkflowJobs
|
|
}
|
|
|
|
main {
|
|
jobs =
|
|
(buildAndTestJobs) {
|
|
["deploy-snapshot"] = (
|
|
new DeployJob {
|
|
extraGradleArgs {
|
|
"--no-parallel"
|
|
}
|
|
command = "publishToSonatype"
|
|
}
|
|
) {
|
|
needs = buildAndTestJobs.keys.toListing()
|
|
}
|
|
} |> toWorkflowJobs
|
|
}
|
|
|
|
releaseBranch {
|
|
jobs = releaseJobs |> toWorkflowJobs
|
|
}
|
|
|
|
release {
|
|
jobs =
|
|
(releaseJobs) {
|
|
["deploy-release"] = (
|
|
new DeployJob {
|
|
isRelease = true
|
|
command = "publishToSonatype closeAndReleaseSonatypeStagingRepository"
|
|
}
|
|
) {
|
|
needs = releaseJobs.keys.toListing()
|
|
}
|
|
["github-release"] = new GithubRelease {
|
|
needs = "deploy-release"
|
|
}
|
|
} |> toWorkflowJobs
|
|
}
|