//===----------------------------------------------------------------------===// // Copyright © 2024 Apple Inc. and the Pkl project authors. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. //===----------------------------------------------------------------------===// // File gets rendered to .circleci/config.yml via git hook. amends "package://pkg.pkl-lang.org/pkl-project-commons/pkl.impl.circleci@1.2.1#/PklCI.pkl" import "jobs/BuildNativeJob.pkl" import "jobs/DeployJob.pkl" import "jobs/GradleCheckJob.pkl" import "jobs/SimpleGradleJob.pkl" local prbJobs: Listing = gradleCheckJobs.keys.toListing() local buildAndTestJobs = (prbJobs) { "bench" "gradle-compatibility" ...buildNativeJobs.keys.filter((it) -> it.endsWith("snapshot")) } local releaseJobs = (prbJobs) { "bench" "gradle-compatibility" ...buildNativeJobs.keys.filter((it) -> it.endsWith("release")) } prb { jobs = prbJobs } main { jobs { ...buildAndTestJobs new { ["deploy-snapshot"] { requires = buildAndTestJobs context = "pkl-maven-release" } } } } release { jobs { ...releaseJobs // do GitHub release first because we can overwrite the tag. // publishing to Maven Central is final. new { ["github-release"] { requires = releaseJobs context = "pkl-github-release" } } new { ["deploy-release"] { requires { "github-release" } context = "pkl-maven-release" } } } } releaseBranch { jobs = releaseJobs } triggerDocsBuild = "both" triggerPackageDocsBuild = "release" local buildNativeJobs: Mapping = 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)-linux-alpine-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 gradleCheckJobs: Mapping = new { ["gradle-check"] { javaVersion = "21.0" isRelease = false os = "linux" } ["gradle-check-windows"] { javaVersion = "21.0" isRelease = false os = "windows" } } jobs { for (jobName, job in buildNativeJobs) { [jobName] = job.job } for (jobName, job in gradleCheckJobs) { [jobName] = job.job } ["bench"] = new SimpleGradleJob { command = "bench:jmh" }.job ["gradle-compatibility"] = new SimpleGradleJob { name = "gradle compatibility" command = #""" :pkl-gradle:build \ :pkl-gradle:compatibilityTestReleases """# }.job ["deploy-snapshot"] = new DeployJob { command = "publishToSonatype" }.job ["deploy-release"] = new DeployJob { isRelease = true command = "publishToSonatype closeAndReleaseSonatypeStagingRepository" }.job ["github-release"] { docker { new { image = "maniator/gh:v2.40.1" } } steps { new AttachWorkspaceStep { at = "." } new RunStep { name = "Publish release on GitHub" command = #""" # exclude build_artifacts.txt from publish rm -f */build/executable/*.build_artifacts.txt find */build/executable/* -type d | xargs rm -rf gh release create "${CIRCLE_TAG}" \ --title "${CIRCLE_TAG}" \ --target "${CIRCLE_SHA1}" \ --verify-tag \ --notes "Release notes: https://pkl-lang.org/main/current/release-notes/changelog.html#release-${CIRCLE_TAG}" \ --repo "${CIRCLE_PROJECT_USERNAME}/${CIRCLE_PROJECT_REPONAME}" \ */build/executable/* """# } } } }