mirror of
https://github.com/apple/pkl.git
synced 2026-05-25 16:19:20 +02:00
Compare commits
18 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 8bd738ec0b | |||
| 7569b96088 | |||
| ad131b5543 | |||
| 640cc129db | |||
| 1d14a750a5 | |||
| 6a1d56bb4d | |||
| 0902cbc628 | |||
| 7717b702b2 | |||
| c5c0c20caa | |||
| fc1114fd2e | |||
| 2b24d2838c | |||
| 917d110e46 | |||
| 11cc9b96bd | |||
| ab9a231341 | |||
| cf18ce3d65 | |||
| a225258ebf | |||
| 393d939a2c | |||
| 52c2b29a04 |
@@ -0,0 +1,164 @@
|
|||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
// 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.0#/PklCI.pkl"
|
||||||
|
|
||||||
|
import "jobs/BuildNativeJob.pkl"
|
||||||
|
import "jobs/GradleCheckJob.pkl"
|
||||||
|
import "jobs/DeployJob.pkl"
|
||||||
|
import "jobs/SimpleGradleJob.pkl"
|
||||||
|
|
||||||
|
local prbJobs: Listing<String> = 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<String, BuildNativeJob> = new {
|
||||||
|
for (_dist in List("release", "snapshot")) {
|
||||||
|
for (_arch in List("amd64", "aarch64")) {
|
||||||
|
for (_os in List("macOS", "linux")) {
|
||||||
|
["pkl-cli-\(_os)-\(_arch)-\(_dist)"] {
|
||||||
|
arch = _arch
|
||||||
|
os = _os
|
||||||
|
isRelease = _dist == "release"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
["pkl-cli-linux-alpine-amd64-\(_dist)"] {
|
||||||
|
arch = "amd64"
|
||||||
|
os = "linux"
|
||||||
|
musl = true
|
||||||
|
isRelease = _dist == "release"
|
||||||
|
}
|
||||||
|
["pkl-cli-windows-amd64-\(_dist)"] {
|
||||||
|
arch = "amd64"
|
||||||
|
os = "windows"
|
||||||
|
isRelease = _dist == "release"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
local gradleCheckJobs: Mapping<String, GradleCheckJob> = 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 pkl-cli/build/executable/*.build_artifacts.txt
|
||||||
|
find pkl-cli/build/executable/* -type d | xargs rm -rf
|
||||||
|
rm -f pkl-cli/build/executable/resources
|
||||||
|
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}" \
|
||||||
|
pkl-cli/build/executable/*
|
||||||
|
"""#
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,941 @@
|
|||||||
|
# Generated from CircleCI.pkl. DO NOT EDIT.
|
||||||
|
version: '2.1'
|
||||||
|
orbs:
|
||||||
|
pr-approval: apple/pr-approval@0.1.0
|
||||||
|
jobs:
|
||||||
|
pkl-cli-macOS-amd64-release:
|
||||||
|
steps:
|
||||||
|
- checkout
|
||||||
|
- run:
|
||||||
|
command: /usr/sbin/softwareupdate --install-rosetta --agree-to-license
|
||||||
|
name: Installing Rosetta 2
|
||||||
|
- run:
|
||||||
|
command: |-
|
||||||
|
# install jdk
|
||||||
|
curl -Lf \
|
||||||
|
https://github.com/adoptium/temurin21-binaries/releases/download/jdk-21.0.5%2B11/OpenJDK21U-jdk_x64_mac_hotspot_21.0.5_11.tar.gz -o /tmp/jdk.tar.gz
|
||||||
|
|
||||||
|
mkdir $HOME/jdk \
|
||||||
|
&& cd $HOME/jdk \
|
||||||
|
&& cat /tmp/jdk.tar.gz | tar --strip-components=1 -xzC .
|
||||||
|
name: Set up environment
|
||||||
|
shell: '#!/bin/bash -exo pipefail'
|
||||||
|
- run:
|
||||||
|
command: |-
|
||||||
|
export PATH=~/staticdeps/bin:$PATH
|
||||||
|
./gradlew --info --stacktrace -DtestReportsDir=${HOME}/test-results -DpklMultiJdkTesting=true -DreleaseBuild=true pkl-cli:macExecutableAmd64 pkl-core:testMacExecutableAmd64 pkl-server:testMacExecutableAmd64
|
||||||
|
name: gradle buildNative
|
||||||
|
- persist_to_workspace:
|
||||||
|
root: '.'
|
||||||
|
paths:
|
||||||
|
- pkl-cli/build/executable/
|
||||||
|
- store_test_results:
|
||||||
|
path: ~/test-results
|
||||||
|
environment:
|
||||||
|
LANG: en_US.UTF-8
|
||||||
|
JAVA_HOME: /Users/distiller/jdk/Contents/Home
|
||||||
|
resource_class: m2pro.large
|
||||||
|
macos:
|
||||||
|
xcode: 15.3.0
|
||||||
|
pkl-cli-linux-amd64-release:
|
||||||
|
steps:
|
||||||
|
- checkout
|
||||||
|
- restore_cache:
|
||||||
|
key: staticdeps-amd64
|
||||||
|
name: Restore static deps from cache
|
||||||
|
- run:
|
||||||
|
command: |-
|
||||||
|
sed -ie '/\[ol8_codeready_builder\]/,/^$/s/enabled=0/enabled=1/g' /etc/yum.repos.d/oracle-linux-ol8.repo \
|
||||||
|
&& microdnf -y install util-linux tree coreutils-single findutils curl tar gzip git zlib-devel gcc-c++ make openssl glibc-langpack-en libstdc++-static \
|
||||||
|
&& microdnf clean all \
|
||||||
|
&& rm -rf /var/cache/dnf
|
||||||
|
|
||||||
|
# install jdk
|
||||||
|
curl -Lf \
|
||||||
|
https://github.com/adoptium/temurin21-binaries/releases/download/jdk-21.0.5%2B11/OpenJDK21U-jdk_x64_linux_hotspot_21.0.5_11.tar.gz -o /tmp/jdk.tar.gz
|
||||||
|
|
||||||
|
mkdir /jdk \
|
||||||
|
&& cd /jdk \
|
||||||
|
&& cat /tmp/jdk.tar.gz | tar --strip-components=1 -xzC .
|
||||||
|
|
||||||
|
mkdir -p ~/staticdeps/bin
|
||||||
|
|
||||||
|
cp /usr/lib/gcc/x86_64-redhat-linux/8/libstdc++.a ~/staticdeps
|
||||||
|
|
||||||
|
# install zlib
|
||||||
|
if [[ ! -f ~/staticdeps/include/zlib.h ]]; then
|
||||||
|
curl -Lf https://github.com/madler/zlib/releases/download/v1.2.13/zlib-1.2.13.tar.gz -o /tmp/zlib.tar.gz
|
||||||
|
|
||||||
|
mkdir -p /tmp/dep_zlib-1.2.13 \
|
||||||
|
&& cd /tmp/dep_zlib-1.2.13 \
|
||||||
|
&& cat /tmp/zlib.tar.gz | tar --strip-components=1 -xzC . \
|
||||||
|
&& echo "zlib-1.2.13: configure..." && ./configure --static --prefix="$HOME"/staticdeps > /dev/null \
|
||||||
|
&& echo "zlib-1.2.13: make..." && make -s -j4 \
|
||||||
|
&& echo "zlib-1.2.13: make install..." && make -s install \
|
||||||
|
&& rm -rf /tmp/dep_zlib-1.2.13
|
||||||
|
fi
|
||||||
|
|
||||||
|
# install musl
|
||||||
|
if [[ ! -f ~/staticdeps/bin/x86_64-linux-musl-gcc ]]; then
|
||||||
|
curl -Lf https://musl.libc.org/releases/musl-1.2.2.tar.gz -o /tmp/musl.tar.gz
|
||||||
|
|
||||||
|
mkdir -p /tmp/dep_musl-1.2.2 \
|
||||||
|
&& cd /tmp/dep_musl-1.2.2 \
|
||||||
|
&& cat /tmp/musl.tar.gz | tar --strip-components=1 -xzC . \
|
||||||
|
&& echo "musl-1.2.2: configure..." && ./configure --disable-shared --prefix="$HOME"/staticdeps > /dev/null \
|
||||||
|
&& echo "musl-1.2.2: make..." && make -s -j4 \
|
||||||
|
&& echo "musl-1.2.2: make install..." && make -s install \
|
||||||
|
&& rm -rf /tmp/dep_musl-1.2.2
|
||||||
|
|
||||||
|
# native-image expects to find an executable at this path.
|
||||||
|
ln -s ~/staticdeps/bin/musl-gcc ~/staticdeps/bin/x86_64-linux-musl-gcc
|
||||||
|
fi
|
||||||
|
name: Set up environment
|
||||||
|
shell: '#!/bin/bash -exo pipefail'
|
||||||
|
- save_cache:
|
||||||
|
paths:
|
||||||
|
- ~/staticdeps
|
||||||
|
key: staticdeps-amd64
|
||||||
|
name: Save statics deps to cache
|
||||||
|
- run:
|
||||||
|
command: |-
|
||||||
|
export PATH=~/staticdeps/bin:$PATH
|
||||||
|
./gradlew --info --stacktrace -DtestReportsDir=${HOME}/test-results -DpklMultiJdkTesting=true -DreleaseBuild=true pkl-cli:linuxExecutableAmd64 pkl-core:testLinuxExecutableAmd64 pkl-server:testLinuxExecutableAmd64
|
||||||
|
name: gradle buildNative
|
||||||
|
- persist_to_workspace:
|
||||||
|
root: '.'
|
||||||
|
paths:
|
||||||
|
- pkl-cli/build/executable/
|
||||||
|
- store_test_results:
|
||||||
|
path: ~/test-results
|
||||||
|
environment:
|
||||||
|
LANG: en_US.UTF-8
|
||||||
|
JAVA_HOME: /jdk
|
||||||
|
resource_class: xlarge
|
||||||
|
docker:
|
||||||
|
- image: oraclelinux:8-slim
|
||||||
|
pkl-cli-macOS-aarch64-release:
|
||||||
|
steps:
|
||||||
|
- checkout
|
||||||
|
- run:
|
||||||
|
command: |-
|
||||||
|
# install jdk
|
||||||
|
curl -Lf \
|
||||||
|
https://github.com/adoptium/temurin21-binaries/releases/download/jdk-21.0.5%2B11/OpenJDK21U-jdk_aarch64_mac_hotspot_21.0.5_11.tar.gz -o /tmp/jdk.tar.gz
|
||||||
|
|
||||||
|
mkdir $HOME/jdk \
|
||||||
|
&& cd $HOME/jdk \
|
||||||
|
&& cat /tmp/jdk.tar.gz | tar --strip-components=1 -xzC .
|
||||||
|
name: Set up environment
|
||||||
|
shell: '#!/bin/bash -exo pipefail'
|
||||||
|
- run:
|
||||||
|
command: |-
|
||||||
|
export PATH=~/staticdeps/bin:$PATH
|
||||||
|
./gradlew --info --stacktrace -DtestReportsDir=${HOME}/test-results -DpklMultiJdkTesting=true -DreleaseBuild=true pkl-cli:macExecutableAarch64 pkl-core:testMacExecutableAarch64 pkl-server:testMacExecutableAarch64
|
||||||
|
name: gradle buildNative
|
||||||
|
- persist_to_workspace:
|
||||||
|
root: '.'
|
||||||
|
paths:
|
||||||
|
- pkl-cli/build/executable/
|
||||||
|
- store_test_results:
|
||||||
|
path: ~/test-results
|
||||||
|
environment:
|
||||||
|
LANG: en_US.UTF-8
|
||||||
|
JAVA_HOME: /Users/distiller/jdk/Contents/Home
|
||||||
|
resource_class: m2pro.large
|
||||||
|
macos:
|
||||||
|
xcode: 15.3.0
|
||||||
|
pkl-cli-linux-aarch64-release:
|
||||||
|
steps:
|
||||||
|
- checkout
|
||||||
|
- restore_cache:
|
||||||
|
key: staticdeps-aarch64
|
||||||
|
name: Restore static deps from cache
|
||||||
|
- run:
|
||||||
|
command: |-
|
||||||
|
sed -ie '/\[ol8_codeready_builder\]/,/^$/s/enabled=0/enabled=1/g' /etc/yum.repos.d/oracle-linux-ol8.repo \
|
||||||
|
&& microdnf -y install util-linux tree coreutils-single findutils curl tar gzip git zlib-devel gcc-c++ make openssl glibc-langpack-en libstdc++-static \
|
||||||
|
&& microdnf clean all \
|
||||||
|
&& rm -rf /var/cache/dnf
|
||||||
|
|
||||||
|
# install jdk
|
||||||
|
curl -Lf \
|
||||||
|
https://github.com/adoptium/temurin21-binaries/releases/download/jdk-21.0.5%2B11/OpenJDK21U-jdk_aarch64_linux_hotspot_21.0.5_11.tar.gz -o /tmp/jdk.tar.gz
|
||||||
|
|
||||||
|
mkdir /jdk \
|
||||||
|
&& cd /jdk \
|
||||||
|
&& cat /tmp/jdk.tar.gz | tar --strip-components=1 -xzC .
|
||||||
|
|
||||||
|
mkdir -p ~/staticdeps/bin
|
||||||
|
|
||||||
|
cp /usr/lib/gcc/aarch64-redhat-linux/8/libstdc++.a ~/staticdeps
|
||||||
|
|
||||||
|
# install zlib
|
||||||
|
if [[ ! -f ~/staticdeps/include/zlib.h ]]; then
|
||||||
|
curl -Lf https://github.com/madler/zlib/releases/download/v1.2.13/zlib-1.2.13.tar.gz -o /tmp/zlib.tar.gz
|
||||||
|
|
||||||
|
mkdir -p /tmp/dep_zlib-1.2.13 \
|
||||||
|
&& cd /tmp/dep_zlib-1.2.13 \
|
||||||
|
&& cat /tmp/zlib.tar.gz | tar --strip-components=1 -xzC . \
|
||||||
|
&& echo "zlib-1.2.13: configure..." && ./configure --static --prefix="$HOME"/staticdeps > /dev/null \
|
||||||
|
&& echo "zlib-1.2.13: make..." && make -s -j4 \
|
||||||
|
&& echo "zlib-1.2.13: make install..." && make -s install \
|
||||||
|
&& rm -rf /tmp/dep_zlib-1.2.13
|
||||||
|
fi
|
||||||
|
name: Set up environment
|
||||||
|
shell: '#!/bin/bash -exo pipefail'
|
||||||
|
- save_cache:
|
||||||
|
paths:
|
||||||
|
- ~/staticdeps
|
||||||
|
key: staticdeps-aarch64
|
||||||
|
name: Save statics deps to cache
|
||||||
|
- run:
|
||||||
|
command: |-
|
||||||
|
export PATH=~/staticdeps/bin:$PATH
|
||||||
|
./gradlew --info --stacktrace -DtestReportsDir=${HOME}/test-results -DpklMultiJdkTesting=true -DreleaseBuild=true pkl-cli:linuxExecutableAarch64 pkl-core:testLinuxExecutableAarch64 pkl-server:testLinuxExecutableAarch64
|
||||||
|
name: gradle buildNative
|
||||||
|
- persist_to_workspace:
|
||||||
|
root: '.'
|
||||||
|
paths:
|
||||||
|
- pkl-cli/build/executable/
|
||||||
|
- store_test_results:
|
||||||
|
path: ~/test-results
|
||||||
|
environment:
|
||||||
|
LANG: en_US.UTF-8
|
||||||
|
JAVA_HOME: /jdk
|
||||||
|
resource_class: arm.xlarge
|
||||||
|
docker:
|
||||||
|
- image: arm64v8/oraclelinux:8-slim
|
||||||
|
pkl-cli-linux-alpine-amd64-release:
|
||||||
|
steps:
|
||||||
|
- checkout
|
||||||
|
- restore_cache:
|
||||||
|
key: staticdeps-amd64
|
||||||
|
name: Restore static deps from cache
|
||||||
|
- run:
|
||||||
|
command: |-
|
||||||
|
sed -ie '/\[ol8_codeready_builder\]/,/^$/s/enabled=0/enabled=1/g' /etc/yum.repos.d/oracle-linux-ol8.repo \
|
||||||
|
&& microdnf -y install util-linux tree coreutils-single findutils curl tar gzip git zlib-devel gcc-c++ make openssl glibc-langpack-en libstdc++-static \
|
||||||
|
&& microdnf clean all \
|
||||||
|
&& rm -rf /var/cache/dnf
|
||||||
|
|
||||||
|
# install jdk
|
||||||
|
curl -Lf \
|
||||||
|
https://github.com/adoptium/temurin21-binaries/releases/download/jdk-21.0.5%2B11/OpenJDK21U-jdk_x64_linux_hotspot_21.0.5_11.tar.gz -o /tmp/jdk.tar.gz
|
||||||
|
|
||||||
|
mkdir /jdk \
|
||||||
|
&& cd /jdk \
|
||||||
|
&& cat /tmp/jdk.tar.gz | tar --strip-components=1 -xzC .
|
||||||
|
|
||||||
|
mkdir -p ~/staticdeps/bin
|
||||||
|
|
||||||
|
cp /usr/lib/gcc/x86_64-redhat-linux/8/libstdc++.a ~/staticdeps
|
||||||
|
|
||||||
|
# install zlib
|
||||||
|
if [[ ! -f ~/staticdeps/include/zlib.h ]]; then
|
||||||
|
curl -Lf https://github.com/madler/zlib/releases/download/v1.2.13/zlib-1.2.13.tar.gz -o /tmp/zlib.tar.gz
|
||||||
|
|
||||||
|
mkdir -p /tmp/dep_zlib-1.2.13 \
|
||||||
|
&& cd /tmp/dep_zlib-1.2.13 \
|
||||||
|
&& cat /tmp/zlib.tar.gz | tar --strip-components=1 -xzC . \
|
||||||
|
&& echo "zlib-1.2.13: configure..." && ./configure --static --prefix="$HOME"/staticdeps > /dev/null \
|
||||||
|
&& echo "zlib-1.2.13: make..." && make -s -j4 \
|
||||||
|
&& echo "zlib-1.2.13: make install..." && make -s install \
|
||||||
|
&& rm -rf /tmp/dep_zlib-1.2.13
|
||||||
|
fi
|
||||||
|
|
||||||
|
# install musl
|
||||||
|
if [[ ! -f ~/staticdeps/bin/x86_64-linux-musl-gcc ]]; then
|
||||||
|
curl -Lf https://musl.libc.org/releases/musl-1.2.2.tar.gz -o /tmp/musl.tar.gz
|
||||||
|
|
||||||
|
mkdir -p /tmp/dep_musl-1.2.2 \
|
||||||
|
&& cd /tmp/dep_musl-1.2.2 \
|
||||||
|
&& cat /tmp/musl.tar.gz | tar --strip-components=1 -xzC . \
|
||||||
|
&& echo "musl-1.2.2: configure..." && ./configure --disable-shared --prefix="$HOME"/staticdeps > /dev/null \
|
||||||
|
&& echo "musl-1.2.2: make..." && make -s -j4 \
|
||||||
|
&& echo "musl-1.2.2: make install..." && make -s install \
|
||||||
|
&& rm -rf /tmp/dep_musl-1.2.2
|
||||||
|
|
||||||
|
# native-image expects to find an executable at this path.
|
||||||
|
ln -s ~/staticdeps/bin/musl-gcc ~/staticdeps/bin/x86_64-linux-musl-gcc
|
||||||
|
fi
|
||||||
|
name: Set up environment
|
||||||
|
shell: '#!/bin/bash -exo pipefail'
|
||||||
|
- save_cache:
|
||||||
|
paths:
|
||||||
|
- ~/staticdeps
|
||||||
|
key: staticdeps-amd64
|
||||||
|
name: Save statics deps to cache
|
||||||
|
- run:
|
||||||
|
command: |-
|
||||||
|
export PATH=~/staticdeps/bin:$PATH
|
||||||
|
./gradlew --info --stacktrace -DtestReportsDir=${HOME}/test-results -DpklMultiJdkTesting=true -DreleaseBuild=true pkl-cli:alpineExecutableAmd64 pkl-core:testAlpineExecutableAmd64 pkl-server:testAlpineExecutableAmd64
|
||||||
|
name: gradle buildNative
|
||||||
|
- persist_to_workspace:
|
||||||
|
root: '.'
|
||||||
|
paths:
|
||||||
|
- pkl-cli/build/executable/
|
||||||
|
- store_test_results:
|
||||||
|
path: ~/test-results
|
||||||
|
environment:
|
||||||
|
LANG: en_US.UTF-8
|
||||||
|
JAVA_HOME: /jdk
|
||||||
|
resource_class: xlarge
|
||||||
|
docker:
|
||||||
|
- image: oraclelinux:8-slim
|
||||||
|
pkl-cli-windows-amd64-release:
|
||||||
|
steps:
|
||||||
|
- checkout
|
||||||
|
- run:
|
||||||
|
command: |-
|
||||||
|
# install jdk
|
||||||
|
curl -Lf \
|
||||||
|
https://github.com/adoptium/temurin21-binaries/releases/download/jdk-21.0.5%2B11/OpenJDK21U-jdk_x64_windows_hotspot_21.0.5_11.zip -o /tmp/jdk.zip
|
||||||
|
|
||||||
|
unzip /tmp/jdk.zip -d /tmp/jdk \
|
||||||
|
&& cd /tmp/jdk/jdk-* \
|
||||||
|
&& mkdir /jdk \
|
||||||
|
&& cp -r . /jdk
|
||||||
|
name: Set up environment
|
||||||
|
shell: bash.exe
|
||||||
|
- run:
|
||||||
|
command: |-
|
||||||
|
export PATH=~/staticdeps/bin:$PATH
|
||||||
|
./gradlew --info --stacktrace -DtestReportsDir=${HOME}/test-results -DpklMultiJdkTesting=true -DreleaseBuild=true pkl-cli:windowsExecutableAmd64 pkl-core:testWindowsExecutableAmd64 pkl-server:testWindowsExecutableAmd64
|
||||||
|
name: gradle buildNative
|
||||||
|
shell: bash.exe
|
||||||
|
- persist_to_workspace:
|
||||||
|
root: '.'
|
||||||
|
paths:
|
||||||
|
- pkl-cli/build/executable/
|
||||||
|
- store_test_results:
|
||||||
|
path: ~/test-results
|
||||||
|
environment:
|
||||||
|
LANG: en_US.UTF-8
|
||||||
|
JAVA_HOME: /jdk
|
||||||
|
resource_class: windows.large
|
||||||
|
machine:
|
||||||
|
image: windows-server-2022-gui:current
|
||||||
|
pkl-cli-macOS-amd64-snapshot:
|
||||||
|
steps:
|
||||||
|
- checkout
|
||||||
|
- run:
|
||||||
|
command: /usr/sbin/softwareupdate --install-rosetta --agree-to-license
|
||||||
|
name: Installing Rosetta 2
|
||||||
|
- run:
|
||||||
|
command: |-
|
||||||
|
# install jdk
|
||||||
|
curl -Lf \
|
||||||
|
https://github.com/adoptium/temurin21-binaries/releases/download/jdk-21.0.5%2B11/OpenJDK21U-jdk_x64_mac_hotspot_21.0.5_11.tar.gz -o /tmp/jdk.tar.gz
|
||||||
|
|
||||||
|
mkdir $HOME/jdk \
|
||||||
|
&& cd $HOME/jdk \
|
||||||
|
&& cat /tmp/jdk.tar.gz | tar --strip-components=1 -xzC .
|
||||||
|
name: Set up environment
|
||||||
|
shell: '#!/bin/bash -exo pipefail'
|
||||||
|
- run:
|
||||||
|
command: |-
|
||||||
|
export PATH=~/staticdeps/bin:$PATH
|
||||||
|
./gradlew --info --stacktrace -DtestReportsDir=${HOME}/test-results -DpklMultiJdkTesting=true pkl-cli:macExecutableAmd64 pkl-core:testMacExecutableAmd64 pkl-server:testMacExecutableAmd64
|
||||||
|
name: gradle buildNative
|
||||||
|
- persist_to_workspace:
|
||||||
|
root: '.'
|
||||||
|
paths:
|
||||||
|
- pkl-cli/build/executable/
|
||||||
|
- store_test_results:
|
||||||
|
path: ~/test-results
|
||||||
|
environment:
|
||||||
|
LANG: en_US.UTF-8
|
||||||
|
JAVA_HOME: /Users/distiller/jdk/Contents/Home
|
||||||
|
resource_class: m2pro.large
|
||||||
|
macos:
|
||||||
|
xcode: 15.3.0
|
||||||
|
pkl-cli-linux-amd64-snapshot:
|
||||||
|
steps:
|
||||||
|
- checkout
|
||||||
|
- restore_cache:
|
||||||
|
key: staticdeps-amd64
|
||||||
|
name: Restore static deps from cache
|
||||||
|
- run:
|
||||||
|
command: |-
|
||||||
|
sed -ie '/\[ol8_codeready_builder\]/,/^$/s/enabled=0/enabled=1/g' /etc/yum.repos.d/oracle-linux-ol8.repo \
|
||||||
|
&& microdnf -y install util-linux tree coreutils-single findutils curl tar gzip git zlib-devel gcc-c++ make openssl glibc-langpack-en libstdc++-static \
|
||||||
|
&& microdnf clean all \
|
||||||
|
&& rm -rf /var/cache/dnf
|
||||||
|
|
||||||
|
# install jdk
|
||||||
|
curl -Lf \
|
||||||
|
https://github.com/adoptium/temurin21-binaries/releases/download/jdk-21.0.5%2B11/OpenJDK21U-jdk_x64_linux_hotspot_21.0.5_11.tar.gz -o /tmp/jdk.tar.gz
|
||||||
|
|
||||||
|
mkdir /jdk \
|
||||||
|
&& cd /jdk \
|
||||||
|
&& cat /tmp/jdk.tar.gz | tar --strip-components=1 -xzC .
|
||||||
|
|
||||||
|
mkdir -p ~/staticdeps/bin
|
||||||
|
|
||||||
|
cp /usr/lib/gcc/x86_64-redhat-linux/8/libstdc++.a ~/staticdeps
|
||||||
|
|
||||||
|
# install zlib
|
||||||
|
if [[ ! -f ~/staticdeps/include/zlib.h ]]; then
|
||||||
|
curl -Lf https://github.com/madler/zlib/releases/download/v1.2.13/zlib-1.2.13.tar.gz -o /tmp/zlib.tar.gz
|
||||||
|
|
||||||
|
mkdir -p /tmp/dep_zlib-1.2.13 \
|
||||||
|
&& cd /tmp/dep_zlib-1.2.13 \
|
||||||
|
&& cat /tmp/zlib.tar.gz | tar --strip-components=1 -xzC . \
|
||||||
|
&& echo "zlib-1.2.13: configure..." && ./configure --static --prefix="$HOME"/staticdeps > /dev/null \
|
||||||
|
&& echo "zlib-1.2.13: make..." && make -s -j4 \
|
||||||
|
&& echo "zlib-1.2.13: make install..." && make -s install \
|
||||||
|
&& rm -rf /tmp/dep_zlib-1.2.13
|
||||||
|
fi
|
||||||
|
|
||||||
|
# install musl
|
||||||
|
if [[ ! -f ~/staticdeps/bin/x86_64-linux-musl-gcc ]]; then
|
||||||
|
curl -Lf https://musl.libc.org/releases/musl-1.2.2.tar.gz -o /tmp/musl.tar.gz
|
||||||
|
|
||||||
|
mkdir -p /tmp/dep_musl-1.2.2 \
|
||||||
|
&& cd /tmp/dep_musl-1.2.2 \
|
||||||
|
&& cat /tmp/musl.tar.gz | tar --strip-components=1 -xzC . \
|
||||||
|
&& echo "musl-1.2.2: configure..." && ./configure --disable-shared --prefix="$HOME"/staticdeps > /dev/null \
|
||||||
|
&& echo "musl-1.2.2: make..." && make -s -j4 \
|
||||||
|
&& echo "musl-1.2.2: make install..." && make -s install \
|
||||||
|
&& rm -rf /tmp/dep_musl-1.2.2
|
||||||
|
|
||||||
|
# native-image expects to find an executable at this path.
|
||||||
|
ln -s ~/staticdeps/bin/musl-gcc ~/staticdeps/bin/x86_64-linux-musl-gcc
|
||||||
|
fi
|
||||||
|
name: Set up environment
|
||||||
|
shell: '#!/bin/bash -exo pipefail'
|
||||||
|
- save_cache:
|
||||||
|
paths:
|
||||||
|
- ~/staticdeps
|
||||||
|
key: staticdeps-amd64
|
||||||
|
name: Save statics deps to cache
|
||||||
|
- run:
|
||||||
|
command: |-
|
||||||
|
export PATH=~/staticdeps/bin:$PATH
|
||||||
|
./gradlew --info --stacktrace -DtestReportsDir=${HOME}/test-results -DpklMultiJdkTesting=true pkl-cli:linuxExecutableAmd64 pkl-core:testLinuxExecutableAmd64 pkl-server:testLinuxExecutableAmd64
|
||||||
|
name: gradle buildNative
|
||||||
|
- persist_to_workspace:
|
||||||
|
root: '.'
|
||||||
|
paths:
|
||||||
|
- pkl-cli/build/executable/
|
||||||
|
- store_test_results:
|
||||||
|
path: ~/test-results
|
||||||
|
environment:
|
||||||
|
LANG: en_US.UTF-8
|
||||||
|
JAVA_HOME: /jdk
|
||||||
|
resource_class: xlarge
|
||||||
|
docker:
|
||||||
|
- image: oraclelinux:8-slim
|
||||||
|
pkl-cli-macOS-aarch64-snapshot:
|
||||||
|
steps:
|
||||||
|
- checkout
|
||||||
|
- run:
|
||||||
|
command: |-
|
||||||
|
# install jdk
|
||||||
|
curl -Lf \
|
||||||
|
https://github.com/adoptium/temurin21-binaries/releases/download/jdk-21.0.5%2B11/OpenJDK21U-jdk_aarch64_mac_hotspot_21.0.5_11.tar.gz -o /tmp/jdk.tar.gz
|
||||||
|
|
||||||
|
mkdir $HOME/jdk \
|
||||||
|
&& cd $HOME/jdk \
|
||||||
|
&& cat /tmp/jdk.tar.gz | tar --strip-components=1 -xzC .
|
||||||
|
name: Set up environment
|
||||||
|
shell: '#!/bin/bash -exo pipefail'
|
||||||
|
- run:
|
||||||
|
command: |-
|
||||||
|
export PATH=~/staticdeps/bin:$PATH
|
||||||
|
./gradlew --info --stacktrace -DtestReportsDir=${HOME}/test-results -DpklMultiJdkTesting=true pkl-cli:macExecutableAarch64 pkl-core:testMacExecutableAarch64 pkl-server:testMacExecutableAarch64
|
||||||
|
name: gradle buildNative
|
||||||
|
- persist_to_workspace:
|
||||||
|
root: '.'
|
||||||
|
paths:
|
||||||
|
- pkl-cli/build/executable/
|
||||||
|
- store_test_results:
|
||||||
|
path: ~/test-results
|
||||||
|
environment:
|
||||||
|
LANG: en_US.UTF-8
|
||||||
|
JAVA_HOME: /Users/distiller/jdk/Contents/Home
|
||||||
|
resource_class: m2pro.large
|
||||||
|
macos:
|
||||||
|
xcode: 15.3.0
|
||||||
|
pkl-cli-linux-aarch64-snapshot:
|
||||||
|
steps:
|
||||||
|
- checkout
|
||||||
|
- restore_cache:
|
||||||
|
key: staticdeps-aarch64
|
||||||
|
name: Restore static deps from cache
|
||||||
|
- run:
|
||||||
|
command: |-
|
||||||
|
sed -ie '/\[ol8_codeready_builder\]/,/^$/s/enabled=0/enabled=1/g' /etc/yum.repos.d/oracle-linux-ol8.repo \
|
||||||
|
&& microdnf -y install util-linux tree coreutils-single findutils curl tar gzip git zlib-devel gcc-c++ make openssl glibc-langpack-en libstdc++-static \
|
||||||
|
&& microdnf clean all \
|
||||||
|
&& rm -rf /var/cache/dnf
|
||||||
|
|
||||||
|
# install jdk
|
||||||
|
curl -Lf \
|
||||||
|
https://github.com/adoptium/temurin21-binaries/releases/download/jdk-21.0.5%2B11/OpenJDK21U-jdk_aarch64_linux_hotspot_21.0.5_11.tar.gz -o /tmp/jdk.tar.gz
|
||||||
|
|
||||||
|
mkdir /jdk \
|
||||||
|
&& cd /jdk \
|
||||||
|
&& cat /tmp/jdk.tar.gz | tar --strip-components=1 -xzC .
|
||||||
|
|
||||||
|
mkdir -p ~/staticdeps/bin
|
||||||
|
|
||||||
|
cp /usr/lib/gcc/aarch64-redhat-linux/8/libstdc++.a ~/staticdeps
|
||||||
|
|
||||||
|
# install zlib
|
||||||
|
if [[ ! -f ~/staticdeps/include/zlib.h ]]; then
|
||||||
|
curl -Lf https://github.com/madler/zlib/releases/download/v1.2.13/zlib-1.2.13.tar.gz -o /tmp/zlib.tar.gz
|
||||||
|
|
||||||
|
mkdir -p /tmp/dep_zlib-1.2.13 \
|
||||||
|
&& cd /tmp/dep_zlib-1.2.13 \
|
||||||
|
&& cat /tmp/zlib.tar.gz | tar --strip-components=1 -xzC . \
|
||||||
|
&& echo "zlib-1.2.13: configure..." && ./configure --static --prefix="$HOME"/staticdeps > /dev/null \
|
||||||
|
&& echo "zlib-1.2.13: make..." && make -s -j4 \
|
||||||
|
&& echo "zlib-1.2.13: make install..." && make -s install \
|
||||||
|
&& rm -rf /tmp/dep_zlib-1.2.13
|
||||||
|
fi
|
||||||
|
name: Set up environment
|
||||||
|
shell: '#!/bin/bash -exo pipefail'
|
||||||
|
- save_cache:
|
||||||
|
paths:
|
||||||
|
- ~/staticdeps
|
||||||
|
key: staticdeps-aarch64
|
||||||
|
name: Save statics deps to cache
|
||||||
|
- run:
|
||||||
|
command: |-
|
||||||
|
export PATH=~/staticdeps/bin:$PATH
|
||||||
|
./gradlew --info --stacktrace -DtestReportsDir=${HOME}/test-results -DpklMultiJdkTesting=true pkl-cli:linuxExecutableAarch64 pkl-core:testLinuxExecutableAarch64 pkl-server:testLinuxExecutableAarch64
|
||||||
|
name: gradle buildNative
|
||||||
|
- persist_to_workspace:
|
||||||
|
root: '.'
|
||||||
|
paths:
|
||||||
|
- pkl-cli/build/executable/
|
||||||
|
- store_test_results:
|
||||||
|
path: ~/test-results
|
||||||
|
environment:
|
||||||
|
LANG: en_US.UTF-8
|
||||||
|
JAVA_HOME: /jdk
|
||||||
|
resource_class: arm.xlarge
|
||||||
|
docker:
|
||||||
|
- image: arm64v8/oraclelinux:8-slim
|
||||||
|
pkl-cli-linux-alpine-amd64-snapshot:
|
||||||
|
steps:
|
||||||
|
- checkout
|
||||||
|
- restore_cache:
|
||||||
|
key: staticdeps-amd64
|
||||||
|
name: Restore static deps from cache
|
||||||
|
- run:
|
||||||
|
command: |-
|
||||||
|
sed -ie '/\[ol8_codeready_builder\]/,/^$/s/enabled=0/enabled=1/g' /etc/yum.repos.d/oracle-linux-ol8.repo \
|
||||||
|
&& microdnf -y install util-linux tree coreutils-single findutils curl tar gzip git zlib-devel gcc-c++ make openssl glibc-langpack-en libstdc++-static \
|
||||||
|
&& microdnf clean all \
|
||||||
|
&& rm -rf /var/cache/dnf
|
||||||
|
|
||||||
|
# install jdk
|
||||||
|
curl -Lf \
|
||||||
|
https://github.com/adoptium/temurin21-binaries/releases/download/jdk-21.0.5%2B11/OpenJDK21U-jdk_x64_linux_hotspot_21.0.5_11.tar.gz -o /tmp/jdk.tar.gz
|
||||||
|
|
||||||
|
mkdir /jdk \
|
||||||
|
&& cd /jdk \
|
||||||
|
&& cat /tmp/jdk.tar.gz | tar --strip-components=1 -xzC .
|
||||||
|
|
||||||
|
mkdir -p ~/staticdeps/bin
|
||||||
|
|
||||||
|
cp /usr/lib/gcc/x86_64-redhat-linux/8/libstdc++.a ~/staticdeps
|
||||||
|
|
||||||
|
# install zlib
|
||||||
|
if [[ ! -f ~/staticdeps/include/zlib.h ]]; then
|
||||||
|
curl -Lf https://github.com/madler/zlib/releases/download/v1.2.13/zlib-1.2.13.tar.gz -o /tmp/zlib.tar.gz
|
||||||
|
|
||||||
|
mkdir -p /tmp/dep_zlib-1.2.13 \
|
||||||
|
&& cd /tmp/dep_zlib-1.2.13 \
|
||||||
|
&& cat /tmp/zlib.tar.gz | tar --strip-components=1 -xzC . \
|
||||||
|
&& echo "zlib-1.2.13: configure..." && ./configure --static --prefix="$HOME"/staticdeps > /dev/null \
|
||||||
|
&& echo "zlib-1.2.13: make..." && make -s -j4 \
|
||||||
|
&& echo "zlib-1.2.13: make install..." && make -s install \
|
||||||
|
&& rm -rf /tmp/dep_zlib-1.2.13
|
||||||
|
fi
|
||||||
|
|
||||||
|
# install musl
|
||||||
|
if [[ ! -f ~/staticdeps/bin/x86_64-linux-musl-gcc ]]; then
|
||||||
|
curl -Lf https://musl.libc.org/releases/musl-1.2.2.tar.gz -o /tmp/musl.tar.gz
|
||||||
|
|
||||||
|
mkdir -p /tmp/dep_musl-1.2.2 \
|
||||||
|
&& cd /tmp/dep_musl-1.2.2 \
|
||||||
|
&& cat /tmp/musl.tar.gz | tar --strip-components=1 -xzC . \
|
||||||
|
&& echo "musl-1.2.2: configure..." && ./configure --disable-shared --prefix="$HOME"/staticdeps > /dev/null \
|
||||||
|
&& echo "musl-1.2.2: make..." && make -s -j4 \
|
||||||
|
&& echo "musl-1.2.2: make install..." && make -s install \
|
||||||
|
&& rm -rf /tmp/dep_musl-1.2.2
|
||||||
|
|
||||||
|
# native-image expects to find an executable at this path.
|
||||||
|
ln -s ~/staticdeps/bin/musl-gcc ~/staticdeps/bin/x86_64-linux-musl-gcc
|
||||||
|
fi
|
||||||
|
name: Set up environment
|
||||||
|
shell: '#!/bin/bash -exo pipefail'
|
||||||
|
- save_cache:
|
||||||
|
paths:
|
||||||
|
- ~/staticdeps
|
||||||
|
key: staticdeps-amd64
|
||||||
|
name: Save statics deps to cache
|
||||||
|
- run:
|
||||||
|
command: |-
|
||||||
|
export PATH=~/staticdeps/bin:$PATH
|
||||||
|
./gradlew --info --stacktrace -DtestReportsDir=${HOME}/test-results -DpklMultiJdkTesting=true pkl-cli:alpineExecutableAmd64 pkl-core:testAlpineExecutableAmd64 pkl-server:testAlpineExecutableAmd64
|
||||||
|
name: gradle buildNative
|
||||||
|
- persist_to_workspace:
|
||||||
|
root: '.'
|
||||||
|
paths:
|
||||||
|
- pkl-cli/build/executable/
|
||||||
|
- store_test_results:
|
||||||
|
path: ~/test-results
|
||||||
|
environment:
|
||||||
|
LANG: en_US.UTF-8
|
||||||
|
JAVA_HOME: /jdk
|
||||||
|
resource_class: xlarge
|
||||||
|
docker:
|
||||||
|
- image: oraclelinux:8-slim
|
||||||
|
pkl-cli-windows-amd64-snapshot:
|
||||||
|
steps:
|
||||||
|
- checkout
|
||||||
|
- run:
|
||||||
|
command: |-
|
||||||
|
# install jdk
|
||||||
|
curl -Lf \
|
||||||
|
https://github.com/adoptium/temurin21-binaries/releases/download/jdk-21.0.5%2B11/OpenJDK21U-jdk_x64_windows_hotspot_21.0.5_11.zip -o /tmp/jdk.zip
|
||||||
|
|
||||||
|
unzip /tmp/jdk.zip -d /tmp/jdk \
|
||||||
|
&& cd /tmp/jdk/jdk-* \
|
||||||
|
&& mkdir /jdk \
|
||||||
|
&& cp -r . /jdk
|
||||||
|
name: Set up environment
|
||||||
|
shell: bash.exe
|
||||||
|
- run:
|
||||||
|
command: |-
|
||||||
|
export PATH=~/staticdeps/bin:$PATH
|
||||||
|
./gradlew --info --stacktrace -DtestReportsDir=${HOME}/test-results -DpklMultiJdkTesting=true pkl-cli:windowsExecutableAmd64 pkl-core:testWindowsExecutableAmd64 pkl-server:testWindowsExecutableAmd64
|
||||||
|
name: gradle buildNative
|
||||||
|
shell: bash.exe
|
||||||
|
- persist_to_workspace:
|
||||||
|
root: '.'
|
||||||
|
paths:
|
||||||
|
- pkl-cli/build/executable/
|
||||||
|
- store_test_results:
|
||||||
|
path: ~/test-results
|
||||||
|
environment:
|
||||||
|
LANG: en_US.UTF-8
|
||||||
|
JAVA_HOME: /jdk
|
||||||
|
resource_class: windows.large
|
||||||
|
machine:
|
||||||
|
image: windows-server-2022-gui:current
|
||||||
|
gradle-check:
|
||||||
|
steps:
|
||||||
|
- checkout
|
||||||
|
- run:
|
||||||
|
command: ./gradlew --info --stacktrace -DtestReportsDir=${HOME}/test-results -DpklMultiJdkTesting=true check
|
||||||
|
name: gradle check
|
||||||
|
- store_test_results:
|
||||||
|
path: ~/test-results
|
||||||
|
environment:
|
||||||
|
LANG: en_US.UTF-8
|
||||||
|
docker:
|
||||||
|
- image: cimg/openjdk:21.0
|
||||||
|
gradle-check-windows:
|
||||||
|
steps:
|
||||||
|
- checkout
|
||||||
|
- run:
|
||||||
|
command: |-
|
||||||
|
# install jdk
|
||||||
|
curl -Lf \
|
||||||
|
https://github.com/adoptium/temurin21-binaries/releases/download/jdk-21.0.5%2B11/OpenJDK21U-jdk_x64_windows_hotspot_21.0.5_11.zip -o /tmp/jdk.zip
|
||||||
|
|
||||||
|
unzip /tmp/jdk.zip -d /tmp/jdk \
|
||||||
|
&& cd /tmp/jdk/jdk-* \
|
||||||
|
&& mkdir /jdk \
|
||||||
|
&& cp -r . /jdk
|
||||||
|
name: Set up environment
|
||||||
|
shell: bash.exe
|
||||||
|
- run:
|
||||||
|
command: ./gradlew --info --stacktrace -DtestReportsDir=${HOME}/test-results -DpklMultiJdkTesting=true check
|
||||||
|
name: gradle check
|
||||||
|
- store_test_results:
|
||||||
|
path: ~/test-results
|
||||||
|
environment:
|
||||||
|
LANG: en_US.UTF-8
|
||||||
|
JAVA_HOME: /jdk
|
||||||
|
resource_class: windows.large
|
||||||
|
machine:
|
||||||
|
image: windows-server-2022-gui:current
|
||||||
|
bench:
|
||||||
|
steps:
|
||||||
|
- checkout
|
||||||
|
- run:
|
||||||
|
command: ./gradlew --info --stacktrace -DtestReportsDir=${HOME}/test-results -DpklMultiJdkTesting=true bench:jmh
|
||||||
|
name: bench:jmh
|
||||||
|
- store_test_results:
|
||||||
|
path: ~/test-results
|
||||||
|
environment:
|
||||||
|
LANG: en_US.UTF-8
|
||||||
|
docker:
|
||||||
|
- image: cimg/openjdk:21.0
|
||||||
|
gradle-compatibility:
|
||||||
|
steps:
|
||||||
|
- checkout
|
||||||
|
- run:
|
||||||
|
command: |-
|
||||||
|
./gradlew --info --stacktrace -DtestReportsDir=${HOME}/test-results -DpklMultiJdkTesting=true :pkl-gradle:build \
|
||||||
|
:pkl-gradle:compatibilityTestReleases
|
||||||
|
name: gradle compatibility
|
||||||
|
- store_test_results:
|
||||||
|
path: ~/test-results
|
||||||
|
environment:
|
||||||
|
LANG: en_US.UTF-8
|
||||||
|
docker:
|
||||||
|
- image: cimg/openjdk:21.0
|
||||||
|
deploy-snapshot:
|
||||||
|
steps:
|
||||||
|
- checkout
|
||||||
|
- attach_workspace:
|
||||||
|
at: '.'
|
||||||
|
- run:
|
||||||
|
command: ./gradlew --info --stacktrace -DtestReportsDir=${HOME}/test-results -DpklMultiJdkTesting=true publishToSonatype
|
||||||
|
- persist_to_workspace:
|
||||||
|
root: '.'
|
||||||
|
paths:
|
||||||
|
- pkl-cli/build/executable/
|
||||||
|
- store_test_results:
|
||||||
|
path: ~/test-results
|
||||||
|
environment:
|
||||||
|
LANG: en_US.UTF-8
|
||||||
|
docker:
|
||||||
|
- image: cimg/openjdk:21.0
|
||||||
|
deploy-release:
|
||||||
|
steps:
|
||||||
|
- checkout
|
||||||
|
- attach_workspace:
|
||||||
|
at: '.'
|
||||||
|
- run:
|
||||||
|
command: ./gradlew --info --stacktrace -DtestReportsDir=${HOME}/test-results -DpklMultiJdkTesting=true -DreleaseBuild=true publishToSonatype closeAndReleaseSonatypeStagingRepository
|
||||||
|
- persist_to_workspace:
|
||||||
|
root: '.'
|
||||||
|
paths:
|
||||||
|
- pkl-cli/build/executable/
|
||||||
|
- store_test_results:
|
||||||
|
path: ~/test-results
|
||||||
|
environment:
|
||||||
|
LANG: en_US.UTF-8
|
||||||
|
docker:
|
||||||
|
- image: cimg/openjdk:21.0
|
||||||
|
github-release:
|
||||||
|
steps:
|
||||||
|
- attach_workspace:
|
||||||
|
at: '.'
|
||||||
|
- run:
|
||||||
|
command: |-
|
||||||
|
# exclude build_artifacts.txt from publish
|
||||||
|
rm -f pkl-cli/build/executable/*.build_artifacts.txt
|
||||||
|
find pkl-cli/build/executable/* -type d | xargs rm -rf
|
||||||
|
rm -f pkl-cli/build/executable/resources
|
||||||
|
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}" \
|
||||||
|
pkl-cli/build/executable/*
|
||||||
|
name: Publish release on GitHub
|
||||||
|
docker:
|
||||||
|
- image: maniator/gh:v2.40.1
|
||||||
|
trigger-docsite-build:
|
||||||
|
steps:
|
||||||
|
- run:
|
||||||
|
command: |-
|
||||||
|
curl --location \
|
||||||
|
--request POST \
|
||||||
|
--header "Content-Type: application/json" \
|
||||||
|
-u "${CIRCLE_TOKEN}:" \
|
||||||
|
--data '{ "branch": "main" }' \
|
||||||
|
"https://circleci.com/api/v2/project/github/apple/pkl-lang.org/pipeline"
|
||||||
|
name: Triggering docsite build
|
||||||
|
docker:
|
||||||
|
- image: cimg/base:current
|
||||||
|
trigger-package-docs-build:
|
||||||
|
steps:
|
||||||
|
- run:
|
||||||
|
command: |-
|
||||||
|
curl --location \
|
||||||
|
--request POST \
|
||||||
|
--header "Content-Type: application/json" \
|
||||||
|
-u "${CIRCLE_TOKEN}:" \
|
||||||
|
--data '{ "branch": "main" }' \
|
||||||
|
"https://circleci.com/api/v2/project/github/apple/pkl-package-docs/pipeline"
|
||||||
|
name: Triggering docsite build
|
||||||
|
docker:
|
||||||
|
- image: cimg/base:current
|
||||||
|
workflows:
|
||||||
|
prb:
|
||||||
|
jobs:
|
||||||
|
- hold:
|
||||||
|
type: approval
|
||||||
|
- pr-approval/authenticate:
|
||||||
|
context: pkl-pr-approval
|
||||||
|
- gradle-check:
|
||||||
|
requires:
|
||||||
|
- hold
|
||||||
|
- gradle-check-windows:
|
||||||
|
requires:
|
||||||
|
- hold
|
||||||
|
when:
|
||||||
|
matches:
|
||||||
|
value: << pipeline.git.branch >>
|
||||||
|
pattern: ^pull/\d+(/head)?$
|
||||||
|
main:
|
||||||
|
jobs:
|
||||||
|
- gradle-check
|
||||||
|
- gradle-check-windows
|
||||||
|
- bench
|
||||||
|
- gradle-compatibility
|
||||||
|
- pkl-cli-macOS-amd64-snapshot
|
||||||
|
- pkl-cli-linux-amd64-snapshot
|
||||||
|
- pkl-cli-macOS-aarch64-snapshot
|
||||||
|
- pkl-cli-linux-aarch64-snapshot
|
||||||
|
- pkl-cli-linux-alpine-amd64-snapshot
|
||||||
|
- pkl-cli-windows-amd64-snapshot
|
||||||
|
- deploy-snapshot:
|
||||||
|
requires:
|
||||||
|
- gradle-check
|
||||||
|
- gradle-check-windows
|
||||||
|
- bench
|
||||||
|
- gradle-compatibility
|
||||||
|
- pkl-cli-macOS-amd64-snapshot
|
||||||
|
- pkl-cli-linux-amd64-snapshot
|
||||||
|
- pkl-cli-macOS-aarch64-snapshot
|
||||||
|
- pkl-cli-linux-aarch64-snapshot
|
||||||
|
- pkl-cli-linux-alpine-amd64-snapshot
|
||||||
|
- pkl-cli-windows-amd64-snapshot
|
||||||
|
context: pkl-maven-release
|
||||||
|
- trigger-docsite-build:
|
||||||
|
requires:
|
||||||
|
- deploy-snapshot
|
||||||
|
context:
|
||||||
|
- pkl-pr-approval
|
||||||
|
when:
|
||||||
|
equal:
|
||||||
|
- main
|
||||||
|
- << pipeline.git.branch >>
|
||||||
|
release:
|
||||||
|
jobs:
|
||||||
|
- gradle-check:
|
||||||
|
filters:
|
||||||
|
branches:
|
||||||
|
ignore: /.*/
|
||||||
|
tags:
|
||||||
|
only: /^v?\d+\.\d+\.\d+$/
|
||||||
|
- gradle-check-windows:
|
||||||
|
filters:
|
||||||
|
branches:
|
||||||
|
ignore: /.*/
|
||||||
|
tags:
|
||||||
|
only: /^v?\d+\.\d+\.\d+$/
|
||||||
|
- bench:
|
||||||
|
filters:
|
||||||
|
branches:
|
||||||
|
ignore: /.*/
|
||||||
|
tags:
|
||||||
|
only: /^v?\d+\.\d+\.\d+$/
|
||||||
|
- gradle-compatibility:
|
||||||
|
filters:
|
||||||
|
branches:
|
||||||
|
ignore: /.*/
|
||||||
|
tags:
|
||||||
|
only: /^v?\d+\.\d+\.\d+$/
|
||||||
|
- pkl-cli-macOS-amd64-release:
|
||||||
|
filters:
|
||||||
|
branches:
|
||||||
|
ignore: /.*/
|
||||||
|
tags:
|
||||||
|
only: /^v?\d+\.\d+\.\d+$/
|
||||||
|
- pkl-cli-linux-amd64-release:
|
||||||
|
filters:
|
||||||
|
branches:
|
||||||
|
ignore: /.*/
|
||||||
|
tags:
|
||||||
|
only: /^v?\d+\.\d+\.\d+$/
|
||||||
|
- pkl-cli-macOS-aarch64-release:
|
||||||
|
filters:
|
||||||
|
branches:
|
||||||
|
ignore: /.*/
|
||||||
|
tags:
|
||||||
|
only: /^v?\d+\.\d+\.\d+$/
|
||||||
|
- pkl-cli-linux-aarch64-release:
|
||||||
|
filters:
|
||||||
|
branches:
|
||||||
|
ignore: /.*/
|
||||||
|
tags:
|
||||||
|
only: /^v?\d+\.\d+\.\d+$/
|
||||||
|
- pkl-cli-linux-alpine-amd64-release:
|
||||||
|
filters:
|
||||||
|
branches:
|
||||||
|
ignore: /.*/
|
||||||
|
tags:
|
||||||
|
only: /^v?\d+\.\d+\.\d+$/
|
||||||
|
- pkl-cli-windows-amd64-release:
|
||||||
|
filters:
|
||||||
|
branches:
|
||||||
|
ignore: /.*/
|
||||||
|
tags:
|
||||||
|
only: /^v?\d+\.\d+\.\d+$/
|
||||||
|
- github-release:
|
||||||
|
requires:
|
||||||
|
- gradle-check
|
||||||
|
- gradle-check-windows
|
||||||
|
- bench
|
||||||
|
- gradle-compatibility
|
||||||
|
- pkl-cli-macOS-amd64-release
|
||||||
|
- pkl-cli-linux-amd64-release
|
||||||
|
- pkl-cli-macOS-aarch64-release
|
||||||
|
- pkl-cli-linux-aarch64-release
|
||||||
|
- pkl-cli-linux-alpine-amd64-release
|
||||||
|
- pkl-cli-windows-amd64-release
|
||||||
|
context: pkl-github-release
|
||||||
|
filters:
|
||||||
|
branches:
|
||||||
|
ignore: /.*/
|
||||||
|
tags:
|
||||||
|
only: /^v?\d+\.\d+\.\d+$/
|
||||||
|
- deploy-release:
|
||||||
|
requires:
|
||||||
|
- github-release
|
||||||
|
context: pkl-maven-release
|
||||||
|
filters:
|
||||||
|
branches:
|
||||||
|
ignore: /.*/
|
||||||
|
tags:
|
||||||
|
only: /^v?\d+\.\d+\.\d+$/
|
||||||
|
- trigger-package-docs-build:
|
||||||
|
requires:
|
||||||
|
- deploy-release
|
||||||
|
context:
|
||||||
|
- pkl-pr-approval
|
||||||
|
filters:
|
||||||
|
branches:
|
||||||
|
ignore: /.*/
|
||||||
|
tags:
|
||||||
|
only: /^v?\d+\.\d+\.\d+$/
|
||||||
|
release-branch:
|
||||||
|
jobs:
|
||||||
|
- gradle-check
|
||||||
|
- gradle-check-windows
|
||||||
|
- bench
|
||||||
|
- gradle-compatibility
|
||||||
|
- pkl-cli-macOS-amd64-release
|
||||||
|
- pkl-cli-linux-amd64-release
|
||||||
|
- pkl-cli-macOS-aarch64-release
|
||||||
|
- pkl-cli-linux-aarch64-release
|
||||||
|
- pkl-cli-linux-alpine-amd64-release
|
||||||
|
- pkl-cli-windows-amd64-release
|
||||||
|
when:
|
||||||
|
matches:
|
||||||
|
value: << pipeline.git.branch >>
|
||||||
|
pattern: ^release/\d+\.\d+$
|
||||||
@@ -0,0 +1,186 @@
|
|||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
// 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.
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
/// Builds the native `pkl` CLI
|
||||||
|
extends "GradleJob.pkl"
|
||||||
|
|
||||||
|
import "package://pkg.pkl-lang.org/pkl-pantry/com.circleci.v2@1.5.0#/Config.pkl"
|
||||||
|
|
||||||
|
/// The architecture to use
|
||||||
|
arch: "amd64"|"aarch64"
|
||||||
|
|
||||||
|
/// Whether to link to musl. Otherwise, links to glibc.
|
||||||
|
musl: Boolean = false
|
||||||
|
|
||||||
|
javaVersion = "21.0"
|
||||||
|
|
||||||
|
local setupLinuxEnvironment: Config.RunStep =
|
||||||
|
let (muslVersion = "1.2.2")
|
||||||
|
let (zlibVersion = "1.2.13")
|
||||||
|
new {
|
||||||
|
name = "Set up environment"
|
||||||
|
shell = "#!/bin/bash -exo pipefail"
|
||||||
|
command = new Listing {
|
||||||
|
#"""
|
||||||
|
sed -ie '/\[ol8_codeready_builder\]/,/^$/s/enabled=0/enabled=1/g' /etc/yum.repos.d/oracle-linux-ol8.repo \
|
||||||
|
&& microdnf -y install util-linux tree coreutils-single findutils curl tar gzip git zlib-devel gcc-c++ make openssl glibc-langpack-en libstdc++-static \
|
||||||
|
&& microdnf clean all \
|
||||||
|
&& rm -rf /var/cache/dnf
|
||||||
|
|
||||||
|
# install jdk
|
||||||
|
curl -Lf \
|
||||||
|
https://github.com/adoptium/temurin\#(module.majorJdkVersion)-binaries/releases/download/\#(module.jdkGitHubReleaseName)/OpenJDK\#(module.majorJdkVersion)U-jdk_\#(if (arch == "amd64") "x64" else "aarch64")_linux_hotspot_\#(module.jdkVersionAlt).tar.gz -o /tmp/jdk.tar.gz
|
||||||
|
|
||||||
|
mkdir /jdk \
|
||||||
|
&& cd /jdk \
|
||||||
|
&& cat /tmp/jdk.tar.gz | tar --strip-components=1 -xzC .
|
||||||
|
|
||||||
|
mkdir -p ~/staticdeps/bin
|
||||||
|
|
||||||
|
cp /usr/lib/gcc/\#(if (arch == "amd64") "x86_64" else "aarch64")-redhat-linux/8/libstdc++.a ~/staticdeps
|
||||||
|
|
||||||
|
# install zlib
|
||||||
|
if [[ ! -f ~/staticdeps/include/zlib.h ]]; then
|
||||||
|
curl -Lf https://github.com/madler/zlib/releases/download/v\#(zlibVersion)/zlib-\#(zlibVersion).tar.gz -o /tmp/zlib.tar.gz
|
||||||
|
|
||||||
|
mkdir -p /tmp/dep_zlib-\#(zlibVersion) \
|
||||||
|
&& cd /tmp/dep_zlib-\#(zlibVersion) \
|
||||||
|
&& cat /tmp/zlib.tar.gz | tar --strip-components=1 -xzC . \
|
||||||
|
&& echo "zlib-\#(zlibVersion): configure..." && ./configure --static --prefix="$HOME"/staticdeps > /dev/null \
|
||||||
|
&& echo "zlib-\#(zlibVersion): make..." && make -s -j4 \
|
||||||
|
&& echo "zlib-\#(zlibVersion): make install..." && make -s install \
|
||||||
|
&& rm -rf /tmp/dep_zlib-\#(zlibVersion)
|
||||||
|
fi
|
||||||
|
"""#
|
||||||
|
// don't need musl on aarch because GraalVM only supports musl builds on x86
|
||||||
|
when (arch == "amd64") {
|
||||||
|
#"""
|
||||||
|
# install musl
|
||||||
|
if [[ ! -f ~/staticdeps/bin/x86_64-linux-musl-gcc ]]; then
|
||||||
|
curl -Lf https://musl.libc.org/releases/musl-\#(muslVersion).tar.gz -o /tmp/musl.tar.gz
|
||||||
|
|
||||||
|
mkdir -p /tmp/dep_musl-\#(muslVersion) \
|
||||||
|
&& cd /tmp/dep_musl-\#(muslVersion) \
|
||||||
|
&& cat /tmp/musl.tar.gz | tar --strip-components=1 -xzC . \
|
||||||
|
&& echo "musl-\#(muslVersion): configure..." && ./configure --disable-shared --prefix="$HOME"/staticdeps > /dev/null \
|
||||||
|
&& echo "musl-\#(muslVersion): make..." && make -s -j4 \
|
||||||
|
&& echo "musl-\#(muslVersion): make install..." && make -s install \
|
||||||
|
&& rm -rf /tmp/dep_musl-\#(muslVersion)
|
||||||
|
|
||||||
|
# native-image expects to find an executable at this path.
|
||||||
|
ln -s ~/staticdeps/bin/musl-gcc ~/staticdeps/bin/x86_64-linux-musl-gcc
|
||||||
|
fi
|
||||||
|
"""#
|
||||||
|
}
|
||||||
|
}.join("\n\n")
|
||||||
|
}
|
||||||
|
|
||||||
|
local setupMacEnvironment: Config.RunStep =
|
||||||
|
new {
|
||||||
|
name = "Set up environment"
|
||||||
|
shell = "#!/bin/bash -exo pipefail"
|
||||||
|
command =
|
||||||
|
#"""
|
||||||
|
# install jdk
|
||||||
|
curl -Lf \
|
||||||
|
https://github.com/adoptium/temurin\#(module.majorJdkVersion)-binaries/releases/download/\#(module.jdkGitHubReleaseName)/OpenJDK\#(module.majorJdkVersion)U-jdk_\#(if (arch == "amd64") "x64" else "aarch64")_mac_hotspot_\#(module.jdkVersionAlt).tar.gz -o /tmp/jdk.tar.gz
|
||||||
|
|
||||||
|
mkdir $HOME/jdk \
|
||||||
|
&& cd $HOME/jdk \
|
||||||
|
&& cat /tmp/jdk.tar.gz | tar --strip-components=1 -xzC .
|
||||||
|
"""#
|
||||||
|
}
|
||||||
|
|
||||||
|
steps {
|
||||||
|
when (os == "linux") {
|
||||||
|
new Config.RestoreCacheStep {
|
||||||
|
name = "Restore static deps from cache"
|
||||||
|
key = "staticdeps-\(arch)"
|
||||||
|
}
|
||||||
|
setupLinuxEnvironment
|
||||||
|
new Config.SaveCacheStep {
|
||||||
|
name = "Save statics deps to cache"
|
||||||
|
key = "staticdeps-\(arch)"
|
||||||
|
paths {
|
||||||
|
"~/staticdeps"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
when (os == "macOS") {
|
||||||
|
when (arch == "amd64") {
|
||||||
|
new Config.RunStep {
|
||||||
|
name = "Installing Rosetta 2"
|
||||||
|
command = """
|
||||||
|
/usr/sbin/softwareupdate --install-rosetta --agree-to-license
|
||||||
|
"""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
setupMacEnvironment
|
||||||
|
}
|
||||||
|
new Config.RunStep {
|
||||||
|
name = "gradle buildNative"
|
||||||
|
local _os =
|
||||||
|
if (module.os == "macOS") "mac"
|
||||||
|
else if (musl) "alpine"
|
||||||
|
else if (module.os == "windows") "windows"
|
||||||
|
else "linux"
|
||||||
|
local jobName = "\(_os)Executable\(arch.capitalize())"
|
||||||
|
when (module.os == "windows") {
|
||||||
|
shell = "bash.exe"
|
||||||
|
}
|
||||||
|
command = #"""
|
||||||
|
export PATH=~/staticdeps/bin:$PATH
|
||||||
|
./gradlew \#(module.gradleArgs) pkl-cli:\#(jobName) pkl-core:test\#(jobName.capitalize()) pkl-server:test\#(jobName.capitalize())
|
||||||
|
"""#
|
||||||
|
}
|
||||||
|
new Config.PersistToWorkspaceStep {
|
||||||
|
root = "."
|
||||||
|
paths {
|
||||||
|
"pkl-cli/build/executable/"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
job {
|
||||||
|
when (os == "macOS") {
|
||||||
|
macos {
|
||||||
|
xcode = "15.3.0"
|
||||||
|
}
|
||||||
|
resource_class = "m2pro.large"
|
||||||
|
environment {
|
||||||
|
["JAVA_HOME"] = "/Users/distiller/jdk/Contents/Home"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
when (os == "linux") {
|
||||||
|
docker = new Listing<Config.DockerImage> {
|
||||||
|
new {
|
||||||
|
image = if (arch == "aarch64") "arm64v8/oraclelinux:8-slim" else "oraclelinux:8-slim"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
environment {
|
||||||
|
["JAVA_HOME"] = "/jdk"
|
||||||
|
}
|
||||||
|
resource_class = if (arch == "aarch64") "arm.xlarge" else "xlarge"
|
||||||
|
}
|
||||||
|
when (os == "windows") {
|
||||||
|
machine {
|
||||||
|
image = "windows-server-2022-gui:current"
|
||||||
|
}
|
||||||
|
resource_class = "windows.large"
|
||||||
|
environment {
|
||||||
|
["JAVA_HOME"] = "/jdk"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
// 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.
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
extends "GradleJob.pkl"
|
||||||
|
|
||||||
|
import "package://pkg.pkl-lang.org/pkl-pantry/com.circleci.v2@1.5.0#/Config.pkl"
|
||||||
|
|
||||||
|
local self = this
|
||||||
|
|
||||||
|
javaVersion = "21.0"
|
||||||
|
|
||||||
|
command: String
|
||||||
|
|
||||||
|
os = "linux"
|
||||||
|
|
||||||
|
steps {
|
||||||
|
new Config.AttachWorkspaceStep { at = "." }
|
||||||
|
new Config.RunStep {
|
||||||
|
command = "./gradlew \(self.gradleArgs) \(module.command)"
|
||||||
|
}
|
||||||
|
// add jpkl to workspace so it gets published as a GitHub release
|
||||||
|
new Config.PersistToWorkspaceStep {
|
||||||
|
root = "."
|
||||||
|
paths {
|
||||||
|
"pkl-cli/build/executable/"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
// 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.
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
extends "GradleJob.pkl"
|
||||||
|
|
||||||
|
import "package://pkg.pkl-lang.org/pkl-pantry/com.circleci.v2@1.5.0#/Config.pkl"
|
||||||
|
|
||||||
|
steps {
|
||||||
|
new Config.RunStep {
|
||||||
|
name = "gradle check"
|
||||||
|
command = "./gradlew \(module.gradleArgs) check"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,101 @@
|
|||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
// 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.
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
abstract module GradleJob
|
||||||
|
|
||||||
|
import "package://pkg.pkl-lang.org/pkl-pantry/com.circleci.v2@1.5.0#/Config.pkl"
|
||||||
|
import "package://pkg.pkl-lang.org/pkl-pantry/pkl.experimental.uri@1.0.3#/URI.pkl"
|
||||||
|
|
||||||
|
/// Whether this is a release build or not.
|
||||||
|
isRelease: Boolean = false
|
||||||
|
|
||||||
|
/// The OS to run on
|
||||||
|
os: "macOS"|"linux"|"windows"
|
||||||
|
|
||||||
|
/// The version of Java to use.
|
||||||
|
javaVersion: "17.0"|"21.0"
|
||||||
|
|
||||||
|
fixed javaVersionFull =
|
||||||
|
if (javaVersion == "17.0") "17.0.9+9"
|
||||||
|
else "21.0.5+11"
|
||||||
|
|
||||||
|
fixed jdkVersionAlt = javaVersionFull.replaceLast("+", "_")
|
||||||
|
|
||||||
|
fixed majorJdkVersion = javaVersionFull.split(".").first
|
||||||
|
|
||||||
|
fixed jdkGitHubReleaseName =
|
||||||
|
let (ver =
|
||||||
|
// 17.0.9+9 is missing some binaries (see https://github.com/adoptium/adoptium-support/issues/994)
|
||||||
|
if (javaVersionFull == "17.0.9+9" && os == "windows") "jdk-17.0.9+9.1"
|
||||||
|
else "jdk-\(javaVersionFull)"
|
||||||
|
)
|
||||||
|
URI.encodeComponent(ver)
|
||||||
|
|
||||||
|
fixed gradleArgs = new Listing {
|
||||||
|
"--info"
|
||||||
|
"--stacktrace"
|
||||||
|
"-DtestReportsDir=${HOME}/test-results"
|
||||||
|
"-DpklMultiJdkTesting=true"
|
||||||
|
when (isRelease) {
|
||||||
|
"-DreleaseBuild=true"
|
||||||
|
}
|
||||||
|
}.join(" ")
|
||||||
|
|
||||||
|
steps: Listing<Config.Step>
|
||||||
|
|
||||||
|
job: Config.Job = new {
|
||||||
|
environment {
|
||||||
|
["LANG"] = "en_US.UTF-8"
|
||||||
|
when (os == "windows") {
|
||||||
|
["JAVA_HOME"] = "/jdk"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
when (os == "linux") {
|
||||||
|
docker {
|
||||||
|
new {
|
||||||
|
image = "cimg/openjdk:\(javaVersion)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
when (os == "windows") {
|
||||||
|
machine {
|
||||||
|
image = "windows-server-2022-gui:current"
|
||||||
|
}
|
||||||
|
resource_class = "windows.large"
|
||||||
|
}
|
||||||
|
steps {
|
||||||
|
"checkout"
|
||||||
|
when (os == "windows") {
|
||||||
|
new Config.RunStep {
|
||||||
|
name = "Set up environment"
|
||||||
|
shell = "bash.exe"
|
||||||
|
command = #"""
|
||||||
|
# install jdk
|
||||||
|
curl -Lf \
|
||||||
|
https://github.com/adoptium/temurin\#(majorJdkVersion)-binaries/releases/download/\#(jdkGitHubReleaseName)/OpenJDK\#(majorJdkVersion)U-jdk_x64_windows_hotspot_\#(jdkVersionAlt).zip -o /tmp/jdk.zip
|
||||||
|
|
||||||
|
unzip /tmp/jdk.zip -d /tmp/jdk \
|
||||||
|
&& cd /tmp/jdk/jdk-* \
|
||||||
|
&& mkdir /jdk \
|
||||||
|
&& cp -r . /jdk
|
||||||
|
"""#
|
||||||
|
}
|
||||||
|
}
|
||||||
|
...module.steps
|
||||||
|
new Config.StoreTestResults {
|
||||||
|
path = "~/test-results"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
// 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.
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
extends "GradleJob.pkl"
|
||||||
|
|
||||||
|
import "package://pkg.pkl-lang.org/pkl-pantry/com.circleci.v2@1.5.0#/Config.pkl"
|
||||||
|
|
||||||
|
name: String = command
|
||||||
|
|
||||||
|
command: String
|
||||||
|
|
||||||
|
os = "linux"
|
||||||
|
|
||||||
|
javaVersion = "21.0"
|
||||||
|
|
||||||
|
steps {
|
||||||
|
new Config.RunStep {
|
||||||
|
name = module.name
|
||||||
|
command = """
|
||||||
|
./gradlew \(module.gradleArgs) \(module.command)
|
||||||
|
"""
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,6 +1,5 @@
|
|||||||
# linguist-generated would suppress files in diffs
|
# linguist-generated would suppress files in diffs
|
||||||
**/src/test/files/** linguist-vendored
|
**/src/test/files/** linguist-vendored
|
||||||
.github/workflows/* linguist-generated
|
|
||||||
|
|
||||||
/docs/** linguist-documentation
|
/docs/** linguist-documentation
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
files=`git diff --cached --name-status`
|
files=`git diff --cached --name-status`
|
||||||
|
|
||||||
if [[ $files =~ .github/* ]]; then
|
if [[ $files =~ .circleci/config.pkl ]]; then
|
||||||
pkl eval --project-dir .github/ -m .github .github/index.pkl
|
pkl eval .circleci/config.pkl -o .circleci/config.yml
|
||||||
git add .github/workflows/
|
git add .circleci/config.yml
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -1,10 +0,0 @@
|
|||||||
amends "pkl:Project"
|
|
||||||
|
|
||||||
dependencies {
|
|
||||||
["pkl.impl.ghactions"] {
|
|
||||||
uri = "package://pkg.pkl-lang.org/pkl-project-commons/pkl.impl.ghactions@1.5.0"
|
|
||||||
}
|
|
||||||
["gha"] {
|
|
||||||
uri = "package://pkg.pkl-lang.org/pkl-pantry/com.github.actions@1.2.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
{
|
|
||||||
"schemaVersion": 1,
|
|
||||||
"resolvedDependencies": {
|
|
||||||
"package://pkg.pkl-lang.org/pkl-pantry/com.github.actions@1": {
|
|
||||||
"type": "remote",
|
|
||||||
"uri": "projectpackage://pkg.pkl-lang.org/pkl-pantry/com.github.actions@1.3.1",
|
|
||||||
"checksums": {
|
|
||||||
"sha256": "fd515da685ea126678c3ec684e84a4f992d43481cc1d75cb866cd55775f675f9"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"package://pkg.pkl-lang.org/pkl-project-commons/pkl.impl.ghactions@1": {
|
|
||||||
"type": "remote",
|
|
||||||
"uri": "projectpackage://pkg.pkl-lang.org/pkl-project-commons/pkl.impl.ghactions@1.5.0",
|
|
||||||
"checksums": {
|
|
||||||
"sha256": "2c1e0d9efcd65b3c3207bf535c325ebc0ec2ab169187b324c4bb70821cac0e51"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"package://pkg.pkl-lang.org/pkl-pantry/pkl.experimental.deepToTyped@1": {
|
|
||||||
"type": "remote",
|
|
||||||
"uri": "projectpackage://pkg.pkl-lang.org/pkl-pantry/pkl.experimental.deepToTyped@1.2.0",
|
|
||||||
"checksums": {
|
|
||||||
"sha256": "84c7feb391f4ac273a99dc89b8fd51dbcd21dbda4ce640f6908527f83acdd4d6"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"package://pkg.pkl-lang.org/pkl-pantry/pkl.github.dependabotManagedActions@1": {
|
|
||||||
"type": "remote",
|
|
||||||
"uri": "projectpackage://pkg.pkl-lang.org/pkl-pantry/pkl.github.dependabotManagedActions@1.0.3",
|
|
||||||
"checksums": {
|
|
||||||
"sha256": "d368900942efb88ed51a98f9614748b06c74ba43423f045fcd6dedb5dbdc0bea"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"package://pkg.pkl-lang.org/pkl-pantry/com.github.dependabot@1": {
|
|
||||||
"type": "remote",
|
|
||||||
"uri": "projectpackage://pkg.pkl-lang.org/pkl-pantry/com.github.dependabot@1.0.0",
|
|
||||||
"checksums": {
|
|
||||||
"sha256": "02ef6f25bfca5b1d095db73ea15de79d2d2c6832ebcab61e6aba90554382abcb"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
version: 2
|
|
||||||
updates:
|
|
||||||
- package-ecosystem: github-actions
|
|
||||||
directory: /
|
|
||||||
ignore:
|
|
||||||
- dependency-name: '*'
|
|
||||||
update-types:
|
|
||||||
- version-update:semver-major
|
|
||||||
schedule:
|
|
||||||
interval: weekly
|
|
||||||
@@ -1,198 +0,0 @@
|
|||||||
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"
|
|
||||||
"github-release"
|
|
||||||
Regex("deploy-.*")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
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
|
|
||||||
}
|
|
||||||
@@ -1,32 +0,0 @@
|
|||||||
extends "GradleJob.pkl"
|
|
||||||
|
|
||||||
import "@gha/catalog.pkl"
|
|
||||||
|
|
||||||
// Keep this in sync with projects that build java executables
|
|
||||||
local projects: List<String> = List("pkl-doc", "pkl-cli", "pkl-codegen-java", "pkl-codegen-kotlin")
|
|
||||||
|
|
||||||
local command =
|
|
||||||
new Listing<String> {
|
|
||||||
"./gradlew"
|
|
||||||
module.gradleArgs
|
|
||||||
for (project in projects) {
|
|
||||||
// NOTE: `build` doesn't build native executables
|
|
||||||
"\(project):build"
|
|
||||||
}
|
|
||||||
}.join(" ")
|
|
||||||
|
|
||||||
steps {
|
|
||||||
catalog.`actions/checkout@v6`
|
|
||||||
new {
|
|
||||||
name = "gradle build java executables"
|
|
||||||
shell = "bash"
|
|
||||||
run = command
|
|
||||||
}
|
|
||||||
(catalog.`actions/upload-artifact@v5`) {
|
|
||||||
name = "Upload executable artifacts"
|
|
||||||
with {
|
|
||||||
name = "executable-java"
|
|
||||||
path = "*/build/executable/**/*"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,72 +0,0 @@
|
|||||||
extends "GradleJob.pkl"
|
|
||||||
|
|
||||||
import "@gha/catalog.pkl"
|
|
||||||
import "@gha/context.pkl"
|
|
||||||
|
|
||||||
/// Whether to link to musl. Otherwise, links to glibc.
|
|
||||||
musl: Boolean(implies(module.os == "linux")) = false
|
|
||||||
|
|
||||||
/// The Gradle project under which to generate the executable
|
|
||||||
project: String
|
|
||||||
|
|
||||||
extraGradleArgs {
|
|
||||||
when (os == "macOS" && arch == "amd64") {
|
|
||||||
"-Dpkl.targetArch=\(module.arch)"
|
|
||||||
#""-Dpkl.native--native-compiler-path=${GITHUB_WORKSPACE}/.github/scripts/cc_macos_amd64.sh""#
|
|
||||||
}
|
|
||||||
when (musl) {
|
|
||||||
"-Dpkl.musl=true"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
preSteps {
|
|
||||||
when (os == "linux" && !musl) {
|
|
||||||
new {
|
|
||||||
name = "Install deps"
|
|
||||||
run = "dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
steps {
|
|
||||||
when (musl) {
|
|
||||||
new {
|
|
||||||
name = "Install musl and zlib"
|
|
||||||
run = read("../scripts/install_musl.sh").text
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// workaround for https://github.com/actions/checkout/issues/1048
|
|
||||||
when (os == "linux" && !musl) {
|
|
||||||
new {
|
|
||||||
name = "Fix git ownership"
|
|
||||||
// language=bash
|
|
||||||
run = #"git status || git config --system --add safe.directory "$GITHUB_WORKSPACE""#
|
|
||||||
}
|
|
||||||
}
|
|
||||||
new {
|
|
||||||
name = "gradle buildNative"
|
|
||||||
shell = "bash"
|
|
||||||
run = "./gradlew \(module.gradleArgs) \(project):buildNative"
|
|
||||||
}
|
|
||||||
(catalog.`actions/upload-artifact@v5`) {
|
|
||||||
name = "Upload executable artifacts"
|
|
||||||
with {
|
|
||||||
name =
|
|
||||||
if (musl)
|
|
||||||
"executable-\(project)-alpine-\(module.os)-\(module.arch)"
|
|
||||||
else
|
|
||||||
"executable-\(project)-\(module.os)-\(module.arch)"
|
|
||||||
// Need to insert a wildcard to make actions/upload-artifact preserve the folder hierarchy.
|
|
||||||
// See https://github.com/actions/upload-artifact/issues/206
|
|
||||||
path = "\(project)*/build/executable/**/*"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fixed job {
|
|
||||||
when (os == "linux" && !musl) {
|
|
||||||
container {
|
|
||||||
image = "redhat/ubi8:8.10"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
extends "GradleJob.pkl"
|
|
||||||
|
|
||||||
import "@gha/catalog.pkl"
|
|
||||||
import "@gha/Workflow.pkl"
|
|
||||||
import "@pkl.impl.ghactions/helpers.pkl"
|
|
||||||
|
|
||||||
local self = this
|
|
||||||
|
|
||||||
command: String
|
|
||||||
|
|
||||||
arch = "amd64"
|
|
||||||
|
|
||||||
os = "linux"
|
|
||||||
|
|
||||||
steps {
|
|
||||||
catalog.`actions/checkout@v6`
|
|
||||||
(catalog.`actions/download-artifact@v6`) {
|
|
||||||
with {
|
|
||||||
pattern = "executable-**"
|
|
||||||
`merge-multiple` = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
new Workflow.Step {
|
|
||||||
run = "./gradlew \(self.gradleArgs) \(module.command)"
|
|
||||||
}
|
|
||||||
|> helpers.withMavenPublishSecrets
|
|
||||||
}
|
|
||||||
|
|
||||||
fixed job {
|
|
||||||
environment = "maven-release"
|
|
||||||
}
|
|
||||||
@@ -1,44 +0,0 @@
|
|||||||
module GithubRelease
|
|
||||||
|
|
||||||
extends "PklJob.pkl"
|
|
||||||
|
|
||||||
import "@gha/catalog.pkl"
|
|
||||||
import "@gha/context.pkl"
|
|
||||||
|
|
||||||
fixed job {
|
|
||||||
`runs-on` = "ubuntu-latest"
|
|
||||||
permissions {
|
|
||||||
contents = "write"
|
|
||||||
}
|
|
||||||
needs = "deploy-release"
|
|
||||||
steps {
|
|
||||||
(catalog.`actions/download-artifact@v6`) {
|
|
||||||
with {
|
|
||||||
pattern = "executable-**"
|
|
||||||
`merge-multiple` = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
new {
|
|
||||||
name = "Publish release on GitHub"
|
|
||||||
env {
|
|
||||||
["GH_TOKEN"] = context.github.token
|
|
||||||
["TAG_NAME"] = context.github.refName
|
|
||||||
["GIT_SHA"] = context.github.sha
|
|
||||||
["GH_REPO"] = context.github.repository
|
|
||||||
}
|
|
||||||
// language=bash
|
|
||||||
run =
|
|
||||||
#"""
|
|
||||||
# exclude build_artifacts.txt from publish
|
|
||||||
rm -f */build/executable/*.build_artifacts.txt
|
|
||||||
find */build/executable/* -type d | xargs rm -rf
|
|
||||||
gh release create ${TAG_NAME} \
|
|
||||||
--title "${TAG_NAME}" \
|
|
||||||
--target "${GIT_SHA}" \
|
|
||||||
--verify-tag \
|
|
||||||
--notes "Release notes: https://pkl-lang.org/main/current/release-notes/changelog.html#release-${TAG_NAME}" \
|
|
||||||
*/build/executable/*
|
|
||||||
"""#
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,102 +0,0 @@
|
|||||||
abstract module GradleJob
|
|
||||||
|
|
||||||
extends "PklJob.pkl"
|
|
||||||
|
|
||||||
import "@gha/Workflow.pkl"
|
|
||||||
import "@pkl.impl.ghactions/catalog.pkl"
|
|
||||||
|
|
||||||
/// Whether this is a release build or not.
|
|
||||||
isRelease: Boolean = false
|
|
||||||
|
|
||||||
/// The architecture to use
|
|
||||||
arch: "amd64" | "aarch64" = "amd64"
|
|
||||||
|
|
||||||
/// The OS to run on.
|
|
||||||
os: "macOS" | "linux" | "windows" = "linux"
|
|
||||||
|
|
||||||
// TODO flip this to `true` when nightly macOS is available
|
|
||||||
/// Whether to run on nightly macOS.
|
|
||||||
nightlyMacOS: Boolean(implies(os == "macOS")) = false
|
|
||||||
|
|
||||||
extraGradleArgs: Listing<String>
|
|
||||||
|
|
||||||
steps: Listing<Workflow.Step>
|
|
||||||
|
|
||||||
preSteps: Listing<Workflow.Step>
|
|
||||||
|
|
||||||
/// The fetch depth to use when doing a git checkout.
|
|
||||||
fetchDepth: Int?
|
|
||||||
|
|
||||||
fixed gradleArgs =
|
|
||||||
new Listing {
|
|
||||||
"--info"
|
|
||||||
"--stacktrace"
|
|
||||||
"--no-daemon"
|
|
||||||
"-DpklMultiJdkTesting=true"
|
|
||||||
when (isRelease) {
|
|
||||||
"-DreleaseBuild=true"
|
|
||||||
}
|
|
||||||
...extraGradleArgs
|
|
||||||
}.join(" ")
|
|
||||||
|
|
||||||
fixed job {
|
|
||||||
env {
|
|
||||||
["LANG"] = "en_US.UTF-8"
|
|
||||||
when (os == "windows") {
|
|
||||||
["JAVA_HOME"] = "/jdk"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
when (os == "macOS") {
|
|
||||||
`if` =
|
|
||||||
let (cond = "github.repository_owner == 'apple'")
|
|
||||||
if (super.`if` != null)
|
|
||||||
"(\(super.`if`)) && \(cond)"
|
|
||||||
else
|
|
||||||
cond
|
|
||||||
}
|
|
||||||
`runs-on` =
|
|
||||||
if (os == "linux" && arch == "amd64")
|
|
||||||
"ubuntu-latest"
|
|
||||||
else if (os == "linux" && arch == "aarch64")
|
|
||||||
"ubuntu-24.04-arm"
|
|
||||||
else if (os == "windows")
|
|
||||||
"windows-latest"
|
|
||||||
else
|
|
||||||
new Listing {
|
|
||||||
"self-hosted"
|
|
||||||
"macos"
|
|
||||||
when (nightlyMacOS) {
|
|
||||||
"nightly"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
steps {
|
|
||||||
...preSteps
|
|
||||||
// full checkout (needed for spotless)
|
|
||||||
(catalog.`actions/checkout@v6`) {
|
|
||||||
when (fetchDepth != null) {
|
|
||||||
with {
|
|
||||||
`fetch-depth` = fetchDepth
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
(catalog.`actions/setup-java@v5`) {
|
|
||||||
with {
|
|
||||||
`java-version` = "21"
|
|
||||||
distribution = "temurin"
|
|
||||||
architecture =
|
|
||||||
if (arch == "amd64")
|
|
||||||
"x64"
|
|
||||||
else
|
|
||||||
"aarch64"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
(catalog.`gradle/actions/setup-gradle@v5`) {
|
|
||||||
when (isRelease) {
|
|
||||||
with {
|
|
||||||
`cache-disabled` = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
...module.steps
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
abstract module PklJob
|
|
||||||
|
|
||||||
extends "@pkl.impl.ghactions/jobs/PklJob.pkl"
|
|
||||||
|
|
||||||
/// Identify any jobs that must complete successfully before this job will run.
|
|
||||||
///
|
|
||||||
/// It can be a string or array of strings.
|
|
||||||
/// If a job fails or is skipped, all jobs that need it are skipped unless the jobs use a conditional expression that
|
|
||||||
/// causes the job to continue.
|
|
||||||
/// If a run contains a series of jobs that need each other, a failure or skip applies to all jobs in the dependency
|
|
||||||
/// chain from the point of failure or skip onwards. If you would like a job to run even if a job it is dependent on
|
|
||||||
/// did not succeed, use the `always()` conditional expression in `jobs.<job_id>.if`.
|
|
||||||
///
|
|
||||||
/// See: <https://docs.github.com/en/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idneeds>
|
|
||||||
needs: (String | *Listing<String>)?
|
|
||||||
|
|
||||||
/// A conditional to prevent a job from running unless a condition is met.
|
|
||||||
///
|
|
||||||
/// You can use any supported context and expression to create a conditional.
|
|
||||||
/// For more information on which contexts are supported in this key, see
|
|
||||||
/// [Contexts reference](https://docs.github.com/en/actions/reference/workflows-and-actions/contexts#context-availability).
|
|
||||||
@SourceCode { language = "GithubExpressionLanguage" }
|
|
||||||
`if`: String?
|
|
||||||
|
|
||||||
/// The underlying workflow job
|
|
||||||
fixed job {
|
|
||||||
`if` = module.`if`
|
|
||||||
needs = module.needs
|
|
||||||
}
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
extends "GradleJob.pkl"
|
|
||||||
|
|
||||||
name: String = command
|
|
||||||
|
|
||||||
command: String
|
|
||||||
|
|
||||||
os = "linux"
|
|
||||||
|
|
||||||
steps {
|
|
||||||
new {
|
|
||||||
name = module.name
|
|
||||||
shell = "bash"
|
|
||||||
run =
|
|
||||||
"""
|
|
||||||
./gradlew \(module.gradleArgs) \(module.command)
|
|
||||||
"""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
clang -arch x86_64 "$@"
|
|
||||||
@@ -1,71 +0,0 @@
|
|||||||
set -e
|
|
||||||
mkdir -p ~/staticdeps/
|
|
||||||
|
|
||||||
ZLIB_VERSION="1.2.13"
|
|
||||||
MUSL_VERSION="1.2.5"
|
|
||||||
|
|
||||||
# install zlib
|
|
||||||
if [[ ! -f ~/staticdeps/include/zlib.h ]]; then
|
|
||||||
# Download zlib tarball and signature
|
|
||||||
curl -Lf "https://github.com/madler/zlib/releases/download/v${ZLIB_VERSION}/zlib-${ZLIB_VERSION}.tar.gz" -o /tmp/zlib.tar.gz
|
|
||||||
curl -Lf "https://github.com/madler/zlib/releases/download/v${ZLIB_VERSION}/zlib-${ZLIB_VERSION}.tar.gz.asc" -o /tmp/zlib.tar.gz.asc
|
|
||||||
|
|
||||||
# Import zlib GPG key
|
|
||||||
gpg --batch --keyserver keyserver.ubuntu.com --recv-keys 5ED46A6721D365587791E2AA783FCD8E58BCAFBA
|
|
||||||
|
|
||||||
# Verify GPG signature
|
|
||||||
echo "Verifying zlib GPG signature..."
|
|
||||||
gpg --verify /tmp/zlib.tar.gz.asc /tmp/zlib.tar.gz
|
|
||||||
|
|
||||||
mkdir -p "/tmp/dep_zlib-${ZLIB_VERSION}"
|
|
||||||
cd "/tmp/dep_zlib-${ZLIB_VERSION}"
|
|
||||||
# shellcheck disable=SC2002
|
|
||||||
cat /tmp/zlib.tar.gz | tar --strip-components=1 -xzC .
|
|
||||||
|
|
||||||
echo "zlib-${ZLIB_VERSION}: configure..."
|
|
||||||
./configure --static --prefix="$HOME"/staticdeps > /dev/null
|
|
||||||
|
|
||||||
echo "zlib-${ZLIB_VERSION}: make..."
|
|
||||||
make -s -j4
|
|
||||||
|
|
||||||
echo "zlib-${ZLIB_VERSION}: make install..."
|
|
||||||
make -s install
|
|
||||||
|
|
||||||
rm -rf /tmp/dep_zlib-${ZLIB_VERSION}
|
|
||||||
fi
|
|
||||||
|
|
||||||
# install musl
|
|
||||||
if [[ ! -f ~/staticdeps/bin/x86_64-linux-musl-gcc ]]; then
|
|
||||||
# Download musl tarball and signature
|
|
||||||
curl -Lf "https://musl.libc.org/releases/musl-${MUSL_VERSION}.tar.gz" -o /tmp/musl.tar.gz
|
|
||||||
curl -Lf "https://musl.libc.org/releases/musl-${MUSL_VERSION}.tar.gz.asc" -o /tmp/musl.tar.gz.asc
|
|
||||||
|
|
||||||
# Import musl GPG key
|
|
||||||
gpg --batch --keyserver keyserver.ubuntu.com --recv-keys 836489290BB6B70F99FFDA0556BCDB593020450F
|
|
||||||
|
|
||||||
# Verify GPG signature
|
|
||||||
echo "Verifying musl GPG signature..."
|
|
||||||
gpg --verify /tmp/musl.tar.gz.asc /tmp/musl.tar.gz
|
|
||||||
|
|
||||||
mkdir -p "/tmp/dep_musl-${MUSL_VERSION}"
|
|
||||||
cd "/tmp/dep_musl-${MUSL_VERSION}"
|
|
||||||
|
|
||||||
# shellcheck disable=SC2002
|
|
||||||
cat /tmp/musl.tar.gz | tar --strip-components=1 -xzC .
|
|
||||||
|
|
||||||
echo "musl-${MUSL_VERSION}: configure..."
|
|
||||||
./configure --disable-shared --prefix="$HOME"/staticdeps > /dev/null
|
|
||||||
|
|
||||||
echo "musl-${MUSL_VERSION}: make..."
|
|
||||||
make -s -j4
|
|
||||||
|
|
||||||
echo "musl-${MUSL_VERSION}: make install..."
|
|
||||||
make -s install
|
|
||||||
|
|
||||||
rm -rf "/tmp/dep_musl-${MUSL_VERSION}"
|
|
||||||
|
|
||||||
# native-image expects to find an executable at this path.
|
|
||||||
ln -s ~/staticdeps/bin/musl-gcc ~/staticdeps/bin/x86_64-linux-musl-gcc
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "${HOME}/staticdeps/bin" >> "$GITHUB_PATH"
|
|
||||||
@@ -1,34 +0,0 @@
|
|||||||
#file: noinspection MandatoryParamsAbsent,UndefinedAction
|
|
||||||
# This is a fake workflow that never runs.
|
|
||||||
# It's used to pin actions to specific git SHAs when generating actual workflows.
|
|
||||||
# It also gets updated by dependabot (see .github/dependabot.yml).
|
|
||||||
# Generated from Workflow.pkl. DO NOT EDIT.
|
|
||||||
name: __lockfile__
|
|
||||||
'on':
|
|
||||||
push:
|
|
||||||
branches-ignore:
|
|
||||||
- '**'
|
|
||||||
tags-ignore:
|
|
||||||
- '**'
|
|
||||||
permissions: {}
|
|
||||||
jobs:
|
|
||||||
locks:
|
|
||||||
if: 'false'
|
|
||||||
runs-on: nothing
|
|
||||||
steps:
|
|
||||||
- name: EnricoMi/publish-unit-test-result-action@v2
|
|
||||||
uses: EnricoMi/publish-unit-test-result-action@c950f6fb443cb5af20a377fd0dfaa78838901040 # v2
|
|
||||||
- name: actions/checkout@v6
|
|
||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
- name: actions/create-github-app-token@v2
|
|
||||||
uses: actions/create-github-app-token@fee1f7d63c2ff003460e3d139729b119787bc349 # v2
|
|
||||||
- name: actions/download-artifact@v6
|
|
||||||
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
|
|
||||||
- name: actions/setup-java@v5
|
|
||||||
uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
- name: actions/upload-artifact@v5
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
- name: dawidd6/action-download-artifact@v11
|
|
||||||
uses: dawidd6/action-download-artifact@ac66b43f0e6a346234dd65d4d0c8fbb31cb316e5 # v11
|
|
||||||
- name: gradle/actions/setup-gradle@v5
|
|
||||||
uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
@@ -1,826 +0,0 @@
|
|||||||
# Generated from Workflow.pkl. DO NOT EDIT.
|
|
||||||
name: Build
|
|
||||||
'on':
|
|
||||||
push:
|
|
||||||
branches-ignore:
|
|
||||||
- main
|
|
||||||
- release/*
|
|
||||||
- dependabot/**
|
|
||||||
tags-ignore:
|
|
||||||
- '**'
|
|
||||||
concurrency:
|
|
||||||
group: ${{ github.workflow }}-${{ github.ref }}
|
|
||||||
cancel-in-progress: false
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
jobs:
|
|
||||||
gradle-check:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
fetch-depth: 0
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: check
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true check
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-gradle-check
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-gradle-check
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
gradle-check-windows:
|
|
||||||
runs-on: windows-latest
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
JAVA_HOME: /jdk
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
fetch-depth: 0
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: check
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true check
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-gradle-check-windows
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-gradle-check-windows
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
bench:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: bench:jmh
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true bench:jmh
|
|
||||||
gradle-compatibility:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
fetch-depth: 0
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: :pkl-gradle:build :pkl-gradle:compatibilityTestReleases
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true :pkl-gradle:build :pkl-gradle:compatibilityTestReleases
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-gradle-compatibility
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-gradle-compatibility
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
java-executables-snapshot:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
fetch-depth: 0
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- name: gradle build java executables
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-doc:build pkl-cli:build pkl-codegen-java:build pkl-codegen-kotlin:build
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-java
|
|
||||||
path: '*/build/executable/**/*'
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-java-executables-snapshot
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-java-executables-snapshot
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
pkl-cli-macOS-amd64-snapshot:
|
|
||||||
if: github.repository_owner == 'apple'
|
|
||||||
runs-on:
|
|
||||||
- self-hosted
|
|
||||||
- macos
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true -Dpkl.targetArch=amd64 "-Dpkl.native--native-compiler-path=${GITHUB_WORKSPACE}/.github/scripts/cc_macos_amd64.sh" pkl-cli:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-cli-macOS-amd64
|
|
||||||
path: pkl-cli*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-cli-macOS-amd64-snapshot
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-cli-macOS-amd64-snapshot
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
pkl-cli-linux-amd64-snapshot:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- name: Install deps
|
|
||||||
run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: Fix git ownership
|
|
||||||
run: git status || git config --system --add safe.directory "$GITHUB_WORKSPACE"
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-cli:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-cli-linux-amd64
|
|
||||||
path: pkl-cli*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-cli-linux-amd64-snapshot
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-cli-linux-amd64-snapshot
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
container:
|
|
||||||
image: redhat/ubi8:8.10
|
|
||||||
pkl-cli-macOS-aarch64-snapshot:
|
|
||||||
if: github.repository_owner == 'apple'
|
|
||||||
runs-on:
|
|
||||||
- self-hosted
|
|
||||||
- macos
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: aarch64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-cli:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-cli-macOS-aarch64
|
|
||||||
path: pkl-cli*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-cli-macOS-aarch64-snapshot
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-cli-macOS-aarch64-snapshot
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
pkl-cli-linux-aarch64-snapshot:
|
|
||||||
runs-on: ubuntu-24.04-arm
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- name: Install deps
|
|
||||||
run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: aarch64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: Fix git ownership
|
|
||||||
run: git status || git config --system --add safe.directory "$GITHUB_WORKSPACE"
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-cli:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-cli-linux-aarch64
|
|
||||||
path: pkl-cli*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-cli-linux-aarch64-snapshot
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-cli-linux-aarch64-snapshot
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
container:
|
|
||||||
image: redhat/ubi8:8.10
|
|
||||||
pkl-cli-alpine-linux-amd64-snapshot:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: Install musl and zlib
|
|
||||||
run: |
|
|
||||||
set -e
|
|
||||||
mkdir -p ~/staticdeps/
|
|
||||||
|
|
||||||
ZLIB_VERSION="1.2.13"
|
|
||||||
MUSL_VERSION="1.2.5"
|
|
||||||
|
|
||||||
# install zlib
|
|
||||||
if [[ ! -f ~/staticdeps/include/zlib.h ]]; then
|
|
||||||
# Download zlib tarball and signature
|
|
||||||
curl -Lf "https://github.com/madler/zlib/releases/download/v${ZLIB_VERSION}/zlib-${ZLIB_VERSION}.tar.gz" -o /tmp/zlib.tar.gz
|
|
||||||
curl -Lf "https://github.com/madler/zlib/releases/download/v${ZLIB_VERSION}/zlib-${ZLIB_VERSION}.tar.gz.asc" -o /tmp/zlib.tar.gz.asc
|
|
||||||
|
|
||||||
# Import zlib GPG key
|
|
||||||
gpg --batch --keyserver keyserver.ubuntu.com --recv-keys 5ED46A6721D365587791E2AA783FCD8E58BCAFBA
|
|
||||||
|
|
||||||
# Verify GPG signature
|
|
||||||
echo "Verifying zlib GPG signature..."
|
|
||||||
gpg --verify /tmp/zlib.tar.gz.asc /tmp/zlib.tar.gz
|
|
||||||
|
|
||||||
mkdir -p "/tmp/dep_zlib-${ZLIB_VERSION}"
|
|
||||||
cd "/tmp/dep_zlib-${ZLIB_VERSION}"
|
|
||||||
# shellcheck disable=SC2002
|
|
||||||
cat /tmp/zlib.tar.gz | tar --strip-components=1 -xzC .
|
|
||||||
|
|
||||||
echo "zlib-${ZLIB_VERSION}: configure..."
|
|
||||||
./configure --static --prefix="$HOME"/staticdeps > /dev/null
|
|
||||||
|
|
||||||
echo "zlib-${ZLIB_VERSION}: make..."
|
|
||||||
make -s -j4
|
|
||||||
|
|
||||||
echo "zlib-${ZLIB_VERSION}: make install..."
|
|
||||||
make -s install
|
|
||||||
|
|
||||||
rm -rf /tmp/dep_zlib-${ZLIB_VERSION}
|
|
||||||
fi
|
|
||||||
|
|
||||||
# install musl
|
|
||||||
if [[ ! -f ~/staticdeps/bin/x86_64-linux-musl-gcc ]]; then
|
|
||||||
# Download musl tarball and signature
|
|
||||||
curl -Lf "https://musl.libc.org/releases/musl-${MUSL_VERSION}.tar.gz" -o /tmp/musl.tar.gz
|
|
||||||
curl -Lf "https://musl.libc.org/releases/musl-${MUSL_VERSION}.tar.gz.asc" -o /tmp/musl.tar.gz.asc
|
|
||||||
|
|
||||||
# Import musl GPG key
|
|
||||||
gpg --batch --keyserver keyserver.ubuntu.com --recv-keys 836489290BB6B70F99FFDA0556BCDB593020450F
|
|
||||||
|
|
||||||
# Verify GPG signature
|
|
||||||
echo "Verifying musl GPG signature..."
|
|
||||||
gpg --verify /tmp/musl.tar.gz.asc /tmp/musl.tar.gz
|
|
||||||
|
|
||||||
mkdir -p "/tmp/dep_musl-${MUSL_VERSION}"
|
|
||||||
cd "/tmp/dep_musl-${MUSL_VERSION}"
|
|
||||||
|
|
||||||
# shellcheck disable=SC2002
|
|
||||||
cat /tmp/musl.tar.gz | tar --strip-components=1 -xzC .
|
|
||||||
|
|
||||||
echo "musl-${MUSL_VERSION}: configure..."
|
|
||||||
./configure --disable-shared --prefix="$HOME"/staticdeps > /dev/null
|
|
||||||
|
|
||||||
echo "musl-${MUSL_VERSION}: make..."
|
|
||||||
make -s -j4
|
|
||||||
|
|
||||||
echo "musl-${MUSL_VERSION}: make install..."
|
|
||||||
make -s install
|
|
||||||
|
|
||||||
rm -rf "/tmp/dep_musl-${MUSL_VERSION}"
|
|
||||||
|
|
||||||
# native-image expects to find an executable at this path.
|
|
||||||
ln -s ~/staticdeps/bin/musl-gcc ~/staticdeps/bin/x86_64-linux-musl-gcc
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "${HOME}/staticdeps/bin" >> "$GITHUB_PATH"
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true -Dpkl.musl=true pkl-cli:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-cli-alpine-linux-amd64
|
|
||||||
path: pkl-cli*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-cli-alpine-linux-amd64-snapshot
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-cli-alpine-linux-amd64-snapshot
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
pkl-cli-windows-amd64-snapshot:
|
|
||||||
runs-on: windows-latest
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
JAVA_HOME: /jdk
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-cli:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-cli-windows-amd64
|
|
||||||
path: pkl-cli*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-cli-windows-amd64-snapshot
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-cli-windows-amd64-snapshot
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
pkl-doc-macOS-amd64-snapshot:
|
|
||||||
if: github.repository_owner == 'apple'
|
|
||||||
runs-on:
|
|
||||||
- self-hosted
|
|
||||||
- macos
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true -Dpkl.targetArch=amd64 "-Dpkl.native--native-compiler-path=${GITHUB_WORKSPACE}/.github/scripts/cc_macos_amd64.sh" pkl-doc:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-doc-macOS-amd64
|
|
||||||
path: pkl-doc*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-doc-macOS-amd64-snapshot
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-doc-macOS-amd64-snapshot
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
pkl-doc-linux-amd64-snapshot:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- name: Install deps
|
|
||||||
run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: Fix git ownership
|
|
||||||
run: git status || git config --system --add safe.directory "$GITHUB_WORKSPACE"
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-doc:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-doc-linux-amd64
|
|
||||||
path: pkl-doc*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-doc-linux-amd64-snapshot
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-doc-linux-amd64-snapshot
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
container:
|
|
||||||
image: redhat/ubi8:8.10
|
|
||||||
pkl-doc-macOS-aarch64-snapshot:
|
|
||||||
if: github.repository_owner == 'apple'
|
|
||||||
runs-on:
|
|
||||||
- self-hosted
|
|
||||||
- macos
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: aarch64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-doc:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-doc-macOS-aarch64
|
|
||||||
path: pkl-doc*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-doc-macOS-aarch64-snapshot
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-doc-macOS-aarch64-snapshot
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
pkl-doc-linux-aarch64-snapshot:
|
|
||||||
runs-on: ubuntu-24.04-arm
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- name: Install deps
|
|
||||||
run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: aarch64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: Fix git ownership
|
|
||||||
run: git status || git config --system --add safe.directory "$GITHUB_WORKSPACE"
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-doc:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-doc-linux-aarch64
|
|
||||||
path: pkl-doc*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-doc-linux-aarch64-snapshot
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-doc-linux-aarch64-snapshot
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
container:
|
|
||||||
image: redhat/ubi8:8.10
|
|
||||||
pkl-doc-alpine-linux-amd64-snapshot:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: Install musl and zlib
|
|
||||||
run: |
|
|
||||||
set -e
|
|
||||||
mkdir -p ~/staticdeps/
|
|
||||||
|
|
||||||
ZLIB_VERSION="1.2.13"
|
|
||||||
MUSL_VERSION="1.2.5"
|
|
||||||
|
|
||||||
# install zlib
|
|
||||||
if [[ ! -f ~/staticdeps/include/zlib.h ]]; then
|
|
||||||
# Download zlib tarball and signature
|
|
||||||
curl -Lf "https://github.com/madler/zlib/releases/download/v${ZLIB_VERSION}/zlib-${ZLIB_VERSION}.tar.gz" -o /tmp/zlib.tar.gz
|
|
||||||
curl -Lf "https://github.com/madler/zlib/releases/download/v${ZLIB_VERSION}/zlib-${ZLIB_VERSION}.tar.gz.asc" -o /tmp/zlib.tar.gz.asc
|
|
||||||
|
|
||||||
# Import zlib GPG key
|
|
||||||
gpg --batch --keyserver keyserver.ubuntu.com --recv-keys 5ED46A6721D365587791E2AA783FCD8E58BCAFBA
|
|
||||||
|
|
||||||
# Verify GPG signature
|
|
||||||
echo "Verifying zlib GPG signature..."
|
|
||||||
gpg --verify /tmp/zlib.tar.gz.asc /tmp/zlib.tar.gz
|
|
||||||
|
|
||||||
mkdir -p "/tmp/dep_zlib-${ZLIB_VERSION}"
|
|
||||||
cd "/tmp/dep_zlib-${ZLIB_VERSION}"
|
|
||||||
# shellcheck disable=SC2002
|
|
||||||
cat /tmp/zlib.tar.gz | tar --strip-components=1 -xzC .
|
|
||||||
|
|
||||||
echo "zlib-${ZLIB_VERSION}: configure..."
|
|
||||||
./configure --static --prefix="$HOME"/staticdeps > /dev/null
|
|
||||||
|
|
||||||
echo "zlib-${ZLIB_VERSION}: make..."
|
|
||||||
make -s -j4
|
|
||||||
|
|
||||||
echo "zlib-${ZLIB_VERSION}: make install..."
|
|
||||||
make -s install
|
|
||||||
|
|
||||||
rm -rf /tmp/dep_zlib-${ZLIB_VERSION}
|
|
||||||
fi
|
|
||||||
|
|
||||||
# install musl
|
|
||||||
if [[ ! -f ~/staticdeps/bin/x86_64-linux-musl-gcc ]]; then
|
|
||||||
# Download musl tarball and signature
|
|
||||||
curl -Lf "https://musl.libc.org/releases/musl-${MUSL_VERSION}.tar.gz" -o /tmp/musl.tar.gz
|
|
||||||
curl -Lf "https://musl.libc.org/releases/musl-${MUSL_VERSION}.tar.gz.asc" -o /tmp/musl.tar.gz.asc
|
|
||||||
|
|
||||||
# Import musl GPG key
|
|
||||||
gpg --batch --keyserver keyserver.ubuntu.com --recv-keys 836489290BB6B70F99FFDA0556BCDB593020450F
|
|
||||||
|
|
||||||
# Verify GPG signature
|
|
||||||
echo "Verifying musl GPG signature..."
|
|
||||||
gpg --verify /tmp/musl.tar.gz.asc /tmp/musl.tar.gz
|
|
||||||
|
|
||||||
mkdir -p "/tmp/dep_musl-${MUSL_VERSION}"
|
|
||||||
cd "/tmp/dep_musl-${MUSL_VERSION}"
|
|
||||||
|
|
||||||
# shellcheck disable=SC2002
|
|
||||||
cat /tmp/musl.tar.gz | tar --strip-components=1 -xzC .
|
|
||||||
|
|
||||||
echo "musl-${MUSL_VERSION}: configure..."
|
|
||||||
./configure --disable-shared --prefix="$HOME"/staticdeps > /dev/null
|
|
||||||
|
|
||||||
echo "musl-${MUSL_VERSION}: make..."
|
|
||||||
make -s -j4
|
|
||||||
|
|
||||||
echo "musl-${MUSL_VERSION}: make install..."
|
|
||||||
make -s install
|
|
||||||
|
|
||||||
rm -rf "/tmp/dep_musl-${MUSL_VERSION}"
|
|
||||||
|
|
||||||
# native-image expects to find an executable at this path.
|
|
||||||
ln -s ~/staticdeps/bin/musl-gcc ~/staticdeps/bin/x86_64-linux-musl-gcc
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "${HOME}/staticdeps/bin" >> "$GITHUB_PATH"
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true -Dpkl.musl=true pkl-doc:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-doc-alpine-linux-amd64
|
|
||||||
path: pkl-doc*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-doc-alpine-linux-amd64-snapshot
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-doc-alpine-linux-amd64-snapshot
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
pkl-doc-windows-amd64-snapshot:
|
|
||||||
runs-on: windows-latest
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
JAVA_HOME: /jdk
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-doc:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-doc-windows-amd64
|
|
||||||
path: pkl-doc*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-doc-windows-amd64-snapshot
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-doc-windows-amd64-snapshot
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
publish-test-results:
|
|
||||||
if: '!cancelled()'
|
|
||||||
needs:
|
|
||||||
- gradle-check
|
|
||||||
- gradle-check-windows
|
|
||||||
- gradle-compatibility
|
|
||||||
- java-executables-snapshot
|
|
||||||
- pkl-cli-macOS-amd64-snapshot
|
|
||||||
- pkl-cli-linux-amd64-snapshot
|
|
||||||
- pkl-cli-macOS-aarch64-snapshot
|
|
||||||
- pkl-cli-linux-aarch64-snapshot
|
|
||||||
- pkl-cli-alpine-linux-amd64-snapshot
|
|
||||||
- pkl-cli-windows-amd64-snapshot
|
|
||||||
- pkl-doc-macOS-amd64-snapshot
|
|
||||||
- pkl-doc-linux-amd64-snapshot
|
|
||||||
- pkl-doc-macOS-aarch64-snapshot
|
|
||||||
- pkl-doc-linux-aarch64-snapshot
|
|
||||||
- pkl-doc-alpine-linux-amd64-snapshot
|
|
||||||
- pkl-doc-windows-amd64-snapshot
|
|
||||||
permissions:
|
|
||||||
checks: write
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
|
|
||||||
with:
|
|
||||||
pattern: test-results-xml-*
|
|
||||||
- name: Publish test results
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: EnricoMi/publish-unit-test-result-action@c950f6fb443cb5af20a377fd0dfaa78838901040 # v2
|
|
||||||
with:
|
|
||||||
comment_mode: 'off'
|
|
||||||
files: test-results-xml-*/**/*.xml
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-publish-test-results
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
@@ -1,913 +0,0 @@
|
|||||||
# Generated from Workflow.pkl. DO NOT EDIT.
|
|
||||||
name: Build (main)
|
|
||||||
'on':
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
tags-ignore:
|
|
||||||
- '**'
|
|
||||||
concurrency:
|
|
||||||
group: ${{ github.workflow }}-${{ github.ref }}
|
|
||||||
cancel-in-progress: false
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
jobs:
|
|
||||||
gradle-check:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
fetch-depth: 0
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: check
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true check
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-gradle-check
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-gradle-check
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
gradle-check-windows:
|
|
||||||
runs-on: windows-latest
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
JAVA_HOME: /jdk
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
fetch-depth: 0
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: check
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true check
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-gradle-check-windows
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-gradle-check-windows
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
bench:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: bench:jmh
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true bench:jmh
|
|
||||||
gradle-compatibility:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
fetch-depth: 0
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: :pkl-gradle:build :pkl-gradle:compatibilityTestReleases
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true :pkl-gradle:build :pkl-gradle:compatibilityTestReleases
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-gradle-compatibility
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-gradle-compatibility
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
java-executables-snapshot:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
fetch-depth: 0
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- name: gradle build java executables
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-doc:build pkl-cli:build pkl-codegen-java:build pkl-codegen-kotlin:build
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-java
|
|
||||||
path: '*/build/executable/**/*'
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-java-executables-snapshot
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-java-executables-snapshot
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
pkl-cli-macOS-amd64-snapshot:
|
|
||||||
if: github.repository_owner == 'apple'
|
|
||||||
runs-on:
|
|
||||||
- self-hosted
|
|
||||||
- macos
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true -Dpkl.targetArch=amd64 "-Dpkl.native--native-compiler-path=${GITHUB_WORKSPACE}/.github/scripts/cc_macos_amd64.sh" pkl-cli:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-cli-macOS-amd64
|
|
||||||
path: pkl-cli*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-cli-macOS-amd64-snapshot
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-cli-macOS-amd64-snapshot
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
pkl-cli-linux-amd64-snapshot:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- name: Install deps
|
|
||||||
run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: Fix git ownership
|
|
||||||
run: git status || git config --system --add safe.directory "$GITHUB_WORKSPACE"
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-cli:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-cli-linux-amd64
|
|
||||||
path: pkl-cli*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-cli-linux-amd64-snapshot
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-cli-linux-amd64-snapshot
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
container:
|
|
||||||
image: redhat/ubi8:8.10
|
|
||||||
pkl-cli-macOS-aarch64-snapshot:
|
|
||||||
if: github.repository_owner == 'apple'
|
|
||||||
runs-on:
|
|
||||||
- self-hosted
|
|
||||||
- macos
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: aarch64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-cli:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-cli-macOS-aarch64
|
|
||||||
path: pkl-cli*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-cli-macOS-aarch64-snapshot
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-cli-macOS-aarch64-snapshot
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
pkl-cli-linux-aarch64-snapshot:
|
|
||||||
runs-on: ubuntu-24.04-arm
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- name: Install deps
|
|
||||||
run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: aarch64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: Fix git ownership
|
|
||||||
run: git status || git config --system --add safe.directory "$GITHUB_WORKSPACE"
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-cli:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-cli-linux-aarch64
|
|
||||||
path: pkl-cli*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-cli-linux-aarch64-snapshot
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-cli-linux-aarch64-snapshot
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
container:
|
|
||||||
image: redhat/ubi8:8.10
|
|
||||||
pkl-cli-alpine-linux-amd64-snapshot:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: Install musl and zlib
|
|
||||||
run: |
|
|
||||||
set -e
|
|
||||||
mkdir -p ~/staticdeps/
|
|
||||||
|
|
||||||
ZLIB_VERSION="1.2.13"
|
|
||||||
MUSL_VERSION="1.2.5"
|
|
||||||
|
|
||||||
# install zlib
|
|
||||||
if [[ ! -f ~/staticdeps/include/zlib.h ]]; then
|
|
||||||
# Download zlib tarball and signature
|
|
||||||
curl -Lf "https://github.com/madler/zlib/releases/download/v${ZLIB_VERSION}/zlib-${ZLIB_VERSION}.tar.gz" -o /tmp/zlib.tar.gz
|
|
||||||
curl -Lf "https://github.com/madler/zlib/releases/download/v${ZLIB_VERSION}/zlib-${ZLIB_VERSION}.tar.gz.asc" -o /tmp/zlib.tar.gz.asc
|
|
||||||
|
|
||||||
# Import zlib GPG key
|
|
||||||
gpg --batch --keyserver keyserver.ubuntu.com --recv-keys 5ED46A6721D365587791E2AA783FCD8E58BCAFBA
|
|
||||||
|
|
||||||
# Verify GPG signature
|
|
||||||
echo "Verifying zlib GPG signature..."
|
|
||||||
gpg --verify /tmp/zlib.tar.gz.asc /tmp/zlib.tar.gz
|
|
||||||
|
|
||||||
mkdir -p "/tmp/dep_zlib-${ZLIB_VERSION}"
|
|
||||||
cd "/tmp/dep_zlib-${ZLIB_VERSION}"
|
|
||||||
# shellcheck disable=SC2002
|
|
||||||
cat /tmp/zlib.tar.gz | tar --strip-components=1 -xzC .
|
|
||||||
|
|
||||||
echo "zlib-${ZLIB_VERSION}: configure..."
|
|
||||||
./configure --static --prefix="$HOME"/staticdeps > /dev/null
|
|
||||||
|
|
||||||
echo "zlib-${ZLIB_VERSION}: make..."
|
|
||||||
make -s -j4
|
|
||||||
|
|
||||||
echo "zlib-${ZLIB_VERSION}: make install..."
|
|
||||||
make -s install
|
|
||||||
|
|
||||||
rm -rf /tmp/dep_zlib-${ZLIB_VERSION}
|
|
||||||
fi
|
|
||||||
|
|
||||||
# install musl
|
|
||||||
if [[ ! -f ~/staticdeps/bin/x86_64-linux-musl-gcc ]]; then
|
|
||||||
# Download musl tarball and signature
|
|
||||||
curl -Lf "https://musl.libc.org/releases/musl-${MUSL_VERSION}.tar.gz" -o /tmp/musl.tar.gz
|
|
||||||
curl -Lf "https://musl.libc.org/releases/musl-${MUSL_VERSION}.tar.gz.asc" -o /tmp/musl.tar.gz.asc
|
|
||||||
|
|
||||||
# Import musl GPG key
|
|
||||||
gpg --batch --keyserver keyserver.ubuntu.com --recv-keys 836489290BB6B70F99FFDA0556BCDB593020450F
|
|
||||||
|
|
||||||
# Verify GPG signature
|
|
||||||
echo "Verifying musl GPG signature..."
|
|
||||||
gpg --verify /tmp/musl.tar.gz.asc /tmp/musl.tar.gz
|
|
||||||
|
|
||||||
mkdir -p "/tmp/dep_musl-${MUSL_VERSION}"
|
|
||||||
cd "/tmp/dep_musl-${MUSL_VERSION}"
|
|
||||||
|
|
||||||
# shellcheck disable=SC2002
|
|
||||||
cat /tmp/musl.tar.gz | tar --strip-components=1 -xzC .
|
|
||||||
|
|
||||||
echo "musl-${MUSL_VERSION}: configure..."
|
|
||||||
./configure --disable-shared --prefix="$HOME"/staticdeps > /dev/null
|
|
||||||
|
|
||||||
echo "musl-${MUSL_VERSION}: make..."
|
|
||||||
make -s -j4
|
|
||||||
|
|
||||||
echo "musl-${MUSL_VERSION}: make install..."
|
|
||||||
make -s install
|
|
||||||
|
|
||||||
rm -rf "/tmp/dep_musl-${MUSL_VERSION}"
|
|
||||||
|
|
||||||
# native-image expects to find an executable at this path.
|
|
||||||
ln -s ~/staticdeps/bin/musl-gcc ~/staticdeps/bin/x86_64-linux-musl-gcc
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "${HOME}/staticdeps/bin" >> "$GITHUB_PATH"
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true -Dpkl.musl=true pkl-cli:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-cli-alpine-linux-amd64
|
|
||||||
path: pkl-cli*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-cli-alpine-linux-amd64-snapshot
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-cli-alpine-linux-amd64-snapshot
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
pkl-cli-windows-amd64-snapshot:
|
|
||||||
runs-on: windows-latest
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
JAVA_HOME: /jdk
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-cli:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-cli-windows-amd64
|
|
||||||
path: pkl-cli*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-cli-windows-amd64-snapshot
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-cli-windows-amd64-snapshot
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
pkl-doc-macOS-amd64-snapshot:
|
|
||||||
if: github.repository_owner == 'apple'
|
|
||||||
runs-on:
|
|
||||||
- self-hosted
|
|
||||||
- macos
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true -Dpkl.targetArch=amd64 "-Dpkl.native--native-compiler-path=${GITHUB_WORKSPACE}/.github/scripts/cc_macos_amd64.sh" pkl-doc:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-doc-macOS-amd64
|
|
||||||
path: pkl-doc*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-doc-macOS-amd64-snapshot
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-doc-macOS-amd64-snapshot
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
pkl-doc-linux-amd64-snapshot:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- name: Install deps
|
|
||||||
run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: Fix git ownership
|
|
||||||
run: git status || git config --system --add safe.directory "$GITHUB_WORKSPACE"
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-doc:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-doc-linux-amd64
|
|
||||||
path: pkl-doc*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-doc-linux-amd64-snapshot
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-doc-linux-amd64-snapshot
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
container:
|
|
||||||
image: redhat/ubi8:8.10
|
|
||||||
pkl-doc-macOS-aarch64-snapshot:
|
|
||||||
if: github.repository_owner == 'apple'
|
|
||||||
runs-on:
|
|
||||||
- self-hosted
|
|
||||||
- macos
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: aarch64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-doc:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-doc-macOS-aarch64
|
|
||||||
path: pkl-doc*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-doc-macOS-aarch64-snapshot
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-doc-macOS-aarch64-snapshot
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
pkl-doc-linux-aarch64-snapshot:
|
|
||||||
runs-on: ubuntu-24.04-arm
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- name: Install deps
|
|
||||||
run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: aarch64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: Fix git ownership
|
|
||||||
run: git status || git config --system --add safe.directory "$GITHUB_WORKSPACE"
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-doc:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-doc-linux-aarch64
|
|
||||||
path: pkl-doc*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-doc-linux-aarch64-snapshot
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-doc-linux-aarch64-snapshot
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
container:
|
|
||||||
image: redhat/ubi8:8.10
|
|
||||||
pkl-doc-alpine-linux-amd64-snapshot:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: Install musl and zlib
|
|
||||||
run: |
|
|
||||||
set -e
|
|
||||||
mkdir -p ~/staticdeps/
|
|
||||||
|
|
||||||
ZLIB_VERSION="1.2.13"
|
|
||||||
MUSL_VERSION="1.2.5"
|
|
||||||
|
|
||||||
# install zlib
|
|
||||||
if [[ ! -f ~/staticdeps/include/zlib.h ]]; then
|
|
||||||
# Download zlib tarball and signature
|
|
||||||
curl -Lf "https://github.com/madler/zlib/releases/download/v${ZLIB_VERSION}/zlib-${ZLIB_VERSION}.tar.gz" -o /tmp/zlib.tar.gz
|
|
||||||
curl -Lf "https://github.com/madler/zlib/releases/download/v${ZLIB_VERSION}/zlib-${ZLIB_VERSION}.tar.gz.asc" -o /tmp/zlib.tar.gz.asc
|
|
||||||
|
|
||||||
# Import zlib GPG key
|
|
||||||
gpg --batch --keyserver keyserver.ubuntu.com --recv-keys 5ED46A6721D365587791E2AA783FCD8E58BCAFBA
|
|
||||||
|
|
||||||
# Verify GPG signature
|
|
||||||
echo "Verifying zlib GPG signature..."
|
|
||||||
gpg --verify /tmp/zlib.tar.gz.asc /tmp/zlib.tar.gz
|
|
||||||
|
|
||||||
mkdir -p "/tmp/dep_zlib-${ZLIB_VERSION}"
|
|
||||||
cd "/tmp/dep_zlib-${ZLIB_VERSION}"
|
|
||||||
# shellcheck disable=SC2002
|
|
||||||
cat /tmp/zlib.tar.gz | tar --strip-components=1 -xzC .
|
|
||||||
|
|
||||||
echo "zlib-${ZLIB_VERSION}: configure..."
|
|
||||||
./configure --static --prefix="$HOME"/staticdeps > /dev/null
|
|
||||||
|
|
||||||
echo "zlib-${ZLIB_VERSION}: make..."
|
|
||||||
make -s -j4
|
|
||||||
|
|
||||||
echo "zlib-${ZLIB_VERSION}: make install..."
|
|
||||||
make -s install
|
|
||||||
|
|
||||||
rm -rf /tmp/dep_zlib-${ZLIB_VERSION}
|
|
||||||
fi
|
|
||||||
|
|
||||||
# install musl
|
|
||||||
if [[ ! -f ~/staticdeps/bin/x86_64-linux-musl-gcc ]]; then
|
|
||||||
# Download musl tarball and signature
|
|
||||||
curl -Lf "https://musl.libc.org/releases/musl-${MUSL_VERSION}.tar.gz" -o /tmp/musl.tar.gz
|
|
||||||
curl -Lf "https://musl.libc.org/releases/musl-${MUSL_VERSION}.tar.gz.asc" -o /tmp/musl.tar.gz.asc
|
|
||||||
|
|
||||||
# Import musl GPG key
|
|
||||||
gpg --batch --keyserver keyserver.ubuntu.com --recv-keys 836489290BB6B70F99FFDA0556BCDB593020450F
|
|
||||||
|
|
||||||
# Verify GPG signature
|
|
||||||
echo "Verifying musl GPG signature..."
|
|
||||||
gpg --verify /tmp/musl.tar.gz.asc /tmp/musl.tar.gz
|
|
||||||
|
|
||||||
mkdir -p "/tmp/dep_musl-${MUSL_VERSION}"
|
|
||||||
cd "/tmp/dep_musl-${MUSL_VERSION}"
|
|
||||||
|
|
||||||
# shellcheck disable=SC2002
|
|
||||||
cat /tmp/musl.tar.gz | tar --strip-components=1 -xzC .
|
|
||||||
|
|
||||||
echo "musl-${MUSL_VERSION}: configure..."
|
|
||||||
./configure --disable-shared --prefix="$HOME"/staticdeps > /dev/null
|
|
||||||
|
|
||||||
echo "musl-${MUSL_VERSION}: make..."
|
|
||||||
make -s -j4
|
|
||||||
|
|
||||||
echo "musl-${MUSL_VERSION}: make install..."
|
|
||||||
make -s install
|
|
||||||
|
|
||||||
rm -rf "/tmp/dep_musl-${MUSL_VERSION}"
|
|
||||||
|
|
||||||
# native-image expects to find an executable at this path.
|
|
||||||
ln -s ~/staticdeps/bin/musl-gcc ~/staticdeps/bin/x86_64-linux-musl-gcc
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "${HOME}/staticdeps/bin" >> "$GITHUB_PATH"
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true -Dpkl.musl=true pkl-doc:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-doc-alpine-linux-amd64
|
|
||||||
path: pkl-doc*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-doc-alpine-linux-amd64-snapshot
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-doc-alpine-linux-amd64-snapshot
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
pkl-doc-windows-amd64-snapshot:
|
|
||||||
runs-on: windows-latest
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
JAVA_HOME: /jdk
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-doc:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-doc-windows-amd64
|
|
||||||
path: pkl-doc*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-doc-windows-amd64-snapshot
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-doc-windows-amd64-snapshot
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
deploy-snapshot:
|
|
||||||
needs:
|
|
||||||
- gradle-check
|
|
||||||
- gradle-check-windows
|
|
||||||
- bench
|
|
||||||
- gradle-compatibility
|
|
||||||
- java-executables-snapshot
|
|
||||||
- pkl-cli-macOS-amd64-snapshot
|
|
||||||
- pkl-cli-linux-amd64-snapshot
|
|
||||||
- pkl-cli-macOS-aarch64-snapshot
|
|
||||||
- pkl-cli-linux-aarch64-snapshot
|
|
||||||
- pkl-cli-alpine-linux-amd64-snapshot
|
|
||||||
- pkl-cli-windows-amd64-snapshot
|
|
||||||
- pkl-doc-macOS-amd64-snapshot
|
|
||||||
- pkl-doc-linux-amd64-snapshot
|
|
||||||
- pkl-doc-macOS-aarch64-snapshot
|
|
||||||
- pkl-doc-linux-aarch64-snapshot
|
|
||||||
- pkl-doc-alpine-linux-amd64-snapshot
|
|
||||||
- pkl-doc-windows-amd64-snapshot
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
environment: maven-release
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
|
|
||||||
with:
|
|
||||||
pattern: executable-**
|
|
||||||
merge-multiple: true
|
|
||||||
- env:
|
|
||||||
ORG_GRADLE_PROJECT_signingKeyId: ${{ secrets.ORG_GRADLE_PROJECT_SIGNINGKEYID }}
|
|
||||||
ORG_GRADLE_PROJECT_signingKey: ${{ secrets.ORG_GRADLE_PROJECT_SIGNINGKEY }}
|
|
||||||
ORG_GRADLE_PROJECT_signingPassword: ${{ secrets.ORG_GRADLE_PROJECT_SIGNINGPASSWORD }}
|
|
||||||
ORG_GRADLE_PROJECT_sonatypePassword: ${{ secrets.ORG_GRADLE_PROJECT_SONATYPEPASSWORD }}
|
|
||||||
ORG_GRADLE_PROJECT_sonatypeUsername: ${{ secrets.ORG_GRADLE_PROJECT_SONATYPEUSERNAME }}
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true --no-parallel publishToSonatype
|
|
||||||
publish-test-results:
|
|
||||||
if: '!cancelled()'
|
|
||||||
needs:
|
|
||||||
- gradle-check
|
|
||||||
- gradle-check-windows
|
|
||||||
- gradle-compatibility
|
|
||||||
- java-executables-snapshot
|
|
||||||
- pkl-cli-macOS-amd64-snapshot
|
|
||||||
- pkl-cli-linux-amd64-snapshot
|
|
||||||
- pkl-cli-macOS-aarch64-snapshot
|
|
||||||
- pkl-cli-linux-aarch64-snapshot
|
|
||||||
- pkl-cli-alpine-linux-amd64-snapshot
|
|
||||||
- pkl-cli-windows-amd64-snapshot
|
|
||||||
- pkl-doc-macOS-amd64-snapshot
|
|
||||||
- pkl-doc-linux-amd64-snapshot
|
|
||||||
- pkl-doc-macOS-aarch64-snapshot
|
|
||||||
- pkl-doc-linux-aarch64-snapshot
|
|
||||||
- pkl-doc-alpine-linux-amd64-snapshot
|
|
||||||
- pkl-doc-windows-amd64-snapshot
|
|
||||||
permissions:
|
|
||||||
checks: write
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
|
|
||||||
with:
|
|
||||||
pattern: test-results-xml-*
|
|
||||||
- name: Publish test results
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: EnricoMi/publish-unit-test-result-action@c950f6fb443cb5af20a377fd0dfaa78838901040 # v2
|
|
||||||
with:
|
|
||||||
comment_mode: 'off'
|
|
||||||
files: test-results-xml-*/**/*.xml
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-publish-test-results
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
trigger-downstream-builds:
|
|
||||||
if: github.repository_owner == 'apple'
|
|
||||||
needs:
|
|
||||||
- gradle-check
|
|
||||||
- gradle-check-windows
|
|
||||||
- bench
|
|
||||||
- gradle-compatibility
|
|
||||||
- java-executables-snapshot
|
|
||||||
- pkl-cli-macOS-amd64-snapshot
|
|
||||||
- pkl-cli-linux-amd64-snapshot
|
|
||||||
- pkl-cli-macOS-aarch64-snapshot
|
|
||||||
- pkl-cli-linux-aarch64-snapshot
|
|
||||||
- pkl-cli-alpine-linux-amd64-snapshot
|
|
||||||
- pkl-cli-windows-amd64-snapshot
|
|
||||||
- pkl-doc-macOS-amd64-snapshot
|
|
||||||
- pkl-doc-linux-amd64-snapshot
|
|
||||||
- pkl-doc-macOS-aarch64-snapshot
|
|
||||||
- pkl-doc-linux-aarch64-snapshot
|
|
||||||
- pkl-doc-alpine-linux-amd64-snapshot
|
|
||||||
- pkl-doc-windows-amd64-snapshot
|
|
||||||
- deploy-snapshot
|
|
||||||
- publish-test-results
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Create app token
|
|
||||||
id: app-token
|
|
||||||
uses: actions/create-github-app-token@fee1f7d63c2ff003460e3d139729b119787bc349 # v2
|
|
||||||
with:
|
|
||||||
app-id: ${{ secrets.PKL_CI_CLIENT_ID }}
|
|
||||||
private-key: ${{ secrets.PKL_CI }}
|
|
||||||
owner: ${{ github.repository_owner }}
|
|
||||||
- name: Trigger pkl-lang.org build
|
|
||||||
env:
|
|
||||||
GH_TOKEN: ${{ steps.app-token.outputs.token }}
|
|
||||||
SOURCE_RUN: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
|
|
||||||
run: |-
|
|
||||||
gh workflow run \
|
|
||||||
--repo apple/pkl-lang.org \
|
|
||||||
--ref main \
|
|
||||||
--field source_run="${SOURCE_RUN}" \
|
|
||||||
main.yml
|
|
||||||
@@ -1,755 +0,0 @@
|
|||||||
# Generated from Workflow.pkl. DO NOT EDIT.
|
|
||||||
name: Pull Request
|
|
||||||
'on':
|
|
||||||
pull_request: {}
|
|
||||||
concurrency:
|
|
||||||
group: ${{ github.workflow }}-${{ github.ref }}
|
|
||||||
cancel-in-progress: true
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
jobs:
|
|
||||||
gradle-check:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
fetch-depth: 0
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: check
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true check
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-gradle-check
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-gradle-check
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
gradle-check-windows:
|
|
||||||
if: contains(github.event.pull_request.body, '[windows]')
|
|
||||||
runs-on: windows-latest
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
JAVA_HOME: /jdk
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
fetch-depth: 0
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: check
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true check
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-gradle-check-windows
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-gradle-check-windows
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
pkl-cli-macOS-amd64-snapshot:
|
|
||||||
if: (contains(github.event.pull_request.body, '[native]') || contains(github.event.pull_request.body, '[native-pkl-cli]') || contains(github.event.pull_request.body, '[native-pkl-cli-macOS]') || contains(github.event.pull_request.body, '[native-pkl-cli-macOS-amd64]') || contains(github.event.pull_request.body, '[native-pkl-cli-macOS-amd64]')) && github.repository_owner == 'apple'
|
|
||||||
runs-on:
|
|
||||||
- self-hosted
|
|
||||||
- macos
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true -Dpkl.targetArch=amd64 "-Dpkl.native--native-compiler-path=${GITHUB_WORKSPACE}/.github/scripts/cc_macos_amd64.sh" pkl-cli:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-cli-macOS-amd64
|
|
||||||
path: pkl-cli*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-cli-macOS-amd64-snapshot
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-cli-macOS-amd64-snapshot
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
pkl-cli-linux-amd64-snapshot:
|
|
||||||
if: contains(github.event.pull_request.body, '[native]') || contains(github.event.pull_request.body, '[native-pkl-cli]') || contains(github.event.pull_request.body, '[native-pkl-cli-linux]') || contains(github.event.pull_request.body, '[native-pkl-cli-linux-amd64]') || contains(github.event.pull_request.body, '[native-pkl-cli-linux-amd64]')
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- name: Install deps
|
|
||||||
run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: Fix git ownership
|
|
||||||
run: git status || git config --system --add safe.directory "$GITHUB_WORKSPACE"
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-cli:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-cli-linux-amd64
|
|
||||||
path: pkl-cli*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-cli-linux-amd64-snapshot
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-cli-linux-amd64-snapshot
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
container:
|
|
||||||
image: redhat/ubi8:8.10
|
|
||||||
pkl-cli-macOS-aarch64-snapshot:
|
|
||||||
if: (contains(github.event.pull_request.body, '[native]') || contains(github.event.pull_request.body, '[native-pkl-cli]') || contains(github.event.pull_request.body, '[native-pkl-cli-macOS]') || contains(github.event.pull_request.body, '[native-pkl-cli-macOS-aarch64]') || contains(github.event.pull_request.body, '[native-pkl-cli-macOS-aarch64]')) && github.repository_owner == 'apple'
|
|
||||||
runs-on:
|
|
||||||
- self-hosted
|
|
||||||
- macos
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: aarch64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-cli:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-cli-macOS-aarch64
|
|
||||||
path: pkl-cli*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-cli-macOS-aarch64-snapshot
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-cli-macOS-aarch64-snapshot
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
pkl-cli-linux-aarch64-snapshot:
|
|
||||||
if: contains(github.event.pull_request.body, '[native]') || contains(github.event.pull_request.body, '[native-pkl-cli]') || contains(github.event.pull_request.body, '[native-pkl-cli-linux]') || contains(github.event.pull_request.body, '[native-pkl-cli-linux-aarch64]') || contains(github.event.pull_request.body, '[native-pkl-cli-linux-aarch64]')
|
|
||||||
runs-on: ubuntu-24.04-arm
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- name: Install deps
|
|
||||||
run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: aarch64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: Fix git ownership
|
|
||||||
run: git status || git config --system --add safe.directory "$GITHUB_WORKSPACE"
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-cli:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-cli-linux-aarch64
|
|
||||||
path: pkl-cli*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-cli-linux-aarch64-snapshot
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-cli-linux-aarch64-snapshot
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
container:
|
|
||||||
image: redhat/ubi8:8.10
|
|
||||||
pkl-cli-alpine-linux-amd64-snapshot:
|
|
||||||
if: contains(github.event.pull_request.body, '[native]') || contains(github.event.pull_request.body, '[native-pkl-cli]') || contains(github.event.pull_request.body, '[native-pkl-cli-linux]') || contains(github.event.pull_request.body, '[native-pkl-cli-linux-amd64]') || contains(github.event.pull_request.body, '[native-pkl-cli-linux-amd64]') || contains(github.event.pull_request.body, '[native-pkl-cli-alpine-linux-amd64]')
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: Install musl and zlib
|
|
||||||
run: |
|
|
||||||
set -e
|
|
||||||
mkdir -p ~/staticdeps/
|
|
||||||
|
|
||||||
ZLIB_VERSION="1.2.13"
|
|
||||||
MUSL_VERSION="1.2.5"
|
|
||||||
|
|
||||||
# install zlib
|
|
||||||
if [[ ! -f ~/staticdeps/include/zlib.h ]]; then
|
|
||||||
# Download zlib tarball and signature
|
|
||||||
curl -Lf "https://github.com/madler/zlib/releases/download/v${ZLIB_VERSION}/zlib-${ZLIB_VERSION}.tar.gz" -o /tmp/zlib.tar.gz
|
|
||||||
curl -Lf "https://github.com/madler/zlib/releases/download/v${ZLIB_VERSION}/zlib-${ZLIB_VERSION}.tar.gz.asc" -o /tmp/zlib.tar.gz.asc
|
|
||||||
|
|
||||||
# Import zlib GPG key
|
|
||||||
gpg --batch --keyserver keyserver.ubuntu.com --recv-keys 5ED46A6721D365587791E2AA783FCD8E58BCAFBA
|
|
||||||
|
|
||||||
# Verify GPG signature
|
|
||||||
echo "Verifying zlib GPG signature..."
|
|
||||||
gpg --verify /tmp/zlib.tar.gz.asc /tmp/zlib.tar.gz
|
|
||||||
|
|
||||||
mkdir -p "/tmp/dep_zlib-${ZLIB_VERSION}"
|
|
||||||
cd "/tmp/dep_zlib-${ZLIB_VERSION}"
|
|
||||||
# shellcheck disable=SC2002
|
|
||||||
cat /tmp/zlib.tar.gz | tar --strip-components=1 -xzC .
|
|
||||||
|
|
||||||
echo "zlib-${ZLIB_VERSION}: configure..."
|
|
||||||
./configure --static --prefix="$HOME"/staticdeps > /dev/null
|
|
||||||
|
|
||||||
echo "zlib-${ZLIB_VERSION}: make..."
|
|
||||||
make -s -j4
|
|
||||||
|
|
||||||
echo "zlib-${ZLIB_VERSION}: make install..."
|
|
||||||
make -s install
|
|
||||||
|
|
||||||
rm -rf /tmp/dep_zlib-${ZLIB_VERSION}
|
|
||||||
fi
|
|
||||||
|
|
||||||
# install musl
|
|
||||||
if [[ ! -f ~/staticdeps/bin/x86_64-linux-musl-gcc ]]; then
|
|
||||||
# Download musl tarball and signature
|
|
||||||
curl -Lf "https://musl.libc.org/releases/musl-${MUSL_VERSION}.tar.gz" -o /tmp/musl.tar.gz
|
|
||||||
curl -Lf "https://musl.libc.org/releases/musl-${MUSL_VERSION}.tar.gz.asc" -o /tmp/musl.tar.gz.asc
|
|
||||||
|
|
||||||
# Import musl GPG key
|
|
||||||
gpg --batch --keyserver keyserver.ubuntu.com --recv-keys 836489290BB6B70F99FFDA0556BCDB593020450F
|
|
||||||
|
|
||||||
# Verify GPG signature
|
|
||||||
echo "Verifying musl GPG signature..."
|
|
||||||
gpg --verify /tmp/musl.tar.gz.asc /tmp/musl.tar.gz
|
|
||||||
|
|
||||||
mkdir -p "/tmp/dep_musl-${MUSL_VERSION}"
|
|
||||||
cd "/tmp/dep_musl-${MUSL_VERSION}"
|
|
||||||
|
|
||||||
# shellcheck disable=SC2002
|
|
||||||
cat /tmp/musl.tar.gz | tar --strip-components=1 -xzC .
|
|
||||||
|
|
||||||
echo "musl-${MUSL_VERSION}: configure..."
|
|
||||||
./configure --disable-shared --prefix="$HOME"/staticdeps > /dev/null
|
|
||||||
|
|
||||||
echo "musl-${MUSL_VERSION}: make..."
|
|
||||||
make -s -j4
|
|
||||||
|
|
||||||
echo "musl-${MUSL_VERSION}: make install..."
|
|
||||||
make -s install
|
|
||||||
|
|
||||||
rm -rf "/tmp/dep_musl-${MUSL_VERSION}"
|
|
||||||
|
|
||||||
# native-image expects to find an executable at this path.
|
|
||||||
ln -s ~/staticdeps/bin/musl-gcc ~/staticdeps/bin/x86_64-linux-musl-gcc
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "${HOME}/staticdeps/bin" >> "$GITHUB_PATH"
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true -Dpkl.musl=true pkl-cli:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-cli-alpine-linux-amd64
|
|
||||||
path: pkl-cli*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-cli-alpine-linux-amd64-snapshot
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-cli-alpine-linux-amd64-snapshot
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
pkl-cli-windows-amd64-snapshot:
|
|
||||||
if: contains(github.event.pull_request.body, '[native]') || contains(github.event.pull_request.body, '[native-pkl-cli]') || contains(github.event.pull_request.body, '[native-pkl-cli-windows]') || contains(github.event.pull_request.body, '[native-pkl-cli-windows-amd64]') || contains(github.event.pull_request.body, '[native-pkl-cli-windows-amd64]')
|
|
||||||
runs-on: windows-latest
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
JAVA_HOME: /jdk
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-cli:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-cli-windows-amd64
|
|
||||||
path: pkl-cli*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-cli-windows-amd64-snapshot
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-cli-windows-amd64-snapshot
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
pkl-doc-macOS-amd64-snapshot:
|
|
||||||
if: (contains(github.event.pull_request.body, '[native]') || contains(github.event.pull_request.body, '[native-pkl-doc]') || contains(github.event.pull_request.body, '[native-pkl-doc-macOS]') || contains(github.event.pull_request.body, '[native-pkl-doc-macOS-amd64]') || contains(github.event.pull_request.body, '[native-pkl-doc-macOS-amd64]')) && github.repository_owner == 'apple'
|
|
||||||
runs-on:
|
|
||||||
- self-hosted
|
|
||||||
- macos
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true -Dpkl.targetArch=amd64 "-Dpkl.native--native-compiler-path=${GITHUB_WORKSPACE}/.github/scripts/cc_macos_amd64.sh" pkl-doc:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-doc-macOS-amd64
|
|
||||||
path: pkl-doc*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-doc-macOS-amd64-snapshot
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-doc-macOS-amd64-snapshot
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
pkl-doc-linux-amd64-snapshot:
|
|
||||||
if: contains(github.event.pull_request.body, '[native]') || contains(github.event.pull_request.body, '[native-pkl-doc]') || contains(github.event.pull_request.body, '[native-pkl-doc-linux]') || contains(github.event.pull_request.body, '[native-pkl-doc-linux-amd64]') || contains(github.event.pull_request.body, '[native-pkl-doc-linux-amd64]')
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- name: Install deps
|
|
||||||
run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: Fix git ownership
|
|
||||||
run: git status || git config --system --add safe.directory "$GITHUB_WORKSPACE"
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-doc:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-doc-linux-amd64
|
|
||||||
path: pkl-doc*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-doc-linux-amd64-snapshot
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-doc-linux-amd64-snapshot
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
container:
|
|
||||||
image: redhat/ubi8:8.10
|
|
||||||
pkl-doc-macOS-aarch64-snapshot:
|
|
||||||
if: (contains(github.event.pull_request.body, '[native]') || contains(github.event.pull_request.body, '[native-pkl-doc]') || contains(github.event.pull_request.body, '[native-pkl-doc-macOS]') || contains(github.event.pull_request.body, '[native-pkl-doc-macOS-aarch64]') || contains(github.event.pull_request.body, '[native-pkl-doc-macOS-aarch64]')) && github.repository_owner == 'apple'
|
|
||||||
runs-on:
|
|
||||||
- self-hosted
|
|
||||||
- macos
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: aarch64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-doc:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-doc-macOS-aarch64
|
|
||||||
path: pkl-doc*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-doc-macOS-aarch64-snapshot
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-doc-macOS-aarch64-snapshot
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
pkl-doc-linux-aarch64-snapshot:
|
|
||||||
if: contains(github.event.pull_request.body, '[native]') || contains(github.event.pull_request.body, '[native-pkl-doc]') || contains(github.event.pull_request.body, '[native-pkl-doc-linux]') || contains(github.event.pull_request.body, '[native-pkl-doc-linux-aarch64]') || contains(github.event.pull_request.body, '[native-pkl-doc-linux-aarch64]')
|
|
||||||
runs-on: ubuntu-24.04-arm
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- name: Install deps
|
|
||||||
run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: aarch64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: Fix git ownership
|
|
||||||
run: git status || git config --system --add safe.directory "$GITHUB_WORKSPACE"
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-doc:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-doc-linux-aarch64
|
|
||||||
path: pkl-doc*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-doc-linux-aarch64-snapshot
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-doc-linux-aarch64-snapshot
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
container:
|
|
||||||
image: redhat/ubi8:8.10
|
|
||||||
pkl-doc-alpine-linux-amd64-snapshot:
|
|
||||||
if: contains(github.event.pull_request.body, '[native]') || contains(github.event.pull_request.body, '[native-pkl-doc]') || contains(github.event.pull_request.body, '[native-pkl-doc-linux]') || contains(github.event.pull_request.body, '[native-pkl-doc-linux-amd64]') || contains(github.event.pull_request.body, '[native-pkl-doc-linux-amd64]') || contains(github.event.pull_request.body, '[native-pkl-doc-alpine-linux-amd64]')
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: Install musl and zlib
|
|
||||||
run: |
|
|
||||||
set -e
|
|
||||||
mkdir -p ~/staticdeps/
|
|
||||||
|
|
||||||
ZLIB_VERSION="1.2.13"
|
|
||||||
MUSL_VERSION="1.2.5"
|
|
||||||
|
|
||||||
# install zlib
|
|
||||||
if [[ ! -f ~/staticdeps/include/zlib.h ]]; then
|
|
||||||
# Download zlib tarball and signature
|
|
||||||
curl -Lf "https://github.com/madler/zlib/releases/download/v${ZLIB_VERSION}/zlib-${ZLIB_VERSION}.tar.gz" -o /tmp/zlib.tar.gz
|
|
||||||
curl -Lf "https://github.com/madler/zlib/releases/download/v${ZLIB_VERSION}/zlib-${ZLIB_VERSION}.tar.gz.asc" -o /tmp/zlib.tar.gz.asc
|
|
||||||
|
|
||||||
# Import zlib GPG key
|
|
||||||
gpg --batch --keyserver keyserver.ubuntu.com --recv-keys 5ED46A6721D365587791E2AA783FCD8E58BCAFBA
|
|
||||||
|
|
||||||
# Verify GPG signature
|
|
||||||
echo "Verifying zlib GPG signature..."
|
|
||||||
gpg --verify /tmp/zlib.tar.gz.asc /tmp/zlib.tar.gz
|
|
||||||
|
|
||||||
mkdir -p "/tmp/dep_zlib-${ZLIB_VERSION}"
|
|
||||||
cd "/tmp/dep_zlib-${ZLIB_VERSION}"
|
|
||||||
# shellcheck disable=SC2002
|
|
||||||
cat /tmp/zlib.tar.gz | tar --strip-components=1 -xzC .
|
|
||||||
|
|
||||||
echo "zlib-${ZLIB_VERSION}: configure..."
|
|
||||||
./configure --static --prefix="$HOME"/staticdeps > /dev/null
|
|
||||||
|
|
||||||
echo "zlib-${ZLIB_VERSION}: make..."
|
|
||||||
make -s -j4
|
|
||||||
|
|
||||||
echo "zlib-${ZLIB_VERSION}: make install..."
|
|
||||||
make -s install
|
|
||||||
|
|
||||||
rm -rf /tmp/dep_zlib-${ZLIB_VERSION}
|
|
||||||
fi
|
|
||||||
|
|
||||||
# install musl
|
|
||||||
if [[ ! -f ~/staticdeps/bin/x86_64-linux-musl-gcc ]]; then
|
|
||||||
# Download musl tarball and signature
|
|
||||||
curl -Lf "https://musl.libc.org/releases/musl-${MUSL_VERSION}.tar.gz" -o /tmp/musl.tar.gz
|
|
||||||
curl -Lf "https://musl.libc.org/releases/musl-${MUSL_VERSION}.tar.gz.asc" -o /tmp/musl.tar.gz.asc
|
|
||||||
|
|
||||||
# Import musl GPG key
|
|
||||||
gpg --batch --keyserver keyserver.ubuntu.com --recv-keys 836489290BB6B70F99FFDA0556BCDB593020450F
|
|
||||||
|
|
||||||
# Verify GPG signature
|
|
||||||
echo "Verifying musl GPG signature..."
|
|
||||||
gpg --verify /tmp/musl.tar.gz.asc /tmp/musl.tar.gz
|
|
||||||
|
|
||||||
mkdir -p "/tmp/dep_musl-${MUSL_VERSION}"
|
|
||||||
cd "/tmp/dep_musl-${MUSL_VERSION}"
|
|
||||||
|
|
||||||
# shellcheck disable=SC2002
|
|
||||||
cat /tmp/musl.tar.gz | tar --strip-components=1 -xzC .
|
|
||||||
|
|
||||||
echo "musl-${MUSL_VERSION}: configure..."
|
|
||||||
./configure --disable-shared --prefix="$HOME"/staticdeps > /dev/null
|
|
||||||
|
|
||||||
echo "musl-${MUSL_VERSION}: make..."
|
|
||||||
make -s -j4
|
|
||||||
|
|
||||||
echo "musl-${MUSL_VERSION}: make install..."
|
|
||||||
make -s install
|
|
||||||
|
|
||||||
rm -rf "/tmp/dep_musl-${MUSL_VERSION}"
|
|
||||||
|
|
||||||
# native-image expects to find an executable at this path.
|
|
||||||
ln -s ~/staticdeps/bin/musl-gcc ~/staticdeps/bin/x86_64-linux-musl-gcc
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "${HOME}/staticdeps/bin" >> "$GITHUB_PATH"
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true -Dpkl.musl=true pkl-doc:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-doc-alpine-linux-amd64
|
|
||||||
path: pkl-doc*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-doc-alpine-linux-amd64-snapshot
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-doc-alpine-linux-amd64-snapshot
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
pkl-doc-windows-amd64-snapshot:
|
|
||||||
if: contains(github.event.pull_request.body, '[native]') || contains(github.event.pull_request.body, '[native-pkl-doc]') || contains(github.event.pull_request.body, '[native-pkl-doc-windows]') || contains(github.event.pull_request.body, '[native-pkl-doc-windows-amd64]') || contains(github.event.pull_request.body, '[native-pkl-doc-windows-amd64]')
|
|
||||||
runs-on: windows-latest
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
JAVA_HOME: /jdk
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-doc:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-doc-windows-amd64
|
|
||||||
path: pkl-doc*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-doc-windows-amd64-snapshot
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-doc-windows-amd64-snapshot
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
upload-event-file:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Upload event file
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-event-file
|
|
||||||
path: ${{ github.event_path }}
|
|
||||||
check-pkl-github-actions:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- name: Setup Pkl
|
|
||||||
id: setup-pkl
|
|
||||||
env:
|
|
||||||
PKL_VERSION: 0.30.0
|
|
||||||
PKL_FILENAME: pkl
|
|
||||||
PKL_DOWNLOAD_URL: https://github.com/apple/pkl/releases/download/0.30.0/pkl-linux-amd64
|
|
||||||
shell: bash
|
|
||||||
run: |-
|
|
||||||
DIR="$(mktemp -d /tmp/pkl-$PKL_VERSION-XXXXXX)"
|
|
||||||
PKL_EXEC="$DIR/$PKL_FILENAME"
|
|
||||||
curl -sfL -o $PKL_EXEC "$PKL_DOWNLOAD_URL"
|
|
||||||
chmod +x $PKL_EXEC
|
|
||||||
echo "$DIR" >> "$GITHUB_PATH"
|
|
||||||
echo "pkl_exec=$PKL_EXEC" >> "$GITHUB_OUTPUT"
|
|
||||||
- shell: bash
|
|
||||||
run: rm -rf .github/**/[a-z]*.yml
|
|
||||||
- shell: bash
|
|
||||||
run: pkl eval -m .github/ --project-dir .github/ .github/index.pkl
|
|
||||||
- name: check git status
|
|
||||||
shell: bash
|
|
||||||
run: |-
|
|
||||||
if [ -n "$(git status --porcelain)" ]; then
|
|
||||||
echo "Running pkl resulted in a diff! You likely need to run 'pkl eval' and commit the changes."
|
|
||||||
git diff --name-only
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
@@ -1,864 +0,0 @@
|
|||||||
# Generated from Workflow.pkl. DO NOT EDIT.
|
|
||||||
name: Build (release branch)
|
|
||||||
'on':
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- release/*
|
|
||||||
tags-ignore:
|
|
||||||
- '**'
|
|
||||||
concurrency:
|
|
||||||
group: ${{ github.workflow }}-${{ github.ref }}
|
|
||||||
cancel-in-progress: true
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
jobs:
|
|
||||||
gradle-check:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
fetch-depth: 0
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: check
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true check
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-gradle-check
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-gradle-check
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
gradle-check-windows:
|
|
||||||
runs-on: windows-latest
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
JAVA_HOME: /jdk
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
fetch-depth: 0
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: check
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true check
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-gradle-check-windows
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-gradle-check-windows
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
bench:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: bench:jmh
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true bench:jmh
|
|
||||||
gradle-compatibility:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
fetch-depth: 0
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: :pkl-gradle:build :pkl-gradle:compatibilityTestReleases
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true :pkl-gradle:build :pkl-gradle:compatibilityTestReleases
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-gradle-compatibility
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-gradle-compatibility
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
java-executables-snapshot:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
fetch-depth: 0
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- name: gradle build java executables
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-doc:build pkl-cli:build pkl-codegen-java:build pkl-codegen-kotlin:build
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-java
|
|
||||||
path: '*/build/executable/**/*'
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-java-executables-snapshot
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-java-executables-snapshot
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
pkl-cli-macOS-amd64-snapshot:
|
|
||||||
if: github.repository_owner == 'apple'
|
|
||||||
runs-on:
|
|
||||||
- self-hosted
|
|
||||||
- macos
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true -Dpkl.targetArch=amd64 "-Dpkl.native--native-compiler-path=${GITHUB_WORKSPACE}/.github/scripts/cc_macos_amd64.sh" pkl-cli:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-cli-macOS-amd64
|
|
||||||
path: pkl-cli*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-cli-macOS-amd64-snapshot
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-cli-macOS-amd64-snapshot
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
pkl-cli-linux-amd64-snapshot:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- name: Install deps
|
|
||||||
run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: Fix git ownership
|
|
||||||
run: git status || git config --system --add safe.directory "$GITHUB_WORKSPACE"
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-cli:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-cli-linux-amd64
|
|
||||||
path: pkl-cli*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-cli-linux-amd64-snapshot
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-cli-linux-amd64-snapshot
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
container:
|
|
||||||
image: redhat/ubi8:8.10
|
|
||||||
pkl-cli-macOS-aarch64-snapshot:
|
|
||||||
if: github.repository_owner == 'apple'
|
|
||||||
runs-on:
|
|
||||||
- self-hosted
|
|
||||||
- macos
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: aarch64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-cli:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-cli-macOS-aarch64
|
|
||||||
path: pkl-cli*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-cli-macOS-aarch64-snapshot
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-cli-macOS-aarch64-snapshot
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
pkl-cli-linux-aarch64-snapshot:
|
|
||||||
runs-on: ubuntu-24.04-arm
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- name: Install deps
|
|
||||||
run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: aarch64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: Fix git ownership
|
|
||||||
run: git status || git config --system --add safe.directory "$GITHUB_WORKSPACE"
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-cli:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-cli-linux-aarch64
|
|
||||||
path: pkl-cli*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-cli-linux-aarch64-snapshot
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-cli-linux-aarch64-snapshot
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
container:
|
|
||||||
image: redhat/ubi8:8.10
|
|
||||||
pkl-cli-alpine-linux-amd64-snapshot:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: Install musl and zlib
|
|
||||||
run: |
|
|
||||||
set -e
|
|
||||||
mkdir -p ~/staticdeps/
|
|
||||||
|
|
||||||
ZLIB_VERSION="1.2.13"
|
|
||||||
MUSL_VERSION="1.2.5"
|
|
||||||
|
|
||||||
# install zlib
|
|
||||||
if [[ ! -f ~/staticdeps/include/zlib.h ]]; then
|
|
||||||
# Download zlib tarball and signature
|
|
||||||
curl -Lf "https://github.com/madler/zlib/releases/download/v${ZLIB_VERSION}/zlib-${ZLIB_VERSION}.tar.gz" -o /tmp/zlib.tar.gz
|
|
||||||
curl -Lf "https://github.com/madler/zlib/releases/download/v${ZLIB_VERSION}/zlib-${ZLIB_VERSION}.tar.gz.asc" -o /tmp/zlib.tar.gz.asc
|
|
||||||
|
|
||||||
# Import zlib GPG key
|
|
||||||
gpg --batch --keyserver keyserver.ubuntu.com --recv-keys 5ED46A6721D365587791E2AA783FCD8E58BCAFBA
|
|
||||||
|
|
||||||
# Verify GPG signature
|
|
||||||
echo "Verifying zlib GPG signature..."
|
|
||||||
gpg --verify /tmp/zlib.tar.gz.asc /tmp/zlib.tar.gz
|
|
||||||
|
|
||||||
mkdir -p "/tmp/dep_zlib-${ZLIB_VERSION}"
|
|
||||||
cd "/tmp/dep_zlib-${ZLIB_VERSION}"
|
|
||||||
# shellcheck disable=SC2002
|
|
||||||
cat /tmp/zlib.tar.gz | tar --strip-components=1 -xzC .
|
|
||||||
|
|
||||||
echo "zlib-${ZLIB_VERSION}: configure..."
|
|
||||||
./configure --static --prefix="$HOME"/staticdeps > /dev/null
|
|
||||||
|
|
||||||
echo "zlib-${ZLIB_VERSION}: make..."
|
|
||||||
make -s -j4
|
|
||||||
|
|
||||||
echo "zlib-${ZLIB_VERSION}: make install..."
|
|
||||||
make -s install
|
|
||||||
|
|
||||||
rm -rf /tmp/dep_zlib-${ZLIB_VERSION}
|
|
||||||
fi
|
|
||||||
|
|
||||||
# install musl
|
|
||||||
if [[ ! -f ~/staticdeps/bin/x86_64-linux-musl-gcc ]]; then
|
|
||||||
# Download musl tarball and signature
|
|
||||||
curl -Lf "https://musl.libc.org/releases/musl-${MUSL_VERSION}.tar.gz" -o /tmp/musl.tar.gz
|
|
||||||
curl -Lf "https://musl.libc.org/releases/musl-${MUSL_VERSION}.tar.gz.asc" -o /tmp/musl.tar.gz.asc
|
|
||||||
|
|
||||||
# Import musl GPG key
|
|
||||||
gpg --batch --keyserver keyserver.ubuntu.com --recv-keys 836489290BB6B70F99FFDA0556BCDB593020450F
|
|
||||||
|
|
||||||
# Verify GPG signature
|
|
||||||
echo "Verifying musl GPG signature..."
|
|
||||||
gpg --verify /tmp/musl.tar.gz.asc /tmp/musl.tar.gz
|
|
||||||
|
|
||||||
mkdir -p "/tmp/dep_musl-${MUSL_VERSION}"
|
|
||||||
cd "/tmp/dep_musl-${MUSL_VERSION}"
|
|
||||||
|
|
||||||
# shellcheck disable=SC2002
|
|
||||||
cat /tmp/musl.tar.gz | tar --strip-components=1 -xzC .
|
|
||||||
|
|
||||||
echo "musl-${MUSL_VERSION}: configure..."
|
|
||||||
./configure --disable-shared --prefix="$HOME"/staticdeps > /dev/null
|
|
||||||
|
|
||||||
echo "musl-${MUSL_VERSION}: make..."
|
|
||||||
make -s -j4
|
|
||||||
|
|
||||||
echo "musl-${MUSL_VERSION}: make install..."
|
|
||||||
make -s install
|
|
||||||
|
|
||||||
rm -rf "/tmp/dep_musl-${MUSL_VERSION}"
|
|
||||||
|
|
||||||
# native-image expects to find an executable at this path.
|
|
||||||
ln -s ~/staticdeps/bin/musl-gcc ~/staticdeps/bin/x86_64-linux-musl-gcc
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "${HOME}/staticdeps/bin" >> "$GITHUB_PATH"
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true -Dpkl.musl=true pkl-cli:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-cli-alpine-linux-amd64
|
|
||||||
path: pkl-cli*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-cli-alpine-linux-amd64-snapshot
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-cli-alpine-linux-amd64-snapshot
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
pkl-cli-windows-amd64-snapshot:
|
|
||||||
runs-on: windows-latest
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
JAVA_HOME: /jdk
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-cli:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-cli-windows-amd64
|
|
||||||
path: pkl-cli*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-cli-windows-amd64-snapshot
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-cli-windows-amd64-snapshot
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
pkl-doc-macOS-amd64-snapshot:
|
|
||||||
if: github.repository_owner == 'apple'
|
|
||||||
runs-on:
|
|
||||||
- self-hosted
|
|
||||||
- macos
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true -Dpkl.targetArch=amd64 "-Dpkl.native--native-compiler-path=${GITHUB_WORKSPACE}/.github/scripts/cc_macos_amd64.sh" pkl-doc:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-doc-macOS-amd64
|
|
||||||
path: pkl-doc*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-doc-macOS-amd64-snapshot
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-doc-macOS-amd64-snapshot
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
pkl-doc-linux-amd64-snapshot:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- name: Install deps
|
|
||||||
run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: Fix git ownership
|
|
||||||
run: git status || git config --system --add safe.directory "$GITHUB_WORKSPACE"
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-doc:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-doc-linux-amd64
|
|
||||||
path: pkl-doc*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-doc-linux-amd64-snapshot
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-doc-linux-amd64-snapshot
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
container:
|
|
||||||
image: redhat/ubi8:8.10
|
|
||||||
pkl-doc-macOS-aarch64-snapshot:
|
|
||||||
if: github.repository_owner == 'apple'
|
|
||||||
runs-on:
|
|
||||||
- self-hosted
|
|
||||||
- macos
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: aarch64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-doc:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-doc-macOS-aarch64
|
|
||||||
path: pkl-doc*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-doc-macOS-aarch64-snapshot
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-doc-macOS-aarch64-snapshot
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
pkl-doc-linux-aarch64-snapshot:
|
|
||||||
runs-on: ubuntu-24.04-arm
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- name: Install deps
|
|
||||||
run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: aarch64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: Fix git ownership
|
|
||||||
run: git status || git config --system --add safe.directory "$GITHUB_WORKSPACE"
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-doc:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-doc-linux-aarch64
|
|
||||||
path: pkl-doc*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-doc-linux-aarch64-snapshot
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-doc-linux-aarch64-snapshot
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
container:
|
|
||||||
image: redhat/ubi8:8.10
|
|
||||||
pkl-doc-alpine-linux-amd64-snapshot:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: Install musl and zlib
|
|
||||||
run: |
|
|
||||||
set -e
|
|
||||||
mkdir -p ~/staticdeps/
|
|
||||||
|
|
||||||
ZLIB_VERSION="1.2.13"
|
|
||||||
MUSL_VERSION="1.2.5"
|
|
||||||
|
|
||||||
# install zlib
|
|
||||||
if [[ ! -f ~/staticdeps/include/zlib.h ]]; then
|
|
||||||
# Download zlib tarball and signature
|
|
||||||
curl -Lf "https://github.com/madler/zlib/releases/download/v${ZLIB_VERSION}/zlib-${ZLIB_VERSION}.tar.gz" -o /tmp/zlib.tar.gz
|
|
||||||
curl -Lf "https://github.com/madler/zlib/releases/download/v${ZLIB_VERSION}/zlib-${ZLIB_VERSION}.tar.gz.asc" -o /tmp/zlib.tar.gz.asc
|
|
||||||
|
|
||||||
# Import zlib GPG key
|
|
||||||
gpg --batch --keyserver keyserver.ubuntu.com --recv-keys 5ED46A6721D365587791E2AA783FCD8E58BCAFBA
|
|
||||||
|
|
||||||
# Verify GPG signature
|
|
||||||
echo "Verifying zlib GPG signature..."
|
|
||||||
gpg --verify /tmp/zlib.tar.gz.asc /tmp/zlib.tar.gz
|
|
||||||
|
|
||||||
mkdir -p "/tmp/dep_zlib-${ZLIB_VERSION}"
|
|
||||||
cd "/tmp/dep_zlib-${ZLIB_VERSION}"
|
|
||||||
# shellcheck disable=SC2002
|
|
||||||
cat /tmp/zlib.tar.gz | tar --strip-components=1 -xzC .
|
|
||||||
|
|
||||||
echo "zlib-${ZLIB_VERSION}: configure..."
|
|
||||||
./configure --static --prefix="$HOME"/staticdeps > /dev/null
|
|
||||||
|
|
||||||
echo "zlib-${ZLIB_VERSION}: make..."
|
|
||||||
make -s -j4
|
|
||||||
|
|
||||||
echo "zlib-${ZLIB_VERSION}: make install..."
|
|
||||||
make -s install
|
|
||||||
|
|
||||||
rm -rf /tmp/dep_zlib-${ZLIB_VERSION}
|
|
||||||
fi
|
|
||||||
|
|
||||||
# install musl
|
|
||||||
if [[ ! -f ~/staticdeps/bin/x86_64-linux-musl-gcc ]]; then
|
|
||||||
# Download musl tarball and signature
|
|
||||||
curl -Lf "https://musl.libc.org/releases/musl-${MUSL_VERSION}.tar.gz" -o /tmp/musl.tar.gz
|
|
||||||
curl -Lf "https://musl.libc.org/releases/musl-${MUSL_VERSION}.tar.gz.asc" -o /tmp/musl.tar.gz.asc
|
|
||||||
|
|
||||||
# Import musl GPG key
|
|
||||||
gpg --batch --keyserver keyserver.ubuntu.com --recv-keys 836489290BB6B70F99FFDA0556BCDB593020450F
|
|
||||||
|
|
||||||
# Verify GPG signature
|
|
||||||
echo "Verifying musl GPG signature..."
|
|
||||||
gpg --verify /tmp/musl.tar.gz.asc /tmp/musl.tar.gz
|
|
||||||
|
|
||||||
mkdir -p "/tmp/dep_musl-${MUSL_VERSION}"
|
|
||||||
cd "/tmp/dep_musl-${MUSL_VERSION}"
|
|
||||||
|
|
||||||
# shellcheck disable=SC2002
|
|
||||||
cat /tmp/musl.tar.gz | tar --strip-components=1 -xzC .
|
|
||||||
|
|
||||||
echo "musl-${MUSL_VERSION}: configure..."
|
|
||||||
./configure --disable-shared --prefix="$HOME"/staticdeps > /dev/null
|
|
||||||
|
|
||||||
echo "musl-${MUSL_VERSION}: make..."
|
|
||||||
make -s -j4
|
|
||||||
|
|
||||||
echo "musl-${MUSL_VERSION}: make install..."
|
|
||||||
make -s install
|
|
||||||
|
|
||||||
rm -rf "/tmp/dep_musl-${MUSL_VERSION}"
|
|
||||||
|
|
||||||
# native-image expects to find an executable at this path.
|
|
||||||
ln -s ~/staticdeps/bin/musl-gcc ~/staticdeps/bin/x86_64-linux-musl-gcc
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "${HOME}/staticdeps/bin" >> "$GITHUB_PATH"
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true -Dpkl.musl=true pkl-doc:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-doc-alpine-linux-amd64
|
|
||||||
path: pkl-doc*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-doc-alpine-linux-amd64-snapshot
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-doc-alpine-linux-amd64-snapshot
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
pkl-doc-windows-amd64-snapshot:
|
|
||||||
runs-on: windows-latest
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
JAVA_HOME: /jdk
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-doc:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-doc-windows-amd64
|
|
||||||
path: pkl-doc*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-doc-windows-amd64-snapshot
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-doc-windows-amd64-snapshot
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
publish-test-results:
|
|
||||||
if: '!cancelled()'
|
|
||||||
needs:
|
|
||||||
- gradle-check
|
|
||||||
- gradle-check-windows
|
|
||||||
- gradle-compatibility
|
|
||||||
- java-executables-snapshot
|
|
||||||
- pkl-cli-macOS-amd64-snapshot
|
|
||||||
- pkl-cli-linux-amd64-snapshot
|
|
||||||
- pkl-cli-macOS-aarch64-snapshot
|
|
||||||
- pkl-cli-linux-aarch64-snapshot
|
|
||||||
- pkl-cli-alpine-linux-amd64-snapshot
|
|
||||||
- pkl-cli-windows-amd64-snapshot
|
|
||||||
- pkl-doc-macOS-amd64-snapshot
|
|
||||||
- pkl-doc-linux-amd64-snapshot
|
|
||||||
- pkl-doc-macOS-aarch64-snapshot
|
|
||||||
- pkl-doc-linux-aarch64-snapshot
|
|
||||||
- pkl-doc-alpine-linux-amd64-snapshot
|
|
||||||
- pkl-doc-windows-amd64-snapshot
|
|
||||||
permissions:
|
|
||||||
checks: write
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
|
|
||||||
with:
|
|
||||||
pattern: test-results-xml-*
|
|
||||||
- name: Publish test results
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: EnricoMi/publish-unit-test-result-action@c950f6fb443cb5af20a377fd0dfaa78838901040 # v2
|
|
||||||
with:
|
|
||||||
comment_mode: 'off'
|
|
||||||
files: test-results-xml-*/**/*.xml
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-publish-test-results
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
trigger-downstream-builds:
|
|
||||||
if: github.repository_owner == 'apple'
|
|
||||||
needs:
|
|
||||||
- gradle-check
|
|
||||||
- gradle-check-windows
|
|
||||||
- bench
|
|
||||||
- gradle-compatibility
|
|
||||||
- java-executables-snapshot
|
|
||||||
- pkl-cli-macOS-amd64-snapshot
|
|
||||||
- pkl-cli-linux-amd64-snapshot
|
|
||||||
- pkl-cli-macOS-aarch64-snapshot
|
|
||||||
- pkl-cli-linux-aarch64-snapshot
|
|
||||||
- pkl-cli-alpine-linux-amd64-snapshot
|
|
||||||
- pkl-cli-windows-amd64-snapshot
|
|
||||||
- pkl-doc-macOS-amd64-snapshot
|
|
||||||
- pkl-doc-linux-amd64-snapshot
|
|
||||||
- pkl-doc-macOS-aarch64-snapshot
|
|
||||||
- pkl-doc-linux-aarch64-snapshot
|
|
||||||
- pkl-doc-alpine-linux-amd64-snapshot
|
|
||||||
- pkl-doc-windows-amd64-snapshot
|
|
||||||
- publish-test-results
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Create app token
|
|
||||||
id: app-token
|
|
||||||
uses: actions/create-github-app-token@fee1f7d63c2ff003460e3d139729b119787bc349 # v2
|
|
||||||
with:
|
|
||||||
app-id: ${{ secrets.PKL_CI_CLIENT_ID }}
|
|
||||||
private-key: ${{ secrets.PKL_CI }}
|
|
||||||
owner: ${{ github.repository_owner }}
|
|
||||||
- name: Trigger pkl-lang.org build
|
|
||||||
env:
|
|
||||||
GH_TOKEN: ${{ steps.app-token.outputs.token }}
|
|
||||||
SOURCE_RUN: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
|
|
||||||
run: |-
|
|
||||||
gh workflow run \
|
|
||||||
--repo apple/pkl-lang.org \
|
|
||||||
--ref main \
|
|
||||||
--field source_run="${SOURCE_RUN}" \
|
|
||||||
main.yml
|
|
||||||
@@ -1,954 +0,0 @@
|
|||||||
# Generated from Workflow.pkl. DO NOT EDIT.
|
|
||||||
name: Release
|
|
||||||
'on':
|
|
||||||
push:
|
|
||||||
branches-ignore:
|
|
||||||
- '**'
|
|
||||||
tags:
|
|
||||||
- '**'
|
|
||||||
concurrency:
|
|
||||||
group: ${{ github.workflow }}-${{ github.ref }}
|
|
||||||
cancel-in-progress: false
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
jobs:
|
|
||||||
gradle-check:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
fetch-depth: 0
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: check
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true check
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-gradle-check
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-gradle-check
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
gradle-check-windows:
|
|
||||||
runs-on: windows-latest
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
JAVA_HOME: /jdk
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
fetch-depth: 0
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: check
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true check
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-gradle-check-windows
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-gradle-check-windows
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
bench:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: bench:jmh
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true bench:jmh
|
|
||||||
gradle-compatibility:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
fetch-depth: 0
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with: {}
|
|
||||||
- name: :pkl-gradle:build :pkl-gradle:compatibilityTestReleases
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true :pkl-gradle:build :pkl-gradle:compatibilityTestReleases
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-gradle-compatibility
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-gradle-compatibility
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
java-executables-release:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
fetch-depth: 0
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with:
|
|
||||||
cache-disabled: true
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- name: gradle build java executables
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true -DreleaseBuild=true pkl-doc:build pkl-cli:build pkl-codegen-java:build pkl-codegen-kotlin:build
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-java
|
|
||||||
path: '*/build/executable/**/*'
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-java-executables-release
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-java-executables-release
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
pkl-cli-macOS-amd64-release:
|
|
||||||
if: github.repository_owner == 'apple'
|
|
||||||
runs-on:
|
|
||||||
- self-hosted
|
|
||||||
- macos
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with:
|
|
||||||
cache-disabled: true
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true -DreleaseBuild=true -Dpkl.targetArch=amd64 "-Dpkl.native--native-compiler-path=${GITHUB_WORKSPACE}/.github/scripts/cc_macos_amd64.sh" pkl-cli:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-cli-macOS-amd64
|
|
||||||
path: pkl-cli*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-cli-macOS-amd64-release
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-cli-macOS-amd64-release
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
pkl-cli-linux-amd64-release:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- name: Install deps
|
|
||||||
run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with:
|
|
||||||
cache-disabled: true
|
|
||||||
- name: Fix git ownership
|
|
||||||
run: git status || git config --system --add safe.directory "$GITHUB_WORKSPACE"
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true -DreleaseBuild=true pkl-cli:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-cli-linux-amd64
|
|
||||||
path: pkl-cli*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-cli-linux-amd64-release
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-cli-linux-amd64-release
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
container:
|
|
||||||
image: redhat/ubi8:8.10
|
|
||||||
pkl-cli-macOS-aarch64-release:
|
|
||||||
if: github.repository_owner == 'apple'
|
|
||||||
runs-on:
|
|
||||||
- self-hosted
|
|
||||||
- macos
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: aarch64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with:
|
|
||||||
cache-disabled: true
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true -DreleaseBuild=true pkl-cli:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-cli-macOS-aarch64
|
|
||||||
path: pkl-cli*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-cli-macOS-aarch64-release
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-cli-macOS-aarch64-release
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
pkl-cli-linux-aarch64-release:
|
|
||||||
runs-on: ubuntu-24.04-arm
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- name: Install deps
|
|
||||||
run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: aarch64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with:
|
|
||||||
cache-disabled: true
|
|
||||||
- name: Fix git ownership
|
|
||||||
run: git status || git config --system --add safe.directory "$GITHUB_WORKSPACE"
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true -DreleaseBuild=true pkl-cli:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-cli-linux-aarch64
|
|
||||||
path: pkl-cli*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-cli-linux-aarch64-release
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-cli-linux-aarch64-release
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
container:
|
|
||||||
image: redhat/ubi8:8.10
|
|
||||||
pkl-cli-alpine-linux-amd64-release:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with:
|
|
||||||
cache-disabled: true
|
|
||||||
- name: Install musl and zlib
|
|
||||||
run: |
|
|
||||||
set -e
|
|
||||||
mkdir -p ~/staticdeps/
|
|
||||||
|
|
||||||
ZLIB_VERSION="1.2.13"
|
|
||||||
MUSL_VERSION="1.2.5"
|
|
||||||
|
|
||||||
# install zlib
|
|
||||||
if [[ ! -f ~/staticdeps/include/zlib.h ]]; then
|
|
||||||
# Download zlib tarball and signature
|
|
||||||
curl -Lf "https://github.com/madler/zlib/releases/download/v${ZLIB_VERSION}/zlib-${ZLIB_VERSION}.tar.gz" -o /tmp/zlib.tar.gz
|
|
||||||
curl -Lf "https://github.com/madler/zlib/releases/download/v${ZLIB_VERSION}/zlib-${ZLIB_VERSION}.tar.gz.asc" -o /tmp/zlib.tar.gz.asc
|
|
||||||
|
|
||||||
# Import zlib GPG key
|
|
||||||
gpg --batch --keyserver keyserver.ubuntu.com --recv-keys 5ED46A6721D365587791E2AA783FCD8E58BCAFBA
|
|
||||||
|
|
||||||
# Verify GPG signature
|
|
||||||
echo "Verifying zlib GPG signature..."
|
|
||||||
gpg --verify /tmp/zlib.tar.gz.asc /tmp/zlib.tar.gz
|
|
||||||
|
|
||||||
mkdir -p "/tmp/dep_zlib-${ZLIB_VERSION}"
|
|
||||||
cd "/tmp/dep_zlib-${ZLIB_VERSION}"
|
|
||||||
# shellcheck disable=SC2002
|
|
||||||
cat /tmp/zlib.tar.gz | tar --strip-components=1 -xzC .
|
|
||||||
|
|
||||||
echo "zlib-${ZLIB_VERSION}: configure..."
|
|
||||||
./configure --static --prefix="$HOME"/staticdeps > /dev/null
|
|
||||||
|
|
||||||
echo "zlib-${ZLIB_VERSION}: make..."
|
|
||||||
make -s -j4
|
|
||||||
|
|
||||||
echo "zlib-${ZLIB_VERSION}: make install..."
|
|
||||||
make -s install
|
|
||||||
|
|
||||||
rm -rf /tmp/dep_zlib-${ZLIB_VERSION}
|
|
||||||
fi
|
|
||||||
|
|
||||||
# install musl
|
|
||||||
if [[ ! -f ~/staticdeps/bin/x86_64-linux-musl-gcc ]]; then
|
|
||||||
# Download musl tarball and signature
|
|
||||||
curl -Lf "https://musl.libc.org/releases/musl-${MUSL_VERSION}.tar.gz" -o /tmp/musl.tar.gz
|
|
||||||
curl -Lf "https://musl.libc.org/releases/musl-${MUSL_VERSION}.tar.gz.asc" -o /tmp/musl.tar.gz.asc
|
|
||||||
|
|
||||||
# Import musl GPG key
|
|
||||||
gpg --batch --keyserver keyserver.ubuntu.com --recv-keys 836489290BB6B70F99FFDA0556BCDB593020450F
|
|
||||||
|
|
||||||
# Verify GPG signature
|
|
||||||
echo "Verifying musl GPG signature..."
|
|
||||||
gpg --verify /tmp/musl.tar.gz.asc /tmp/musl.tar.gz
|
|
||||||
|
|
||||||
mkdir -p "/tmp/dep_musl-${MUSL_VERSION}"
|
|
||||||
cd "/tmp/dep_musl-${MUSL_VERSION}"
|
|
||||||
|
|
||||||
# shellcheck disable=SC2002
|
|
||||||
cat /tmp/musl.tar.gz | tar --strip-components=1 -xzC .
|
|
||||||
|
|
||||||
echo "musl-${MUSL_VERSION}: configure..."
|
|
||||||
./configure --disable-shared --prefix="$HOME"/staticdeps > /dev/null
|
|
||||||
|
|
||||||
echo "musl-${MUSL_VERSION}: make..."
|
|
||||||
make -s -j4
|
|
||||||
|
|
||||||
echo "musl-${MUSL_VERSION}: make install..."
|
|
||||||
make -s install
|
|
||||||
|
|
||||||
rm -rf "/tmp/dep_musl-${MUSL_VERSION}"
|
|
||||||
|
|
||||||
# native-image expects to find an executable at this path.
|
|
||||||
ln -s ~/staticdeps/bin/musl-gcc ~/staticdeps/bin/x86_64-linux-musl-gcc
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "${HOME}/staticdeps/bin" >> "$GITHUB_PATH"
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true -DreleaseBuild=true -Dpkl.musl=true pkl-cli:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-cli-alpine-linux-amd64
|
|
||||||
path: pkl-cli*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-cli-alpine-linux-amd64-release
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-cli-alpine-linux-amd64-release
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
pkl-cli-windows-amd64-release:
|
|
||||||
runs-on: windows-latest
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
JAVA_HOME: /jdk
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with:
|
|
||||||
cache-disabled: true
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true -DreleaseBuild=true pkl-cli:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-cli-windows-amd64
|
|
||||||
path: pkl-cli*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-cli-windows-amd64-release
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-cli-windows-amd64-release
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
pkl-doc-macOS-amd64-release:
|
|
||||||
if: github.repository_owner == 'apple'
|
|
||||||
runs-on:
|
|
||||||
- self-hosted
|
|
||||||
- macos
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with:
|
|
||||||
cache-disabled: true
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true -DreleaseBuild=true -Dpkl.targetArch=amd64 "-Dpkl.native--native-compiler-path=${GITHUB_WORKSPACE}/.github/scripts/cc_macos_amd64.sh" pkl-doc:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-doc-macOS-amd64
|
|
||||||
path: pkl-doc*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-doc-macOS-amd64-release
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-doc-macOS-amd64-release
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
pkl-doc-linux-amd64-release:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- name: Install deps
|
|
||||||
run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with:
|
|
||||||
cache-disabled: true
|
|
||||||
- name: Fix git ownership
|
|
||||||
run: git status || git config --system --add safe.directory "$GITHUB_WORKSPACE"
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true -DreleaseBuild=true pkl-doc:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-doc-linux-amd64
|
|
||||||
path: pkl-doc*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-doc-linux-amd64-release
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-doc-linux-amd64-release
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
container:
|
|
||||||
image: redhat/ubi8:8.10
|
|
||||||
pkl-doc-macOS-aarch64-release:
|
|
||||||
if: github.repository_owner == 'apple'
|
|
||||||
runs-on:
|
|
||||||
- self-hosted
|
|
||||||
- macos
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: aarch64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with:
|
|
||||||
cache-disabled: true
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true -DreleaseBuild=true pkl-doc:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-doc-macOS-aarch64
|
|
||||||
path: pkl-doc*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-doc-macOS-aarch64-release
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-doc-macOS-aarch64-release
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
pkl-doc-linux-aarch64-release:
|
|
||||||
runs-on: ubuntu-24.04-arm
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- name: Install deps
|
|
||||||
run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: aarch64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with:
|
|
||||||
cache-disabled: true
|
|
||||||
- name: Fix git ownership
|
|
||||||
run: git status || git config --system --add safe.directory "$GITHUB_WORKSPACE"
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true -DreleaseBuild=true pkl-doc:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-doc-linux-aarch64
|
|
||||||
path: pkl-doc*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-doc-linux-aarch64-release
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-doc-linux-aarch64-release
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
container:
|
|
||||||
image: redhat/ubi8:8.10
|
|
||||||
pkl-doc-alpine-linux-amd64-release:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with:
|
|
||||||
cache-disabled: true
|
|
||||||
- name: Install musl and zlib
|
|
||||||
run: |
|
|
||||||
set -e
|
|
||||||
mkdir -p ~/staticdeps/
|
|
||||||
|
|
||||||
ZLIB_VERSION="1.2.13"
|
|
||||||
MUSL_VERSION="1.2.5"
|
|
||||||
|
|
||||||
# install zlib
|
|
||||||
if [[ ! -f ~/staticdeps/include/zlib.h ]]; then
|
|
||||||
# Download zlib tarball and signature
|
|
||||||
curl -Lf "https://github.com/madler/zlib/releases/download/v${ZLIB_VERSION}/zlib-${ZLIB_VERSION}.tar.gz" -o /tmp/zlib.tar.gz
|
|
||||||
curl -Lf "https://github.com/madler/zlib/releases/download/v${ZLIB_VERSION}/zlib-${ZLIB_VERSION}.tar.gz.asc" -o /tmp/zlib.tar.gz.asc
|
|
||||||
|
|
||||||
# Import zlib GPG key
|
|
||||||
gpg --batch --keyserver keyserver.ubuntu.com --recv-keys 5ED46A6721D365587791E2AA783FCD8E58BCAFBA
|
|
||||||
|
|
||||||
# Verify GPG signature
|
|
||||||
echo "Verifying zlib GPG signature..."
|
|
||||||
gpg --verify /tmp/zlib.tar.gz.asc /tmp/zlib.tar.gz
|
|
||||||
|
|
||||||
mkdir -p "/tmp/dep_zlib-${ZLIB_VERSION}"
|
|
||||||
cd "/tmp/dep_zlib-${ZLIB_VERSION}"
|
|
||||||
# shellcheck disable=SC2002
|
|
||||||
cat /tmp/zlib.tar.gz | tar --strip-components=1 -xzC .
|
|
||||||
|
|
||||||
echo "zlib-${ZLIB_VERSION}: configure..."
|
|
||||||
./configure --static --prefix="$HOME"/staticdeps > /dev/null
|
|
||||||
|
|
||||||
echo "zlib-${ZLIB_VERSION}: make..."
|
|
||||||
make -s -j4
|
|
||||||
|
|
||||||
echo "zlib-${ZLIB_VERSION}: make install..."
|
|
||||||
make -s install
|
|
||||||
|
|
||||||
rm -rf /tmp/dep_zlib-${ZLIB_VERSION}
|
|
||||||
fi
|
|
||||||
|
|
||||||
# install musl
|
|
||||||
if [[ ! -f ~/staticdeps/bin/x86_64-linux-musl-gcc ]]; then
|
|
||||||
# Download musl tarball and signature
|
|
||||||
curl -Lf "https://musl.libc.org/releases/musl-${MUSL_VERSION}.tar.gz" -o /tmp/musl.tar.gz
|
|
||||||
curl -Lf "https://musl.libc.org/releases/musl-${MUSL_VERSION}.tar.gz.asc" -o /tmp/musl.tar.gz.asc
|
|
||||||
|
|
||||||
# Import musl GPG key
|
|
||||||
gpg --batch --keyserver keyserver.ubuntu.com --recv-keys 836489290BB6B70F99FFDA0556BCDB593020450F
|
|
||||||
|
|
||||||
# Verify GPG signature
|
|
||||||
echo "Verifying musl GPG signature..."
|
|
||||||
gpg --verify /tmp/musl.tar.gz.asc /tmp/musl.tar.gz
|
|
||||||
|
|
||||||
mkdir -p "/tmp/dep_musl-${MUSL_VERSION}"
|
|
||||||
cd "/tmp/dep_musl-${MUSL_VERSION}"
|
|
||||||
|
|
||||||
# shellcheck disable=SC2002
|
|
||||||
cat /tmp/musl.tar.gz | tar --strip-components=1 -xzC .
|
|
||||||
|
|
||||||
echo "musl-${MUSL_VERSION}: configure..."
|
|
||||||
./configure --disable-shared --prefix="$HOME"/staticdeps > /dev/null
|
|
||||||
|
|
||||||
echo "musl-${MUSL_VERSION}: make..."
|
|
||||||
make -s -j4
|
|
||||||
|
|
||||||
echo "musl-${MUSL_VERSION}: make install..."
|
|
||||||
make -s install
|
|
||||||
|
|
||||||
rm -rf "/tmp/dep_musl-${MUSL_VERSION}"
|
|
||||||
|
|
||||||
# native-image expects to find an executable at this path.
|
|
||||||
ln -s ~/staticdeps/bin/musl-gcc ~/staticdeps/bin/x86_64-linux-musl-gcc
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "${HOME}/staticdeps/bin" >> "$GITHUB_PATH"
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true -DreleaseBuild=true -Dpkl.musl=true pkl-doc:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-doc-alpine-linux-amd64
|
|
||||||
path: pkl-doc*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-doc-alpine-linux-amd64-release
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-doc-alpine-linux-amd64-release
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
pkl-doc-windows-amd64-release:
|
|
||||||
runs-on: windows-latest
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
JAVA_HOME: /jdk
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with:
|
|
||||||
cache-disabled: true
|
|
||||||
- name: gradle buildNative
|
|
||||||
shell: bash
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true -DreleaseBuild=true pkl-doc:buildNative
|
|
||||||
- name: Upload executable artifacts
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: executable-pkl-doc-windows-amd64
|
|
||||||
path: pkl-doc*/build/executable/**/*
|
|
||||||
- name: Upload Test Result XML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-xml-pkl-doc-windows-amd64-release
|
|
||||||
path: '**/build/test-results/**/*.xml'
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-pkl-doc-windows-amd64-release
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
deploy-release:
|
|
||||||
needs:
|
|
||||||
- gradle-check
|
|
||||||
- gradle-check-windows
|
|
||||||
- bench
|
|
||||||
- gradle-compatibility
|
|
||||||
- java-executables-release
|
|
||||||
- pkl-cli-macOS-amd64-release
|
|
||||||
- pkl-cli-linux-amd64-release
|
|
||||||
- pkl-cli-macOS-aarch64-release
|
|
||||||
- pkl-cli-linux-aarch64-release
|
|
||||||
- pkl-cli-alpine-linux-amd64-release
|
|
||||||
- pkl-cli-windows-amd64-release
|
|
||||||
- pkl-doc-macOS-amd64-release
|
|
||||||
- pkl-doc-linux-amd64-release
|
|
||||||
- pkl-doc-macOS-aarch64-release
|
|
||||||
- pkl-doc-linux-aarch64-release
|
|
||||||
- pkl-doc-alpine-linux-amd64-release
|
|
||||||
- pkl-doc-windows-amd64-release
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
LANG: en_US.UTF-8
|
|
||||||
environment: maven-release
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
|
|
||||||
with:
|
|
||||||
java-version: '21'
|
|
||||||
distribution: temurin
|
|
||||||
architecture: x64
|
|
||||||
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
|
|
||||||
with:
|
|
||||||
cache-disabled: true
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
|
|
||||||
with:
|
|
||||||
pattern: executable-**
|
|
||||||
merge-multiple: true
|
|
||||||
- env:
|
|
||||||
ORG_GRADLE_PROJECT_signingKeyId: ${{ secrets.ORG_GRADLE_PROJECT_SIGNINGKEYID }}
|
|
||||||
ORG_GRADLE_PROJECT_signingKey: ${{ secrets.ORG_GRADLE_PROJECT_SIGNINGKEY }}
|
|
||||||
ORG_GRADLE_PROJECT_signingPassword: ${{ secrets.ORG_GRADLE_PROJECT_SIGNINGPASSWORD }}
|
|
||||||
ORG_GRADLE_PROJECT_sonatypePassword: ${{ secrets.ORG_GRADLE_PROJECT_SONATYPEPASSWORD }}
|
|
||||||
ORG_GRADLE_PROJECT_sonatypeUsername: ${{ secrets.ORG_GRADLE_PROJECT_SONATYPEUSERNAME }}
|
|
||||||
run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true -DreleaseBuild=true publishToSonatype closeAndReleaseSonatypeStagingRepository
|
|
||||||
github-release:
|
|
||||||
needs: deploy-release
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
|
|
||||||
with:
|
|
||||||
pattern: executable-**
|
|
||||||
merge-multiple: true
|
|
||||||
- name: Publish release on GitHub
|
|
||||||
env:
|
|
||||||
GH_TOKEN: ${{ github.token }}
|
|
||||||
TAG_NAME: ${{ github.ref_name }}
|
|
||||||
GIT_SHA: ${{ github.sha }}
|
|
||||||
GH_REPO: ${{ github.repository }}
|
|
||||||
run: |-
|
|
||||||
# exclude build_artifacts.txt from publish
|
|
||||||
rm -f */build/executable/*.build_artifacts.txt
|
|
||||||
find */build/executable/* -type d | xargs rm -rf
|
|
||||||
gh release create ${TAG_NAME} \
|
|
||||||
--title "${TAG_NAME}" \
|
|
||||||
--target "${GIT_SHA}" \
|
|
||||||
--verify-tag \
|
|
||||||
--notes "Release notes: https://pkl-lang.org/main/current/release-notes/changelog.html#release-${TAG_NAME}" \
|
|
||||||
*/build/executable/*
|
|
||||||
publish-test-results:
|
|
||||||
if: '!cancelled()'
|
|
||||||
needs:
|
|
||||||
- gradle-check
|
|
||||||
- gradle-check-windows
|
|
||||||
- gradle-compatibility
|
|
||||||
- java-executables-release
|
|
||||||
- pkl-cli-macOS-amd64-release
|
|
||||||
- pkl-cli-linux-amd64-release
|
|
||||||
- pkl-cli-macOS-aarch64-release
|
|
||||||
- pkl-cli-linux-aarch64-release
|
|
||||||
- pkl-cli-alpine-linux-amd64-release
|
|
||||||
- pkl-cli-windows-amd64-release
|
|
||||||
- pkl-doc-macOS-amd64-release
|
|
||||||
- pkl-doc-linux-amd64-release
|
|
||||||
- pkl-doc-macOS-aarch64-release
|
|
||||||
- pkl-doc-linux-aarch64-release
|
|
||||||
- pkl-doc-alpine-linux-amd64-release
|
|
||||||
- pkl-doc-windows-amd64-release
|
|
||||||
permissions:
|
|
||||||
checks: write
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
|
|
||||||
with:
|
|
||||||
pattern: test-results-xml-*
|
|
||||||
- name: Publish test results
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: EnricoMi/publish-unit-test-result-action@c950f6fb443cb5af20a377fd0dfaa78838901040 # v2
|
|
||||||
with:
|
|
||||||
comment_mode: 'off'
|
|
||||||
files: test-results-xml-*/**/*.xml
|
|
||||||
- name: Upload Test Result HTML
|
|
||||||
if: '!cancelled()'
|
|
||||||
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
|
|
||||||
with:
|
|
||||||
name: test-results-html-publish-test-results
|
|
||||||
path: '**/build/reports/tests/**/*'
|
|
||||||
if-no-files-found: ignore
|
|
||||||
trigger-downstream-builds:
|
|
||||||
if: github.repository_owner == 'apple'
|
|
||||||
needs:
|
|
||||||
- gradle-check
|
|
||||||
- gradle-check-windows
|
|
||||||
- bench
|
|
||||||
- gradle-compatibility
|
|
||||||
- java-executables-release
|
|
||||||
- pkl-cli-macOS-amd64-release
|
|
||||||
- pkl-cli-linux-amd64-release
|
|
||||||
- pkl-cli-macOS-aarch64-release
|
|
||||||
- pkl-cli-linux-aarch64-release
|
|
||||||
- pkl-cli-alpine-linux-amd64-release
|
|
||||||
- pkl-cli-windows-amd64-release
|
|
||||||
- pkl-doc-macOS-amd64-release
|
|
||||||
- pkl-doc-linux-amd64-release
|
|
||||||
- pkl-doc-macOS-aarch64-release
|
|
||||||
- pkl-doc-linux-aarch64-release
|
|
||||||
- pkl-doc-alpine-linux-amd64-release
|
|
||||||
- pkl-doc-windows-amd64-release
|
|
||||||
- deploy-release
|
|
||||||
- github-release
|
|
||||||
- publish-test-results
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Create app token
|
|
||||||
id: app-token
|
|
||||||
uses: actions/create-github-app-token@fee1f7d63c2ff003460e3d139729b119787bc349 # v2
|
|
||||||
with:
|
|
||||||
app-id: ${{ secrets.PKL_CI_CLIENT_ID }}
|
|
||||||
private-key: ${{ secrets.PKL_CI }}
|
|
||||||
owner: ${{ github.repository_owner }}
|
|
||||||
- name: Trigger pkl-lang.org build
|
|
||||||
env:
|
|
||||||
GH_TOKEN: ${{ steps.app-token.outputs.token }}
|
|
||||||
SOURCE_RUN: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
|
|
||||||
run: |-
|
|
||||||
gh workflow run \
|
|
||||||
--repo apple/pkl-lang.org \
|
|
||||||
--ref main \
|
|
||||||
--field source_run="${SOURCE_RUN}" \
|
|
||||||
main.yml
|
|
||||||
@@ -1,34 +0,0 @@
|
|||||||
# Generated from Workflow.pkl. DO NOT EDIT.
|
|
||||||
name: PR Test Reports
|
|
||||||
'on':
|
|
||||||
workflow_run:
|
|
||||||
types:
|
|
||||||
- completed
|
|
||||||
workflows:
|
|
||||||
- Pull Request
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
jobs:
|
|
||||||
test-results:
|
|
||||||
name: Test Results
|
|
||||||
if: github.event.workflow_run.conclusion == 'success' || github.event.workflow_run.conclusion == 'failure'
|
|
||||||
permissions:
|
|
||||||
actions: read
|
|
||||||
checks: write
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Download artifacts
|
|
||||||
uses: dawidd6/action-download-artifact@ac66b43f0e6a346234dd65d4d0c8fbb31cb316e5 # v11
|
|
||||||
with:
|
|
||||||
path: artifacts
|
|
||||||
name: test-results-.*
|
|
||||||
name_is_regexp: true
|
|
||||||
run_id: ${{ github.event.workflow_run.id }}
|
|
||||||
- name: Publish test results
|
|
||||||
uses: EnricoMi/publish-unit-test-result-action@c950f6fb443cb5af20a377fd0dfaa78838901040 # v2
|
|
||||||
with:
|
|
||||||
commit: ${{ github.event.workflow_run.head_sha }}
|
|
||||||
comment_mode: 'off'
|
|
||||||
files: artifacts/**/*.xml
|
|
||||||
event_file: artifacts/test-results-event-file/event.json
|
|
||||||
event_name: ${{ github.event.workflow_run.event }}
|
|
||||||
+4
-1
@@ -15,10 +15,13 @@ testgenerated/
|
|||||||
!.idea/runConfigurations/
|
!.idea/runConfigurations/
|
||||||
!.idea/scopes/
|
!.idea/scopes/
|
||||||
!.idea/vcs.xml
|
!.idea/vcs.xml
|
||||||
.intellijPlatform/
|
|
||||||
|
|
||||||
.vscode/
|
.vscode/
|
||||||
|
|
||||||
.pkl-lsp/
|
.pkl-lsp/
|
||||||
|
|
||||||
|
# :pkl-core:makeIntelliJAntlrPluginHappy
|
||||||
|
gen/
|
||||||
|
PklLexer.tokens
|
||||||
|
|
||||||
.kotlin/
|
.kotlin/
|
||||||
|
|||||||
Generated
-1
@@ -63,7 +63,6 @@
|
|||||||
</option>
|
</option>
|
||||||
<option name="IMPORT_LAYOUT_TABLE">
|
<option name="IMPORT_LAYOUT_TABLE">
|
||||||
<value>
|
<value>
|
||||||
<package name="" withSubpackages="true" static="false" module="true" />
|
|
||||||
<package name="" withSubpackages="true" static="true" />
|
<package name="" withSubpackages="true" static="true" />
|
||||||
<emptyLine />
|
<emptyLine />
|
||||||
<package name="" withSubpackages="true" static="false" />
|
<package name="" withSubpackages="true" static="false" />
|
||||||
|
|||||||
+1
-23
@@ -12,27 +12,6 @@
|
|||||||
<option name="REPORT_FIELDS" value="true" />
|
<option name="REPORT_FIELDS" value="true" />
|
||||||
</inspection_tool>
|
</inspection_tool>
|
||||||
<inspection_tool class="ClassCanBeRecord" enabled="false" level="WEAK WARNING" enabled_by_default="false" />
|
<inspection_tool class="ClassCanBeRecord" enabled="false" level="WEAK WARNING" enabled_by_default="false" />
|
||||||
<inspection_tool class="CustomRegExpInspection" enabled="true" level="WARNING" enabled_by_default="true">
|
|
||||||
<option name="myConfigurations">
|
|
||||||
<list>
|
|
||||||
<RegExpInspectionConfiguration>
|
|
||||||
<option name="name" value="PklCliDirectProjectEvaluatorSettingsAccess" />
|
|
||||||
<option name="suppressId" value="PklCliDirectProjectEvaluatorSettingsAccess" />
|
|
||||||
<option name="uuid" value="dd497f47-d38f-3fab-9ed7-eabe699620c8" />
|
|
||||||
<option name="patterns">
|
|
||||||
<list>
|
|
||||||
<InspectionPattern>
|
|
||||||
<option name="regExp" value="project\?\.evaluatorSettings" />
|
|
||||||
<option name="_fileType" value="Kotlin" />
|
|
||||||
<option name="searchContext" value="ANY" />
|
|
||||||
<option name="replacement" value="evaluatorSettings" />
|
|
||||||
</InspectionPattern>
|
|
||||||
</list>
|
|
||||||
</option>
|
|
||||||
</RegExpInspectionConfiguration>
|
|
||||||
</list>
|
|
||||||
</option>
|
|
||||||
</inspection_tool>
|
|
||||||
<inspection_tool class="FieldMayBeFinal" enabled="true" level="INFORMATION" enabled_by_default="true">
|
<inspection_tool class="FieldMayBeFinal" enabled="true" level="INFORMATION" enabled_by_default="true">
|
||||||
<scope name="AllExceptTruffleAst" level="WARNING" enabled="true" />
|
<scope name="AllExceptTruffleAst" level="WARNING" enabled="true" />
|
||||||
</inspection_tool>
|
</inspection_tool>
|
||||||
@@ -94,6 +73,5 @@
|
|||||||
<option name="processLiterals" value="true" />
|
<option name="processLiterals" value="true" />
|
||||||
<option name="processComments" value="true" />
|
<option name="processComments" value="true" />
|
||||||
</inspection_tool>
|
</inspection_tool>
|
||||||
<inspection_tool class="dd497f47-d38f-3fab-9ed7-eabe699620c8" enabled="true" level="ERROR" enabled_by_default="true" editorAttributes="ERRORS_ATTRIBUTES" />
|
|
||||||
</profile>
|
</profile>
|
||||||
</component>
|
</component>
|
||||||
|
|||||||
@@ -1,2 +0,0 @@
|
|||||||
Jen Basch <421772+HT154@users.noreply.github.com>
|
|
||||||
Jen Basch <jbasch@apple.com>
|
|
||||||
+9
-18
@@ -45,11 +45,12 @@ install {uri-native-prerequisites-windows}[Prerequisites For Native Image on Win
|
|||||||
[source,shell]
|
[source,shell]
|
||||||
----
|
----
|
||||||
gw clean
|
gw clean
|
||||||
gw test # run all tests except native executable tests
|
gw test # run all tests except native executable tests
|
||||||
gw spotlessApply # fix code formatting
|
gw testNative # run native executable tests
|
||||||
gw build # build everything except native executables
|
gw spotlessApply # fix code formatting
|
||||||
gw pkl-cli:testNative # run native executable tests
|
gw build # build everything except native executables
|
||||||
gw pkl-cli:buildNative # build native executable for current platform
|
gw buildNative # build native executable(s) for current platform
|
||||||
|
# (Alpine executable is only built if ~/staticdeps/bin/musl-gcc exists)
|
||||||
|
|
||||||
pkl-cli/build/executable/jpkl # run Java executable
|
pkl-cli/build/executable/jpkl # run Java executable
|
||||||
pkl-cli/build/executable/pkl-macos-aarch64 # run Mac executable
|
pkl-cli/build/executable/pkl-macos-aarch64 # run Mac executable
|
||||||
@@ -82,6 +83,8 @@ based on version information from https://search.maven.org, https://plugins.grad
|
|||||||
|
|
||||||
* Truffle code generation is performed by Truffle's annotation processor, which runs as part of task `:pkl-core:compileJava`
|
* Truffle code generation is performed by Truffle's annotation processor, which runs as part of task `:pkl-core:compileJava`
|
||||||
** Output dir is `generated/truffle/`
|
** Output dir is `generated/truffle/`
|
||||||
|
* ANTLR code generation is performed by task `:pkl-core:generateTestGrammarSource`
|
||||||
|
** Output dir is `testgenerated/antlr/`
|
||||||
|
|
||||||
== Remote JVM Debugging
|
== Remote JVM Debugging
|
||||||
|
|
||||||
@@ -90,20 +93,8 @@ This will listen on port 5005.
|
|||||||
|
|
||||||
Example: `./gradlew test -Djvmdebug=true`
|
Example: `./gradlew test -Djvmdebug=true`
|
||||||
|
|
||||||
== Snippet Test Plugin
|
|
||||||
|
|
||||||
There is an IntelliJ plugin meant for development on the Pkl project itself.
|
|
||||||
This plugin provides a split pane window when viewing snippet tests such as LanguageSnippetTests and FormatterSnippetTests.
|
|
||||||
|
|
||||||
To install:
|
|
||||||
|
|
||||||
1. Run `./gradlew pkl-internal-intellij-plugin:buildPlugin`.
|
|
||||||
2. Within IntelliJ, run the action "Install Plugin From Disk...".
|
|
||||||
3. Select the zip file within `pkl-internal-intellij-plugin/build/distributions`.
|
|
||||||
|
|
||||||
== Resources
|
== Resources
|
||||||
|
For automated build setup examples see our https://github.com/apple/pkl/blob/main/.circleci/[CircleCI] jobs like our https://github.com/apple/pkl/blob/main/.circleci/jobs/BuildNativeJob.pkl[BuildNativeJob.pkl], where we build Pkl automatically.
|
||||||
For automated build setup examples see our https://github.com/apple/pkl/blob/main/.github/[GitHub Actions] jobs like our https://github.com/apple/pkl/blob/main/.github/jobs/BuildNativeJob.pkl[BuildNativeJob.pkl], where we build Pkl automatically.
|
|
||||||
|
|
||||||
=== Truffle
|
=== Truffle
|
||||||
|
|
||||||
|
|||||||
@@ -8,5 +8,4 @@ See link:CONTRIBUTING.adoc[] for general contribution guidelines.
|
|||||||
|
|
||||||
* https://github.com/bioball[Daniel Chao]
|
* https://github.com/bioball[Daniel Chao]
|
||||||
* https://github.com/stackoverflow[Islon Scherer]
|
* https://github.com/stackoverflow[Islon Scherer]
|
||||||
* https://github.com/HT154[Jen Basch]
|
|
||||||
* https://github.com/holzensp[Philip Hölzenspies]
|
* https://github.com/holzensp[Philip Hölzenspies]
|
||||||
|
|||||||
+6
-15
@@ -12,7 +12,7 @@
|
|||||||
:uri-installation: https://pkl-lang.org/main/current/pkl-cli/index.html#installation
|
:uri-installation: https://pkl-lang.org/main/current/pkl-cli/index.html#installation
|
||||||
:uri-lang-reference: https://pkl-lang.org/main/current/language-reference/index.html
|
:uri-lang-reference: https://pkl-lang.org/main/current/language-reference/index.html
|
||||||
:uri-ci-artifacts: https://s01.oss.sonatype.org/content/groups/public/org/pkl-lang/
|
:uri-ci-artifacts: https://s01.oss.sonatype.org/content/groups/public/org/pkl-lang/
|
||||||
:uri-ci-pipeline: https://github.com/apple/pkl/actions
|
:uri-ci-pipeline: https://app.circleci.com/pipelines/github/apple/pkl
|
||||||
|
|
||||||
A configuration as code language with rich validation and tooling.
|
A configuration as code language with rich validation and tooling.
|
||||||
|
|
||||||
@@ -37,10 +37,7 @@ We'd love to hear from you!
|
|||||||
* Create an {uri-github-issue}[issue]
|
* Create an {uri-github-issue}[issue]
|
||||||
* Ask a question on {uri-github-discussions}[GitHub Discussions]
|
* Ask a question on {uri-github-discussions}[GitHub Discussions]
|
||||||
|
|
||||||
== Development
|
== Development image:https://circleci.com/gh/apple/pkl.svg?style=svg["Apple", link="https://app.circleci.com/pipelines/github/apple/pkl"]
|
||||||
|
|
||||||
image:https://github.com/apple/pkl/actions/workflows/main.yml/badge.svg?style=svg["Build (main)", link="https://github.com/apple/pkl/actions/workflows/main.yml"]
|
|
||||||
|
|
||||||
* link:CONTRIBUTING.adoc[] for tips on pull requests and filing issues
|
* link:CONTRIBUTING.adoc[] for tips on pull requests and filing issues
|
||||||
* link:DEVELOPMENT.adoc[] for build instructions
|
* link:DEVELOPMENT.adoc[] for build instructions
|
||||||
* {uri-ci-artifacts}[Sonatype Repository] for the artifacts/binaries built by our {uri-ci-pipeline}[CI pipelines] (and those of our other tools and packages repositories).
|
* {uri-ci-artifacts}[Sonatype Repository] for the artifacts/binaries built by our {uri-ci-pipeline}[CI pipelines] (and those of our other tools and packages repositories).
|
||||||
@@ -63,9 +60,6 @@ image:https://github.com/apple/pkl/actions/workflows/main.yml/badge.svg?style=sv
|
|||||||
|https://github.com/apple/pkl-go-examples[`apple/pkl-go-examples`]
|
|https://github.com/apple/pkl-go-examples[`apple/pkl-go-examples`]
|
||||||
|Examples for using Pkl within Go applications
|
|Examples for using Pkl within Go applications
|
||||||
|
|
||||||
|https://github.com/apple/highlightjs-pkl[`apple/highlightjs-pkl`]
|
|
||||||
|Highlight.js syntax highlighting for Pkl
|
|
||||||
|
|
||||||
|https://github.com/apple/pkl-intellij[`apple/pkl-intellij`]
|
|https://github.com/apple/pkl-intellij[`apple/pkl-intellij`]
|
||||||
|JetBrains editor plugins providing Pkl language support
|
|JetBrains editor plugins providing Pkl language support
|
||||||
|
|
||||||
@@ -82,7 +76,7 @@ image:https://github.com/apple/pkl/actions/workflows/main.yml/badge.svg?style=sv
|
|||||||
|The pkl-lang.org website
|
|The pkl-lang.org website
|
||||||
|
|
||||||
|https://github.com/apple/pkl-lsp[`apple/pkl-lsp`]
|
|https://github.com/apple/pkl-lsp[`apple/pkl-lsp`]
|
||||||
|Language server for Pkl, implementing the server-side of the Language Server Protocol
|
| Language server for Pkl, implementing the server-side of the Language Server Protocol
|
||||||
|
|
||||||
|https://github.com/apple/pkl-neovim[`apple/pkl-neovim`]
|
|https://github.com/apple/pkl-neovim[`apple/pkl-neovim`]
|
||||||
|Pkl language support for Neovim
|
|Pkl language support for Neovim
|
||||||
@@ -96,9 +90,6 @@ image:https://github.com/apple/pkl/actions/workflows/main.yml/badge.svg?style=sv
|
|||||||
|https://github.com/apple/pkl-project-commons[`apple/pkl-project-commons`]
|
|https://github.com/apple/pkl-project-commons[`apple/pkl-project-commons`]
|
||||||
|Utility libraries for Pkl
|
|Utility libraries for Pkl
|
||||||
|
|
||||||
|https://github.com/apple/pkl-readers[`apple/pkl-readers`]
|
|
||||||
|Shared Pkl https://pkl-lang.org/main/current/language-reference/index.html#external-readers[external reader] tools
|
|
||||||
|
|
||||||
|https://github.com/apple/pkl-spring[`apple/pkl-spring`]
|
|https://github.com/apple/pkl-spring[`apple/pkl-spring`]
|
||||||
|Spring Boot extension for configuring Boot apps with Pkl
|
|Spring Boot extension for configuring Boot apps with Pkl
|
||||||
|
|
||||||
@@ -114,9 +105,9 @@ image:https://github.com/apple/pkl/actions/workflows/main.yml/badge.svg?style=sv
|
|||||||
|https://github.com/apple/pkl.tmbundle[`apple/pkl.tmbundle`]
|
|https://github.com/apple/pkl.tmbundle[`apple/pkl.tmbundle`]
|
||||||
|TextMate bundle for Pkl
|
|TextMate bundle for Pkl
|
||||||
|
|
||||||
|
|https://github.com/apple/rules_pkl[`apple/rules_pkl`]
|
||||||
|
| Bazel build rules for Pkl
|
||||||
|
|
||||||
|https://github.com/apple/tree-sitter-pkl[`apple/tree-sitter-pkl`]
|
|https://github.com/apple/tree-sitter-pkl[`apple/tree-sitter-pkl`]
|
||||||
|Tree-sitter parser for Pkl
|
|Tree-sitter parser for Pkl
|
||||||
|
|
||||||
|https://github.com/apple/rules_pkl[`apple/rules_pkl`]
|
|
||||||
|Bazel build rules for Pkl
|
|
||||||
|===
|
|===
|
||||||
|
|||||||
@@ -25,7 +25,6 @@ val graal: Configuration by configurations.creating
|
|||||||
dependencies {
|
dependencies {
|
||||||
jmh(projects.pklCore)
|
jmh(projects.pklCore)
|
||||||
jmh(projects.pklCommonsTest)
|
jmh(projects.pklCommonsTest)
|
||||||
jmh(projects.pklParser)
|
|
||||||
truffle(libs.truffleApi)
|
truffle(libs.truffleApi)
|
||||||
graal(libs.graalCompiler)
|
graal(libs.graalCompiler)
|
||||||
}
|
}
|
||||||
|
|||||||
+49
-56
@@ -1,69 +1,62 @@
|
|||||||
# This is a Gradle generated file for dependency locking.
|
# This is a Gradle generated file for dependency locking.
|
||||||
# Manual edits can break the build and are not advised.
|
# Manual edits can break the build and are not advised.
|
||||||
# This file is expected to be part of source control.
|
# This file is expected to be part of source control.
|
||||||
com.github.ben-manes.caffeine:caffeine:2.9.3=swiftExportClasspathResolvable
|
net.bytebuddy:byte-buddy:1.15.11=jmh,jmhRuntimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
com.google.errorprone:error_prone_annotations:2.28.0=swiftExportClasspathResolvable
|
|
||||||
io.github.java-diff-utils:java-diff-utils:4.12=kotlinInternalAbiValidation
|
|
||||||
io.opentelemetry:opentelemetry-api:1.41.0=swiftExportClasspathResolvable
|
|
||||||
io.opentelemetry:opentelemetry-context:1.41.0=swiftExportClasspathResolvable
|
|
||||||
net.bytebuddy:byte-buddy:1.17.7=jmh,jmhRuntimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
|
||||||
net.sf.jopt-simple:jopt-simple:5.0.4=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath
|
net.sf.jopt-simple:jopt-simple:5.0.4=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath
|
||||||
org.apache.commons:commons-math3:3.6.1=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath
|
org.apache.commons:commons-math3:3.6.1=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath
|
||||||
org.apiguardian:apiguardian-api:1.1.2=jmhCompileClasspath,jmhImplementationDependenciesMetadata,testCompileClasspath,testImplementationDependenciesMetadata
|
org.apiguardian:apiguardian-api:1.1.2=jmhCompileClasspath,jmhImplementationDependenciesMetadata,testCompileClasspath,testImplementationDependenciesMetadata,testJdk17CompileClasspath,testJdk17ImplementationDependenciesMetadata,testRuntimeOnlyDependenciesMetadata
|
||||||
org.assertj:assertj-core:3.27.6=jmh,jmhRuntimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.assertj:assertj-core:3.27.3=jmh,jmhRuntimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
org.bouncycastle:bcpg-jdk18on:1.80=kotlinBouncyCastleConfiguration
|
org.graalvm.compiler:compiler:24.1.2=graal
|
||||||
org.bouncycastle:bcpkix-jdk18on:1.80=kotlinBouncyCastleConfiguration
|
org.graalvm.polyglot:polyglot:24.1.2=jmh,jmhRuntimeClasspath,truffle
|
||||||
org.bouncycastle:bcprov-jdk18on:1.80=kotlinBouncyCastleConfiguration
|
org.graalvm.sdk:collections:24.1.2=graal,jmh,jmhRuntimeClasspath,truffle
|
||||||
org.bouncycastle:bcutil-jdk18on:1.80=kotlinBouncyCastleConfiguration
|
org.graalvm.sdk:graal-sdk:24.1.2=jmh,jmhRuntimeClasspath
|
||||||
org.checkerframework:checker-qual:3.43.0=swiftExportClasspathResolvable
|
org.graalvm.sdk:nativeimage:24.1.2=jmh,jmhRuntimeClasspath,truffle
|
||||||
org.graalvm.compiler:compiler:25.0.0=graal
|
org.graalvm.sdk:word:24.1.2=graal,jmh,jmhRuntimeClasspath,truffle
|
||||||
org.graalvm.polyglot:polyglot:25.0.0=jmh,jmhRuntimeClasspath,truffle
|
org.graalvm.truffle:truffle-api:24.1.2=jmh,jmhRuntimeClasspath,truffle
|
||||||
org.graalvm.sdk:collections:25.0.0=graal,jmh,jmhRuntimeClasspath,truffle
|
org.graalvm.truffle:truffle-compiler:24.1.2=graal
|
||||||
org.graalvm.sdk:graal-sdk:25.0.0=jmh,jmhRuntimeClasspath
|
org.jetbrains.intellij.deps:trove4j:1.0.20200330=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||||
org.graalvm.sdk:nativeimage:25.0.0=jmh,jmhRuntimeClasspath,truffle
|
org.jetbrains.kotlin:kotlin-build-common:2.0.21=kotlinBuildToolsApiClasspath
|
||||||
org.graalvm.sdk:word:25.0.0=graal,jmh,jmhRuntimeClasspath,truffle
|
org.jetbrains.kotlin:kotlin-build-tools-api:2.0.21=kotlinBuildToolsApiClasspath
|
||||||
org.graalvm.truffle:truffle-api:25.0.0=jmh,jmhRuntimeClasspath,truffle
|
org.jetbrains.kotlin:kotlin-build-tools-impl:2.0.21=kotlinBuildToolsApiClasspath
|
||||||
org.graalvm.truffle:truffle-compiler:25.0.0=graal
|
org.jetbrains.kotlin:kotlin-compiler-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||||
org.jetbrains.kotlin:abi-tools-api:2.2.20=kotlinInternalAbiValidation
|
org.jetbrains.kotlin:kotlin-compiler-runner:2.0.21=kotlinBuildToolsApiClasspath
|
||||||
org.jetbrains.kotlin:abi-tools:2.2.20=kotlinInternalAbiValidation
|
org.jetbrains.kotlin:kotlin-daemon-client:2.0.21=kotlinBuildToolsApiClasspath
|
||||||
org.jetbrains.kotlin:kotlin-build-tools-api:2.2.20=kotlinBuildToolsApiClasspath
|
org.jetbrains.kotlin:kotlin-daemon-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||||
org.jetbrains.kotlin:kotlin-build-tools-impl:2.2.20=kotlinBuildToolsApiClasspath
|
org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:2.0.21=kotlinKlibCommonizerClasspath
|
||||||
org.jetbrains.kotlin:kotlin-compiler-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable
|
|
||||||
org.jetbrains.kotlin:kotlin-compiler-runner:2.2.20=kotlinBuildToolsApiClasspath
|
|
||||||
org.jetbrains.kotlin:kotlin-daemon-client:2.2.20=kotlinBuildToolsApiClasspath
|
|
||||||
org.jetbrains.kotlin:kotlin-daemon-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable
|
|
||||||
org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:2.2.20=kotlinKlibCommonizerClasspath
|
|
||||||
org.jetbrains.kotlin:kotlin-metadata-jvm:2.2.20=kotlinInternalAbiValidation
|
|
||||||
org.jetbrains.kotlin:kotlin-native-prebuilt:2.0.21=kotlinNativeBundleConfiguration
|
org.jetbrains.kotlin:kotlin-native-prebuilt:2.0.21=kotlinNativeBundleConfiguration
|
||||||
org.jetbrains.kotlin:kotlin-reflect:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable
|
org.jetbrains.kotlin:kotlin-reflect:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||||
org.jetbrains.kotlin:kotlin-script-runtime:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathJmh,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable
|
org.jetbrains.kotlin:kotlin-script-runtime:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathJmh,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinCompilerPluginClasspathTestJdk17,kotlinKlibCommonizerClasspath
|
||||||
org.jetbrains.kotlin:kotlin-scripting-common:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathJmh,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
|
org.jetbrains.kotlin:kotlin-scripting-common:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathJmh,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinCompilerPluginClasspathTestJdk17
|
||||||
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathJmh,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
|
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathJmh,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinCompilerPluginClasspathTestJdk17
|
||||||
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathJmh,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
|
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathJmh,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinCompilerPluginClasspathTestJdk17
|
||||||
org.jetbrains.kotlin:kotlin-scripting-jvm:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathJmh,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
|
org.jetbrains.kotlin:kotlin-scripting-jvm:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathJmh,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinCompilerPluginClasspathTestJdk17
|
||||||
org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.2.20=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.0.21=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.2.20=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.0.21=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
org.jetbrains.kotlin:kotlin-stdlib:2.2.20=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathJmh,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.jetbrains.kotlin:kotlin-stdlib:2.0.21=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathJmh,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinCompilerPluginClasspathTestJdk17,kotlinKlibCommonizerClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
org.jetbrains.kotlin:swift-export-embeddable:2.2.20=swiftExportClasspathResolvable
|
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||||
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.0=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable
|
org.jetbrains:annotations:13.0=jmh,jmhCompileClasspath,jmhRuntimeClasspath,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathJmh,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinCompilerPluginClasspathTestJdk17,kotlinKlibCommonizerClasspath,testCompileClasspath,testRuntimeClasspath
|
||||||
org.jetbrains.kotlinx:kotlinx-serialization-bom:1.7.3=swiftExportClasspathResolvable
|
org.junit.jupiter:junit-jupiter-api:5.11.4=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath,testRuntimeOnlyDependenciesMetadata
|
||||||
org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.7.3=swiftExportClasspathResolvable
|
org.junit.jupiter:junit-jupiter-api:5.8.2=testJdk17CompileClasspath,testJdk17ImplementationDependenciesMetadata,testJdk17RuntimeClasspath
|
||||||
org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3=swiftExportClasspathResolvable
|
org.junit.jupiter:junit-jupiter-engine:5.11.4=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath,testRuntimeClasspath,testRuntimeOnlyDependenciesMetadata
|
||||||
org.jetbrains:annotations:13.0=jmh,jmhCompileClasspath,jmhRuntimeClasspath,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathJmh,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable,testCompileClasspath,testRuntimeClasspath
|
org.junit.jupiter:junit-jupiter-engine:5.8.2=testJdk17RuntimeClasspath
|
||||||
org.junit.jupiter:junit-jupiter-api:5.14.0=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.junit.jupiter:junit-jupiter-params:5.11.4=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
org.junit.jupiter:junit-jupiter-engine:5.14.0=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath,testRuntimeClasspath
|
org.junit.jupiter:junit-jupiter-params:5.8.2=testJdk17CompileClasspath,testJdk17ImplementationDependenciesMetadata,testJdk17RuntimeClasspath
|
||||||
org.junit.jupiter:junit-jupiter-params:5.14.0=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.junit.jupiter:junit-jupiter:5.8.2=testJdk17CompileClasspath,testJdk17ImplementationDependenciesMetadata,testJdk17RuntimeClasspath
|
||||||
org.junit.platform:junit-platform-commons:1.14.0=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.junit.platform:junit-platform-commons:1.11.4=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath,testRuntimeOnlyDependenciesMetadata
|
||||||
org.junit.platform:junit-platform-engine:1.14.0=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath,testRuntimeClasspath
|
org.junit.platform:junit-platform-commons:1.8.2=testJdk17CompileClasspath,testJdk17ImplementationDependenciesMetadata,testJdk17RuntimeClasspath
|
||||||
org.junit.platform:junit-platform-launcher:1.14.0=testRuntimeClasspath
|
org.junit.platform:junit-platform-engine:1.11.4=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath,testRuntimeClasspath,testRuntimeOnlyDependenciesMetadata
|
||||||
org.junit:junit-bom:5.14.0=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.junit.platform:junit-platform-engine:1.8.2=testJdk17RuntimeClasspath
|
||||||
|
org.junit.platform:junit-platform-launcher:1.8.2=testJdk17RuntimeClasspath
|
||||||
|
org.junit:junit-bom:5.11.4=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath,testRuntimeOnlyDependenciesMetadata
|
||||||
|
org.junit:junit-bom:5.8.2=testJdk17CompileClasspath,testJdk17ImplementationDependenciesMetadata,testJdk17RuntimeClasspath
|
||||||
org.msgpack:msgpack-core:0.9.8=jmh,jmhRuntimeClasspath
|
org.msgpack:msgpack-core:0.9.8=jmh,jmhRuntimeClasspath
|
||||||
org.openjdk.jmh:jmh-core:1.37=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath
|
org.openjdk.jmh:jmh-core:1.37=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath
|
||||||
org.openjdk.jmh:jmh-generator-asm:1.37=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath
|
org.openjdk.jmh:jmh-generator-asm:1.37=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath
|
||||||
org.openjdk.jmh:jmh-generator-bytecode:1.37=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath
|
org.openjdk.jmh:jmh-generator-bytecode:1.37=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath
|
||||||
org.openjdk.jmh:jmh-generator-reflection:1.37=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath
|
org.openjdk.jmh:jmh-generator-reflection:1.37=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath
|
||||||
org.opentest4j:opentest4j:1.3.0=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.opentest4j:opentest4j:1.2.0=testJdk17CompileClasspath,testJdk17ImplementationDependenciesMetadata,testJdk17RuntimeClasspath
|
||||||
|
org.opentest4j:opentest4j:1.3.0=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath,testRuntimeOnlyDependenciesMetadata
|
||||||
org.organicdesign:Paguro:3.10.3=jmh,jmhRuntimeClasspath
|
org.organicdesign:Paguro:3.10.3=jmh,jmhRuntimeClasspath
|
||||||
org.ow2.asm:asm:9.0=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath
|
org.ow2.asm:asm:9.0=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath
|
||||||
org.snakeyaml:snakeyaml-engine:2.10=jmh,jmhRuntimeClasspath
|
org.snakeyaml:snakeyaml-engine:2.9=jmh,jmhRuntimeClasspath
|
||||||
empty=annotationProcessor,apiDependenciesMetadata,compileClasspath,compileOnlyDependenciesMetadata,implementationDependenciesMetadata,intransitiveDependenciesMetadata,jmhAnnotationProcessor,jmhApiDependenciesMetadata,jmhCompileOnlyDependenciesMetadata,jmhIntransitiveDependenciesMetadata,jmhKotlinScriptDefExtensions,kotlinCompilerPluginClasspath,kotlinNativeCompilerPluginClasspath,kotlinScriptDefExtensions,runtimeClasspath,sourcesJar,testAnnotationProcessor,testApiDependenciesMetadata,testCompileOnlyDependenciesMetadata,testIntransitiveDependenciesMetadata,testKotlinScriptDefExtensions
|
empty=annotationProcessor,apiDependenciesMetadata,compileClasspath,compileOnlyDependenciesMetadata,implementationDependenciesMetadata,intransitiveDependenciesMetadata,jmhAnnotationProcessor,jmhApiDependenciesMetadata,jmhCompileOnlyDependenciesMetadata,jmhIntransitiveDependenciesMetadata,jmhKotlinScriptDef,jmhKotlinScriptDefExtensions,jmhRuntimeOnlyDependenciesMetadata,kotlinCompilerPluginClasspath,kotlinNativeCompilerPluginClasspath,kotlinScriptDef,kotlinScriptDefExtensions,runtimeClasspath,runtimeOnlyDependenciesMetadata,sourcesJar,testAnnotationProcessor,testApiDependenciesMetadata,testCompileOnlyDependenciesMetadata,testIntransitiveDependenciesMetadata,testJdk17AnnotationProcessor,testJdk17ApiDependenciesMetadata,testJdk17CompileOnlyDependenciesMetadata,testJdk17IntransitiveDependenciesMetadata,testJdk17KotlinScriptDefExtensions,testKotlinScriptDef,testKotlinScriptDefExtensions
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright © 2024-2025 Apple Inc. and the Pkl project authors. All rights reserved.
|
* Copyright © 2024 Apple Inc. and the Pkl project authors. All rights reserved.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -23,7 +23,6 @@ import java.util.concurrent.TimeUnit;
|
|||||||
import org.openjdk.jmh.annotations.*;
|
import org.openjdk.jmh.annotations.*;
|
||||||
import org.openjdk.jmh.util.TempFile;
|
import org.openjdk.jmh.util.TempFile;
|
||||||
import org.openjdk.jmh.util.TempFileManager;
|
import org.openjdk.jmh.util.TempFileManager;
|
||||||
import org.pkl.core.evaluatorSettings.TraceMode;
|
|
||||||
import org.pkl.core.http.HttpClient;
|
import org.pkl.core.http.HttpClient;
|
||||||
import org.pkl.core.module.ModuleKeyFactories;
|
import org.pkl.core.module.ModuleKeyFactories;
|
||||||
import org.pkl.core.repl.ReplRequest;
|
import org.pkl.core.repl.ReplRequest;
|
||||||
@@ -52,8 +51,7 @@ public class ListSort {
|
|||||||
null,
|
null,
|
||||||
IoUtils.getCurrentWorkingDir(),
|
IoUtils.getCurrentWorkingDir(),
|
||||||
StackFrameTransformers.defaultTransformer,
|
StackFrameTransformers.defaultTransformer,
|
||||||
false,
|
false);
|
||||||
TraceMode.COMPACT);
|
|
||||||
private static final List<Object> list = new ArrayList<>(100000);
|
private static final List<Object> list = new ArrayList<>(100000);
|
||||||
|
|
||||||
static {
|
static {
|
||||||
|
|||||||
@@ -24,8 +24,6 @@ import org.pkl.commons.test.FileTestUtils;
|
|||||||
import org.pkl.commons.test.FileTestUtilsKt;
|
import org.pkl.commons.test.FileTestUtilsKt;
|
||||||
import org.pkl.core.Release;
|
import org.pkl.core.Release;
|
||||||
import org.pkl.core.util.IoUtils;
|
import org.pkl.core.util.IoUtils;
|
||||||
import org.pkl.parser.Parser;
|
|
||||||
import org.pkl.parser.ParserError;
|
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
@Warmup(iterations = 5, time = 2)
|
@Warmup(iterations = 5, time = 2)
|
||||||
|
|||||||
+9
-3
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright © 2024-2026 Apple Inc. and the Pkl project authors. All rights reserved.
|
* Copyright © 2024 Apple Inc. and the Pkl project authors. All rights reserved.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -14,9 +14,12 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
// https://youtrack.jetbrains.com/issue/KTIJ-19369
|
// https://youtrack.jetbrains.com/issue/KTIJ-19369
|
||||||
|
@file:Suppress("DSL_SCOPE_VIOLATION")
|
||||||
|
|
||||||
import org.jetbrains.gradle.ext.ActionDelegationConfig
|
import org.jetbrains.gradle.ext.ActionDelegationConfig
|
||||||
import org.jetbrains.gradle.ext.ActionDelegationConfig.TestRunner.PLATFORM
|
import org.jetbrains.gradle.ext.ActionDelegationConfig.TestRunner.PLATFORM
|
||||||
import org.jetbrains.gradle.ext.ProjectSettings
|
import org.jetbrains.gradle.ext.ProjectSettings
|
||||||
|
import org.jetbrains.gradle.ext.TaskTriggersConfig
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
pklAllProjects
|
pklAllProjects
|
||||||
@@ -30,8 +33,8 @@ plugins {
|
|||||||
nexusPublishing {
|
nexusPublishing {
|
||||||
repositories {
|
repositories {
|
||||||
sonatype {
|
sonatype {
|
||||||
nexusUrl.set(uri("https://ossrh-staging-api.central.sonatype.com/service/local/"))
|
nexusUrl.set(uri("https://s01.oss.sonatype.org/service/local/"))
|
||||||
snapshotRepositoryUrl.set(uri("https://central.sonatype.com/repository/maven-snapshots/"))
|
snapshotRepositoryUrl.set(uri("https://s01.oss.sonatype.org/content/repositories/snapshots/"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -45,6 +48,9 @@ idea {
|
|||||||
delegateBuildRunToGradle = true
|
delegateBuildRunToGradle = true
|
||||||
testRunner = PLATFORM
|
testRunner = PLATFORM
|
||||||
}
|
}
|
||||||
|
configure<TaskTriggersConfig> {
|
||||||
|
afterSync(provider { project(":pkl-core").tasks.named("makeIntelliJAntlrPluginHappy") })
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,18 +35,16 @@ dependencies {
|
|||||||
}
|
}
|
||||||
|
|
||||||
java {
|
java {
|
||||||
|
sourceCompatibility = JavaVersion.toVersion(toolchainVersion)
|
||||||
|
targetCompatibility = JavaVersion.toVersion(toolchainVersion)
|
||||||
|
|
||||||
toolchain {
|
toolchain {
|
||||||
languageVersion = JavaLanguageVersion.of(toolchainVersion)
|
languageVersion = JavaLanguageVersion.of(toolchainVersion)
|
||||||
vendor = JvmVendorSpec.ADOPTIUM
|
vendor = JvmVendorSpec.ADOPTIUM
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.withType<JavaCompile>().configureEach { options.release = toolchainVersion }
|
|
||||||
|
|
||||||
kotlin {
|
kotlin {
|
||||||
jvmToolchain(toolchainVersion)
|
jvmToolchain(toolchainVersion)
|
||||||
compilerOptions {
|
compilerOptions { jvmTarget = JvmTarget.fromTarget(toolchainVersion.toString()) }
|
||||||
jvmTarget = JvmTarget.fromTarget(toolchainVersion.toString())
|
|
||||||
freeCompilerArgs.add("-Xjdk-release=$toolchainVersion")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,6 +20,8 @@ import org.gradle.api.Project
|
|||||||
import org.gradle.api.artifacts.VersionCatalog
|
import org.gradle.api.artifacts.VersionCatalog
|
||||||
import org.gradle.api.artifacts.VersionCatalogsExtension
|
import org.gradle.api.artifacts.VersionCatalogsExtension
|
||||||
import org.gradle.api.attributes.Category
|
import org.gradle.api.attributes.Category
|
||||||
|
import org.gradle.api.plugins.JvmTestSuitePlugin
|
||||||
|
import org.gradle.api.plugins.jvm.JvmTestSuite
|
||||||
import org.gradle.api.provider.Provider
|
import org.gradle.api.provider.Provider
|
||||||
import org.gradle.api.tasks.TaskProvider
|
import org.gradle.api.tasks.TaskProvider
|
||||||
import org.gradle.api.tasks.testing.Test
|
import org.gradle.api.tasks.testing.Test
|
||||||
@@ -28,6 +30,7 @@ import org.gradle.jvm.toolchain.*
|
|||||||
import org.gradle.kotlin.dsl.*
|
import org.gradle.kotlin.dsl.*
|
||||||
import org.gradle.kotlin.dsl.support.serviceOf
|
import org.gradle.kotlin.dsl.support.serviceOf
|
||||||
import org.gradle.process.CommandLineArgumentProvider
|
import org.gradle.process.CommandLineArgumentProvider
|
||||||
|
import org.gradle.testing.base.TestingExtension
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* JVM bytecode target; this is pinned at a reasonable version, because downstream JVM projects
|
* JVM bytecode target; this is pinned at a reasonable version, because downstream JVM projects
|
||||||
@@ -84,13 +87,12 @@ open class BuildInfo(private val project: Project) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val baseName: String by lazy {
|
val baseName: String by lazy { "graalvm-jdk-${graalVmJdkVersion}_${osName}-${arch}_bin" }
|
||||||
"graalvm-community-jdk-${graalVmJdkVersion}_${osName}-${arch}_bin"
|
|
||||||
}
|
|
||||||
|
|
||||||
val downloadUrl: String by lazy {
|
val downloadUrl: String by lazy {
|
||||||
|
val jdkMajor = graalVmJdkVersion.takeWhile { it != '.' }
|
||||||
val extension = if (os.isWindows) "zip" else "tar.gz"
|
val extension = if (os.isWindows) "zip" else "tar.gz"
|
||||||
"https://github.com/graalvm/graalvm-ce-builds/releases/download/jdk-${graalVmJdkVersion}/$baseName.$extension"
|
"https://download.oracle.com/graalvm/$jdkMajor/archive/$baseName.$extension"
|
||||||
}
|
}
|
||||||
|
|
||||||
val downloadFile: File by lazy {
|
val downloadFile: File by lazy {
|
||||||
@@ -105,18 +107,6 @@ open class BuildInfo(private val project: Project) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** The target architecture to build, defaulting to the system architecture. */
|
|
||||||
val targetArch by lazy { System.getProperty("pkl.targetArch") ?: arch }
|
|
||||||
|
|
||||||
/** Tells if this is a cross-arch build (e.g. targeting amd64 when on an aarch64 machine). */
|
|
||||||
val isCrossArch by lazy { arch != targetArch }
|
|
||||||
|
|
||||||
/** Tells if cross-arch builds are supported on this machine. */
|
|
||||||
val isCrossArchSupported by lazy { os.isMacOsX }
|
|
||||||
|
|
||||||
/** Whether to build native executables using the musl toolchain or not. */
|
|
||||||
val musl: Boolean by lazy { java.lang.Boolean.getBoolean("pkl.musl") }
|
|
||||||
|
|
||||||
/** Same logic as [org.gradle.internal.os.OperatingSystem#arch], which is protected. */
|
/** Same logic as [org.gradle.internal.os.OperatingSystem#arch], which is protected. */
|
||||||
val arch: String by lazy {
|
val arch: String by lazy {
|
||||||
when (val arch = System.getProperty("os.arch")) {
|
when (val arch = System.getProperty("os.arch")) {
|
||||||
@@ -205,36 +195,13 @@ open class BuildInfo(private val project: Project) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private val isArmWindows: Boolean
|
|
||||||
get() {
|
|
||||||
if (!os.isWindows) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
// System.getProperty("os.arch") returns the architecture of the JVM, not the host OS.
|
|
||||||
val procArch = System.getenv("PROCESSOR_ARCHITECTURE")
|
|
||||||
return "ARM64".equals(procArch, ignoreCase = true)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Assembles a collection of JDK versions which tests can be run against, considering ancillary
|
// Assembles a collection of JDK versions which tests can be run against, considering ancillary
|
||||||
// parameters like `testAllJdks` and `testExperimentalJdks`.
|
// parameters like `testAllJdks` and `testExperimentalJdks`.
|
||||||
val jdkTestRange: Collection<JavaLanguageVersion> by lazy {
|
val jdkTestRange: Collection<JavaLanguageVersion> by lazy {
|
||||||
if (isArmWindows) {
|
JavaVersionRange.inclusive(jdkTestFloor, jdkTestCeiling).filter { version ->
|
||||||
// Java toolchains does not work on ARM windows: https://github.com/gradle/gradle/issues/29807
|
// unless we are instructed to test all JDKs, tests only include LTS releases and
|
||||||
// prevent creating tasks to test different JDKs if developing on a Windows ARM machine.
|
// versions above the toolchain version.
|
||||||
return@lazy listOf()
|
testAllJdks || (JavaVersionRange.isLTS(version) || version >= jdkToolchainVersion)
|
||||||
}
|
|
||||||
JavaVersionRange.inclusive(jdkTestFloor, jdkTestCeiling).toList()
|
|
||||||
}
|
|
||||||
|
|
||||||
val JavaLanguageVersion.isEnabled: Boolean
|
|
||||||
get() = isVersionEnabled(this)
|
|
||||||
|
|
||||||
fun isVersionEnabled(version: JavaLanguageVersion): Boolean {
|
|
||||||
return when {
|
|
||||||
testAllJdks -> true
|
|
||||||
multiJdkTesting -> JavaVersionRange.isLTS(version)
|
|
||||||
testExperimentalJdks -> version > jdkToolchainVersion
|
|
||||||
else -> false
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -273,6 +240,9 @@ open class BuildInfo(private val project: Project) {
|
|||||||
configurator: MultiJdkTestConfigurator = {},
|
configurator: MultiJdkTestConfigurator = {},
|
||||||
): Iterable<Provider<out Any>> =
|
): Iterable<Provider<out Any>> =
|
||||||
with(project) {
|
with(project) {
|
||||||
|
// force the `jvm-test-suite` plugin to apply first
|
||||||
|
project.pluginManager.apply(JvmTestSuitePlugin::class.java)
|
||||||
|
|
||||||
val isMultiVendor = testJdkVendors.count() > 1
|
val isMultiVendor = testJdkVendors.count() > 1
|
||||||
val baseNameProvider = { templateTask.get().name }
|
val baseNameProvider = { templateTask.get().name }
|
||||||
val namer = testNamer(baseNameProvider)
|
val namer = testNamer(baseNameProvider)
|
||||||
@@ -305,6 +275,13 @@ open class BuildInfo(private val project: Project) {
|
|||||||
// multiply out by jdk vendor
|
// multiply out by jdk vendor
|
||||||
testJdkVendors.map { vendor -> (targetVersion to vendor) }
|
testJdkVendors.map { vendor -> (targetVersion to vendor) }
|
||||||
}
|
}
|
||||||
|
.filter { (jdkTarget, vendor) ->
|
||||||
|
// only include experimental tasks in the return suite if the flag is set. if the task
|
||||||
|
// is withheld from the returned list, it will not be executed by default with `gradle
|
||||||
|
// check`.
|
||||||
|
testExperimentalJdks ||
|
||||||
|
(!namer(jdkTarget, vendor.takeIf { isMultiVendor }).contains("Experimental"))
|
||||||
|
}
|
||||||
.map { (jdkTarget, vendor) ->
|
.map { (jdkTarget, vendor) ->
|
||||||
if (jdkToolchainVersion == jdkTarget)
|
if (jdkToolchainVersion == jdkTarget)
|
||||||
tasks.register(namer(jdkTarget, vendor)) {
|
tasks.register(namer(jdkTarget, vendor)) {
|
||||||
@@ -315,18 +292,25 @@ open class BuildInfo(private val project: Project) {
|
|||||||
"Alias for regular '${baseNameProvider()}' task, on JDK ${jdkTarget.asInt()}"
|
"Alias for regular '${baseNameProvider()}' task, on JDK ${jdkTarget.asInt()}"
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
tasks.register(namer(jdkTarget, vendor.takeIf { isMultiVendor }), Test::class) {
|
the<TestingExtension>().suites.register(
|
||||||
enabled = jdkTarget.isEnabled
|
namer(jdkTarget, vendor.takeIf { isMultiVendor }),
|
||||||
group = Category.VERIFICATION
|
JvmTestSuite::class,
|
||||||
description = "Run tests against JDK ${jdkTarget.asInt()}"
|
) {
|
||||||
applyConfig(jdkTarget to toolchains.launcherFor { languageVersion = jdkTarget })
|
targets.all {
|
||||||
// fix: on jdk17, we must force the polyglot module on to the modulepath
|
testTask.configure {
|
||||||
if (jdkTarget.asInt() == 17)
|
group = Category.VERIFICATION
|
||||||
jvmArgumentProviders.add(
|
description = "Run tests against JDK ${jdkTarget.asInt()}"
|
||||||
CommandLineArgumentProvider {
|
applyConfig(jdkTarget to toolchains.launcherFor { languageVersion = jdkTarget })
|
||||||
buildList { listOf("--add-modules=org.graalvm.polyglot") }
|
|
||||||
}
|
// fix: on jdk17, we must force the polyglot module on to the modulepath
|
||||||
)
|
if (jdkTarget.asInt() == 17)
|
||||||
|
jvmArgumentProviders.add(
|
||||||
|
CommandLineArgumentProvider {
|
||||||
|
buildList { listOf("--add-modules=org.graalvm.polyglot") }
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.toList()
|
.toList()
|
||||||
@@ -346,8 +330,9 @@ open class BuildInfo(private val project: Project) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
val multiJdkTesting: Boolean by lazy {
|
val multiJdkTesting: Boolean by lazy {
|
||||||
// Test Pkl against a full range of JDK versions, past and present, within the
|
// By default, Pkl is tested against a full range of JDK versions, past and present, within the
|
||||||
// supported bounds of `PKL_TEST_JDK_TARGET` and `PKL_TEST_JDK_MAXIMUM`.
|
// supported bounds of `PKL_TEST_JDK_TARGET` and `PKL_TEST_JDK_MAXIMUM`. To opt-out of this
|
||||||
|
// behavior, set `-DpklMultiJdkTesting=false` on the Gradle command line.
|
||||||
//
|
//
|
||||||
// In CI, this defaults to `true` to catch potential cross-JDK compat regressions or other bugs.
|
// In CI, this defaults to `true` to catch potential cross-JDK compat regressions or other bugs.
|
||||||
// In local dev, this defaults to `false` to speed up the build and reduce contributor load.
|
// In local dev, this defaults to `false` to speed up the build and reduce contributor load.
|
||||||
@@ -355,7 +340,7 @@ open class BuildInfo(private val project: Project) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
val hasMuslToolchain: Boolean by lazy {
|
val hasMuslToolchain: Boolean by lazy {
|
||||||
// see .github/scripts/install_musl.sh
|
// see "install musl" in .circleci/jobs/BuildNativeJob.pkl
|
||||||
File(System.getProperty("user.home"), "staticdeps/bin/x86_64-linux-musl-gcc").exists()
|
File(System.getProperty("user.home"), "staticdeps/bin/x86_64-linux-musl-gcc").exists()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,49 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright © 2025 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.
|
|
||||||
*/
|
|
||||||
import org.gradle.api.provider.Property
|
|
||||||
|
|
||||||
abstract class ExecutableSpec {
|
|
||||||
/** The main entrypoint Java class of the executable. */
|
|
||||||
abstract val mainClass: Property<String>
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The name of the native executable.
|
|
||||||
*
|
|
||||||
* Not required if not building a native executable.
|
|
||||||
*/
|
|
||||||
abstract val name: Property<String>
|
|
||||||
|
|
||||||
/** The name of the Java executable. */
|
|
||||||
abstract val javaName: Property<String>
|
|
||||||
|
|
||||||
/** The name of the executable that shows in the description when published to Maven. */
|
|
||||||
abstract val documentationName: Property<String>
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The base name of the Maven publication.
|
|
||||||
*
|
|
||||||
* This becomes the base name of the Artifact ID, with the os and arch suffixed.
|
|
||||||
*
|
|
||||||
* For example, `pkl` becomes `pkl-macos-aarch` for the macOS/aarch64 variant.
|
|
||||||
*/
|
|
||||||
abstract val publicationName: Property<String>
|
|
||||||
|
|
||||||
/** The name of the artifact ID for the Java executable. */
|
|
||||||
abstract val javaPublicationName: Property<String>
|
|
||||||
|
|
||||||
/** The website for this executable. */
|
|
||||||
abstract val website: Property<String>
|
|
||||||
}
|
|
||||||
@@ -70,7 +70,7 @@ open class MergeSourcesJars : DefaultTask() {
|
|||||||
val details = this
|
val details = this
|
||||||
if (details.isDirectory) return@visit
|
if (details.isDirectory) return@visit
|
||||||
|
|
||||||
var path = details.relativePath.parent!!.pathString
|
var path = details.relativePath.parent.pathString
|
||||||
val relocatedPath = relocatedPaths.keys.find { path.startsWith(it) }
|
val relocatedPath = relocatedPaths.keys.find { path.startsWith(it) }
|
||||||
if (relocatedPath != null) {
|
if (relocatedPath != null) {
|
||||||
path = path.replace(relocatedPath, relocatedPaths.getValue(relocatedPath))
|
path = path.replace(relocatedPath, relocatedPaths.getValue(relocatedPath))
|
||||||
@@ -101,7 +101,7 @@ open class MergeSourcesJars : DefaultTask() {
|
|||||||
project.zipTree(jar).visit {
|
project.zipTree(jar).visit {
|
||||||
val details = this
|
val details = this
|
||||||
if (details.isDirectory) return@visit // avoid adding empty dirs
|
if (details.isDirectory) return@visit // avoid adding empty dirs
|
||||||
result.add(details.relativePath.parent!!.pathString)
|
result.add(details.relativePath.parent.pathString)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return result
|
return result
|
||||||
|
|||||||
@@ -1,169 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright © 2025 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.
|
|
||||||
*/
|
|
||||||
import javax.inject.Inject
|
|
||||||
import org.gradle.api.DefaultTask
|
|
||||||
import org.gradle.api.file.ConfigurableFileCollection
|
|
||||||
import org.gradle.api.provider.ListProperty
|
|
||||||
import org.gradle.api.provider.Property
|
|
||||||
import org.gradle.api.provider.Provider
|
|
||||||
import org.gradle.api.services.BuildService
|
|
||||||
import org.gradle.api.services.BuildServiceParameters
|
|
||||||
import org.gradle.api.tasks.ClasspathNormalizer
|
|
||||||
import org.gradle.api.tasks.Input
|
|
||||||
import org.gradle.api.tasks.InputFiles
|
|
||||||
import org.gradle.api.tasks.OutputFile
|
|
||||||
import org.gradle.api.tasks.PathSensitivity
|
|
||||||
import org.gradle.api.tasks.TaskAction
|
|
||||||
import org.gradle.kotlin.dsl.registerIfAbsent
|
|
||||||
import org.gradle.kotlin.dsl.withNormalizer
|
|
||||||
import org.gradle.process.ExecOperations
|
|
||||||
|
|
||||||
enum class Architecture {
|
|
||||||
AMD64,
|
|
||||||
AARCH64,
|
|
||||||
}
|
|
||||||
|
|
||||||
abstract class NativeImageBuildService : BuildService<BuildServiceParameters.None>
|
|
||||||
|
|
||||||
abstract class NativeImageBuild : DefaultTask() {
|
|
||||||
@get:Input abstract val imageName: Property<String>
|
|
||||||
|
|
||||||
@get:Input abstract val extraNativeImageArgs: ListProperty<String>
|
|
||||||
|
|
||||||
@get:Input abstract val arch: Property<Architecture>
|
|
||||||
|
|
||||||
@get:Input abstract val mainClass: Property<String>
|
|
||||||
|
|
||||||
@get:InputFiles abstract val classpath: ConfigurableFileCollection
|
|
||||||
|
|
||||||
private val outputDir = project.layout.buildDirectory.dir("executable")
|
|
||||||
|
|
||||||
@get:OutputFile val outputFile = outputDir.flatMap { it.file(imageName) }
|
|
||||||
|
|
||||||
@get:Inject protected abstract val execOperations: ExecOperations
|
|
||||||
|
|
||||||
private val graalVm: Provider<BuildInfo.GraalVm> =
|
|
||||||
arch.map { a ->
|
|
||||||
when (a) {
|
|
||||||
Architecture.AMD64 -> buildInfo.graalVmAmd64
|
|
||||||
Architecture.AARCH64 -> buildInfo.graalVmAarch64
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private val buildInfo: BuildInfo = project.extensions.getByType(BuildInfo::class.java)
|
|
||||||
|
|
||||||
private val nativeImageCommandName =
|
|
||||||
if (buildInfo.os.isWindows) "native-image.cmd" else "native-image"
|
|
||||||
|
|
||||||
private val nativeImageExecutable = graalVm.map { "${it.baseDir}/bin/$nativeImageCommandName" }
|
|
||||||
|
|
||||||
private val extraArgsFromProperties by lazy {
|
|
||||||
System.getProperties()
|
|
||||||
.filter { it.key.toString().startsWith("pkl.native") }
|
|
||||||
.map { "${it.key}=${it.value}".substring("pkl.native".length) }
|
|
||||||
}
|
|
||||||
|
|
||||||
private val buildService =
|
|
||||||
project.gradle.sharedServices.registerIfAbsent(
|
|
||||||
"nativeImageBuildService",
|
|
||||||
NativeImageBuildService::class,
|
|
||||||
) {
|
|
||||||
maxParallelUsages.set(1)
|
|
||||||
}
|
|
||||||
|
|
||||||
init {
|
|
||||||
// ensure native-image builds run in serial (prevent `gw buildNative` from consuming all host
|
|
||||||
// CPU resources).
|
|
||||||
usesService(buildService)
|
|
||||||
|
|
||||||
group = "build"
|
|
||||||
|
|
||||||
inputs
|
|
||||||
.files(classpath)
|
|
||||||
.withPropertyName("runtimeClasspath")
|
|
||||||
.withNormalizer(ClasspathNormalizer::class)
|
|
||||||
inputs
|
|
||||||
.files(nativeImageExecutable)
|
|
||||||
.withPropertyName("graalVmNativeImage")
|
|
||||||
.withPathSensitivity(PathSensitivity.ABSOLUTE)
|
|
||||||
}
|
|
||||||
|
|
||||||
@TaskAction
|
|
||||||
protected fun run() {
|
|
||||||
execOperations.exec {
|
|
||||||
val exclusions =
|
|
||||||
listOf(buildInfo.libs.findLibrary("graalSdk").get()).map { it.get().module.name }
|
|
||||||
|
|
||||||
executable = nativeImageExecutable.get()
|
|
||||||
workingDir(outputDir)
|
|
||||||
|
|
||||||
args = buildList {
|
|
||||||
// must be emitted before any experimental options are used
|
|
||||||
add("-H:+UnlockExperimentalVMOptions")
|
|
||||||
// currently gives a deprecation warning, but we've been told
|
|
||||||
// that the "initialize everything at build time" *CLI* option is likely here to stay
|
|
||||||
add("--initialize-at-build-time=")
|
|
||||||
// needed for messagepack-java (see https://github.com/msgpack/msgpack-java/issues/600)
|
|
||||||
add("--initialize-at-run-time=org.msgpack.core.buffer.DirectBufferAccess")
|
|
||||||
add("--no-fallback")
|
|
||||||
add("-H:IncludeResources=org/pkl/core/stdlib/.*\\.pkl")
|
|
||||||
add("-H:IncludeResources=org/jline/utils/.*")
|
|
||||||
add("-H:IncludeResourceBundles=org.pkl.core.errorMessages")
|
|
||||||
add("-H:IncludeResourceBundles=org.pkl.parser.errorMessages")
|
|
||||||
add("-H:IncludeResources=org/pkl/commons/cli/PklCARoots.pem")
|
|
||||||
add("-H:Class=${mainClass.get()}")
|
|
||||||
add("-o")
|
|
||||||
add(imageName.get())
|
|
||||||
// the actual limit (currently) used by native-image is this number + 1400 (idea is to
|
|
||||||
// compensate for Truffle's own nodes)
|
|
||||||
add("-H:MaxRuntimeCompileMethods=1800")
|
|
||||||
add("-H:+EnforceMaxRuntimeCompileMethods")
|
|
||||||
add("--enable-url-protocols=http,https")
|
|
||||||
add("-H:+ReportExceptionStackTraces")
|
|
||||||
// disable automatic support for JVM CLI options (puts our main class in full control of
|
|
||||||
// argument parsing)
|
|
||||||
add("-H:-ParseRuntimeOptions")
|
|
||||||
// quick build mode: 40% faster compilation, 20% smaller (but presumably also slower)
|
|
||||||
// executable
|
|
||||||
if (!buildInfo.isReleaseBuild) {
|
|
||||||
add("-Ob")
|
|
||||||
}
|
|
||||||
if (buildInfo.isNativeArch) {
|
|
||||||
add("-march=native")
|
|
||||||
} else {
|
|
||||||
add("-march=compatibility")
|
|
||||||
}
|
|
||||||
// native-image rejects non-existing class path entries -> filter
|
|
||||||
add("--class-path")
|
|
||||||
val pathInput =
|
|
||||||
classpath.filter {
|
|
||||||
it.exists() && !exclusions.any { exclude -> it.name.contains(exclude) }
|
|
||||||
}
|
|
||||||
add(pathInput.asPath)
|
|
||||||
// make sure dev machine stays responsive (15% slowdown on my laptop)
|
|
||||||
val processors =
|
|
||||||
Runtime.getRuntime().availableProcessors() /
|
|
||||||
if (buildInfo.os.isMacOsX && !buildInfo.isCiBuild) 4 else 1
|
|
||||||
add("-J-XX:ActiveProcessorCount=${processors}")
|
|
||||||
// Pass through all `HOMEBREW_` prefixed environment variables to allow build with shimmed
|
|
||||||
// tools.
|
|
||||||
addAll(environment.keys.filter { it.startsWith("HOMEBREW_") }.map { "-E$it" })
|
|
||||||
addAll(extraNativeImageArgs.get())
|
|
||||||
addAll(extraArgsFromProperties)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,57 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright © 2025-2026 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.
|
|
||||||
*/
|
|
||||||
import com.diffplug.spotless.FormatterFunc
|
|
||||||
import com.diffplug.spotless.FormatterStep
|
|
||||||
import java.io.Serial
|
|
||||||
import java.io.Serializable
|
|
||||||
import java.net.URLClassLoader
|
|
||||||
import org.gradle.api.artifacts.Configuration
|
|
||||||
|
|
||||||
class PklFormatterStep(@Transient private val configuration: Configuration) : Serializable {
|
|
||||||
companion object {
|
|
||||||
@Serial private const val serialVersionUID: Long = 1L
|
|
||||||
}
|
|
||||||
|
|
||||||
fun create(): FormatterStep {
|
|
||||||
return FormatterStep.createLazy(
|
|
||||||
"pkl",
|
|
||||||
{ PklFormatterStep(configuration) },
|
|
||||||
{ PklFormatterFunc(configuration) },
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class PklFormatterFunc(@Transient private val configuration: Configuration) :
|
|
||||||
FormatterFunc, Serializable {
|
|
||||||
companion object {
|
|
||||||
@Serial private const val serialVersionUID: Long = 1L
|
|
||||||
}
|
|
||||||
|
|
||||||
private val classLoader by lazy {
|
|
||||||
val urls = configuration.files.map { it.toURI().toURL() }
|
|
||||||
URLClassLoader(urls.toTypedArray())
|
|
||||||
}
|
|
||||||
|
|
||||||
private val formatterClass by lazy { classLoader.loadClass("org.pkl.formatter.Formatter") }
|
|
||||||
|
|
||||||
private val formatMethod by lazy { formatterClass.getMethod("format", String::class.java) }
|
|
||||||
|
|
||||||
private val formatterInstance by lazy { formatterClass.getConstructor().newInstance() }
|
|
||||||
|
|
||||||
override fun apply(input: String): String {
|
|
||||||
return formatMethod(formatterInstance, input) as String
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,147 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright © 2024-2026 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.
|
|
||||||
*/
|
|
||||||
import java.nio.charset.StandardCharsets
|
|
||||||
import java.util.Base64
|
|
||||||
import org.gradle.api.Project
|
|
||||||
import org.gradle.api.publish.PublishingExtension
|
|
||||||
import org.gradle.api.publish.maven.MavenPublication
|
|
||||||
import org.gradle.api.publish.maven.tasks.AbstractPublishToMaven
|
|
||||||
import org.gradle.api.publish.maven.tasks.GenerateMavenPom
|
|
||||||
import org.gradle.kotlin.dsl.*
|
|
||||||
import org.gradle.plugins.signing.SigningExtension
|
|
||||||
|
|
||||||
/** Configures common POM metadata (licenses, developers, SCM, etc.) for all Pkl publications. */
|
|
||||||
fun Project.configurePklPomMetadata() {
|
|
||||||
extensions.configure<PublishingExtension> {
|
|
||||||
publications.withType<MavenPublication>().configureEach {
|
|
||||||
pom {
|
|
||||||
name.set(artifactId)
|
|
||||||
licenses {
|
|
||||||
license {
|
|
||||||
name.set("The Apache Software License, Version 2.0")
|
|
||||||
url.set("https://github.com/apple/pkl/blob/main/LICENSE.txt")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
developers {
|
|
||||||
developer {
|
|
||||||
id.set("pkl-authors")
|
|
||||||
name.set("The Pkl Authors")
|
|
||||||
email.set("pkl-oss@group.apple.com")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
scm {
|
|
||||||
connection.set("scm:git:git://github.com/apple/pkl.git")
|
|
||||||
developerConnection.set("scm:git:ssh://github.com/apple/pkl.git")
|
|
||||||
val buildInfo = extensions.getByType<BuildInfo>()
|
|
||||||
url.set("https://github.com/apple/pkl/tree/${buildInfo.commitish}")
|
|
||||||
}
|
|
||||||
issueManagement {
|
|
||||||
system.set("GitHub Issues")
|
|
||||||
url.set("https://github.com/apple/pkl/issues")
|
|
||||||
}
|
|
||||||
ciManagement {
|
|
||||||
system.set("GitHub Actions")
|
|
||||||
url.set("https://github.com/apple/pkl/actions")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Configures POM validation task to check for unresolved versions and snapshots in releases. */
|
|
||||||
fun Project.configurePomValidation() {
|
|
||||||
val validatePom by
|
|
||||||
tasks.registering {
|
|
||||||
if (tasks.findByName("generatePomFileForLibraryPublication") == null) {
|
|
||||||
return@registering
|
|
||||||
}
|
|
||||||
val generatePomFileForLibraryPublication by tasks.existing(GenerateMavenPom::class)
|
|
||||||
val outputFile =
|
|
||||||
layout.buildDirectory.file("validatePom") // dummy output to satisfy up-to-date check
|
|
||||||
|
|
||||||
dependsOn(generatePomFileForLibraryPublication)
|
|
||||||
inputs.file(generatePomFileForLibraryPublication.get().destination)
|
|
||||||
outputs.file(outputFile)
|
|
||||||
|
|
||||||
doLast {
|
|
||||||
outputFile.get().asFile.delete()
|
|
||||||
|
|
||||||
val pomFile = generatePomFileForLibraryPublication.get().destination
|
|
||||||
assert(pomFile.exists())
|
|
||||||
|
|
||||||
val text = pomFile.readText()
|
|
||||||
|
|
||||||
run {
|
|
||||||
val unresolvedVersion = Regex("<version>.*[+,()\\[\\]].*</version>")
|
|
||||||
val matches = unresolvedVersion.findAll(text).toList()
|
|
||||||
if (matches.isNotEmpty()) {
|
|
||||||
throw org.gradle.api.GradleException(
|
|
||||||
"""
|
|
||||||
Found unresolved version selector(s) in generated POM:
|
|
||||||
${matches.joinToString("\n") { it.groupValues[0] }}
|
|
||||||
"""
|
|
||||||
.trimIndent()
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
val buildInfo = project.extensions.getByType<BuildInfo>()
|
|
||||||
if (buildInfo.isReleaseBuild) {
|
|
||||||
val snapshotVersion = Regex("<version>.*-SNAPSHOT</version>")
|
|
||||||
val matches = snapshotVersion.findAll(text).toList()
|
|
||||||
if (matches.isNotEmpty()) {
|
|
||||||
throw org.gradle.api.GradleException(
|
|
||||||
"""
|
|
||||||
Found snapshot version(s) in generated POM of Pkl release version:
|
|
||||||
${matches.joinToString("\n") { it.groupValues[0] }}
|
|
||||||
"""
|
|
||||||
.trimIndent()
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
outputFile.get().asFile.writeText("OK")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
tasks.named("publish") { dependsOn(validatePom) }
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Configures signing for Pkl publications. */
|
|
||||||
fun Project.configurePklSigning() {
|
|
||||||
// Workaround for maven publish plugin not setting up dependencies correctly.
|
|
||||||
// Taken from https://github.com/gradle/gradle/issues/26091#issuecomment-1798137734
|
|
||||||
val dependsOnTasks = mutableListOf<String>()
|
|
||||||
|
|
||||||
tasks.withType<AbstractPublishToMaven>().configureEach {
|
|
||||||
dependsOnTasks.add(name.replace("publish", "sign").replaceAfter("Publication", ""))
|
|
||||||
dependsOn(dependsOnTasks)
|
|
||||||
}
|
|
||||||
|
|
||||||
extensions.configure<SigningExtension> {
|
|
||||||
// provided as env vars `ORG_GRADLE_PROJECT_signingKey` and
|
|
||||||
// `ORG_GRADLE_PROJECT_signingPassword` in CI.
|
|
||||||
val signingKey =
|
|
||||||
(findProperty("signingKey") as String?)?.let {
|
|
||||||
Base64.getDecoder().decode(it).toString(StandardCharsets.US_ASCII)
|
|
||||||
}
|
|
||||||
val signingPassword = findProperty("signingPassword") as String?
|
|
||||||
if (signingKey != null && signingPassword != null) {
|
|
||||||
useInMemoryPgpKeys(signingKey, signingPassword)
|
|
||||||
}
|
|
||||||
extensions.getByType<PublishingExtension>().publications.findByName("library")?.let { sign(it) }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright © 2024-2026 Apple Inc. and the Pkl project authors. All rights reserved.
|
* Copyright © 2024-2025 Apple Inc. and the Pkl project authors. All rights reserved.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
import com.diffplug.gradle.spotless.KotlinGradleExtension
|
import com.diffplug.gradle.spotless.KotlinGradleExtension
|
||||||
import org.gradle.accessors.dm.LibrariesForLibs
|
import org.gradle.accessors.dm.LibrariesForLibs
|
||||||
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
|
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
|
||||||
import org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile
|
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
|
||||||
|
|
||||||
plugins { id("com.diffplug.spotless") }
|
plugins { id("com.diffplug.spotless") }
|
||||||
|
|
||||||
@@ -52,14 +52,15 @@ configurations.all {
|
|||||||
}
|
}
|
||||||
|
|
||||||
plugins.withType(JavaPlugin::class).configureEach {
|
plugins.withType(JavaPlugin::class).configureEach {
|
||||||
tasks.withType<JavaCompile>().configureEach { options.release = 17 }
|
val java = project.extensions.getByType<JavaPluginExtension>()
|
||||||
|
java.sourceCompatibility = JavaVersion.VERSION_17
|
||||||
|
java.targetCompatibility = JavaVersion.VERSION_17
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.withType<KotlinJvmCompile>().configureEach {
|
tasks.withType<KotlinCompile>().configureEach {
|
||||||
compilerOptions {
|
compilerOptions {
|
||||||
jvmTarget = JvmTarget.JVM_17
|
jvmTarget = JvmTarget.JVM_17
|
||||||
freeCompilerArgs.addAll("-Xjsr305=strict", "-Xjvm-default=all")
|
freeCompilerArgs.addAll("-Xjsr305=strict", "-Xjvm-default=all")
|
||||||
freeCompilerArgs.add("-Xjdk-release=17")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -81,7 +82,7 @@ plugins.withType(MavenPublishPlugin::class).configureEach {
|
|||||||
repositories {
|
repositories {
|
||||||
maven {
|
maven {
|
||||||
name = "projectLocal" // affects task names
|
name = "projectLocal" // affects task names
|
||||||
url = rootDir.resolve("build/m2").toURI()
|
url = uri("file:///$rootDir/build/m2")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// use resolved/locked (e.g., `1.15`)
|
// use resolved/locked (e.g., `1.15`)
|
||||||
@@ -142,17 +143,9 @@ private fun KotlinGradleExtension.configureFormatter() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
val originalRemoteName = System.getenv("PKL_ORIGINAL_REMOTE_NAME") ?: "origin"
|
val originalRemoteName = System.getenv("PKL_ORIGINAL_REMOTE_NAME") ?: "origin"
|
||||||
// if we're running against a release branch (or a PR targeted at one), use that branch for
|
|
||||||
// ratcheting
|
|
||||||
// these env vars are set by GitHub actions:
|
|
||||||
// https://docs.github.com/en/actions/reference/workflows-and-actions/variables#default-environment-variables
|
|
||||||
val ratchetBranchName =
|
|
||||||
(System.getenv("GITHUB_BASE_REF") ?: System.getenv("GITHUB_REF_NAME"))?.let {
|
|
||||||
if (it.startsWith("release/")) it else null
|
|
||||||
} ?: "main"
|
|
||||||
|
|
||||||
spotless {
|
spotless {
|
||||||
ratchetFrom = "$originalRemoteName/$ratchetBranchName"
|
ratchetFrom = "$originalRemoteName/main"
|
||||||
|
|
||||||
// When building root project, format buildSrc files too.
|
// When building root project, format buildSrc files too.
|
||||||
// We need this because buildSrc is not a subproject of the root project, so a top-level
|
// We need this because buildSrc is not a subproject of the root project, so a top-level
|
||||||
|
|||||||
@@ -15,6 +15,7 @@
|
|||||||
*/
|
*/
|
||||||
import org.gradle.api.GradleException
|
import org.gradle.api.GradleException
|
||||||
import org.gradle.api.artifacts.Configuration
|
import org.gradle.api.artifacts.Configuration
|
||||||
|
import org.gradle.api.component.AdhocComponentWithVariants
|
||||||
import org.gradle.api.publish.maven.MavenPublication
|
import org.gradle.api.publish.maven.MavenPublication
|
||||||
import org.gradle.api.tasks.bundling.Jar
|
import org.gradle.api.tasks.bundling.Jar
|
||||||
import org.gradle.api.tasks.testing.Test
|
import org.gradle.api.tasks.testing.Test
|
||||||
@@ -23,7 +24,7 @@ import org.gradle.kotlin.dsl.*
|
|||||||
plugins {
|
plugins {
|
||||||
`java-library`
|
`java-library`
|
||||||
`maven-publish`
|
`maven-publish`
|
||||||
id("com.gradleup.shadow")
|
id("com.github.johnrengelman.shadow")
|
||||||
}
|
}
|
||||||
|
|
||||||
// make fat Jar available to other subprojects
|
// make fat Jar available to other subprojects
|
||||||
@@ -59,7 +60,6 @@ val relocations =
|
|||||||
// pkl-doc dependencies
|
// pkl-doc dependencies
|
||||||
"org.commonmark." to "org.pkl.thirdparty.commonmark.",
|
"org.commonmark." to "org.pkl.thirdparty.commonmark.",
|
||||||
"org.jetbrains." to "org.pkl.thirdparty.jetbrains.",
|
"org.jetbrains." to "org.pkl.thirdparty.jetbrains.",
|
||||||
"_COROUTINE." to "org.pkl.thirdparty.kotlinx._COROUTINE.",
|
|
||||||
|
|
||||||
// pkl-config-java dependencies
|
// pkl-config-java dependencies
|
||||||
"io.leangen.geantyref." to "org.pkl.thirdparty.geantyref.",
|
"io.leangen.geantyref." to "org.pkl.thirdparty.geantyref.",
|
||||||
@@ -93,16 +93,12 @@ tasks.shadowJar {
|
|||||||
|
|
||||||
configurations = listOf(project.configurations.runtimeClasspath.get())
|
configurations = listOf(project.configurations.runtimeClasspath.get())
|
||||||
|
|
||||||
addMultiReleaseAttribute = true
|
|
||||||
|
|
||||||
// not required at runtime / fat JARs can't be used in native-image builds anyway
|
// not required at runtime / fat JARs can't be used in native-image builds anyway
|
||||||
exclude("org/pkl/cli/svm/**")
|
exclude("org/pkl/cli/svm/**")
|
||||||
|
|
||||||
exclude("META-INF/maven/**")
|
exclude("META-INF/maven/**")
|
||||||
exclude("META-INF/upgrade/**")
|
exclude("META-INF/upgrade/**")
|
||||||
|
|
||||||
exclude("DebugProbesKt.bin")
|
|
||||||
|
|
||||||
val info = project.extensions.getByType<BuildInfo>()
|
val info = project.extensions.getByType<BuildInfo>()
|
||||||
val minimumJvmTarget = JavaVersion.toVersion(info.jvmTarget)
|
val minimumJvmTarget = JavaVersion.toVersion(info.jvmTarget)
|
||||||
|
|
||||||
@@ -120,6 +116,9 @@ tasks.shadowJar {
|
|||||||
JavaVersionRange.startingAt(JavaLanguageVersion.of(minimumJvmTarget.majorVersion.toInt() + 1))
|
JavaVersionRange.startingAt(JavaLanguageVersion.of(minimumJvmTarget.majorVersion.toInt() + 1))
|
||||||
.forEach { exclude("META-INF/versions/${it.asInt()}/**") }
|
.forEach { exclude("META-INF/versions/${it.asInt()}/**") }
|
||||||
|
|
||||||
|
// org.antlr.v4.runtime.misc.RuleDependencyProcessor
|
||||||
|
exclude("META-INF/services/javax.annotation.processing.Processor")
|
||||||
|
|
||||||
exclude("module-info.*")
|
exclude("module-info.*")
|
||||||
|
|
||||||
for ((from, to) in relocations) {
|
for ((from, to) in relocations) {
|
||||||
@@ -130,7 +129,10 @@ tasks.shadowJar {
|
|||||||
mergeServiceFiles()
|
mergeServiceFiles()
|
||||||
}
|
}
|
||||||
|
|
||||||
shadow { addShadowVariantIntoJavaComponent = false }
|
// workaround for https://github.com/johnrengelman/shadow/issues/651
|
||||||
|
components.withType(AdhocComponentWithVariants::class.java).forEach { c ->
|
||||||
|
c.withVariantsFromConfiguration(project.configurations.shadowRuntimeElements.get()) { skip() }
|
||||||
|
}
|
||||||
|
|
||||||
val testFatJar by
|
val testFatJar by
|
||||||
tasks.registering(Test::class) {
|
tasks.registering(Test::class) {
|
||||||
@@ -208,7 +210,7 @@ artifacts { add("fatJar", tasks.shadowJar) }
|
|||||||
publishing {
|
publishing {
|
||||||
publications {
|
publications {
|
||||||
named<MavenPublication>("fatJar") {
|
named<MavenPublication>("fatJar") {
|
||||||
from(components["shadow"])
|
project.shadow.component(this)
|
||||||
|
|
||||||
// sources Jar is fat
|
// sources Jar is fat
|
||||||
artifact(fatSourcesJar.flatMap { it.outputJar.asFile }) { classifier = "sources" }
|
artifact(fatSourcesJar.flatMap { it.outputJar.asFile }) { classifier = "sources" }
|
||||||
|
|||||||
@@ -1,131 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright © 2025 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.
|
|
||||||
*/
|
|
||||||
import kotlin.io.path.createDirectories
|
|
||||||
import kotlin.io.path.writeText
|
|
||||||
import org.gradle.kotlin.dsl.support.serviceOf
|
|
||||||
|
|
||||||
plugins {
|
|
||||||
id("pklJavaLibrary")
|
|
||||||
// id("pklPublishLibrary")
|
|
||||||
id("com.gradleup.shadow")
|
|
||||||
}
|
|
||||||
|
|
||||||
val executableSpec = project.extensions.create("executable", ExecutableSpec::class.java)
|
|
||||||
val buildInfo = project.extensions.getByType<BuildInfo>()
|
|
||||||
|
|
||||||
val javaExecutable by
|
|
||||||
tasks.registering(ExecutableJar::class) {
|
|
||||||
group = "build"
|
|
||||||
dependsOn(tasks.jar)
|
|
||||||
inJar = tasks.shadowJar.flatMap { it.archiveFile }
|
|
||||||
val effectiveJavaName =
|
|
||||||
executableSpec.javaName.map { name -> if (buildInfo.os.isWindows) "$name.bat" else name }
|
|
||||||
outJar = layout.buildDirectory.dir("executable").flatMap { it.file(effectiveJavaName) }
|
|
||||||
|
|
||||||
// uncomment for debugging
|
|
||||||
// jvmArgs.addAll("-ea", "-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005")
|
|
||||||
}
|
|
||||||
|
|
||||||
fun Task.setupTestStartJavaExecutable(launcher: Provider<JavaLauncher>? = null) {
|
|
||||||
group = "verification"
|
|
||||||
dependsOn(javaExecutable)
|
|
||||||
|
|
||||||
// dummy output to satisfy up-to-date check
|
|
||||||
val outputFile = layout.buildDirectory.file("testStartJavaExecutable/$name")
|
|
||||||
outputs.file(outputFile)
|
|
||||||
|
|
||||||
val execOutput =
|
|
||||||
providers.exec {
|
|
||||||
val executablePath = javaExecutable.get().outputs.files.singleFile
|
|
||||||
if (launcher?.isPresent == true) {
|
|
||||||
commandLine(
|
|
||||||
launcher.get().executablePath.asFile.absolutePath,
|
|
||||||
"-jar",
|
|
||||||
executablePath.absolutePath,
|
|
||||||
"--version",
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
commandLine(executablePath.absolutePath, "--version")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
doLast {
|
|
||||||
val outputText = execOutput.standardOutput.asText.get()
|
|
||||||
if (!outputText.contains(buildInfo.pklVersionNonUnique)) {
|
|
||||||
throw GradleException(
|
|
||||||
"Expected version output to contain current version (${buildInfo.pklVersionNonUnique}), but got '$outputText'"
|
|
||||||
)
|
|
||||||
}
|
|
||||||
outputFile.get().asFile.toPath().apply {
|
|
||||||
try {
|
|
||||||
parent.createDirectories()
|
|
||||||
} catch (ignored: java.nio.file.FileAlreadyExistsException) {}
|
|
||||||
writeText("OK")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
val testStartJavaExecutable by tasks.registering { setupTestStartJavaExecutable() }
|
|
||||||
|
|
||||||
// Setup `testStartJavaExecutable` tasks for multi-JDK testing.
|
|
||||||
val testStartJavaExecutableOnOtherJdks =
|
|
||||||
buildInfo.jdkTestRange.map { jdkTarget ->
|
|
||||||
tasks.register("testStartJavaExecutableJdk${jdkTarget.asInt()}") {
|
|
||||||
enabled = buildInfo.isVersionEnabled(jdkTarget)
|
|
||||||
val toolChainService: JavaToolchainService = serviceOf()
|
|
||||||
val launcher = toolChainService.launcherFor { languageVersion = jdkTarget }
|
|
||||||
setupTestStartJavaExecutable(launcher)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
tasks.assemble { dependsOn(javaExecutable) }
|
|
||||||
|
|
||||||
tasks.check {
|
|
||||||
dependsOn(testStartJavaExecutable)
|
|
||||||
dependsOn(testStartJavaExecutableOnOtherJdks)
|
|
||||||
}
|
|
||||||
|
|
||||||
// publishing {
|
|
||||||
// publications {
|
|
||||||
// // need to put in `afterEvaluate` because `artifactId` cannot be set lazily.
|
|
||||||
// project.afterEvaluate {
|
|
||||||
// register<MavenPublication>("javaExecutable") {
|
|
||||||
// artifactId = executableSpec.javaPublicationName.get()
|
|
||||||
//
|
|
||||||
// artifact(javaExecutable.map { it.outputs.files.singleFile }) {
|
|
||||||
// classifier = null
|
|
||||||
// extension = "bin"
|
|
||||||
// builtBy(javaExecutable)
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// pom {
|
|
||||||
// url = executableSpec.website
|
|
||||||
// description =
|
|
||||||
// executableSpec.documentationName.map { name ->
|
|
||||||
// """
|
|
||||||
// $name executable for Java.
|
|
||||||
// Can be executed directly, or with `java -jar <path/to/jpkl>`.
|
|
||||||
// Requires Java 17 or higher.
|
|
||||||
// """
|
|
||||||
// .trimIndent()
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// signing { project.afterEvaluate { sign(publishing.publications["javaExecutable"]) } }
|
|
||||||
@@ -20,7 +20,6 @@ import org.gradle.accessors.dm.LibrariesForLibs
|
|||||||
plugins {
|
plugins {
|
||||||
`java-library`
|
`java-library`
|
||||||
`jvm-toolchains`
|
`jvm-toolchains`
|
||||||
`jvm-test-suite`
|
|
||||||
id("pklKotlinTest")
|
id("pklKotlinTest")
|
||||||
id("com.diffplug.spotless")
|
id("com.diffplug.spotless")
|
||||||
}
|
}
|
||||||
@@ -35,9 +34,14 @@ val libs = the<LibrariesForLibs>()
|
|||||||
val info = project.extensions.getByType<BuildInfo>()
|
val info = project.extensions.getByType<BuildInfo>()
|
||||||
|
|
||||||
java {
|
java {
|
||||||
|
val jvmTarget = JavaVersion.toVersion(info.jvmTarget)
|
||||||
|
|
||||||
withSourcesJar() // creates `sourcesJar` task
|
withSourcesJar() // creates `sourcesJar` task
|
||||||
withJavadocJar()
|
withJavadocJar()
|
||||||
|
|
||||||
|
sourceCompatibility = jvmTarget
|
||||||
|
targetCompatibility = jvmTarget
|
||||||
|
|
||||||
toolchain {
|
toolchain {
|
||||||
languageVersion = info.jdkToolchainVersion
|
languageVersion = info.jdkToolchainVersion
|
||||||
vendor = info.jdkVendor
|
vendor = info.jdkVendor
|
||||||
@@ -108,8 +112,10 @@ tasks.compileJava {
|
|||||||
}
|
}
|
||||||
|
|
||||||
tasks.withType<JavaCompile>().configureEach {
|
tasks.withType<JavaCompile>().configureEach {
|
||||||
|
val jvmTarget = JavaVersion.toVersion(info.jvmTarget)
|
||||||
javaCompiler = info.javaCompiler
|
javaCompiler = info.javaCompiler
|
||||||
options.release = info.jvmTarget
|
sourceCompatibility = jvmTarget.majorVersion
|
||||||
|
targetCompatibility = jvmTarget.majorVersion
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.withType<JavaExec>().configureEach { jvmArgs(info.jpmsAddModulesFlags) }
|
tasks.withType<JavaExec>().configureEach { jvmArgs(info.jpmsAddModulesFlags) }
|
||||||
@@ -136,4 +142,4 @@ tasks.test { configureJdkTestTask(info.javaTestLauncher) }
|
|||||||
// inherits the configuration of the default `test` task (aside from an overridden launcher).
|
// inherits the configuration of the default `test` task (aside from an overridden launcher).
|
||||||
val jdkTestTasks = info.multiJdkTestingWith(tasks.test) { (_, jdk) -> configureJdkTestTask(jdk) }
|
val jdkTestTasks = info.multiJdkTestingWith(tasks.test) { (_, jdk) -> configureJdkTestTask(jdk) }
|
||||||
|
|
||||||
tasks.check { dependsOn(jdkTestTasks) }
|
if (info.multiJdkTesting) tasks.check { dependsOn(jdkTestTasks) }
|
||||||
|
|||||||
@@ -15,7 +15,6 @@
|
|||||||
*/
|
*/
|
||||||
import org.gradle.accessors.dm.LibrariesForLibs
|
import org.gradle.accessors.dm.LibrariesForLibs
|
||||||
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
|
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
|
||||||
import org.jetbrains.kotlin.gradle.dsl.KotlinVersion
|
|
||||||
import org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile
|
import org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
@@ -43,9 +42,5 @@ tasks.compileKotlin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
tasks.withType<KotlinJvmCompile>().configureEach {
|
tasks.withType<KotlinJvmCompile>().configureEach {
|
||||||
compilerOptions {
|
compilerOptions { jvmTarget = JvmTarget.fromTarget(buildInfo.jvmTarget.toString()) }
|
||||||
languageVersion = KotlinVersion.KOTLIN_2_1
|
|
||||||
jvmTarget = JvmTarget.fromTarget(buildInfo.jvmTarget.toString())
|
|
||||||
freeCompilerArgs.addAll("-Xjdk-release=${buildInfo.jvmTarget}")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,6 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
import java.net.URI
|
import java.net.URI
|
||||||
import org.gradle.accessors.dm.LibrariesForLibs
|
|
||||||
import org.gradle.api.tasks.testing.logging.TestExceptionFormat
|
import org.gradle.api.tasks.testing.logging.TestExceptionFormat
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
@@ -24,16 +23,13 @@ plugins {
|
|||||||
|
|
||||||
val buildInfo = project.extensions.getByType<BuildInfo>()
|
val buildInfo = project.extensions.getByType<BuildInfo>()
|
||||||
|
|
||||||
val libs = the<LibrariesForLibs>()
|
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
testImplementation(libs.assertj)
|
testImplementation(buildInfo.libs.findLibrary("assertj").get())
|
||||||
testImplementation(libs.junitApi)
|
testImplementation(buildInfo.libs.findLibrary("junitApi").get())
|
||||||
testImplementation(libs.junitParams)
|
testImplementation(buildInfo.libs.findLibrary("junitParams").get())
|
||||||
testImplementation(libs.kotlinStdLib)
|
testImplementation(buildInfo.libs.findLibrary("kotlinStdLib").get())
|
||||||
|
|
||||||
testRuntimeOnly(libs.junitEngine)
|
testRuntimeOnly(buildInfo.libs.findLibrary("junitEngine").get())
|
||||||
testRuntimeOnly(libs.junitLauncher)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.withType<Test>().configureEach {
|
tasks.withType<Test>().configureEach {
|
||||||
|
|||||||
+6
-4
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright © 2024-2025 Apple Inc. and the Pkl project authors. All rights reserved.
|
* Copyright © 2024 Apple Inc. and the Pkl project authors. All rights reserved.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -13,8 +13,10 @@
|
|||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
package org.pkl.formatter
|
val assembleNative by tasks.registering {}
|
||||||
|
|
||||||
import org.junit.platform.commons.annotation.Testable
|
val testNative by tasks.registering {}
|
||||||
|
|
||||||
@Testable class FormatterSnippetTests
|
val checkNative by tasks.registering { dependsOn(testNative) }
|
||||||
|
|
||||||
|
val buildNative by tasks.registering { dependsOn(assembleNative, checkNative) }
|
||||||
@@ -1,341 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright © 2025 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.
|
|
||||||
*/
|
|
||||||
import java.lang.Runtime.Version
|
|
||||||
import kotlin.io.path.createDirectories
|
|
||||||
import kotlin.io.path.writeText
|
|
||||||
import org.gradle.accessors.dm.LibrariesForLibs
|
|
||||||
|
|
||||||
plugins {
|
|
||||||
id("pklGraalVm")
|
|
||||||
id("pklJavaLibrary")
|
|
||||||
id("pklNativeLifecycle")
|
|
||||||
id("pklPublishLibrary")
|
|
||||||
id("com.gradleup.shadow")
|
|
||||||
}
|
|
||||||
|
|
||||||
// assumes that `pklJavaExecutable` is also applied
|
|
||||||
val executableSpec = project.extensions.getByType<ExecutableSpec>()
|
|
||||||
val buildInfo = project.extensions.getByType<BuildInfo>()
|
|
||||||
|
|
||||||
val stagedMacAmd64Executable: Configuration by configurations.creating
|
|
||||||
val stagedMacAarch64Executable: Configuration by configurations.creating
|
|
||||||
val stagedLinuxAmd64Executable: Configuration by configurations.creating
|
|
||||||
val stagedLinuxAarch64Executable: Configuration by configurations.creating
|
|
||||||
val stagedAlpineLinuxAmd64Executable: Configuration by configurations.creating
|
|
||||||
val stagedWindowsAmd64Executable: Configuration by configurations.creating
|
|
||||||
|
|
||||||
val nativeImageClasspath by
|
|
||||||
configurations.creating {
|
|
||||||
extendsFrom(configurations.runtimeClasspath.get())
|
|
||||||
// Ensure native-image version uses GraalVM C SDKs instead of Java FFI or JNA
|
|
||||||
// (comes from artifact `mordant-jvm-graal-ffi`).
|
|
||||||
exclude("com.github.ajalt.mordant", "mordant-jvm-ffm")
|
|
||||||
exclude("com.github.ajalt.mordant", "mordant-jvm-ffm-jvm")
|
|
||||||
exclude("com.github.ajalt.mordant", "mordant-jvm-jna")
|
|
||||||
exclude("com.github.ajalt.mordant", "mordant-jvm-jna-jvm")
|
|
||||||
}
|
|
||||||
|
|
||||||
val libs = the<LibrariesForLibs>()
|
|
||||||
|
|
||||||
dependencies {
|
|
||||||
fun executableFile(suffix: String) =
|
|
||||||
files(
|
|
||||||
layout.buildDirectory.dir("executable").map { dir ->
|
|
||||||
dir.file(executableSpec.name.map { "$it-$suffix" })
|
|
||||||
}
|
|
||||||
)
|
|
||||||
nativeImageClasspath(libs.truffleRuntime)
|
|
||||||
nativeImageClasspath(libs.graalSdk)
|
|
||||||
|
|
||||||
stagedMacAarch64Executable(executableFile("macos-aarch64"))
|
|
||||||
stagedMacAmd64Executable(executableFile("macos-amd64"))
|
|
||||||
stagedLinuxAmd64Executable(executableFile("linux-amd64"))
|
|
||||||
stagedLinuxAarch64Executable(executableFile("linux-aarch64"))
|
|
||||||
stagedAlpineLinuxAmd64Executable(executableFile("alpine-linux-amd64"))
|
|
||||||
stagedWindowsAmd64Executable(executableFile("windows-amd64.exe"))
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun NativeImageBuild.amd64() {
|
|
||||||
arch = Architecture.AMD64
|
|
||||||
dependsOn(":installGraalVmAmd64")
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun NativeImageBuild.aarch64() {
|
|
||||||
arch = Architecture.AARCH64
|
|
||||||
dependsOn(":installGraalVmAarch64")
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun NativeImageBuild.setClasspath() {
|
|
||||||
classpath.from(sourceSets.main.map { it.output })
|
|
||||||
classpath.from(
|
|
||||||
project(":pkl-commons-cli").extensions.getByType(SourceSetContainer::class)["svm"].output
|
|
||||||
)
|
|
||||||
classpath.from(nativeImageClasspath)
|
|
||||||
}
|
|
||||||
|
|
||||||
val macExecutableAmd64 by
|
|
||||||
tasks.registering(NativeImageBuild::class) {
|
|
||||||
imageName = executableSpec.name.map { "$it-macos-amd64" }
|
|
||||||
mainClass = executableSpec.mainClass
|
|
||||||
amd64()
|
|
||||||
setClasspath()
|
|
||||||
}
|
|
||||||
|
|
||||||
val macExecutableAarch64 by
|
|
||||||
tasks.registering(NativeImageBuild::class) {
|
|
||||||
imageName = executableSpec.name.map { "$it-macos-aarch64" }
|
|
||||||
mainClass = executableSpec.mainClass
|
|
||||||
aarch64()
|
|
||||||
setClasspath()
|
|
||||||
}
|
|
||||||
|
|
||||||
val linuxExecutableAmd64 by
|
|
||||||
tasks.registering(NativeImageBuild::class) {
|
|
||||||
imageName = executableSpec.name.map { "$it-linux-amd64" }
|
|
||||||
mainClass = executableSpec.mainClass
|
|
||||||
amd64()
|
|
||||||
setClasspath()
|
|
||||||
}
|
|
||||||
|
|
||||||
val linuxExecutableAarch64 by
|
|
||||||
tasks.registering(NativeImageBuild::class) {
|
|
||||||
imageName = executableSpec.name.map { "$it-linux-aarch64" }
|
|
||||||
mainClass = executableSpec.mainClass
|
|
||||||
aarch64()
|
|
||||||
setClasspath()
|
|
||||||
// Ensure compatibility for kernels with page size set to 4k, 16k and 64k
|
|
||||||
// (e.g. Raspberry Pi 5, Asahi Linux)
|
|
||||||
extraNativeImageArgs.add("-H:PageSize=65536")
|
|
||||||
}
|
|
||||||
|
|
||||||
val alpineExecutableAmd64 by
|
|
||||||
tasks.registering(NativeImageBuild::class) {
|
|
||||||
imageName = executableSpec.name.map { "$it-alpine-linux-amd64" }
|
|
||||||
mainClass = executableSpec.mainClass
|
|
||||||
amd64()
|
|
||||||
setClasspath()
|
|
||||||
extraNativeImageArgs.addAll(listOf("--static", "--libc=musl"))
|
|
||||||
}
|
|
||||||
|
|
||||||
val windowsExecutableAmd64 by
|
|
||||||
tasks.registering(NativeImageBuild::class) {
|
|
||||||
imageName = executableSpec.name.map { "$it-windows-amd64" }
|
|
||||||
mainClass = executableSpec.mainClass
|
|
||||||
amd64()
|
|
||||||
setClasspath()
|
|
||||||
}
|
|
||||||
|
|
||||||
val assembleNative by tasks.existing
|
|
||||||
|
|
||||||
val testStartNativeExecutable by
|
|
||||||
tasks.registering {
|
|
||||||
dependsOn(assembleNative)
|
|
||||||
|
|
||||||
// dummy file for up-to-date checking
|
|
||||||
val outputFile = project.layout.buildDirectory.file("testStartNativeExecutable/output.txt")
|
|
||||||
outputs.file(outputFile)
|
|
||||||
|
|
||||||
val execOutput =
|
|
||||||
providers.exec { commandLine(assembleNative.get().outputs.files.singleFile, "--version") }
|
|
||||||
|
|
||||||
doLast {
|
|
||||||
val outputText = execOutput.standardOutput.asText.get()
|
|
||||||
if (!outputText.contains(buildInfo.pklVersionNonUnique)) {
|
|
||||||
throw GradleException(
|
|
||||||
"Expected version output to contain current version (${buildInfo.pklVersionNonUnique}), but got '$outputText'"
|
|
||||||
)
|
|
||||||
}
|
|
||||||
outputFile.get().asFile.toPath().apply {
|
|
||||||
try {
|
|
||||||
parent.createDirectories()
|
|
||||||
} catch (ignored: java.nio.file.FileAlreadyExistsException) {}
|
|
||||||
writeText("OK")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
val requiredGlibcVersion: Version = Version.parse("2.17")
|
|
||||||
|
|
||||||
val checkGlibc by
|
|
||||||
tasks.registering {
|
|
||||||
enabled = buildInfo.os.isLinux && !buildInfo.musl
|
|
||||||
dependsOn(assembleNative)
|
|
||||||
doLast {
|
|
||||||
val exec =
|
|
||||||
providers.exec {
|
|
||||||
commandLine("objdump", "-T", assembleNative.get().outputs.files.singleFile)
|
|
||||||
}
|
|
||||||
val output = exec.standardOutput.asText.get()
|
|
||||||
val minimumGlibcVersion =
|
|
||||||
output
|
|
||||||
.split("\n")
|
|
||||||
.mapNotNull { line ->
|
|
||||||
val match = Regex("GLIBC_([.0-9]*)").find(line)
|
|
||||||
match?.groups[1]?.let { Version.parse(it.value) }
|
|
||||||
}
|
|
||||||
.maxOrNull()
|
|
||||||
if (minimumGlibcVersion == null) {
|
|
||||||
throw GradleException(
|
|
||||||
"Could not determine glibc version from executable. objdump output: $output"
|
|
||||||
)
|
|
||||||
}
|
|
||||||
if (minimumGlibcVersion > requiredGlibcVersion) {
|
|
||||||
throw GradleException(
|
|
||||||
"Incorrect glibc version. Found: $minimumGlibcVersion, required: $requiredGlibcVersion"
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Expose underlying task's outputs
|
|
||||||
private fun <T : Task> Task.wraps(other: TaskProvider<T>) {
|
|
||||||
dependsOn(other)
|
|
||||||
outputs.files(other)
|
|
||||||
}
|
|
||||||
|
|
||||||
val testNative by tasks.existing { dependsOn(testStartNativeExecutable, checkGlibc) }
|
|
||||||
|
|
||||||
val assembleNativeMacOsAarch64 by tasks.existing { wraps(macExecutableAarch64) }
|
|
||||||
|
|
||||||
val assembleNativeMacOsAmd64 by tasks.existing { wraps(macExecutableAmd64) }
|
|
||||||
|
|
||||||
val assembleNativeLinuxAarch64 by tasks.existing { wraps(linuxExecutableAarch64) }
|
|
||||||
|
|
||||||
val assembleNativeLinuxAmd64 by tasks.existing { wraps(linuxExecutableAmd64) }
|
|
||||||
|
|
||||||
val assembleNativeAlpineLinuxAmd64 by tasks.existing { wraps(alpineExecutableAmd64) }
|
|
||||||
|
|
||||||
val assembleNativeWindowsAmd64 by tasks.existing { wraps(windowsExecutableAmd64) }
|
|
||||||
|
|
||||||
publishing {
|
|
||||||
publications {
|
|
||||||
// need to put in `afterEvaluate` because `artifactId` cannot be set lazily.
|
|
||||||
project.afterEvaluate {
|
|
||||||
create<MavenPublication>("macExecutableAmd64") {
|
|
||||||
artifactId = "${executableSpec.publicationName.get()}-macos-amd64"
|
|
||||||
artifact(stagedMacAmd64Executable.singleFile) {
|
|
||||||
classifier = null
|
|
||||||
extension = "bin"
|
|
||||||
builtBy(stagedMacAmd64Executable)
|
|
||||||
}
|
|
||||||
pom {
|
|
||||||
name = "${executableSpec.publicationName.get()}-macos-amd64"
|
|
||||||
url = executableSpec.website
|
|
||||||
description =
|
|
||||||
executableSpec.documentationName.map { name ->
|
|
||||||
"Native $name executable for macOS/amd64."
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
create<MavenPublication>("macExecutableAarch64") {
|
|
||||||
artifactId = "${executableSpec.publicationName.get()}-macos-aarch64"
|
|
||||||
artifact(stagedMacAarch64Executable.singleFile) {
|
|
||||||
classifier = null
|
|
||||||
extension = "bin"
|
|
||||||
builtBy(stagedMacAarch64Executable)
|
|
||||||
}
|
|
||||||
pom {
|
|
||||||
name = "${executableSpec.publicationName.get()}-macos-aarch64"
|
|
||||||
url = executableSpec.website
|
|
||||||
description =
|
|
||||||
executableSpec.documentationName.map { name ->
|
|
||||||
"Native $name executable for macOS/aarch64."
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
create<MavenPublication>("linuxExecutableAmd64") {
|
|
||||||
artifactId = "${executableSpec.publicationName.get()}-linux-amd64"
|
|
||||||
artifact(stagedLinuxAmd64Executable.singleFile) {
|
|
||||||
classifier = null
|
|
||||||
extension = "bin"
|
|
||||||
builtBy(stagedLinuxAmd64Executable)
|
|
||||||
}
|
|
||||||
pom {
|
|
||||||
name = "${executableSpec.publicationName.get()}-linux-amd64"
|
|
||||||
url = executableSpec.website
|
|
||||||
description =
|
|
||||||
executableSpec.documentationName.map { name ->
|
|
||||||
"Native $name executable for linux/amd64."
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
create<MavenPublication>("linuxExecutableAarch64") {
|
|
||||||
artifactId = "${executableSpec.publicationName.get()}-linux-aarch64"
|
|
||||||
artifact(stagedLinuxAarch64Executable.singleFile) {
|
|
||||||
classifier = null
|
|
||||||
extension = "bin"
|
|
||||||
builtBy(stagedLinuxAarch64Executable)
|
|
||||||
}
|
|
||||||
pom {
|
|
||||||
name = "${executableSpec.publicationName.get()}-linux-aarch64"
|
|
||||||
url = executableSpec.website
|
|
||||||
description =
|
|
||||||
executableSpec.documentationName.map { name ->
|
|
||||||
"Native $name executable for linux/aarch64."
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
create<MavenPublication>("alpineLinuxExecutableAmd64") {
|
|
||||||
artifactId = "${executableSpec.publicationName.get()}-alpine-linux-amd64"
|
|
||||||
artifact(stagedAlpineLinuxAmd64Executable.singleFile) {
|
|
||||||
classifier = null
|
|
||||||
extension = "bin"
|
|
||||||
builtBy(stagedAlpineLinuxAmd64Executable)
|
|
||||||
}
|
|
||||||
pom {
|
|
||||||
name = "${executableSpec.publicationName.get()}-alpine-linux-amd64"
|
|
||||||
url = executableSpec.website
|
|
||||||
description =
|
|
||||||
executableSpec.documentationName.map { name ->
|
|
||||||
"Native $name executable for linux/amd64 and statically linked to musl."
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
create<MavenPublication>("windowsExecutableAmd64") {
|
|
||||||
artifactId = "${executableSpec.publicationName.get()}-windows-amd64"
|
|
||||||
artifact(stagedWindowsAmd64Executable.singleFile) {
|
|
||||||
classifier = null
|
|
||||||
extension = "exe"
|
|
||||||
builtBy(stagedWindowsAmd64Executable)
|
|
||||||
}
|
|
||||||
pom {
|
|
||||||
name = "${executableSpec.publicationName.get()}-windows-amd64"
|
|
||||||
url = executableSpec.website
|
|
||||||
description =
|
|
||||||
executableSpec.documentationName.map { name ->
|
|
||||||
"Native $name executable for windows/amd64."
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
signing {
|
|
||||||
project.afterEvaluate {
|
|
||||||
sign(publishing.publications["linuxExecutableAarch64"])
|
|
||||||
sign(publishing.publications["linuxExecutableAmd64"])
|
|
||||||
sign(publishing.publications["macExecutableAarch64"])
|
|
||||||
sign(publishing.publications["macExecutableAmd64"])
|
|
||||||
sign(publishing.publications["alpineLinuxExecutableAmd64"])
|
|
||||||
sign(publishing.publications["windowsExecutableAmd64"])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,128 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright © 2024-2025 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.
|
|
||||||
*/
|
|
||||||
val assembleNativeMacOsAarch64 by tasks.registering { group = "build" }
|
|
||||||
|
|
||||||
val assembleNativeMacOsAmd64 by tasks.registering { group = "build" }
|
|
||||||
|
|
||||||
val assembleNativeLinuxAarch64 by tasks.registering { group = "build" }
|
|
||||||
|
|
||||||
val assembleNativeLinuxAmd64 by tasks.registering { group = "build" }
|
|
||||||
|
|
||||||
val assembleNativeAlpineLinuxAmd64 by tasks.registering { group = "build" }
|
|
||||||
|
|
||||||
val assembleNativeWindowsAmd64 by tasks.registering { group = "build" }
|
|
||||||
|
|
||||||
val testNativeMacOsAarch64 by tasks.registering { group = "verification" }
|
|
||||||
|
|
||||||
val testNativeMacOsAmd64 by tasks.registering { group = "verification" }
|
|
||||||
|
|
||||||
val testNativeLinuxAarch64 by tasks.registering { group = "verification" }
|
|
||||||
|
|
||||||
val testNativeLinuxAmd64 by tasks.registering { group = "verification" }
|
|
||||||
|
|
||||||
val testNativeAlpineLinuxAmd64 by tasks.registering { group = "verification" }
|
|
||||||
|
|
||||||
val testNativeWindowsAmd64 by tasks.registering { group = "verification" }
|
|
||||||
|
|
||||||
val buildInfo = project.extensions.getByType<BuildInfo>()
|
|
||||||
|
|
||||||
private fun <T : Task> Task.wraps(other: TaskProvider<T>) {
|
|
||||||
dependsOn(other)
|
|
||||||
outputs.files(other)
|
|
||||||
}
|
|
||||||
|
|
||||||
val assembleNative by
|
|
||||||
tasks.registering {
|
|
||||||
group = "build"
|
|
||||||
|
|
||||||
if (!buildInfo.isCrossArchSupported && buildInfo.isCrossArch) {
|
|
||||||
throw GradleException("Cross-arch builds are not supported on ${buildInfo.os.name}")
|
|
||||||
}
|
|
||||||
|
|
||||||
when {
|
|
||||||
buildInfo.os.isMacOsX && buildInfo.targetArch == "aarch64" -> {
|
|
||||||
wraps(assembleNativeMacOsAarch64)
|
|
||||||
}
|
|
||||||
buildInfo.os.isMacOsX && buildInfo.targetArch == "amd64" -> {
|
|
||||||
wraps(assembleNativeMacOsAmd64)
|
|
||||||
}
|
|
||||||
buildInfo.os.isLinux && buildInfo.targetArch == "aarch64" -> {
|
|
||||||
wraps(assembleNativeLinuxAarch64)
|
|
||||||
}
|
|
||||||
buildInfo.os.isLinux && buildInfo.targetArch == "amd64" -> {
|
|
||||||
if (buildInfo.musl) wraps(assembleNativeAlpineLinuxAmd64)
|
|
||||||
else wraps(assembleNativeLinuxAmd64)
|
|
||||||
}
|
|
||||||
buildInfo.os.isWindows && buildInfo.targetArch == "amd64" -> {
|
|
||||||
wraps(assembleNativeWindowsAmd64)
|
|
||||||
}
|
|
||||||
else -> {
|
|
||||||
doLast {
|
|
||||||
throw GradleException(
|
|
||||||
"Cannot build targeting ${buildInfo.os.name}/${buildInfo.targetArch} with musl=${buildInfo.musl}"
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
val testNative by
|
|
||||||
tasks.registering {
|
|
||||||
group = "verification"
|
|
||||||
dependsOn(assembleNative)
|
|
||||||
|
|
||||||
if (!buildInfo.isCrossArchSupported && buildInfo.isCrossArch) {
|
|
||||||
throw GradleException("Cross-arch builds are not supported on ${buildInfo.os.name}")
|
|
||||||
}
|
|
||||||
|
|
||||||
when {
|
|
||||||
buildInfo.os.isMacOsX && buildInfo.targetArch == "aarch64" -> {
|
|
||||||
dependsOn(testNativeMacOsAarch64)
|
|
||||||
}
|
|
||||||
buildInfo.os.isMacOsX && buildInfo.targetArch == "amd64" -> {
|
|
||||||
dependsOn(testNativeMacOsAmd64)
|
|
||||||
}
|
|
||||||
buildInfo.os.isLinux && buildInfo.targetArch == "aarch64" -> {
|
|
||||||
dependsOn(testNativeLinuxAarch64)
|
|
||||||
}
|
|
||||||
buildInfo.os.isLinux && buildInfo.targetArch == "amd64" -> {
|
|
||||||
if (buildInfo.musl) dependsOn(testNativeAlpineLinuxAmd64)
|
|
||||||
else dependsOn(testNativeLinuxAmd64)
|
|
||||||
}
|
|
||||||
buildInfo.os.isWindows && buildInfo.targetArch == "amd64" -> {
|
|
||||||
dependsOn(testNativeWindowsAmd64)
|
|
||||||
}
|
|
||||||
else -> {
|
|
||||||
doLast {
|
|
||||||
throw GradleException(
|
|
||||||
"Cannot build targeting ${buildInfo.os.name}/${buildInfo.targetArch} with musl=${buildInfo.musl}"
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
val checkNative by
|
|
||||||
tasks.registering {
|
|
||||||
group = "verification"
|
|
||||||
dependsOn(testNative)
|
|
||||||
}
|
|
||||||
|
|
||||||
val buildNative by
|
|
||||||
tasks.registering {
|
|
||||||
group = "build"
|
|
||||||
dependsOn(checkNative)
|
|
||||||
}
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright © 2024-2026 Apple Inc. and the Pkl project authors. All rights reserved.
|
* Copyright © 2024 Apple Inc. and the Pkl project authors. All rights reserved.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -13,6 +13,10 @@
|
|||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
import java.nio.charset.StandardCharsets
|
||||||
|
import java.util.Base64
|
||||||
|
import org.gradle.api.publish.maven.tasks.GenerateMavenPom
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
`maven-publish`
|
`maven-publish`
|
||||||
signing
|
signing
|
||||||
@@ -23,14 +27,119 @@ publishing {
|
|||||||
components.findByName("java")?.let { javaComponent ->
|
components.findByName("java")?.let { javaComponent ->
|
||||||
create<MavenPublication>("library") { from(javaComponent) }
|
create<MavenPublication>("library") { from(javaComponent) }
|
||||||
}
|
}
|
||||||
|
withType<MavenPublication>().configureEach {
|
||||||
|
pom {
|
||||||
|
name.set(artifactId)
|
||||||
|
licenses {
|
||||||
|
license {
|
||||||
|
name.set("The Apache Software License, Version 2.0")
|
||||||
|
url.set("https://github.com/apple/pkl/blob/main/LICENSE.txt")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
developers {
|
||||||
|
developer {
|
||||||
|
id.set("pkl-authors")
|
||||||
|
name.set("The Pkl Authors")
|
||||||
|
email.set("pkl-oss@group.apple.com")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
scm {
|
||||||
|
connection.set("scm:git:git://github.com/apple/pkl.git")
|
||||||
|
developerConnection.set("scm:git:ssh://github.com/apple/pkl.git")
|
||||||
|
val buildInfo = project.extensions.getByType<BuildInfo>()
|
||||||
|
url.set("https://github.com/apple/pkl/tree/${buildInfo.commitish}")
|
||||||
|
}
|
||||||
|
issueManagement {
|
||||||
|
system.set("GitHub Issues")
|
||||||
|
url.set("https://github.com/apple/pkl/issues")
|
||||||
|
}
|
||||||
|
ciManagement {
|
||||||
|
system.set("Circle CI")
|
||||||
|
url.set("https://app.circleci.com/pipelines/github/apple/pkl")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
configurePklPomMetadata()
|
val validatePom by
|
||||||
|
tasks.registering {
|
||||||
|
if (tasks.findByName("generatePomFileForLibraryPublication") == null) {
|
||||||
|
return@registering
|
||||||
|
}
|
||||||
|
val generatePomFileForLibraryPublication by tasks.existing(GenerateMavenPom::class)
|
||||||
|
val outputFile =
|
||||||
|
layout.buildDirectory.file("validatePom") // dummy output to satisfy up-to-date check
|
||||||
|
|
||||||
configurePomValidation()
|
dependsOn(generatePomFileForLibraryPublication)
|
||||||
|
inputs.file(generatePomFileForLibraryPublication.get().destination)
|
||||||
|
outputs.file(outputFile)
|
||||||
|
|
||||||
configurePklSigning()
|
doLast {
|
||||||
|
outputFile.get().asFile.delete()
|
||||||
|
|
||||||
|
val pomFile = generatePomFileForLibraryPublication.get().destination
|
||||||
|
assert(pomFile.exists())
|
||||||
|
|
||||||
|
val text = pomFile.readText()
|
||||||
|
|
||||||
|
run {
|
||||||
|
val unresolvedVersion = Regex("<version>.*[+,()\\[\\]].*</version>")
|
||||||
|
val matches = unresolvedVersion.findAll(text).toList()
|
||||||
|
if (matches.isNotEmpty()) {
|
||||||
|
throw GradleException(
|
||||||
|
"""
|
||||||
|
Found unresolved version selector(s) in generated POM:
|
||||||
|
${matches.joinToString("\n") { it.groupValues[0] }}
|
||||||
|
"""
|
||||||
|
.trimIndent()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
val buildInfo = project.extensions.getByType<BuildInfo>()
|
||||||
|
if (buildInfo.isReleaseBuild) {
|
||||||
|
val snapshotVersion = Regex("<version>.*-SNAPSHOT</version>")
|
||||||
|
val matches = snapshotVersion.findAll(text).toList()
|
||||||
|
if (matches.isNotEmpty()) {
|
||||||
|
throw GradleException(
|
||||||
|
"""
|
||||||
|
Found snapshot version(s) in generated POM of Pkl release version:
|
||||||
|
${matches.joinToString("\n") { it.groupValues[0] }}
|
||||||
|
"""
|
||||||
|
.trimIndent()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
outputFile.get().asFile.writeText("OK")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.publish { dependsOn(validatePom) }
|
||||||
|
|
||||||
|
// Workaround for maven publish plugin not setting up dependencies correctly.
|
||||||
|
// Taken from https://github.com/gradle/gradle/issues/26091#issuecomment-1798137734
|
||||||
|
val dependsOnTasks = mutableListOf<String>()
|
||||||
|
|
||||||
|
tasks.withType<AbstractPublishToMaven>().configureEach {
|
||||||
|
dependsOnTasks.add(name.replace("publish", "sign").replaceAfter("Publication", ""))
|
||||||
|
dependsOn(dependsOnTasks)
|
||||||
|
}
|
||||||
|
|
||||||
|
signing {
|
||||||
|
// provided as env vars `ORG_GRADLE_PROJECT_signingKey` and `ORG_GRADLE_PROJECT_signingPassword`
|
||||||
|
// in CI.
|
||||||
|
val signingKey =
|
||||||
|
(findProperty("signingKey") as String?)?.let {
|
||||||
|
Base64.getDecoder().decode(it).toString(StandardCharsets.US_ASCII)
|
||||||
|
}
|
||||||
|
val signingPassword = findProperty("signingPassword") as String?
|
||||||
|
if (signingKey != null && signingPassword != null) {
|
||||||
|
useInMemoryPgpKeys(signingKey, signingPassword)
|
||||||
|
}
|
||||||
|
publishing.publications.findByName("library")?.let { sign(it) }
|
||||||
|
}
|
||||||
|
|
||||||
artifacts {
|
artifacts {
|
||||||
project.tasks.findByName("javadocJar")?.let { archives(it) }
|
project.tasks.findByName("javadocJar")?.let { archives(it) }
|
||||||
|
|||||||
@@ -1,39 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright © 2025 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.
|
|
||||||
*/
|
|
||||||
plugins { id("com.diffplug.spotless") }
|
|
||||||
|
|
||||||
val pklFormatter by configurations.creating
|
|
||||||
|
|
||||||
dependencies { pklFormatter(rootProject.project("pkl-formatter")) }
|
|
||||||
|
|
||||||
spotless {
|
|
||||||
format("pkl") {
|
|
||||||
target("**/*.pkl")
|
|
||||||
addStep(PklFormatterStep(pklFormatter).create())
|
|
||||||
licenseHeaderFile(
|
|
||||||
rootProject.file("buildSrc/src/main/resources/license-header.line-comment.txt"),
|
|
||||||
"/// ",
|
|
||||||
)
|
|
||||||
// disable ratcheting for Pkl sources
|
|
||||||
// make any change to pkl-formatter reformat the stdlib
|
|
||||||
ratchetFrom = null
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (taskName in
|
|
||||||
listOf("spotlessPkl", "spotlessPklApply", "spotlessPklCheck", "spotlessPklDiagnose")) {
|
|
||||||
tasks.named(taskName) { dependsOn(":pkl-formatter:assemble") }
|
|
||||||
}
|
|
||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
name: main
|
name: main
|
||||||
title: Main Project
|
title: Main Project
|
||||||
version: 0.31.1
|
version: 0.28.2
|
||||||
prerelease: false
|
prerelease: false
|
||||||
nav:
|
nav:
|
||||||
- nav.adoc
|
- nav.adoc
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright © 2024-2025 Apple Inc. and the Pkl project authors. All rights reserved.
|
* Copyright © 2024 Apple Inc. and the Pkl project authors. All rights reserved.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -37,8 +37,8 @@ dependencies {
|
|||||||
testImplementation(projects.pklConfigJava)
|
testImplementation(projects.pklConfigJava)
|
||||||
testImplementation(projects.pklConfigKotlin)
|
testImplementation(projects.pklConfigKotlin)
|
||||||
testImplementation(projects.pklCommonsTest)
|
testImplementation(projects.pklCommonsTest)
|
||||||
testImplementation(projects.pklParser)
|
|
||||||
testImplementation(libs.junitEngine)
|
testImplementation(libs.junitEngine)
|
||||||
|
testImplementation(libs.antlrRuntime)
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.test {
|
tasks.test {
|
||||||
|
|||||||
+39
-54
@@ -1,61 +1,46 @@
|
|||||||
# This is a Gradle generated file for dependency locking.
|
# This is a Gradle generated file for dependency locking.
|
||||||
# Manual edits can break the build and are not advised.
|
# Manual edits can break the build and are not advised.
|
||||||
# This file is expected to be part of source control.
|
# This file is expected to be part of source control.
|
||||||
com.github.ben-manes.caffeine:caffeine:2.9.3=swiftExportClasspathResolvable
|
com.tunnelvisionlabs:antlr4-runtime:4.9.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
com.google.errorprone:error_prone_annotations:2.28.0=swiftExportClasspathResolvable
|
|
||||||
io.github.java-diff-utils:java-diff-utils:4.12=kotlinInternalAbiValidation
|
|
||||||
io.leangen.geantyref:geantyref:1.3.16=testRuntimeClasspath
|
io.leangen.geantyref:geantyref:1.3.16=testRuntimeClasspath
|
||||||
io.opentelemetry:opentelemetry-api:1.41.0=swiftExportClasspathResolvable
|
net.bytebuddy:byte-buddy:1.15.11=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
io.opentelemetry:opentelemetry-context:1.41.0=swiftExportClasspathResolvable
|
org.apiguardian:apiguardian-api:1.1.2=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeOnlyDependenciesMetadata
|
||||||
net.bytebuddy:byte-buddy:1.17.7=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.assertj:assertj-core:3.27.3=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
org.apiguardian:apiguardian-api:1.1.2=testCompileClasspath,testImplementationDependenciesMetadata
|
org.graalvm.polyglot:polyglot:24.1.2=testRuntimeClasspath
|
||||||
org.assertj:assertj-core:3.27.6=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.graalvm.sdk:collections:24.1.2=testRuntimeClasspath
|
||||||
org.bouncycastle:bcpg-jdk18on:1.80=kotlinBouncyCastleConfiguration
|
org.graalvm.sdk:graal-sdk:24.1.2=testRuntimeClasspath
|
||||||
org.bouncycastle:bcpkix-jdk18on:1.80=kotlinBouncyCastleConfiguration
|
org.graalvm.sdk:nativeimage:24.1.2=testRuntimeClasspath
|
||||||
org.bouncycastle:bcprov-jdk18on:1.80=kotlinBouncyCastleConfiguration
|
org.graalvm.sdk:word:24.1.2=testRuntimeClasspath
|
||||||
org.bouncycastle:bcutil-jdk18on:1.80=kotlinBouncyCastleConfiguration
|
org.graalvm.truffle:truffle-api:24.1.2=testRuntimeClasspath
|
||||||
org.checkerframework:checker-qual:3.43.0=swiftExportClasspathResolvable
|
org.jetbrains.intellij.deps:trove4j:1.0.20200330=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||||
org.graalvm.polyglot:polyglot:25.0.0=testRuntimeClasspath
|
org.jetbrains.kotlin:kotlin-build-common:2.0.21=kotlinBuildToolsApiClasspath
|
||||||
org.graalvm.sdk:collections:25.0.0=testRuntimeClasspath
|
org.jetbrains.kotlin:kotlin-build-tools-api:2.0.21=kotlinBuildToolsApiClasspath
|
||||||
org.graalvm.sdk:graal-sdk:25.0.0=testRuntimeClasspath
|
org.jetbrains.kotlin:kotlin-build-tools-impl:2.0.21=kotlinBuildToolsApiClasspath
|
||||||
org.graalvm.sdk:nativeimage:25.0.0=testRuntimeClasspath
|
org.jetbrains.kotlin:kotlin-compiler-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||||
org.graalvm.sdk:word:25.0.0=testRuntimeClasspath
|
org.jetbrains.kotlin:kotlin-compiler-runner:2.0.21=kotlinBuildToolsApiClasspath
|
||||||
org.graalvm.truffle:truffle-api:25.0.0=testRuntimeClasspath
|
org.jetbrains.kotlin:kotlin-daemon-client:2.0.21=kotlinBuildToolsApiClasspath
|
||||||
org.jetbrains.kotlin:abi-tools-api:2.2.20=kotlinInternalAbiValidation
|
org.jetbrains.kotlin:kotlin-daemon-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||||
org.jetbrains.kotlin:abi-tools:2.2.20=kotlinInternalAbiValidation
|
org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:2.0.21=kotlinKlibCommonizerClasspath
|
||||||
org.jetbrains.kotlin:kotlin-build-tools-api:2.2.20=kotlinBuildToolsApiClasspath
|
|
||||||
org.jetbrains.kotlin:kotlin-build-tools-impl:2.2.20=kotlinBuildToolsApiClasspath
|
|
||||||
org.jetbrains.kotlin:kotlin-compiler-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable
|
|
||||||
org.jetbrains.kotlin:kotlin-compiler-runner:2.2.20=kotlinBuildToolsApiClasspath
|
|
||||||
org.jetbrains.kotlin:kotlin-daemon-client:2.2.20=kotlinBuildToolsApiClasspath
|
|
||||||
org.jetbrains.kotlin:kotlin-daemon-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable
|
|
||||||
org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:2.2.20=kotlinKlibCommonizerClasspath
|
|
||||||
org.jetbrains.kotlin:kotlin-metadata-jvm:2.2.20=kotlinInternalAbiValidation
|
|
||||||
org.jetbrains.kotlin:kotlin-native-prebuilt:2.0.21=kotlinNativeBundleConfiguration
|
org.jetbrains.kotlin:kotlin-native-prebuilt:2.0.21=kotlinNativeBundleConfiguration
|
||||||
org.jetbrains.kotlin:kotlin-reflect:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable,testRuntimeClasspath
|
org.jetbrains.kotlin:kotlin-reflect:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath,testRuntimeClasspath
|
||||||
org.jetbrains.kotlin:kotlin-script-runtime:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable
|
org.jetbrains.kotlin:kotlin-script-runtime:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath
|
||||||
org.jetbrains.kotlin:kotlin-scripting-common:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
|
org.jetbrains.kotlin:kotlin-scripting-common:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
|
||||||
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
|
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
|
||||||
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
|
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
|
||||||
org.jetbrains.kotlin:kotlin-scripting-jvm:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
|
org.jetbrains.kotlin:kotlin-scripting-jvm:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
|
||||||
org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.2.20=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.0.21=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.2.20=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.0.21=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
org.jetbrains.kotlin:kotlin-stdlib:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.jetbrains.kotlin:kotlin-stdlib:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
org.jetbrains.kotlin:swift-export-embeddable:2.2.20=swiftExportClasspathResolvable
|
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||||
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.0=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable
|
org.jetbrains:annotations:13.0=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath,testCompileClasspath,testRuntimeClasspath
|
||||||
org.jetbrains.kotlinx:kotlinx-serialization-bom:1.7.3=swiftExportClasspathResolvable
|
org.junit.jupiter:junit-jupiter-api:5.11.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath,testRuntimeOnlyDependenciesMetadata
|
||||||
org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.7.3=swiftExportClasspathResolvable
|
org.junit.jupiter:junit-jupiter-engine:5.11.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath,testRuntimeOnlyDependenciesMetadata
|
||||||
org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3=swiftExportClasspathResolvable
|
org.junit.jupiter:junit-jupiter-params:5.11.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
org.jetbrains:annotations:13.0=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable,testCompileClasspath,testRuntimeClasspath
|
org.junit.platform:junit-platform-commons:1.11.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath,testRuntimeOnlyDependenciesMetadata
|
||||||
org.junit.jupiter:junit-jupiter-api:5.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.junit.platform:junit-platform-engine:1.11.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath,testRuntimeOnlyDependenciesMetadata
|
||||||
org.junit.jupiter:junit-jupiter-engine:5.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.junit:junit-bom:5.11.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath,testRuntimeOnlyDependenciesMetadata
|
||||||
org.junit.jupiter:junit-jupiter-params:5.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
|
||||||
org.junit.platform:junit-platform-commons:1.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
|
||||||
org.junit.platform:junit-platform-engine:1.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
|
||||||
org.junit.platform:junit-platform-launcher:1.14.0=testRuntimeClasspath
|
|
||||||
org.junit:junit-bom:5.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
|
||||||
org.msgpack:msgpack-core:0.9.8=testRuntimeClasspath
|
org.msgpack:msgpack-core:0.9.8=testRuntimeClasspath
|
||||||
org.opentest4j:opentest4j:1.3.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.opentest4j:opentest4j:1.3.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath,testRuntimeOnlyDependenciesMetadata
|
||||||
org.organicdesign:Paguro:3.10.3=testRuntimeClasspath
|
org.organicdesign:Paguro:3.10.3=testRuntimeClasspath
|
||||||
org.snakeyaml:snakeyaml-engine:2.10=testRuntimeClasspath
|
org.snakeyaml:snakeyaml-engine:2.9=testRuntimeClasspath
|
||||||
empty=annotationProcessor,apiDependenciesMetadata,compileClasspath,compileOnlyDependenciesMetadata,implementationDependenciesMetadata,intransitiveDependenciesMetadata,kotlinCompilerPluginClasspath,kotlinNativeCompilerPluginClasspath,kotlinScriptDefExtensions,runtimeClasspath,testAnnotationProcessor,testApiDependenciesMetadata,testCompileOnlyDependenciesMetadata,testIntransitiveDependenciesMetadata,testKotlinScriptDefExtensions
|
empty=annotationProcessor,apiDependenciesMetadata,compileClasspath,compileOnlyDependenciesMetadata,implementationDependenciesMetadata,intransitiveDependenciesMetadata,kotlinCompilerPluginClasspath,kotlinNativeCompilerPluginClasspath,kotlinScriptDef,kotlinScriptDefExtensions,runtimeClasspath,runtimeOnlyDependenciesMetadata,testAnnotationProcessor,testApiDependenciesMetadata,testCompileOnlyDependenciesMetadata,testIntransitiveDependenciesMetadata,testKotlinScriptDef,testKotlinScriptDefExtensions
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
// the following attributes must be updated immediately before a release
|
// the following attributes must be updated immediately before a release
|
||||||
|
|
||||||
// pkl version corresponding to current git commit without -dev suffix or git hash
|
// pkl version corresponding to current git commit without -dev suffix or git hash
|
||||||
:pkl-version-no-suffix: 0.31.1
|
:pkl-version-no-suffix: 0.28.2
|
||||||
// tells whether pkl version corresponding to current git commit
|
// tells whether pkl version corresponding to current git commit
|
||||||
// is a release version (:is-release-version: '') or dev version (:!is-release-version:)
|
// is a release version (:is-release-version: '') or dev version (:!is-release-version:)
|
||||||
:is-release-version: ''
|
:is-release-version: ''
|
||||||
@@ -23,9 +23,9 @@ endif::[]
|
|||||||
|
|
||||||
:uri-maven-docsite: https://central.sonatype.com
|
:uri-maven-docsite: https://central.sonatype.com
|
||||||
|
|
||||||
:uri-snapshot-repo: https://central.sonatype.com/repository/maven-snapshots
|
:uri-sonatype: https://s01.oss.sonatype.org/content/groups/public
|
||||||
|
|
||||||
:uri-maven-repo: https://central.sonatype.com/repository/maven-snapshots
|
:uri-maven-repo: https://s01.oss.sonatype.org/content/groups/public
|
||||||
ifdef::is-release-version[]
|
ifdef::is-release-version[]
|
||||||
:uri-maven-repo: https://repo1.maven.org/maven2
|
:uri-maven-repo: https://repo1.maven.org/maven2
|
||||||
endif::[]
|
endif::[]
|
||||||
@@ -68,24 +68,18 @@ endif::[]
|
|||||||
:uri-pkldoc-example: {uri-pkl-examples-tree}/pkldoc
|
:uri-pkldoc-example: {uri-pkl-examples-tree}/pkldoc
|
||||||
|
|
||||||
:uri-stdlib-baseModule: {uri-pkl-stdlib-docs}/base
|
:uri-stdlib-baseModule: {uri-pkl-stdlib-docs}/base
|
||||||
:uri-stdlib-CommandModule: {uri-pkl-stdlib-docs}/Command
|
|
||||||
:uri-stdlib-analyzeModule: {uri-pkl-stdlib-docs}/analyze
|
:uri-stdlib-analyzeModule: {uri-pkl-stdlib-docs}/analyze
|
||||||
:uri-stdlib-jsonnetModule: {uri-pkl-stdlib-docs}/jsonnet
|
:uri-stdlib-jsonnetModule: {uri-pkl-stdlib-docs}/jsonnet
|
||||||
:uri-stdlib-reflectModule: {uri-pkl-stdlib-docs}/reflect
|
:uri-stdlib-reflectModule: {uri-pkl-stdlib-docs}/reflect
|
||||||
:uri-stdlib-mathModule: {uri-pkl-stdlib-docs}/math
|
:uri-stdlib-mathModule: {uri-pkl-stdlib-docs}/math
|
||||||
:uri-stdlib-xmlModule: {uri-pkl-stdlib-docs}/xml
|
:uri-stdlib-xmlModule: {uri-pkl-stdlib-docs}/xml
|
||||||
:uri-stdlib-protobufModule: {uri-pkl-stdlib-docs}/protobuf
|
:uri-stdlib-protobufModule: {uri-pkl-stdlib-docs}/protobuf
|
||||||
:uri-stdlib-pklbinaryModule: {uri-pkl-stdlib-docs}/pklbinary
|
|
||||||
:uri-stdlib-yamlModule: {uri-pkl-stdlib-docs}/yaml
|
|
||||||
:uri-stdlib-YamlParser: {uri-stdlib-yamlModule}/Parser
|
|
||||||
:uri-stdlib-evaluatorSettingsModule: {uri-pkl-stdlib-docs}/EvaluatorSettings
|
:uri-stdlib-evaluatorSettingsModule: {uri-pkl-stdlib-docs}/EvaluatorSettings
|
||||||
:uri-stdlib-evaluatorSettingsHttpClass: {uri-stdlib-evaluatorSettingsModule}/Http
|
|
||||||
:uri-stdlib-Boolean: {uri-stdlib-baseModule}/Boolean
|
:uri-stdlib-Boolean: {uri-stdlib-baseModule}/Boolean
|
||||||
:uri-stdlib-xor: {uri-stdlib-baseModule}/Boolean#xor()
|
:uri-stdlib-xor: {uri-stdlib-baseModule}/Boolean#xor()
|
||||||
:uri-stdlib-implies: {uri-stdlib-baseModule}/Boolean#implies()
|
:uri-stdlib-implies: {uri-stdlib-baseModule}/Boolean#implies()
|
||||||
:uri-stdlib-Any: {uri-stdlib-baseModule}/Any
|
:uri-stdlib-Any: {uri-stdlib-baseModule}/Any
|
||||||
:uri-stdlib-String: {uri-stdlib-baseModule}/String
|
:uri-stdlib-String: {uri-stdlib-baseModule}/String
|
||||||
:uri-stdlib-Collection: {uri-stdlib-baseModule}/Collection
|
|
||||||
:uri-stdlib-StringToInt: {uri-stdlib-baseModule}/String#toInt()
|
:uri-stdlib-StringToInt: {uri-stdlib-baseModule}/String#toInt()
|
||||||
:uri-stdlib-Int: {uri-stdlib-baseModule}/Int
|
:uri-stdlib-Int: {uri-stdlib-baseModule}/Int
|
||||||
:uri-stdlib-Float: {uri-stdlib-baseModule}/Float
|
:uri-stdlib-Float: {uri-stdlib-baseModule}/Float
|
||||||
@@ -134,10 +128,7 @@ endif::[]
|
|||||||
:uri-stdlib-Class: {uri-stdlib-baseModule}/Class
|
:uri-stdlib-Class: {uri-stdlib-baseModule}/Class
|
||||||
:uri-stdlib-TypeAlias: {uri-stdlib-baseModule}/TypeAlias
|
:uri-stdlib-TypeAlias: {uri-stdlib-baseModule}/TypeAlias
|
||||||
:uri-stdlib-Deprecated: {uri-stdlib-baseModule}/Deprecated
|
:uri-stdlib-Deprecated: {uri-stdlib-baseModule}/Deprecated
|
||||||
:uri-stdlib-BaseValueRenderer: {uri-stdlib-baseModule}/BaseValueRenderer
|
|
||||||
:uri-stdlib-ValueRenderer: {uri-stdlib-baseModule}/ValueRenderer
|
:uri-stdlib-ValueRenderer: {uri-stdlib-baseModule}/ValueRenderer
|
||||||
:uri-stdlib-BytesRenderer: {uri-stdlib-baseModule}/BytesRenderer
|
|
||||||
:uri-stdlib-YamlRenderer: {uri-stdlib-baseModule}/YamlRenderer
|
|
||||||
:uri-stdlib-PcfRenderer-converters: {uri-stdlib-baseModule}/PcfRenderer#converters
|
:uri-stdlib-PcfRenderer-converters: {uri-stdlib-baseModule}/PcfRenderer#converters
|
||||||
:uri-stdlib-Function: {uri-stdlib-baseModule}/Function
|
:uri-stdlib-Function: {uri-stdlib-baseModule}/Function
|
||||||
:uri-stdlib-Function0: {uri-stdlib-baseModule}/Function0
|
:uri-stdlib-Function0: {uri-stdlib-baseModule}/Function0
|
||||||
@@ -147,22 +138,10 @@ endif::[]
|
|||||||
:uri-stdlib-Function3: {uri-stdlib-baseModule}/Function3
|
:uri-stdlib-Function3: {uri-stdlib-baseModule}/Function3
|
||||||
:uri-stdlib-Function4: {uri-stdlib-baseModule}/Function4
|
:uri-stdlib-Function4: {uri-stdlib-baseModule}/Function4
|
||||||
:uri-stdlib-Function5: {uri-stdlib-baseModule}/Function5
|
:uri-stdlib-Function5: {uri-stdlib-baseModule}/Function5
|
||||||
:uri-stdlib-Bytes: {uri-stdlib-baseModule}/Bytes
|
|
||||||
:uri-stdlib-Resource: {uri-stdlib-baseModule}/Resource
|
:uri-stdlib-Resource: {uri-stdlib-baseModule}/Resource
|
||||||
:uri-stdlib-outputFiles: {uri-stdlib-baseModule}/ModuleOutput#files
|
:uri-stdlib-outputFiles: {uri-stdlib-baseModule}/ModuleOutput#files
|
||||||
:uri-stdlib-FileOutput: {uri-stdlib-baseModule}/FileOutput
|
|
||||||
:uri-stdlib-Annotation: {uri-stdlib-baseModule}/Annotation
|
|
||||||
:uri-stdlib-ConvertProperty: {uri-stdlib-baseModule}/ConvertProperty
|
|
||||||
:uri-stdlib-Command-Flag: {uri-stdlib-CommandModule}/Flag
|
|
||||||
:uri-stdlib-Command-BooleanFlag: {uri-stdlib-CommandModule}/BooleanFlag
|
|
||||||
:uri-stdlib-Command-CountedFlag: {uri-stdlib-CommandModule}/CountedFlag
|
|
||||||
:uri-stdlib-Command-Argument: {uri-stdlib-CommandModule}/Argument
|
|
||||||
:uri-stdlib-Command-Import: {uri-stdlib-CommandModule}/Import
|
|
||||||
|
|
||||||
:uri-messagepack: https://msgpack.org/index.html
|
:uri-messagepack: https://msgpack.org/index.html
|
||||||
:uri-messagepack-spec: https://github.com/msgpack/msgpack/blob/master/spec.md
|
:uri-messagepack-spec: https://github.com/msgpack/msgpack/blob/master/spec.md
|
||||||
|
|
||||||
:uri-pkl-roadmap: https://github.com/orgs/apple/projects/12/views/1
|
:uri-pkl-roadmap: https://github.com/orgs/apple/projects/12/views/1
|
||||||
|
|
||||||
// TODO: figure out what the correct URL should be
|
|
||||||
:uri-sonatype-snapshot-download: https://s01.oss.sonatype.org/service/local/artifact/maven/redirect?r=snapshots&g=org.pkl-lang&v={pkl-artifact-version}
|
|
||||||
|
|||||||
@@ -1,15 +1,9 @@
|
|||||||
= `pkl-binary` Encoding
|
= Pkl Binary Encoding
|
||||||
include::ROOT:partial$component-attributes.adoc[]
|
include::ROOT:partial$component-attributes.adoc[]
|
||||||
include::partial$component-attributes.adoc[]
|
include::partial$component-attributes.adoc[]
|
||||||
|
|
||||||
:uri-pkl-core-Evaluator: {uri-pkl-core-main-sources}/Evaluator.java
|
Pkl values can be encoded into a binary format.
|
||||||
|
This format is used for Pkl's non-JVM language bindings, for example, for its Go and Swift bindings.
|
||||||
Pkl values can be encoded into a binary format called "pkl-binary".
|
|
||||||
This format is a lossless serialization of the underlying Pkl values.
|
|
||||||
|
|
||||||
Pkl code can be rendered into this format using the {uri-stdlib-pklbinaryModule}[pkl:pklbinary] standard library module.
|
|
||||||
|
|
||||||
Alternatively, many language bindings also provide methods to evaluate into `pkl-binary`, such as the `evaluateExpressionPklBinary` method in link:{uri-pkl-core-Evaluator}[org.pkl.core.Evaluator].
|
|
||||||
|
|
||||||
The binary format is uses link:{uri-messagepack}[MessagePack] encoding.
|
The binary format is uses link:{uri-messagepack}[MessagePack] encoding.
|
||||||
|
|
||||||
@@ -42,9 +36,7 @@ For example, value `8` gets encoded as MessagePack `int8` format.
|
|||||||
== Non-primitives
|
== Non-primitives
|
||||||
|
|
||||||
All non-primitive values are encoded as MessagePack arrays.
|
All non-primitive values are encoded as MessagePack arrays.
|
||||||
The first slot of the array designates the value's type.
|
The first slot of the array designates the value's type. The remaining slots have fixed meanings depending on the type.
|
||||||
The remaining slots have fixed meanings depending on the type.
|
|
||||||
Additional slots may be added to types in future Pkl releases. Decoders *must* be designed to defensively discard values beyond the number of known slots for a type or provide meaningful error messages.
|
|
||||||
|
|
||||||
The array's length is the number of slots that are filled. For example, xref:{uri-stdlib-List}[List] is encoded as an MessagePack array with two elements.
|
The array's length is the number of slots that are filled. For example, xref:{uri-stdlib-List}[List] is encoded as an MessagePack array with two elements.
|
||||||
|
|
||||||
@@ -54,16 +46,16 @@ The array's length is the number of slots that are filled. For example, xref:{ur
|
|||||||
||code |type |description |type |description |type |description
|
||code |type |description |type |description |type |description
|
||||||
|
|
||||||
|link:{uri-stdlib-Typed}[Typed], link:{uri-stdlib-Dynamic}[Dynamic]
|
|link:{uri-stdlib-Typed}[Typed], link:{uri-stdlib-Dynamic}[Dynamic]
|
||||||
|`0x01`
|
|`0x1`
|
||||||
|link:{uri-messagepack-str}[str]
|
|link:{uri-messagepack-str}[str]
|
||||||
|<<type-name-encoding,Class name>>
|
|Fully qualified class name
|
||||||
|link:{uri-messagepack-str}[str]
|
|link:{uri-messagepack-str}[str]
|
||||||
|Enclosing module URI
|
|Enclosing module URI
|
||||||
|link:{uri-messagepack-array}[array]
|
|link:{uri-messagepack-array}[array]
|
||||||
|Array of <<object-members,object members>>
|
|Array of <<object-members,object members>>
|
||||||
|
|
||||||
|link:{uri-stdlib-Map}[Map]
|
|link:{uri-stdlib-Map}[Map]
|
||||||
|`0x02`
|
|`0x2`
|
||||||
|link:{uri-messagepack-map}[map]
|
|link:{uri-messagepack-map}[map]
|
||||||
|Map of `<value>` to `<value>`
|
|Map of `<value>` to `<value>`
|
||||||
|
|
|
|
||||||
@@ -72,7 +64,7 @@ The array's length is the number of slots that are filled. For example, xref:{ur
|
|||||||
|
|
|
|
||||||
|
|
||||||
|link:{uri-stdlib-Mapping}[Mapping]
|
|link:{uri-stdlib-Mapping}[Mapping]
|
||||||
|`0x03`
|
|`0x3`
|
||||||
|link:{uri-messagepack-map}[map]
|
|link:{uri-messagepack-map}[map]
|
||||||
|Map of `<value>` to `<value>`
|
|Map of `<value>` to `<value>`
|
||||||
|
|
|
|
||||||
@@ -81,7 +73,7 @@ The array's length is the number of slots that are filled. For example, xref:{ur
|
|||||||
|
|
|
|
||||||
|
|
||||||
|link:{uri-stdlib-List}[List]
|
|link:{uri-stdlib-List}[List]
|
||||||
|`0x04`
|
|`0x4`
|
||||||
|link:{uri-messagepack-array}[array]
|
|link:{uri-messagepack-array}[array]
|
||||||
|Array of `<value>`
|
|Array of `<value>`
|
||||||
|
|
|
|
||||||
@@ -90,7 +82,7 @@ The array's length is the number of slots that are filled. For example, xref:{ur
|
|||||||
|
|
|
|
||||||
|
|
||||||
|link:{uri-stdlib-Listing}[Listing]
|
|link:{uri-stdlib-Listing}[Listing]
|
||||||
|`0x05`
|
|`0x5`
|
||||||
|link:{uri-messagepack-array}[array]
|
|link:{uri-messagepack-array}[array]
|
||||||
|Array of `<value>`
|
|Array of `<value>`
|
||||||
|
|
|
|
||||||
@@ -99,7 +91,7 @@ The array's length is the number of slots that are filled. For example, xref:{ur
|
|||||||
|
|
|
|
||||||
|
|
||||||
|link:{uri-stdlib-Set}[Set]
|
|link:{uri-stdlib-Set}[Set]
|
||||||
|`0x06`
|
|`0x6`
|
||||||
|link:{uri-messagepack-array}[array]
|
|link:{uri-messagepack-array}[array]
|
||||||
|Array of `<value>`
|
|Array of `<value>`
|
||||||
|
|
|
|
||||||
@@ -108,7 +100,7 @@ The array's length is the number of slots that are filled. For example, xref:{ur
|
|||||||
|
|
|
|
||||||
|
|
||||||
|link:{uri-stdlib-Duration}[Duration]
|
|link:{uri-stdlib-Duration}[Duration]
|
||||||
|`0x07`
|
|`0x7`
|
||||||
|{uri-messagepack-float}[float64]
|
|{uri-messagepack-float}[float64]
|
||||||
|Duration value
|
|Duration value
|
||||||
|link:{uri-messagepack-str}[str]
|
|link:{uri-messagepack-str}[str]
|
||||||
@@ -117,7 +109,7 @@ The array's length is the number of slots that are filled. For example, xref:{ur
|
|||||||
|
|
|
|
||||||
|
|
||||||
|link:{uri-stdlib-DataSize}[DataSize]
|
|link:{uri-stdlib-DataSize}[DataSize]
|
||||||
|`0x08`
|
|`0x8`
|
||||||
|link:{uri-messagepack-float}[float64]
|
|link:{uri-messagepack-float}[float64]
|
||||||
|Value (float64)
|
|Value (float64)
|
||||||
|link:{uri-messagepack-str}[str]
|
|link:{uri-messagepack-str}[str]
|
||||||
@@ -126,7 +118,7 @@ The array's length is the number of slots that are filled. For example, xref:{ur
|
|||||||
|
|
|
|
||||||
|
|
||||||
|link:{uri-stdlib-Pair}[Pair]
|
|link:{uri-stdlib-Pair}[Pair]
|
||||||
|`0x09`
|
|`0x9`
|
||||||
|`<value>`
|
|`<value>`
|
||||||
|First value
|
|First value
|
||||||
|`<value>`
|
|`<value>`
|
||||||
@@ -135,7 +127,7 @@ The array's length is the number of slots that are filled. For example, xref:{ur
|
|||||||
|
|
|
|
||||||
|
|
||||||
|link:{uri-stdlib-IntSeq}[IntSeq]
|
|link:{uri-stdlib-IntSeq}[IntSeq]
|
||||||
|`0x0A`
|
|`0xA`
|
||||||
|link:{uri-messagepack-int}[int]
|
|link:{uri-messagepack-int}[int]
|
||||||
|Start
|
|Start
|
||||||
|link:{uri-messagepack-int}[int]
|
|link:{uri-messagepack-int}[int]
|
||||||
@@ -144,7 +136,7 @@ The array's length is the number of slots that are filled. For example, xref:{ur
|
|||||||
|Step
|
|Step
|
||||||
|
|
||||||
|link:{uri-stdlib-Regex}[Regex]
|
|link:{uri-stdlib-Regex}[Regex]
|
||||||
|`0x0B`
|
|`0xB`
|
||||||
|link:{uri-messagepack-str}[str]
|
|link:{uri-messagepack-str}[str]
|
||||||
|Regex string representation
|
|Regex string representation
|
||||||
|
|
|
|
||||||
@@ -153,55 +145,24 @@ The array's length is the number of slots that are filled. For example, xref:{ur
|
|||||||
|
|
|
|
||||||
|
|
||||||
|link:{uri-stdlib-Class}[Class]
|
|link:{uri-stdlib-Class}[Class]
|
||||||
|`0x0C`
|
|`0xC`
|
||||||
|link:{uri-messagepack-str}[str]
|
|
|
||||||
|<<type-name-encoding,Class name>>
|
|
|
||||||
|link:{uri-messagepack-str}[str]
|
|
|
||||||
|Module URI
|
|
|
||||||
|
|
|
|
||||||
|
|
|
|
||||||
|
|
||||||
|link:{uri-stdlib-TypeAlias}[TypeAlias]
|
|link:{uri-stdlib-TypeAlias}[TypeAlias]
|
||||||
|`0x0D`
|
|`0xD`
|
||||||
|link:{uri-messagepack-str}[str]
|
|
||||||
|<<type-name-encoding,TypeAlias name>>
|
|
||||||
|link:{uri-messagepack-str}[str]
|
|
||||||
|Module URI
|
|
||||||
|
|
|
|
||||||
|
|
|
|
||||||
|
|
||||||
|link:{uri-stdlib-Function}[Function]
|
|
||||||
|`0x0E`
|
|
||||||
|
|
|
||||||
|
|
|
||||||
|
|
|
||||||
|
|
|
||||||
|
|
|
||||||
|
|
|
||||||
|
|
||||||
|link:{uri-stdlib-Bytes}[Bytes]
|
|
||||||
|`0x0F`
|
|
||||||
|link:{uri-messagepack-bin}[bin]
|
|
||||||
|Binary contents
|
|
||||||
|
|
|
|
||||||
|
|
|
|
||||||
|
|
|
|
||||||
|
|
|
|
||||||
|===
|
|===
|
||||||
|
|
||||||
[[type-name-encoding]]
|
|
||||||
[NOTE]
|
|
||||||
====
|
|
||||||
Type names have specific encoding rules:
|
|
||||||
|
|
||||||
* When the module URI is `pkl:base`:
|
|
||||||
** If the type name is `ModuleClass`, this type represents the module class of `pkl:base`.
|
|
||||||
** Otherwise, the type name corresponds to a type in `pkl:base`.
|
|
||||||
* For all other module URIs:
|
|
||||||
** When the type name contains `\#`, the string after the `#` character corresponds to a type in that module. The string before the `#` is the name of the module.
|
|
||||||
** Otherwise, the type name is the name of the module and represents the class of the module.
|
|
||||||
====
|
|
||||||
|
|
||||||
[[object-members]]
|
[[object-members]]
|
||||||
== Object Members
|
== Object Members
|
||||||
|
|
||||||
@@ -233,3 +194,4 @@ Like non-primitive values, object members are encoded as MessagePack arrays, whe
|
|||||||
|`<value>`
|
|`<value>`
|
||||||
|element value
|
|element value
|
||||||
|===
|
|===
|
||||||
|
|
||||||
|
|||||||
@@ -199,17 +199,12 @@ class Http {
|
|||||||
/// PEM format certificates to trust when making HTTP requests.
|
/// PEM format certificates to trust when making HTTP requests.
|
||||||
///
|
///
|
||||||
/// If [null], Pkl will trust its own built-in certificates.
|
/// If [null], Pkl will trust its own built-in certificates.
|
||||||
caCertificates: Bytes? // <1>
|
caCertificates: Binary?
|
||||||
|
|
||||||
/// Configuration of the HTTP proxy to use.
|
/// Configuration of the HTTP proxy to use.
|
||||||
///
|
///
|
||||||
/// If [null], uses the operating system's proxy configuration.
|
/// If [null], uses the operating system's proxy configuration.
|
||||||
proxy: Proxy?
|
proxy: Proxy?
|
||||||
|
|
||||||
/// HTTP rewrites, from source prefix to target prefix.
|
|
||||||
///
|
|
||||||
/// Each rewrite must start with `http://` or `https://`, and must end with `/`.
|
|
||||||
rewrites: Mapping<String, String>?
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Settings that control how Pkl talks to HTTP proxies.
|
/// Settings that control how Pkl talks to HTTP proxies.
|
||||||
@@ -251,8 +246,10 @@ class Proxy {
|
|||||||
/// ```
|
/// ```
|
||||||
noProxy: Listing<String>(isDistinct)
|
noProxy: Listing<String>(isDistinct)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
typealias Binary = Any // <1>
|
||||||
----
|
----
|
||||||
<1> link:{uri-messagepack-bin}[bin format]
|
<1> link:{uri-messagepack-bin}[bin format] (not expressable in Pkl)
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
[source,json5]
|
[source,json5]
|
||||||
@@ -350,12 +347,14 @@ requestId: Int
|
|||||||
evaluatorId: Int
|
evaluatorId: Int
|
||||||
|
|
||||||
/// The evaluation contents, if successful.
|
/// The evaluation contents, if successful.
|
||||||
result: Bytes? // <1>
|
result: Binary? // <1>
|
||||||
|
|
||||||
/// A message detailing why evaluation failed.
|
/// A message detailing why evaluation failed.
|
||||||
error: String?
|
error: String?
|
||||||
|
|
||||||
|
typealias Binary = Any // <1>
|
||||||
----
|
----
|
||||||
<1> xref:binary-encoding.adoc[Pkl Binary Encoding] in link:{uri-messagepack-bin}[bin format]
|
<1> xref:binary-encoding.adoc[Pkl Binary Encoding] in link:{uri-messagepack-bin}[bin format] (not expressable in Pkl)
|
||||||
|
|
||||||
[[log]]
|
[[log]]
|
||||||
=== Log
|
=== Log
|
||||||
@@ -426,12 +425,14 @@ requestId: Int
|
|||||||
evaluatorId: Int
|
evaluatorId: Int
|
||||||
|
|
||||||
/// The contents of the resource.
|
/// The contents of the resource.
|
||||||
contents: Bytes? // <1>
|
contents: Binary? // <1>
|
||||||
|
|
||||||
/// The description of the error that occurred when reading this resource.
|
/// The description of the error that occurred when reading this resource.
|
||||||
error: String?
|
error: String?
|
||||||
|
|
||||||
|
typealias Binary = Any // <1>
|
||||||
----
|
----
|
||||||
<1> MessagePack's link:https://github.com/msgpack/msgpack/blob/master/spec.md#bin-format-family[bin format family]
|
<1> MessagePack's link:https://github.com/msgpack/msgpack/blob/master/spec.md#bin-format-family[bin format family] (not expressable in Pkl)
|
||||||
|
|
||||||
[[read-module-request]]
|
[[read-module-request]]
|
||||||
=== Read Module Request
|
=== Read Module Request
|
||||||
|
|||||||
@@ -4,8 +4,8 @@ import org.pkl.config.java.JavaType;
|
|||||||
import org.pkl.core.ModuleSource;
|
import org.pkl.core.ModuleSource;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
@SuppressWarnings({"unused", "NewClassNamingConvention"})
|
@SuppressWarnings("unused")
|
||||||
// the pkl-jvm-examples repo has a similar example
|
// the pkl/pkl-examples repo has a similar example
|
||||||
public class JavaConfigExample {
|
public class JavaConfigExample {
|
||||||
@Test
|
@Test
|
||||||
public void usage() {
|
public void usage() {
|
||||||
|
|||||||
@@ -2,12 +2,6 @@
|
|||||||
include::ROOT:partial$component-attributes.adoc[]
|
include::ROOT:partial$component-attributes.adoc[]
|
||||||
:uri-pkl-codegen-java-maven-module: {uri-maven-docsite}/artifact/org.pkl-lang/pkl-codegen-java
|
:uri-pkl-codegen-java-maven-module: {uri-maven-docsite}/artifact/org.pkl-lang/pkl-codegen-java
|
||||||
|
|
||||||
:uri-pkl-codegen-java-download: {uri-sonatype-snapshot-download}&a=pkl-cli-codegen-java&e=jar
|
|
||||||
|
|
||||||
ifdef::is-release-version[]
|
|
||||||
:uri-pkl-codegen-java-download: {github-releases}/pkl-codegen-java
|
|
||||||
endif::[]
|
|
||||||
|
|
||||||
The Java source code generator takes Pkl class definitions as an input, and generates corresponding Java classes with equally named properties.
|
The Java source code generator takes Pkl class definitions as an input, and generates corresponding Java classes with equally named properties.
|
||||||
|
|
||||||
The benefits of code generation are:
|
The benefits of code generation are:
|
||||||
@@ -33,7 +27,7 @@ The `pkl-codegen-java` library is available {uri-pkl-codegen-java-maven-module}[
|
|||||||
It requires Java 17 or higher.
|
It requires Java 17 or higher.
|
||||||
|
|
||||||
ifndef::is-release-version[]
|
ifndef::is-release-version[]
|
||||||
NOTE: Snapshots are published to repository `{uri-snapshot-repo}`.
|
NOTE: Snapshots are published to repository `{uri-sonatype}`.
|
||||||
endif::[]
|
endif::[]
|
||||||
|
|
||||||
==== Gradle
|
==== Gradle
|
||||||
@@ -109,41 +103,8 @@ endif::[]
|
|||||||
[[install-cli]]
|
[[install-cli]]
|
||||||
=== CLI
|
=== CLI
|
||||||
|
|
||||||
The CLI is available as a Java executable.
|
The CLI is bundled with the Java library.
|
||||||
|
As we do not currently ship the CLI as a self-contained Jar, we recommend to provision it with a Maven compatible build tool as shown in <<install-library>>.
|
||||||
It works on multiple platforms, and requires a Java 17 (or higher) runtime on the system path.
|
|
||||||
|
|
||||||
To download:
|
|
||||||
|
|
||||||
[tabs]
|
|
||||||
====
|
|
||||||
macOS/Linux::
|
|
||||||
+
|
|
||||||
[source,shell]
|
|
||||||
[subs="+attributes"]
|
|
||||||
----
|
|
||||||
curl -L -o pkl-codegen-java '{uri-pkl-codegen-java-download}'
|
|
||||||
chmod +x pkl-codegen-java
|
|
||||||
./pkl-codegen-java --version
|
|
||||||
----
|
|
||||||
|
|
||||||
Windows::
|
|
||||||
+
|
|
||||||
[source,PowerShell]
|
|
||||||
[subs="+attributes"]
|
|
||||||
----
|
|
||||||
Invoke-WebRequest '{uri-pkl-codegen-java-download}' -OutFile pkl-codegen-java.bat
|
|
||||||
.\pkl-codegen-java --version
|
|
||||||
----
|
|
||||||
====
|
|
||||||
|
|
||||||
This should print something similar to:
|
|
||||||
|
|
||||||
[source,shell]
|
|
||||||
[subs="+attributes"]
|
|
||||||
----
|
|
||||||
pkl-codegen-java {pkl-version} (macOS 14.2, Java 17.0.10)
|
|
||||||
----
|
|
||||||
|
|
||||||
[[codegen-java-usage]]
|
[[codegen-java-usage]]
|
||||||
== Usage
|
== Usage
|
||||||
@@ -162,7 +123,10 @@ For more information, refer to the Javadoc documentation.
|
|||||||
|
|
||||||
=== CLI
|
=== CLI
|
||||||
|
|
||||||
*Synopsis:* `pkl-codegen-java [<options>] <modules>`
|
As explained in <<install-cli,Installation>>, the CLI is bundled with the Java library.
|
||||||
|
To run the CLI, execute the library Jar or its `org.pkl.codegen.java.Main` main class.
|
||||||
|
|
||||||
|
*Synopsis:* `java -cp <classpath> -jar pkl-codegen-java.jar [<options>] <modules>`
|
||||||
|
|
||||||
`<modules>`::
|
`<modules>`::
|
||||||
The absolute or relative URIs of the modules to generate classes for.
|
The absolute or relative URIs of the modules to generate classes for.
|
||||||
@@ -216,4 +180,4 @@ include::../../pkl-cli/partials/cli-common-options.adoc[]
|
|||||||
== Full Example
|
== Full Example
|
||||||
|
|
||||||
For a ready-to-go example with full source code,
|
For a ready-to-go example with full source code,
|
||||||
see link:{uri-codegen-java-example}[codegen-java] in the _pkl-jvm-examples_ repository.
|
see link:{uri-codegen-java-example}[codegen-java] in the _pkl/pkl-examples_ repository.
|
||||||
|
|||||||
@@ -29,13 +29,6 @@ Default: (not set) +
|
|||||||
Flag that indicates to generate classes that implement `java.io.Serializable`.
|
Flag that indicates to generate classes that implement `java.io.Serializable`.
|
||||||
====
|
====
|
||||||
|
|
||||||
.--add-generated-annotation
|
|
||||||
[%collapsible]
|
|
||||||
====
|
|
||||||
Default: (not set) +
|
|
||||||
Flag that indicates to add the `org.pkl.config.java.Generated` annotation to generated types.
|
|
||||||
====
|
|
||||||
|
|
||||||
.--rename
|
.--rename
|
||||||
[%collapsible]
|
[%collapsible]
|
||||||
====
|
====
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import org.pkl.config.kotlin.to
|
|||||||
import org.pkl.core.ModuleSource
|
import org.pkl.core.ModuleSource
|
||||||
import org.junit.jupiter.api.Test
|
import org.junit.jupiter.api.Test
|
||||||
|
|
||||||
// the pkl-jvm-examples repo has a similar example
|
// the pkl/pkl-examples repo has a similar example
|
||||||
class KotlinConfigExample {
|
class KotlinConfigExample {
|
||||||
@Test
|
@Test
|
||||||
fun usage() {
|
fun usage() {
|
||||||
|
|||||||
@@ -1,11 +1,6 @@
|
|||||||
= Kotlin Code Generator
|
= Kotlin Code Generator
|
||||||
include::ROOT:partial$component-attributes.adoc[]
|
include::ROOT:partial$component-attributes.adoc[]
|
||||||
:uri-pkl-codegen-kotlin-maven-module: {uri-maven-docsite}/artifact/org.pkl-lang/pkl-codegen-kotlin
|
:uri-pkl-codegen-kotlin-maven-module: {uri-maven-docsite}/artifact/org.pkl-lang/pkl-codegen-kotlin
|
||||||
:uri-pkl-codegen-kotlin-download: {uri-sonatype-snapshot-download}&a=pkl-cli-codegen-kotlin&e=jar
|
|
||||||
|
|
||||||
ifdef::is-release-version[]
|
|
||||||
:uri-pkl-codegen-kotlin-download: {github-releases}/pkl-codegen-kotlin
|
|
||||||
endif::[]
|
|
||||||
|
|
||||||
The Kotlin source code generator reads Pkl classes and generates corresponding Kotlin classes with equally named properties.
|
The Kotlin source code generator reads Pkl classes and generates corresponding Kotlin classes with equally named properties.
|
||||||
|
|
||||||
@@ -88,41 +83,8 @@ To use the library in a Maven project, declare the following dependency:
|
|||||||
[[install-cli]]
|
[[install-cli]]
|
||||||
=== CLI
|
=== CLI
|
||||||
|
|
||||||
The CLI is available as a Java executable.
|
The CLI is bundled with the library.
|
||||||
|
As we do not currently ship the CLI as a self-contained Jar, we recommend to provision it with a Maven compatible build tool as shown in <<install-library>>.
|
||||||
It works on multiple platforms, and requires a Java 17 (or higher) runtime on the system path.
|
|
||||||
|
|
||||||
To download:
|
|
||||||
|
|
||||||
[tabs]
|
|
||||||
====
|
|
||||||
macOS/Linux::
|
|
||||||
+
|
|
||||||
[source,shell]
|
|
||||||
[subs="+attributes"]
|
|
||||||
----
|
|
||||||
curl -L -o pkl-codegen-kotlin '{uri-pkl-codegen-kotlin-download}'
|
|
||||||
chmod +x pkl-codegen-kotlin
|
|
||||||
./pkl-codegen-kotlin --version
|
|
||||||
----
|
|
||||||
|
|
||||||
Windows::
|
|
||||||
+
|
|
||||||
[source,PowerShell]
|
|
||||||
[subs="+attributes"]
|
|
||||||
----
|
|
||||||
Invoke-WebRequest '{uri-pkl-codegen-kotlin-download}' -OutFile pkl-codegen-kotlin.bat
|
|
||||||
.\pkl-codegen-kotlin --version
|
|
||||||
----
|
|
||||||
====
|
|
||||||
|
|
||||||
This should print something similar to:
|
|
||||||
|
|
||||||
[source,shell]
|
|
||||||
[subs="+attributes"]
|
|
||||||
----
|
|
||||||
pkl-codegen-kotlin {pkl-version} (macOS 14.2, Java 17.0.10)
|
|
||||||
----
|
|
||||||
|
|
||||||
[[usage]]
|
[[usage]]
|
||||||
== Usage
|
== Usage
|
||||||
@@ -141,7 +103,10 @@ For more information, refer to the KDoc documentation.
|
|||||||
|
|
||||||
=== CLI
|
=== CLI
|
||||||
|
|
||||||
*Synopsis:* `pkl-codegen-kotlin [<options>] <modules>`
|
As mentioned in <<install-cli,Installation>>, the CLI is bundled with the library.
|
||||||
|
To run the CLI, execute the library Jar or its `org.pkl.codegen.kotlin.Main` main class.
|
||||||
|
|
||||||
|
*Synopsis:* `java -cp <classpath> -jar pkl-codegen-kotlin.jar [<options>] <modules>`
|
||||||
|
|
||||||
`<modules>`::
|
`<modules>`::
|
||||||
The absolute or relative URIs of the modules to generate classes for.
|
The absolute or relative URIs of the modules to generate classes for.
|
||||||
@@ -168,4 +133,4 @@ include::../../pkl-cli/partials/cli-common-options.adoc[]
|
|||||||
== Full Example
|
== Full Example
|
||||||
|
|
||||||
For a ready-to-go example with full source code,
|
For a ready-to-go example with full source code,
|
||||||
see link:{uri-codegen-kotlin-example}[codegen-kotlin] in the _pkl-jvm-examples_ repository.
|
see link:{uri-codegen-kotlin-example}[codegen-kotlin] in the _pkl/pkl-examples_ repository.
|
||||||
|
|||||||
@@ -116,7 +116,7 @@ include::{examplesdir}/KotlinConfigExample.kt[tags=nullable]
|
|||||||
Converting to `String` would result in a `ConversionException`.
|
Converting to `String` would result in a `ConversionException`.
|
||||||
|
|
||||||
For a ready-to-go example with full source code,
|
For a ready-to-go example with full source code,
|
||||||
see link:{uri-config-kotlin-example}[config-kotlin] in the _pkl-jvm-examples_ repository.
|
see link:{uri-config-kotlin-example}[config-kotlin] in the _pkl/pkl-examples_ repository.
|
||||||
|
|
||||||
== Further Information
|
== Further Information
|
||||||
|
|
||||||
|
|||||||
@@ -1059,7 +1059,7 @@ class Penguin extends Bird {
|
|||||||
<2> Error: modifier `fixed` cannot be applied to property `name`.
|
<2> Error: modifier `fixed` cannot be applied to property `name`.
|
||||||
|
|
||||||
The `fixed` modifier is useful for defining properties that are meant to be derived from other properties.
|
The `fixed` modifier is useful for defining properties that are meant to be derived from other properties.
|
||||||
In the following snippet, the property `wingspanWeightRatio` is not meant to be assigned to, because it is derived
|
In the following snippet, the property `result` is not meant to be assigned to, because it is derived
|
||||||
from other properties.
|
from other properties.
|
||||||
|
|
||||||
[source%parsed,{pkl}]
|
[source%parsed,{pkl}]
|
||||||
@@ -1423,7 +1423,7 @@ The recipe for transforming a listing is:
|
|||||||
. Transform the list using ``List``'s link:{uri-stdlib-List}[rich API].
|
. Transform the list using ``List``'s link:{uri-stdlib-List}[rich API].
|
||||||
. If necessary, convert the list back to a listing.
|
. If necessary, convert the list back to a listing.
|
||||||
|
|
||||||
TIP: Often, transformations happen in a link:{uri-stdlib-PcfRenderer-converters}[converter] of a link:{uri-stdlib-BaseValueRenderer}[value renderer].
|
TIP: Often, transformations happen in a link:{uri-stdlib-PcfRenderer-converters}[converter] of a link:{uri-stdlib-ValueRenderer}[value renderer].
|
||||||
Because most value renderers treat lists the same as listings, it is often not necessary to convert back to a listing.
|
Because most value renderers treat lists the same as listings, it is often not necessary to convert back to a listing.
|
||||||
|
|
||||||
Equipped with this knowledge, let's try to accomplish our objective:
|
Equipped with this knowledge, let's try to accomplish our objective:
|
||||||
@@ -1803,7 +1803,7 @@ The recipe for transforming a mapping is:
|
|||||||
. Transform the map using ``Map``'s link:{uri-stdlib-Map}[rich API].
|
. Transform the map using ``Map``'s link:{uri-stdlib-Map}[rich API].
|
||||||
. If necessary, convert the map back to a mapping.
|
. If necessary, convert the map back to a mapping.
|
||||||
|
|
||||||
TIP: Often, transformations happen in a link:{uri-stdlib-PcfRenderer-converters}[converter] of a link:{uri-stdlib-BaseValueRenderer}[value renderer].
|
TIP: Often, transformations happen in a link:{uri-stdlib-PcfRenderer-converters}[converter] of a link:{uri-stdlib-ValueRenderer}[value renderer].
|
||||||
As most value renderers treat maps the same as mappings, it is often not necessary to convert back to a mapping.
|
As most value renderers treat maps the same as mappings, it is often not necessary to convert back to a mapping.
|
||||||
|
|
||||||
Equipped with this knowledge, let's try to accomplish our objective:
|
Equipped with this knowledge, let's try to accomplish our objective:
|
||||||
@@ -2154,9 +2154,6 @@ Optionally, the SHA-256 checksum of the package can also be specified:
|
|||||||
Packages can be managed as dependencies within a _project_.
|
Packages can be managed as dependencies within a _project_.
|
||||||
For more details, consult the <<projects,project>> section of the language reference.
|
For more details, consult the <<projects,project>> section of the language reference.
|
||||||
|
|
||||||
Packages can also be downloaded from a mirror.
|
|
||||||
For more details, consult the <<mirroring_packages>> section of the language reference.
|
|
||||||
|
|
||||||
==== Standard Library URI
|
==== Standard Library URI
|
||||||
|
|
||||||
Example: `+pkl:math+`
|
Example: `+pkl:math+`
|
||||||
@@ -2736,10 +2733,6 @@ output {
|
|||||||
|
|
||||||
For more on path-based converters, see {uri-stdlib-PcfRenderer-converters}[PcfRenderer.converters].
|
For more on path-based converters, see {uri-stdlib-PcfRenderer-converters}[PcfRenderer.converters].
|
||||||
|
|
||||||
Special <<annotations,Annotations>> may also be used to influence how class properties are rendered.
|
|
||||||
The `ConvertProperty` annotation (and subclasses of it) are automatically applied during.
|
|
||||||
For more on annotation-based converters, see link:{uri-stdlib-ConvertProperty}[ConvertProperty].
|
|
||||||
|
|
||||||
Sometimes it is useful to directly compute the final module output, bypassing `output.value` and `output.converters`.
|
Sometimes it is useful to directly compute the final module output, bypassing `output.value` and `output.converters`.
|
||||||
To do so, set the link:{uri-stdlib-baseModule}/ModuleOutput#text[output.text] property to a String value:
|
To do so, set the link:{uri-stdlib-baseModule}/ModuleOutput#text[output.text] property to a String value:
|
||||||
|
|
||||||
@@ -3207,13 +3200,11 @@ This section discusses language features that are generally more relevant to tem
|
|||||||
<<module-keyword,`module` Keyword>> +
|
<<module-keyword,`module` Keyword>> +
|
||||||
<<glob-patterns,Glob Patterns>> +
|
<<glob-patterns,Glob Patterns>> +
|
||||||
<<doc-comments,Doc Comments>> +
|
<<doc-comments,Doc Comments>> +
|
||||||
<<annotations,Annotations>> +
|
|
||||||
<<name-resolution,Name Resolution>> +
|
<<name-resolution,Name Resolution>> +
|
||||||
<<reserved-keywords,Reserved Keywords>> +
|
<<reserved-keywords,Reserved Keywords>> +
|
||||||
<<blank-identifiers,Blank Identifiers>> +
|
<<blank-identifiers,Blank Identifiers>> +
|
||||||
<<projects,Projects>> +
|
<<projects,Projects>> +
|
||||||
<<external-readers,External Readers>> +
|
<<external-readers,External Readers>>
|
||||||
<<mirroring_packages,Mirroring packages>>
|
|
||||||
|
|
||||||
[[meaning-of-new]]
|
[[meaning-of-new]]
|
||||||
=== Meaning of `new`
|
=== Meaning of `new`
|
||||||
@@ -3693,41 +3684,6 @@ res5 = map.getOrNull("Falcon") // <5>
|
|||||||
<4> result: `2`
|
<4> result: `2`
|
||||||
<5> result: `null`
|
<5> result: `null`
|
||||||
|
|
||||||
[[bytes]]
|
|
||||||
=== Bytes
|
|
||||||
|
|
||||||
A value of type `Bytes` is a sequence of `UInt8` elements.
|
|
||||||
|
|
||||||
`Bytes` can be constructed by passing byte values into the constructor.
|
|
||||||
|
|
||||||
[source,pkl]
|
|
||||||
----
|
|
||||||
bytes1 = Bytes(0xff, 0x00, 0x3f) // <1>
|
|
||||||
bytes2 = Bytes() // <2>
|
|
||||||
----
|
|
||||||
<1> Result: a `Bytes` with 3 elements
|
|
||||||
<2> Result: an empty `Bytes`
|
|
||||||
|
|
||||||
`Bytes` can also be constructed from a base64-encoded string, via `base64DecodedBytes`:
|
|
||||||
|
|
||||||
[source,pkl]
|
|
||||||
----
|
|
||||||
bytes3 = "cGFycm90".base64DecodedBytes // <1>
|
|
||||||
----
|
|
||||||
<1> Result: `Bytes(112, 97, 114, 114, 111, 116)`
|
|
||||||
|
|
||||||
==== `Bytes` vs `List<UInt8>`
|
|
||||||
|
|
||||||
`Bytes` is similar to `List<UInt8>` in that they are both sequences of `UInt8` elements.
|
|
||||||
However, they are semantically distinct.
|
|
||||||
`Bytes` represent binary data, and is typically rendered differently.
|
|
||||||
For example, they are rendered as `<data>` tags when using `PListRenderer`.
|
|
||||||
|
|
||||||
`Bytes` also have different performance characteristics; a value of type `Bytes` tends to be managed as a contiguous memory block.
|
|
||||||
Thus, they are more compact and consume less memory.
|
|
||||||
However, they are not optimized for transformations.
|
|
||||||
For example, given two values of size `M` and `N`, concatenating two `Bytes` values allocates O(M + N) space, whereas concatenating two `List` values allocates O(1) space.
|
|
||||||
|
|
||||||
[[regular-expressions]]
|
[[regular-expressions]]
|
||||||
=== Regular Expressions
|
=== Regular Expressions
|
||||||
|
|
||||||
@@ -3961,7 +3917,6 @@ emailList: List<EmailAddress> // <2>
|
|||||||
<1> equivalent to `email: String(contains("@"))` for type checking purposes
|
<1> equivalent to `email: String(contains("@"))` for type checking purposes
|
||||||
<2> equivalent to `emailList: List<String(contains("@"))>` for type checking purposes
|
<2> equivalent to `emailList: List<String(contains("@"))>` for type checking purposes
|
||||||
|
|
||||||
[[nullable-types]]
|
|
||||||
==== Nullable Types
|
==== Nullable Types
|
||||||
|
|
||||||
Class types such as `Bird` (see above) do not admit `null` values.
|
Class types such as `Bird` (see above) do not admit `null` values.
|
||||||
@@ -4716,10 +4671,6 @@ The following types are iterable:
|
|||||||
|entry key (`Key`)
|
|entry key (`Key`)
|
||||||
|entry value (`Value`)
|
|entry value (`Value`)
|
||||||
|
|
||||||
|`Bytes`
|
|
||||||
|element index (`Int`)
|
|
||||||
|element value (`UInt8`)
|
|
||||||
|
|
||||||
|`Listing<Element>`
|
|`Listing<Element>`
|
||||||
|element index (`Int`)
|
|element index (`Int`)
|
||||||
|element value (`Element`)
|
|element value (`Element`)
|
||||||
@@ -4800,9 +4751,6 @@ The following table describes how different iterables turn into object members:
|
|||||||
|
|
||||||
| `IntSeq`
|
| `IntSeq`
|
||||||
| Element
|
| Element
|
||||||
|
|
||||||
| `Bytes`
|
|
||||||
| Element
|
|
||||||
|===
|
|===
|
||||||
|
|
||||||
These types can only be spread into enclosing objects that support that member type.
|
These types can only be spread into enclosing objects that support that member type.
|
||||||
@@ -4922,7 +4870,7 @@ animals {
|
|||||||
==== Receiver
|
==== Receiver
|
||||||
|
|
||||||
The receiver is the bottom-most object in the <<prototype-chain>>.
|
The receiver is the bottom-most object in the <<prototype-chain>>.
|
||||||
That means that, within the context of an amending object, the receiver is the amending object.
|
That means that, within the context of an amending object, the reciever is the amending object.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
[source,pkl]
|
[source,pkl]
|
||||||
@@ -5338,7 +5286,7 @@ Module-level members can be prefixed with `module.` to resolve name conflicts:
|
|||||||
/// See [module.pigeon].
|
/// See [module.pigeon].
|
||||||
----
|
----
|
||||||
|
|
||||||
To exclude a member from documentation and code completion, <<annotations,annotate>> it with `@Unlisted`:
|
To exclude a member from documentation and code completion, annotate it with `@Unlisted`:
|
||||||
|
|
||||||
[source%parsed,{pkl}]
|
[source%parsed,{pkl}]
|
||||||
----
|
----
|
||||||
@@ -5355,47 +5303,6 @@ The following member links are marked up as code but not rendered as links:footn
|
|||||||
|
|
||||||
Nevertheless, it is a good practice to use member links in the above cases.
|
Nevertheless, it is a good practice to use member links in the above cases.
|
||||||
|
|
||||||
[[annotations]]
|
|
||||||
=== Annotations
|
|
||||||
|
|
||||||
Annotations are a mechanism to provides extra metadata about Pkl <<modules,modules>>, <<classes,classes>>, <<methods,methods>>, and <<properties,properties>>.
|
|
||||||
They provide metadata about the type or member they annotate that can be via link:{uri-stdlib-reflectModule}[reflection] or Pkl's Java APIs.
|
|
||||||
The most common use cases for annotations are to add metadata to influence behavior of xref:pkl-doc:index.adoc[Pkldoc], code generation tools, or <<module-output,module output>>.
|
|
||||||
|
|
||||||
Annotations are regular Pkl objects whose class extends link:{uri-stdlib-Annotation}[`Annotation`].
|
|
||||||
Annotation instances are defined similarly to regular <<classes, class instances>>, but instead of using the `new` keyword the class name is prefixed with `@`.
|
|
||||||
The object body may be omitted if an annotation's class has no properties or the declared annotation does not override any of the class's default values
|
|
||||||
Multiple annotations may be defined on a member.
|
|
||||||
If the annotated member has a <<doc-comments,doc comment>>, the annotation is defined between the comment and the member.
|
|
||||||
|
|
||||||
[source%tested,{pkl}]
|
|
||||||
----
|
|
||||||
/// Module doc comment
|
|
||||||
@SomeAnnotation // <1>
|
|
||||||
module myModule
|
|
||||||
|
|
||||||
class SomeAnnotation extends Annotation { // <2>
|
|
||||||
description: String = "some annotation"
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Module doc comment
|
|
||||||
@SomeAnnotation // <3>
|
|
||||||
class Bird {
|
|
||||||
@SomeAnnotation { description = "some property" } // <4>
|
|
||||||
name: String
|
|
||||||
|
|
||||||
@SomeAnnotation { description = "some method" } // <5>
|
|
||||||
@Unlisted // <6>
|
|
||||||
function greet(greeting: String): String = "\(greeting), \(name)!"
|
|
||||||
}
|
|
||||||
----
|
|
||||||
<1> An annotation applied to a module. The annotation(s) must precede the `module` clause and follow the doc comment. The object body is omitted.
|
|
||||||
<2> The definition of an annotation class.
|
|
||||||
<3> An annotation appied to a class. The object body is omitted.
|
|
||||||
<4> An annotation applied to a property. The object body is included because the `description` property is overridden.
|
|
||||||
<5> An annotation applied to a method. The object body is included because the `description` property is overridden.
|
|
||||||
<6> A second annotation applied to the same method.
|
|
||||||
|
|
||||||
[[name-resolution]]
|
[[name-resolution]]
|
||||||
=== Name Resolution
|
=== Name Resolution
|
||||||
|
|
||||||
@@ -5806,25 +5713,3 @@ To support both schemes during evaluation, both would need to be registered expl
|
|||||||
----
|
----
|
||||||
$ pkl eval <module> --external-resource-reader ldap=pkl-ldap --external-resource-reader ldaps=pkl-ldap
|
$ pkl eval <module> --external-resource-reader ldap=pkl-ldap --external-resource-reader ldaps=pkl-ldap
|
||||||
----
|
----
|
||||||
|
|
||||||
[[mirroring_packages]]
|
|
||||||
=== Mirroring packages
|
|
||||||
|
|
||||||
A package is a shareable archive of modules and resources that are published to the internet.
|
|
||||||
|
|
||||||
A package's URI tells two things:
|
|
||||||
|
|
||||||
1. The name of the package.
|
|
||||||
2. Where the package is downloaded from.
|
|
||||||
|
|
||||||
For example, given the package name `package://example.com/mypackage@1.0.0`, Pkl will make an HTTPS request to `\https://example.com/mypackage@1.0.0` to fetch package metadata.
|
|
||||||
|
|
||||||
In situations where internet access is restricted, a mirror can be set up to allow use of packages that are published to the internet.
|
|
||||||
|
|
||||||
To direct Pkl to a mirror, the `--http-rewrite` CLI option (and its equivalent options when using Pkl's other evaluator APIs) must be used.
|
|
||||||
For example, `--http-rewrite \https://pkg.pkl-lang.org/=\https://my.internal.mirror/` will tell Pkl to download packages from host `my.internal.mirror`.
|
|
||||||
|
|
||||||
NOTE: To effectively mirror packages from pkg.pkl-lang.org, there must be two rewrites; one for `\https://pkg.pkl-lang.org/` (where package metadata is downloaded), and one for `\https://github.com/` (where package zip files are downloaded).
|
|
||||||
|
|
||||||
NOTE: Pkl does not provide any tooling to run a mirror server.
|
|
||||||
To fully set up mirroring, an HTTP(s) server will need be running, and which mirrors the same assets byte-for-byte.
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@
|
|||||||
include::ROOT:partial$component-attributes.adoc[]
|
include::ROOT:partial$component-attributes.adoc[]
|
||||||
:uri-homebrew: https://brew.sh
|
:uri-homebrew: https://brew.sh
|
||||||
:uri-mise: https://mise.jdx.dev
|
:uri-mise: https://mise.jdx.dev
|
||||||
:uri-winget: https://learn.microsoft.com/en-us/windows/package-manager/
|
|
||||||
|
|
||||||
|
:uri-sonatype-snapshot-download: https://s01.oss.sonatype.org/service/local/artifact/maven/redirect?r=snapshots&g=org.pkl-lang&v={pkl-artifact-version}
|
||||||
:uri-pkl-macos-amd64-download: {uri-sonatype-snapshot-download}&a=pkl-cli-macos-amd64&e=bin
|
:uri-pkl-macos-amd64-download: {uri-sonatype-snapshot-download}&a=pkl-cli-macos-amd64&e=bin
|
||||||
:uri-pkl-macos-aarch64-download: {uri-sonatype-snapshot-download}&a=pkl-cli-macos-aarch64&e=bin
|
:uri-pkl-macos-aarch64-download: {uri-sonatype-snapshot-download}&a=pkl-cli-macos-aarch64&e=bin
|
||||||
:uri-pkl-linux-amd64-download: {uri-sonatype-snapshot-download}&a=pkl-cli-linux-amd64&e=bin
|
:uri-pkl-linux-amd64-download: {uri-sonatype-snapshot-download}&a=pkl-cli-linux-amd64&e=bin
|
||||||
@@ -108,31 +108,6 @@ ifndef::is-release-version[]
|
|||||||
For instructions, switch to a release version of this page.
|
For instructions, switch to a release version of this page.
|
||||||
endif::[]
|
endif::[]
|
||||||
|
|
||||||
[[winget]]
|
|
||||||
=== Windows Package Manager
|
|
||||||
|
|
||||||
On Windows, release versions can be installed with {uri-winget}[Windows Package Manager].
|
|
||||||
|
|
||||||
ifdef::is-release-version[]
|
|
||||||
To install Pkl, run:
|
|
||||||
|
|
||||||
[source,shell]
|
|
||||||
----
|
|
||||||
winget install Apple.Pkl
|
|
||||||
----
|
|
||||||
|
|
||||||
To update Pkl, run:
|
|
||||||
|
|
||||||
[source,shell]
|
|
||||||
----
|
|
||||||
winget upgrade Apple.Pkl
|
|
||||||
----
|
|
||||||
endif::[]
|
|
||||||
|
|
||||||
ifndef::is-release-version[]
|
|
||||||
For instructions, switch to a release version of this page.
|
|
||||||
endif::[]
|
|
||||||
|
|
||||||
[[download]]
|
[[download]]
|
||||||
=== Download
|
=== Download
|
||||||
|
|
||||||
@@ -407,7 +382,7 @@ pkl eval -m . myFiles.pkl
|
|||||||
pkl eval -m "%{moduleName}" foo.pkl bar.pkl
|
pkl eval -m "%{moduleName}" foo.pkl bar.pkl
|
||||||
----
|
----
|
||||||
|
|
||||||
For additional details, see xref:language-reference:index.adoc#multiple-file-output[Multiple File Output]
|
For additional details, see xref:language-reference:index.adoc#multiple-file-output[Multiple File Output]
|
||||||
in the language reference.
|
in the language reference.
|
||||||
====
|
====
|
||||||
|
|
||||||
@@ -454,16 +429,6 @@ output {
|
|||||||
----
|
----
|
||||||
====
|
====
|
||||||
|
|
||||||
[[power-assertions-eval]]
|
|
||||||
.--power-assertions, --no-power-assertions
|
|
||||||
[%collapsible]
|
|
||||||
====
|
|
||||||
Default: enabled +
|
|
||||||
Enable or disable power assertions for detailed assertion failure messages.
|
|
||||||
When enabled, type constraint failures will show intermediate values in the assertion expression.
|
|
||||||
Use `--no-power-assertions` to disable this feature if you prefer simpler output or better performance.
|
|
||||||
====
|
|
||||||
|
|
||||||
This command also takes <<common-options, common options>>.
|
This command also takes <<common-options, common options>>.
|
||||||
|
|
||||||
[[command-server]]
|
[[command-server]]
|
||||||
@@ -489,9 +454,7 @@ If these are the only failures, the command exits with exit code 10.
|
|||||||
Otherwise, failures result in exit code 1.
|
Otherwise, failures result in exit code 1.
|
||||||
|
|
||||||
<modules>::
|
<modules>::
|
||||||
The absolute or relative URIs of the modules to test.
|
The absolute or relative URIs of the modules to test. Relative URIs are resolved against the working directory.
|
||||||
The module must extend `pkl:test`.
|
|
||||||
Relative URIs are resolved against the working directory.
|
|
||||||
|
|
||||||
==== Options
|
==== Options
|
||||||
|
|
||||||
@@ -503,31 +466,9 @@ Default: (none) +
|
|||||||
Example: `./build/test-results` +
|
Example: `./build/test-results` +
|
||||||
Directory where to store JUnit reports.
|
Directory where to store JUnit reports.
|
||||||
|
|
||||||
By default, one file will be created for each test module. This behavior can be changed with `--junit-aggregate-reports`, which will instead create a single JUnit report file with all test results.
|
|
||||||
|
|
||||||
No JUnit reports will be generated if this option is not present.
|
No JUnit reports will be generated if this option is not present.
|
||||||
====
|
====
|
||||||
|
|
||||||
[[junit-aggregate-reports]]
|
|
||||||
.--junit-aggregate-reports
|
|
||||||
[%collapsible]
|
|
||||||
====
|
|
||||||
Aggregate JUnit reports into a single file.
|
|
||||||
|
|
||||||
By default it will be `pkl-tests.xml` but you can override it using `--junit-aggregate-suite-name` flag.
|
|
||||||
====
|
|
||||||
|
|
||||||
[[junit-aggregate-suite-name]]
|
|
||||||
.--junit-aggregate-suite-name
|
|
||||||
[%collapsible]
|
|
||||||
====
|
|
||||||
Default: (none) +
|
|
||||||
Example: `my-tests` +
|
|
||||||
The name of the root JUnit test suite.
|
|
||||||
|
|
||||||
Used in combination with `--junit-aggregate-reports` flag.
|
|
||||||
====
|
|
||||||
|
|
||||||
[[overwrite]]
|
[[overwrite]]
|
||||||
.--overwrite
|
.--overwrite
|
||||||
[%collapsible]
|
[%collapsible]
|
||||||
@@ -536,33 +477,6 @@ Force generation of expected examples. +
|
|||||||
The old expected files will be deleted if present.
|
The old expected files will be deleted if present.
|
||||||
====
|
====
|
||||||
|
|
||||||
[[power-assertions-test]]
|
|
||||||
.--power-assertions, --no-power-assertions
|
|
||||||
[%collapsible]
|
|
||||||
====
|
|
||||||
Default: enabled +
|
|
||||||
Enable or disable power assertions for detailed assertion failure messages.
|
|
||||||
When enabled, test failures will show intermediate values in the assertion expression, making it easier to understand why a test failed.
|
|
||||||
Use `--no-power-assertions` to disable this feature if you prefer simpler output.
|
|
||||||
====
|
|
||||||
|
|
||||||
This command also takes <<common-options, common options>>.
|
|
||||||
|
|
||||||
[[command-run]]
|
|
||||||
=== `pkl run`
|
|
||||||
|
|
||||||
*Synopsis:* `pkl run [<options>] [<module>] [<command options>]`
|
|
||||||
|
|
||||||
Evaluate a <<cli-tools,CLI command>> defined by `<module>`.
|
|
||||||
|
|
||||||
<module>::
|
|
||||||
The absolute or relative URIs of the command module to run.
|
|
||||||
The module must extend `pkl:Command`.
|
|
||||||
Relative URIs are resolved against the working directory.
|
|
||||||
|
|
||||||
<command options>::
|
|
||||||
Additional CLI options and arguments defined by `<module>`.
|
|
||||||
|
|
||||||
This command also takes <<common-options, common options>>.
|
This command also takes <<common-options, common options>>.
|
||||||
|
|
||||||
[[command-repl]]
|
[[command-repl]]
|
||||||
@@ -642,24 +556,6 @@ Directory where to store JUnit reports.
|
|||||||
No JUnit reports will be generated if this option is not present.
|
No JUnit reports will be generated if this option is not present.
|
||||||
====
|
====
|
||||||
|
|
||||||
.--junit-aggregate-reports
|
|
||||||
[%collapsible]
|
|
||||||
====
|
|
||||||
Aggregate JUnit reports into a single file.
|
|
||||||
|
|
||||||
By default it will be `pkl-tests.xml` but you can override it using `--junit-aggregate-suite-name` flag.
|
|
||||||
====
|
|
||||||
|
|
||||||
.--junit-aggregate-suite-name
|
|
||||||
[%collapsible]
|
|
||||||
====
|
|
||||||
Default: (none) +
|
|
||||||
Example: `my-tests` +
|
|
||||||
The name of the root JUnit test suite.
|
|
||||||
|
|
||||||
Used in combination with `--junit-aggregate-reports` flag.
|
|
||||||
====
|
|
||||||
|
|
||||||
.--overwrite
|
.--overwrite
|
||||||
[%collapsible]
|
[%collapsible]
|
||||||
====
|
====
|
||||||
@@ -756,70 +652,10 @@ Same meaning as <<output-path>> in <<command-eval>>.
|
|||||||
|
|
||||||
This command also takes <<common-options,common options>>.
|
This command also takes <<common-options,common options>>.
|
||||||
|
|
||||||
[[command-shell-completion]]
|
|
||||||
=== `pkl shell-completion`
|
|
||||||
|
|
||||||
*Synopsis*: `pkl shell-completion <shell>`
|
|
||||||
|
|
||||||
Generate shell completion script. Supported shells are: `bash`, `zsh`, `fish`.
|
|
||||||
|
|
||||||
[source,shell]
|
|
||||||
----
|
|
||||||
# Generate shell completion script for bash
|
|
||||||
pkl shell-completion bash
|
|
||||||
|
|
||||||
# Generate shell completion script for zsh
|
|
||||||
pkl shell-completion zsh
|
|
||||||
----
|
|
||||||
|
|
||||||
[[command-format]]
|
|
||||||
=== `pkl format`
|
|
||||||
|
|
||||||
*Synopsis*: `pkl format <options> [<paths>]`
|
|
||||||
|
|
||||||
This command formats or checks formatting of Pkl files. +
|
|
||||||
Exit codes:
|
|
||||||
|
|
||||||
* 0: No violations found or files were updated.
|
|
||||||
* 1: An unexpected error happened (ex.: IO error)
|
|
||||||
* 11: Violations were found (when running without `--write`).
|
|
||||||
|
|
||||||
If the path is a directory, recursively looks for files with a `.pkl` extension, or files named `PklProject`.
|
|
||||||
|
|
||||||
By default, the input files are formatted, and written to standard out.
|
|
||||||
|
|
||||||
==== Options
|
|
||||||
|
|
||||||
.--grammar-version
|
|
||||||
[%collapsible]
|
|
||||||
====
|
|
||||||
Default: `2` (latest version) +
|
|
||||||
Select the grammar compatibility version for the formatter.
|
|
||||||
New versions are created for each backward incompatible grammar change.
|
|
||||||
====
|
|
||||||
|
|
||||||
.-s, --silent
|
|
||||||
[%collapsible]
|
|
||||||
====
|
|
||||||
Skip writing to standard out. Mutually exclusive with `--diff-name-only`.
|
|
||||||
====
|
|
||||||
|
|
||||||
.-w, --write
|
|
||||||
[%collapsible]
|
|
||||||
====
|
|
||||||
Format files in place, overwriting them. Implies `--diff-name-only`.
|
|
||||||
====
|
|
||||||
|
|
||||||
.--diff-name-only
|
|
||||||
[%collapsible]
|
|
||||||
====
|
|
||||||
Write the path of files with formatting violations to stdout.
|
|
||||||
====
|
|
||||||
|
|
||||||
[[common-options]]
|
[[common-options]]
|
||||||
=== Common options
|
=== Common options
|
||||||
|
|
||||||
The <<command-eval>>, <<command-test>>, <<command-run>>, <<command-repl>>, <<command-project-resolve>>, <<command-project-package>>, <<command-download-package>>, and <<command-analyze-imports>> commands support the following common options:
|
The <<command-eval>>, <<command-test>>, <<command-repl>>, <<command-project-resolve>>, <<command-project-package>>, <<command-download-package>>, and <<command-analyze-imports>> commands support the following common options:
|
||||||
|
|
||||||
include::../../pkl-cli/partials/cli-common-options.adoc[]
|
include::../../pkl-cli/partials/cli-common-options.adoc[]
|
||||||
|
|
||||||
@@ -827,17 +663,6 @@ The <<command-eval>>, <<command-test>>, <<command-repl>>, <<command-download-pac
|
|||||||
|
|
||||||
include::../../pkl-cli/partials/cli-project-options.adoc[]
|
include::../../pkl-cli/partials/cli-project-options.adoc[]
|
||||||
|
|
||||||
[[root-options]]
|
|
||||||
=== Root options
|
|
||||||
|
|
||||||
The root `pkl` command supports the following options:
|
|
||||||
|
|
||||||
.-v, --version
|
|
||||||
[%collapsible]
|
|
||||||
====
|
|
||||||
Display version information.
|
|
||||||
====
|
|
||||||
|
|
||||||
== Evaluating Modules
|
== Evaluating Modules
|
||||||
|
|
||||||
Say we have the following module:
|
Say we have the following module:
|
||||||
@@ -920,310 +745,6 @@ If multiple module outputs are written to the same file, or to standard output,
|
|||||||
By default, module outputs are separated with `---`, as in a YAML stream.
|
By default, module outputs are separated with `---`, as in a YAML stream.
|
||||||
The separator can be customized using the `--module-output-separator` option.
|
The separator can be customized using the `--module-output-separator` option.
|
||||||
|
|
||||||
[[cli-tools]]
|
|
||||||
== Implementing CLI Tools
|
|
||||||
|
|
||||||
CLI tools can be implemented in Pkl by modules extending the `pkl:Command` module.
|
|
||||||
With `pkl:Command`, you can define a script in Pkl that is executed by your shell, providing a better CLI experience.
|
|
||||||
|
|
||||||
Regular evaluation requires use of xref:language-reference:index.adoc#resources[resources] like properties and evironment variables to provide parameters:
|
|
||||||
[source,bash]
|
|
||||||
----
|
|
||||||
$ pkl eval script.pkl -p username=me -p password=password
|
|
||||||
----
|
|
||||||
|
|
||||||
Commands provide a native, familiar CLI experience:
|
|
||||||
[source,bash]
|
|
||||||
----
|
|
||||||
$ pkl run script.pkl --username=admin --password=hunter2
|
|
||||||
$ ./script.pkl --username=admin --password=hunter2
|
|
||||||
----
|
|
||||||
|
|
||||||
Pkl commands have a few properties that distinguish them from standard module evaluation:
|
|
||||||
|
|
||||||
* Users provide input to commands using familiar command line idioms, providing a better experience than deriving inputs from xref:language-reference:index.adoc#resources[resources] like external properties or environment variables.
|
|
||||||
* Commands can dynamically import modules when they are specified as command line options.
|
|
||||||
* Commands may write to standard output (via `output.text` or `output.bytes`) and the filesystem (via `output.files`) in the same evaluation.
|
|
||||||
* Command file output may write to any absolute path (not only relative to the `--multiple-file-output-path` option).
|
|
||||||
** Relative output paths are written relative to the current working directory (or `--working-dir`, if specified).
|
|
||||||
** Paths of output file are printed to the command's standard error.
|
|
||||||
|
|
||||||
IMPORTANT: Users of `pkl run` must be aware of the security implications of this behavior.
|
|
||||||
Using `pkl eval` prevents accidental overwrites by not allowing absolute paths, but `pkl run` does not offer this protection.
|
|
||||||
Commands may write to any path the invoking user has permissions to modify.
|
|
||||||
|
|
||||||
Commands are implemented as regular modules and declare their supported command line flags and positional arguments using a class with annotated properties.
|
|
||||||
|
|
||||||
=== Defining Commands
|
|
||||||
|
|
||||||
Commands are defined by creating a module that extends `pkl:Command`:
|
|
||||||
|
|
||||||
[source,pkl%tested]
|
|
||||||
.my-tool.pkl
|
|
||||||
----
|
|
||||||
/// This doc comment becomes part of the command's CLI help!
|
|
||||||
/// Markdown formatting is **allowed!**
|
|
||||||
extends "pkl:Command"
|
|
||||||
|
|
||||||
options: Options // <1>
|
|
||||||
|
|
||||||
class Options {
|
|
||||||
// Define CLI flags/arguments...
|
|
||||||
}
|
|
||||||
|
|
||||||
// Regular module code...
|
|
||||||
----
|
|
||||||
<1> Re-declaration of the `options` property's type.
|
|
||||||
|
|
||||||
Like `pkl eval`, when a command completes without an evaluation error the process exits successfully (exit code 0).
|
|
||||||
Commands can return a failure using `throw` (exit code 1), but otherwise may not control the exit code.
|
|
||||||
|
|
||||||
Other than the differences listed above, commands behave like any other Pkl module.
|
|
||||||
For example, there is no way to execute other programs or make arbitrary HTTP requests.
|
|
||||||
If additional functionality is desired, xref:language-reference:index.adoc#external-readers[external readers] may be used to extends Pkl's capabilities.
|
|
||||||
|
|
||||||
=== Command Options
|
|
||||||
|
|
||||||
Each property of a command's options class becomes a command line option.
|
|
||||||
Properties with the `local`, `hidden`, `fixed`, and/or `const` modifiers are not parsed as options
|
|
||||||
A property's doc comment, if present, becomes the corresponding option's CLI help description.
|
|
||||||
Doc comments are interpreted as Markdown text and formatted nicely when displayed to users.
|
|
||||||
Properties must have xref:language-reference:index.adoc#type-annotations[type annotations] to determine how they are parsed.
|
|
||||||
|
|
||||||
Properties may be xref:language-reference:index.adoc#annotations[annotated] to influence how they behave:
|
|
||||||
|
|
||||||
* Properties annotated with link:{uri-stdlib-Command-Flag}[`@Flag`] become CLI flags named `--<property name>` that accept a value.
|
|
||||||
* `Boolean` properties annotated with link:{uri-stdlib-Command-BooleanFlag}[`@BooleanFlag`] become CLI flags named `--<property name>` and `--no-<property name>` that result in `true` and `false` values, respectively.
|
|
||||||
* `Int` (and type aliases of `Int`) properties annotated with link:{uri-stdlib-Command-CountedFlag}[`@CountedFlag`] become CLI flags named `--<property name>` that produce a value equal to the number of times they are present on the command line.
|
|
||||||
* Properties annotated with link:{uri-stdlib-Command-Argument}[`@Argument`] become positional CLI arguments and are parsed in the order they appear in the class.
|
|
||||||
* Properties with no annotation are treated the same as `@Flag` with no further customization.
|
|
||||||
|
|
||||||
Flag options may set a `shortName` property to define a single-character abbreviation (`-<short name>`).
|
|
||||||
Flag abbreviations may be combined (e.g. `-a -b -v -v -q some-value` is equivalent to `-abvvq some-value`).
|
|
||||||
|
|
||||||
[CAUTION]
|
|
||||||
====
|
|
||||||
Flag names and short names may not conflict with <<common-options,common options>>.
|
|
||||||
Future versions of Pkl may introduce additional common options and the names of these options will become forbidden for use in `pkl:Command`.
|
|
||||||
Thus, any Pkl release that adds common options may introduce breaking changes for commands.
|
|
||||||
|
|
||||||
While unfortunate, this behavior eliminates potentially dangerous or misleading ambiguities between Pkl-defined and user-defined options.
|
|
||||||
====
|
|
||||||
|
|
||||||
A `@Flag` or `@Argument` property's type annotation determines how it is converted from the raw string value:
|
|
||||||
|
|
||||||
|===
|
|
||||||
|Type |Behavior
|
|
||||||
|
|
||||||
|`String`
|
|
||||||
|Value is used verbatim.
|
|
||||||
|
|
||||||
|`Char`
|
|
||||||
|Value is used verbatim but must be exactly one character.
|
|
||||||
|
|
||||||
|`Boolean`
|
|
||||||
|True values: `true`, `t`, `1`, `yes`, `y`, `on`
|
|
||||||
|
|
||||||
False values: `false`, `f`, `0`, `no`, `n`, `off`
|
|
||||||
|
|
||||||
|`Number`
|
|
||||||
|Value is parsed as an `Int` if possible, otherwise parsed as `Float`.
|
|
||||||
|
|
||||||
|`Float`
|
|
||||||
|Value is parsed as a `Float`.
|
|
||||||
|
|
||||||
|`Int`
|
|
||||||
|Value is parsed as a `Int`.
|
|
||||||
|
|
||||||
|`Int8`, `Int16`, `Int32`, `UInt`, `UInt8`, `UInt16`, `UInt32`
|
|
||||||
|Value is parsed as a `Int` and must be within the type's range.
|
|
||||||
|
|
||||||
|xref:language-reference:index.adoc#union-types[Union] of xref:language-reference:index.adoc#string-literal-types[string literals]
|
|
||||||
|Value is used verbatim but must match a member of the union.
|
|
||||||
|
|
||||||
|`List<Element>`, `Listing<Element>`, `Set<Element>`
|
|
||||||
|Each occurrence of the option becomes an element of the final value.
|
|
||||||
|
|
||||||
`Element` values are parsed based on the above primitive types.
|
|
||||||
|
|
||||||
|`Map<Key, Value>`, `Mapping<Key, Value>`
|
|
||||||
|Each occurrence of the option becomes an entry of the final value.
|
|
||||||
|
|
||||||
Values are split on the first `"="` character; the first part is parsed as `Key` and the second as `Value`, both based on the above primitive types.
|
|
||||||
|
|
||||||
|`Pair<First, Second>`
|
|
||||||
|Value is split on the first `"="` character; the first part is parsed as `First` and the second as `Second`, both based on the above primitive types.
|
|
||||||
|
|
||||||
|===
|
|
||||||
|
|
||||||
If a flag that accepts only a single value is provided multiple times, the last occurrence becomes the final value.
|
|
||||||
|
|
||||||
Only a single positional argument accepting multiple values is permitted per command.
|
|
||||||
|
|
||||||
A property with a xref:language-reference:index.adoc#nullable-types[nullable type] is optional and, if not specified on the command line, will have value `null`.
|
|
||||||
Properties with default values are also optional.
|
|
||||||
Type constraints are evaluated when the command is executed, so additional restrictions on option values are enforced at runtime.
|
|
||||||
|
|
||||||
==== Custom Option Conversion and Aggregation
|
|
||||||
|
|
||||||
A property may be annotated with any type if its `@Flag` or `@Argument` annotation sets the `convert` or `transformAll` properties.
|
|
||||||
The `convert` property is a xref:language-reference:index.adoc#anonymous-functions[function] that overrides how _each_ raw option value is interpreted.
|
|
||||||
The `transformAll` property is a function that overrides how _all_ parsed option values become the final property value.
|
|
||||||
|
|
||||||
The `convert` and `transformAll` functions may return an pkldoc:Import[pkl:Command] value that is replaced during option parsing with the actual value of the module specified by its `uri` property.
|
|
||||||
If `glob` is `true`, the replacement value is a `Mapping`; its keys are the _absolute_ URIs of the matched modules and its values are the actual module values.
|
|
||||||
When specifying glob import options on the command line, it is often necessary to quote the value to avoid it being interpreted by the shell.
|
|
||||||
If the return value of `convert` or `transformAll` is a `List`, `Set`, `Map`, or `Pair`, each contained value (elements and entry keys/values) that are `Import` values are also replaced.
|
|
||||||
|
|
||||||
[IMPORTANT]
|
|
||||||
====
|
|
||||||
If an option has type `Mapping<String, «some module type»>` and should accept a single glob pattern value, the option's annotation must also set `multiple = false` to override the default behavior of `Mapping` options accepting multiple values.
|
|
||||||
Example:
|
|
||||||
[source%parsed,{pkl}]
|
|
||||||
----
|
|
||||||
@Flag {
|
|
||||||
convert = (it) -> new Import { uri = it; glob = true }
|
|
||||||
multiple = false
|
|
||||||
}
|
|
||||||
birds: Mapping<String, Bird>
|
|
||||||
----
|
|
||||||
|
|
||||||
If multiple glob patterns values should be accepted and merged, `transformAll` may be used to merge every glob-imported `Mapping`:
|
|
||||||
[source%parsed,{pkl}]
|
|
||||||
----
|
|
||||||
@Flag {
|
|
||||||
convert = (it) -> new Import { uri = it; glob = true }
|
|
||||||
transformAll =
|
|
||||||
(values) -> values.fold(new Mapping {}, (result, element) ->
|
|
||||||
(result) { ...element }
|
|
||||||
)
|
|
||||||
}
|
|
||||||
birds: Mapping<String, Bird>
|
|
||||||
----
|
|
||||||
====
|
|
||||||
|
|
||||||
=== Subcommands
|
|
||||||
|
|
||||||
Like many other command line libraries, `pkl:Command` allows building commands into a hierarchy with a root command and subcommands:
|
|
||||||
|
|
||||||
[source,pkl%tested]
|
|
||||||
.my-tool.pkl
|
|
||||||
----
|
|
||||||
extends "pkl:Command"
|
|
||||||
|
|
||||||
command {
|
|
||||||
subcommands {
|
|
||||||
import("subcommand1.pkl")
|
|
||||||
import("subcommand2.pkl")
|
|
||||||
for (_, subcommand in import*("./subcommands/*.pkl")) {
|
|
||||||
subcommand
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
----
|
|
||||||
|
|
||||||
[source,pkl%tested]
|
|
||||||
.subcommand1.pkl
|
|
||||||
----
|
|
||||||
extends "pkl:Command"
|
|
||||||
|
|
||||||
import "my-tool.pkl"
|
|
||||||
|
|
||||||
parent: `my-tool` // <1>
|
|
||||||
|
|
||||||
// Regular module code...
|
|
||||||
----
|
|
||||||
<1> Optional; asserts that this is a subcommand of `my-tool` and simplifies accessing properties and options of the parent command
|
|
||||||
|
|
||||||
Each element of `subcommands` must have a unique value for `command.name`.
|
|
||||||
|
|
||||||
=== Testing Commands
|
|
||||||
|
|
||||||
Command modules are normal Pkl modules, so they may be imported and used like any other module.
|
|
||||||
This is particularly helpful when testing commands, as the command's `options` and `parent` properties can be populated by test code.
|
|
||||||
|
|
||||||
Testing the above command and subcommand might look like this:
|
|
||||||
|
|
||||||
[source,pkl%tested]
|
|
||||||
----
|
|
||||||
amends "pkl:test"
|
|
||||||
|
|
||||||
import "my-tool.pkl"
|
|
||||||
import "subcommand1.pkl"
|
|
||||||
|
|
||||||
examples {
|
|
||||||
["Test my-tool"] {
|
|
||||||
(`my-tool`) {
|
|
||||||
options {
|
|
||||||
// Set my-tool options here...
|
|
||||||
}
|
|
||||||
}.output.text
|
|
||||||
}
|
|
||||||
["Test subcommand1"] {
|
|
||||||
(subcommand1) {
|
|
||||||
parent { // this amends `my-tool`
|
|
||||||
options {
|
|
||||||
// Set my-tool options here...
|
|
||||||
}
|
|
||||||
}
|
|
||||||
options {
|
|
||||||
// Set subcommand options here...
|
|
||||||
}
|
|
||||||
}.output.text
|
|
||||||
}
|
|
||||||
}
|
|
||||||
----
|
|
||||||
|
|
||||||
[[commands-as-standalone-scripts]]
|
|
||||||
=== Commands as standalone scripts
|
|
||||||
|
|
||||||
On *nix platforms, Pkl commands can be configured to run as standalone tools that can be invoked without the `pkl run` command.
|
|
||||||
To achieve this, the command file must be marked executable (i.e. `chmod +x my-tool.pkl`) and a link:https://en.wikipedia.org/wiki/Shebang_(Unix)[shebang comment] must be added on the first line of the file:
|
|
||||||
|
|
||||||
[source,pkl%parsed]
|
|
||||||
----
|
|
||||||
#!/usr/bin/env -S pkl run
|
|
||||||
----
|
|
||||||
|
|
||||||
NOTE: The `-S` flag for `env` is required on Linux systems due to a limitation of shebang handling in the Linux kernel.
|
|
||||||
While not required on other *nix platforms like macOS, but it should be included for compatibility.
|
|
||||||
|
|
||||||
==== Shell Completion
|
|
||||||
|
|
||||||
Like with Pkl's own CLI, <<command-shell-completion, shell completions>> can be generated for standalone scripts.
|
|
||||||
|
|
||||||
[source,shell]
|
|
||||||
----
|
|
||||||
# Generate shell completion script for bash
|
|
||||||
./my-tool.pkl shell-completion bash
|
|
||||||
|
|
||||||
# Generate shell completion script for zsh
|
|
||||||
./my-tool.pkl shell-completion zsh
|
|
||||||
----
|
|
||||||
|
|
||||||
==== Customizing Completion Candidates
|
|
||||||
|
|
||||||
`@Flag` and `@Argument` annotations may specify the `completionCandidates` to improve generated shell completions.
|
|
||||||
|
|
||||||
Valid values include:
|
|
||||||
|
|
||||||
* A `Listing<String>` of literal string values to offer for completion.
|
|
||||||
* The literal string `"path"`, which offers local file paths for completion.
|
|
||||||
|
|
||||||
Options with a string literal union type implicitly offer the members of the union as completion candidates.
|
|
||||||
|
|
||||||
=== Flag name ambiguities
|
|
||||||
|
|
||||||
It is possible for commands to define flags with names or short names that collide with Pkl's own command line options.
|
|
||||||
To avoid ambiguity in parsing these options, all flags for Pkl itself (e.g. `--root-dir`) must be placed before the root command module's URI.
|
|
||||||
Command authors are encouraged to avoid overlapping with Pkl's built-in flags, but this may not always be feasible, especially for single-character abbreviated names.
|
|
||||||
|
|
||||||
This imposes a limitation around <<commands-as-standalone-scripts,standalone commands>> that prevents users from customizing Pkl evaluator options when they are invoked.
|
|
||||||
There are two recommended workarounds for this limitation:
|
|
||||||
|
|
||||||
* Use a `PklProject` to define evaluator settings instead of doing so on the command line.
|
|
||||||
* If the command line must be used, switch to invoking via `pkl run [<flags>] [<root command module>]`.
|
|
||||||
|
|
||||||
[[repl]]
|
[[repl]]
|
||||||
== Working with the REPL
|
== Working with the REPL
|
||||||
|
|
||||||
|
|||||||
@@ -109,6 +109,12 @@ Duration, in seconds, after which evaluation of a source module will be timed ou
|
|||||||
Note that a timeout is treated the same as a program error in that any subsequent source modules will not be evaluated.
|
Note that a timeout is treated the same as a program error in that any subsequent source modules will not be evaluated.
|
||||||
====
|
====
|
||||||
|
|
||||||
|
.-v, --version
|
||||||
|
[%collapsible]
|
||||||
|
====
|
||||||
|
Display version information.
|
||||||
|
====
|
||||||
|
|
||||||
.-w, --working-dir
|
.-w, --working-dir
|
||||||
[%collapsible]
|
[%collapsible]
|
||||||
====
|
====
|
||||||
@@ -146,22 +152,3 @@ Example: `example.com,169.254.0.0/16` +
|
|||||||
Comma separated list of hosts to which all connections should bypass the proxy.
|
Comma separated list of hosts to which all connections should bypass the proxy.
|
||||||
Hosts can be specified by name, IP address, or IP range using https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing#CIDR_notation[CIDR notation].
|
Hosts can be specified by name, IP address, or IP range using https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing#CIDR_notation[CIDR notation].
|
||||||
====
|
====
|
||||||
|
|
||||||
.--http-rewrite
|
|
||||||
[%collapsible]
|
|
||||||
====
|
|
||||||
Default: (none) +
|
|
||||||
Example: `\https://pkg.pkl-lang.org/=https://my.internal.mirror/` +
|
|
||||||
Replace outbound HTTP(S) requests from one URL with another URL.
|
|
||||||
The left-hand side describes the source prefix, and the right-hand describes the target prefix.
|
|
||||||
This option is commonly used to enable package mirroring.
|
|
||||||
The above example will rewrite URL `\https://pkg.pkl-lang.org/pkl-k8s/k8s@1.0.0` to `\https://my.internal.mirror/pkl-k8s/k8s@1.0.0`.
|
|
||||||
====
|
|
||||||
|
|
||||||
.--trace-mode
|
|
||||||
[%collapsible]
|
|
||||||
====
|
|
||||||
Default: `compact` +
|
|
||||||
Specifies how `trace()` output is formatted.
|
|
||||||
Possible options are `compact` and `pretty`.
|
|
||||||
====
|
|
||||||
|
|||||||
@@ -6,8 +6,8 @@ import org.pkl.core.PModule;
|
|||||||
import org.pkl.core.PObject;
|
import org.pkl.core.PObject;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
// the pkl-jvm-examples repo has a similar example
|
// the pkl/pkl-examples repo has a similar example
|
||||||
@SuppressWarnings({"unchecked", "unused", "ConstantConditions", "NewClassNamingConvention"})
|
@SuppressWarnings({"unchecked", "unused", "ConstantConditions"})
|
||||||
public class CoreEvaluatorExample {
|
public class CoreEvaluatorExample {
|
||||||
@Test
|
@Test
|
||||||
public void usage() {
|
public void usage() {
|
||||||
|
|||||||
@@ -5,23 +5,6 @@ include::ROOT:partial$component-attributes.adoc[]
|
|||||||
:uri-DocPackageInfo: {uri-pkl-stdlib-docs}/DocPackageInfo/
|
:uri-DocPackageInfo: {uri-pkl-stdlib-docs}/DocPackageInfo/
|
||||||
:uri-CliDocGenerator: {uri-pkl-doc-main-sources}/CliDocGenerator.kt
|
:uri-CliDocGenerator: {uri-pkl-doc-main-sources}/CliDocGenerator.kt
|
||||||
:uri-DocGenerator: {uri-pkl-doc-main-sources}/DocGenerator.kt
|
:uri-DocGenerator: {uri-pkl-doc-main-sources}/DocGenerator.kt
|
||||||
:uri-pkldoc-macos-amd64-download: {uri-sonatype-snapshot-download}&a=pkldoc-macos-amd64&e=bin
|
|
||||||
:uri-pkldoc-macos-aarch64-download: {uri-sonatype-snapshot-download}&a=pkldoc-macos-aarch64&e=bin
|
|
||||||
:uri-pkldoc-linux-amd64-download: {uri-sonatype-snapshot-download}&a=pkldoc-linux-amd64&e=bin
|
|
||||||
:uri-pkldoc-linux-aarch64-download: {uri-sonatype-snapshot-download}&a=pkldoc-linux-aarch64&e=bin
|
|
||||||
:uri-pkldoc-alpine-download: {uri-sonatype-snapshot-download}&a=pkldoc-alpine-linux-amd64&e=bin
|
|
||||||
:uri-pkldoc-windows-download: {uri-sonatype-snapshot-download}&a=pkldoc-windows-amd64&e=exe
|
|
||||||
:uri-pkldoc-java-download: {uri-sonatype-snapshot-download}&a=pkldoc-java&e=jar
|
|
||||||
|
|
||||||
ifdef::is-release-version[]
|
|
||||||
:uri-pkldoc-macos-amd64-download: {github-releases}/pkldoc-macos-amd64
|
|
||||||
:uri-pkldoc-macos-aarch64-download: {github-releases}/pkldoc-macos-aarch64
|
|
||||||
:uri-pkldoc-linux-amd64-download: {github-releases}/pkldoc-linux-amd64
|
|
||||||
:uri-pkldoc-linux-aarch64-download: {github-releases}/pkldoc-linux-aarch64
|
|
||||||
:uri-pkldoc-alpine-download: {github-releases}/pkldoc-alpine-linux-amd64
|
|
||||||
:uri-pkldoc-windows-download: {github-releases}/pkldoc-windows-amd64.exe
|
|
||||||
:uri-pkldoc-java-download: {github-releases}/jpkldoc
|
|
||||||
endif::[]
|
|
||||||
|
|
||||||
_Pkldoc_ is a documentation website generator that produces navigable and searchable API documentation for Pkl modules.
|
_Pkldoc_ is a documentation website generator that produces navigable and searchable API documentation for Pkl modules.
|
||||||
|
|
||||||
@@ -94,7 +77,7 @@ The `pkl-doc` library is available {uri-pkl-doc-maven}[from Maven Central].
|
|||||||
It requires Java 17 or higher.
|
It requires Java 17 or higher.
|
||||||
|
|
||||||
ifndef::is-release-version[]
|
ifndef::is-release-version[]
|
||||||
NOTE: Snapshots are published to repository `{uri-snapshot-repo}`.
|
NOTE: Snapshots are published to repository `{uri-sonatype}`.
|
||||||
endif::[]
|
endif::[]
|
||||||
|
|
||||||
==== Gradle
|
==== Gradle
|
||||||
@@ -170,33 +153,8 @@ endif::[]
|
|||||||
[[install-cli]]
|
[[install-cli]]
|
||||||
=== CLI
|
=== CLI
|
||||||
|
|
||||||
The CLI comes in multiple flavors:
|
The CLI is bundled with the library and does not currently ship as a native executable or a self-contained Jar.
|
||||||
|
We recommend to provision it with a Maven compatible build tool as shown in <<install-library,Library Installation>>.
|
||||||
* Native macOS executable for amd64 (tested on macOS 10.15)
|
|
||||||
* Native Linux executable for amd64
|
|
||||||
* Native Linux executable for aarch64
|
|
||||||
* Native Alpine Linux executable for amd64 (cross-compiled and tested on Oracle Linux 8)
|
|
||||||
* Native Windows executable for amd64 (tested on Windows Server 2022)
|
|
||||||
* Java executable (tested with Java 17/21 on macOS and Oracle Linux)
|
|
||||||
|
|
||||||
.What is the Difference Between the Linux and Alpine Linux Executables?
|
|
||||||
[NOTE]
|
|
||||||
====
|
|
||||||
The Linux executable is dynamically linked against _glibc_ and _libstdc{plus}{plus}_,
|
|
||||||
whereas, the Alpine Linux executable is statically linked against _musl libc_ and _libstdc{plus}{plus}_.
|
|
||||||
====
|
|
||||||
|
|
||||||
The Java executable works on multiple platforms and has a smaller binary size than the native executables.
|
|
||||||
However, it requires a Java 17 (or higher) runtime on the system path, and has a noticeable startup delay.
|
|
||||||
|
|
||||||
Download links:
|
|
||||||
|
|
||||||
* macOS aarch64: {uri-pkldoc-macos-aarch64-download}
|
|
||||||
* macOS amd64: {uri-pkldoc-macos-amd64-download}
|
|
||||||
* Linux aarch64: {uri-pkldoc-linux-aarch64-download}
|
|
||||||
* Linux amd64: {uri-pkldoc-linux-amd64-download}
|
|
||||||
* Alpine Linux amd64: {uri-pkldoc-alpine-download}
|
|
||||||
* Windows amd64: {uri-pkldoc-windows-download}
|
|
||||||
|
|
||||||
[[usage]]
|
[[usage]]
|
||||||
== Usage
|
== Usage
|
||||||
@@ -258,7 +216,10 @@ For more information, refer to the Javadoc documentation.
|
|||||||
|
|
||||||
=== CLI
|
=== CLI
|
||||||
|
|
||||||
*Synopsis:* `pkldoc [<options>] <modules>`
|
As mentioned in <<install-cli,CLI Installation>>, the CLI is bundled with the library.
|
||||||
|
To run the CLI, execute the library Jar or its `org.pkl.doc.Main` class.
|
||||||
|
|
||||||
|
*Synopsis:* `java -cp <classpath> -jar pkl-doc.jar [<options>] <modules>`
|
||||||
|
|
||||||
`<modules>`::
|
`<modules>`::
|
||||||
The absolute or relative URIs of docsite descriptors, package descriptors, and the modules for which to generate documentation.
|
The absolute or relative URIs of docsite descriptors, package descriptors, and the modules for which to generate documentation.
|
||||||
@@ -291,4 +252,4 @@ include::../../pkl-cli/partials/cli-common-options.adoc[]
|
|||||||
== Full Example
|
== Full Example
|
||||||
|
|
||||||
For a ready-to-go example with full source code and detailed walkthrough,
|
For a ready-to-go example with full source code and detailed walkthrough,
|
||||||
see link:{uri-pkldoc-example}[pkldoc] in the _pkl-jvm-examples_ repository.
|
see link:{uri-pkldoc-example}[pkldoc] in the _pkl/pkl-examples_ repository.
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ It requires Java 17 or higher and Gradle 8.1 or higher.
|
|||||||
Earlier Gradle versions are not supported.
|
Earlier Gradle versions are not supported.
|
||||||
|
|
||||||
ifndef::is-release-version[]
|
ifndef::is-release-version[]
|
||||||
NOTE: Snapshots are published to repository `{uri-snapshot-repo}`.
|
NOTE: Snapshots are published to repository `{uri-sonatype}`.
|
||||||
endif::[]
|
endif::[]
|
||||||
|
|
||||||
The plugin is applied as follows:
|
The plugin is applied as follows:
|
||||||
@@ -134,7 +134,7 @@ $ ./gradlew evalPkl
|
|||||||
----
|
----
|
||||||
|
|
||||||
For a ready-to-go example with full source code,
|
For a ready-to-go example with full source code,
|
||||||
see link:{uri-build-eval-example}[codegen-java] in the _pkl-jvm-examples_ repository.
|
see link:{uri-build-eval-example}[codegen-java] in the _pkl/pkl-examples_ repository.
|
||||||
|
|
||||||
=== Configuration Options
|
=== Configuration Options
|
||||||
|
|
||||||
@@ -195,7 +195,7 @@ Example 1: `multipleFileOutputDir = layout.projectDirectory.dir("output")` +
|
|||||||
Example 2: `+multipleFileOutputDir = layout.projectDirectory.file("%{moduleDir}/output")+`
|
Example 2: `+multipleFileOutputDir = layout.projectDirectory.file("%{moduleDir}/output")+`
|
||||||
The directory where a module's output files are placed.
|
The directory where a module's output files are placed.
|
||||||
|
|
||||||
Setting this option causes Pkl to evaluate a module's `output.files` property
|
Setting this option causes Pkl to evaluate a module's `output.files` property
|
||||||
and write the files specified therein.
|
and write the files specified therein.
|
||||||
Within `output.files`, a key determines a file's path relative to `multipleFileOutputDir`,
|
Within `output.files`, a key determines a file's path relative to `multipleFileOutputDir`,
|
||||||
and a value determines the file's contents.
|
and a value determines the file's contents.
|
||||||
@@ -207,7 +207,7 @@ This option cannot be used together with any of the following:
|
|||||||
|
|
||||||
This option supports the same placeholders as xref:output-file[outputFile].
|
This option supports the same placeholders as xref:output-file[outputFile].
|
||||||
|
|
||||||
For additional details, see xref:language-reference:index.adoc#multiple-file-output[Multiple File Output]
|
For additional details, see xref:language-reference:index.adoc#multiple-file-output[Multiple File Output]
|
||||||
in the language reference.
|
in the language reference.
|
||||||
====
|
====
|
||||||
|
|
||||||
@@ -298,22 +298,6 @@ Example: `junitReportsDir = layout.buildDirectory.dir("reports")` +
|
|||||||
Whether and where to generate JUnit XML reports.
|
Whether and where to generate JUnit XML reports.
|
||||||
====
|
====
|
||||||
|
|
||||||
[[junit-aggregate-reports]]
|
|
||||||
.junitAggregateReports: Property<Boolean>
|
|
||||||
[%collapsible]
|
|
||||||
====
|
|
||||||
Default: `false` +
|
|
||||||
Aggregate JUnit reports into a single file.
|
|
||||||
====
|
|
||||||
|
|
||||||
[[junit-aggregate-suite-name]]
|
|
||||||
.junitAggregateSuiteName: Property<String>
|
|
||||||
[%collapsible]
|
|
||||||
====
|
|
||||||
Default: `null` +
|
|
||||||
The name of the root JUnit test suite.
|
|
||||||
====
|
|
||||||
|
|
||||||
[[overwrite]]
|
[[overwrite]]
|
||||||
.overwrite: Property<Boolean>
|
.overwrite: Property<Boolean>
|
||||||
[%collapsible]
|
[%collapsible]
|
||||||
@@ -322,16 +306,6 @@ Default: `false` +
|
|||||||
Whether to ignore expected example files and generate them again.
|
Whether to ignore expected example files and generate them again.
|
||||||
====
|
====
|
||||||
|
|
||||||
[[power-assertions-test]]
|
|
||||||
.powerAssertions: Property<Boolean>
|
|
||||||
[%collapsible]
|
|
||||||
====
|
|
||||||
Default: `true` (for test tasks) +
|
|
||||||
Example: `powerAssertions = false` +
|
|
||||||
Enable or disable power assertions for detailed assertion failure messages.
|
|
||||||
When enabled, test failures will show intermediate values in the assertion expression, making it easier to understand why a test failed.
|
|
||||||
====
|
|
||||||
|
|
||||||
Common properties:
|
Common properties:
|
||||||
|
|
||||||
include::../partials/gradle-modules-properties.adoc[]
|
include::../partials/gradle-modules-properties.adoc[]
|
||||||
@@ -387,7 +361,7 @@ $ ./gradlew genJava
|
|||||||
----
|
----
|
||||||
|
|
||||||
For a ready-to-go example with full source code,
|
For a ready-to-go example with full source code,
|
||||||
see link:{uri-codegen-java-example}[codegen-java] in the _pkl-jvm-examples_ repository.
|
see link:{uri-codegen-java-example}[codegen-java] in the _pkl/pkl-examples_ repository.
|
||||||
|
|
||||||
=== Configuration Options
|
=== Configuration Options
|
||||||
|
|
||||||
@@ -417,7 +391,7 @@ For Spring Boot applications, and for users of `pkl-config-java` compiling the g
|
|||||||
Default: `"org.pkl.config.java.mapper.NonNull"` +
|
Default: `"org.pkl.config.java.mapper.NonNull"` +
|
||||||
Example: `nonNullAnnotation = "org.project.MyAnnotation"` +
|
Example: `nonNullAnnotation = "org.project.MyAnnotation"` +
|
||||||
Fully qualified name of the annotation type to use for annotating non-null types. +
|
Fully qualified name of the annotation type to use for annotating non-null types. +
|
||||||
The specified annotation type must be annotated with `@java.lang.annotation.Target(ElementType.TYPE_USE)`
|
The specified annotation type must be annotated with `@java.lang.annotation.Target(ElementType.TYPE_USE)`
|
||||||
or the generated code may not compile.
|
or the generated code may not compile.
|
||||||
====
|
====
|
||||||
|
|
||||||
@@ -457,7 +431,7 @@ build.gradle.kts::
|
|||||||
+
|
+
|
||||||
[source,kotlin]
|
[source,kotlin]
|
||||||
----
|
----
|
||||||
pkl {
|
pkl {
|
||||||
kotlinCodeGenerators {
|
kotlinCodeGenerators {
|
||||||
register("genKotlin") {
|
register("genKotlin") {
|
||||||
sourceModules.addAll(files("Template1.pkl", "Template2.pkl"))
|
sourceModules.addAll(files("Template1.pkl", "Template2.pkl"))
|
||||||
@@ -477,7 +451,7 @@ $ ./gradlew genKotlin
|
|||||||
----
|
----
|
||||||
|
|
||||||
For a ready-to-go example with full source code,
|
For a ready-to-go example with full source code,
|
||||||
see link:{uri-codegen-kotlin-example}[codegen-kotlin] in the _pkl-jvm-examples_ repository.
|
see link:{uri-codegen-kotlin-example}[codegen-kotlin] in the _pkl/pkl-examples_ repository.
|
||||||
|
|
||||||
=== Configuration Options
|
=== Configuration Options
|
||||||
|
|
||||||
@@ -546,7 +520,7 @@ $ ./gradlew pkldoc
|
|||||||
----
|
----
|
||||||
|
|
||||||
For a ready-to-go example with full source code,
|
For a ready-to-go example with full source code,
|
||||||
see link:{uri-pkldoc-example}[pkldoc] in the _pkl-jvm-examples_ repository.
|
see link:{uri-pkldoc-example}[pkldoc] in the _pkl/pkl-examples_ repository.
|
||||||
|
|
||||||
=== Configuration Options
|
=== Configuration Options
|
||||||
|
|
||||||
|
|||||||
@@ -44,14 +44,6 @@ Example: `implementSerializable = true` +
|
|||||||
Whether to generate classes that implement `java.io.Serializable`.
|
Whether to generate classes that implement `java.io.Serializable`.
|
||||||
====
|
====
|
||||||
|
|
||||||
.addGeneratedAnnotation: Property<Boolean>
|
|
||||||
[%collapsible]
|
|
||||||
====
|
|
||||||
Default: `false` +
|
|
||||||
Example: `addGeneratedAnnotation = true` +
|
|
||||||
Whether to add the `org.pkl.config.java.Generated` annotation to generated types.
|
|
||||||
====
|
|
||||||
|
|
||||||
.renames: MapProperty<String, String>
|
.renames: MapProperty<String, String>
|
||||||
[%collapsible]
|
[%collapsible]
|
||||||
====
|
====
|
||||||
|
|||||||
@@ -107,24 +107,3 @@ Example: `noProxy = ["example.com", "169.254.0.0/16"]` +
|
|||||||
Hosts to which all connections should bypass the proxy.
|
Hosts to which all connections should bypass the proxy.
|
||||||
Hosts can be specified by name, IP address, or IP range using https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing#CIDR_notation[CIDR notation].
|
Hosts can be specified by name, IP address, or IP range using https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing#CIDR_notation[CIDR notation].
|
||||||
====
|
====
|
||||||
|
|
||||||
.httpRewrites: MapProperty<String, String>
|
|
||||||
[%collapsible]
|
|
||||||
====
|
|
||||||
Default: `null` +
|
|
||||||
Example: `httpRewrites = [uri("https://pkg.pkl-lang.org/"): uri("https://my.internal.mirror/")]` +
|
|
||||||
Replace outbound HTTP(S) requests from one URL with another URL.
|
|
||||||
The left-hand side describes the source prefix, and the right-hand describes the target prefix.
|
|
||||||
This option is commonly used to enable package mirroring.
|
|
||||||
The above example will rewrite URL `\https://pkg.pkl-lang.org/pkl-k8s/k8s@1.0.0` to `\https://my.internal.mirror/pkl-k8s/k8s@1.0.0`.
|
|
||||||
====
|
|
||||||
|
|
||||||
.powerAssertions: Property<Boolean>
|
|
||||||
[%collapsible]
|
|
||||||
====
|
|
||||||
Default: `false` (except for test tasks, which default to `true`) +
|
|
||||||
Example: `powerAssertions = true` +
|
|
||||||
Enable power assertions for detailed assertion failure messages.
|
|
||||||
When enabled, type constraint failures will show intermediate values in the assertion expression.
|
|
||||||
This option has a performance impact when constraint failures occur.
|
|
||||||
====
|
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 217 KiB |
@@ -1,420 +0,0 @@
|
|||||||
= Pkl 0.29 Release Notes
|
|
||||||
:version: 0.29
|
|
||||||
:version-minor: 0.29.1
|
|
||||||
:release-date: July 24th, 2025
|
|
||||||
|
|
||||||
include::ROOT:partial$component-attributes.adoc[]
|
|
||||||
|
|
||||||
Pkl {version} was released on {release-date}. +
|
|
||||||
[.small]#The latest bugfix release is {version-minor}. (xref:changelog.adoc[All Versions])#
|
|
||||||
|
|
||||||
This release brings support for working with binary data, and also a new setting to control HTTP rewriting.
|
|
||||||
|
|
||||||
The next release (0.30) is scheduled for October 2025.
|
|
||||||
To see what's coming in the future, follow the {uri-pkl-roadmap}[Pkl Roadmap].
|
|
||||||
|
|
||||||
Please send feedback and questions to https://github.com/apple/pkl/discussions[GitHub Discussions], or submit an issue on https://github.com/apple/pkl/issues/new[GitHub]. +
|
|
||||||
|
|
||||||
[small]#Pkl is hosted on https://github.com/apple/pkl[GitHub].
|
|
||||||
To get started, follow xref:pkl-cli:index.adoc#installation[Installation].#
|
|
||||||
|
|
||||||
== Highlights [small]#💖#
|
|
||||||
|
|
||||||
[[bytes-standard-library-class]]
|
|
||||||
=== `Bytes` standard library class
|
|
||||||
|
|
||||||
A new standard library class is introduced, called `Bytes` (https://github.com/apple/pkl/pull/1019[#1019]).
|
|
||||||
|
|
||||||
Currently, Pkl does not have a built-in way to describe binary data.
|
|
||||||
In situations where binary data is needed, the common pattern is to use a Base64 string.
|
|
||||||
This is sufficient in simple cases, but still introduces many shortcomings:
|
|
||||||
|
|
||||||
1. `pkl eval` can only produce UTF-8 encoded strings.
|
|
||||||
2. It is not possible to compute the checksum of binary content (except in the case of `read()`).
|
|
||||||
3. It is hard to interop with configuration formats that allow binary data.
|
|
||||||
4. It is hard to do transformations on binary data.
|
|
||||||
|
|
||||||
To address these shortcomings, the `Bytes` class is introduced.
|
|
||||||
This is a data type representing a sequence of bytes.
|
|
||||||
|
|
||||||
[source,pkl]
|
|
||||||
----
|
|
||||||
myBytes = Bytes(0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x2c, 0x20, 0x57, 0x6f, 0x72, 0x6c, 0x64, 0x21) // <1>
|
|
||||||
----
|
|
||||||
<1> ASCII bytes for the string "Hello, World!"
|
|
||||||
|
|
||||||
To learn more about this feature, consult https://github.com/apple/pkl-evolution/blob/main/spices/SPICE-0013-bytes-standard-library.adoc[SPICE-0013].
|
|
||||||
|
|
||||||
==== Emitting binary output
|
|
||||||
|
|
||||||
A new property called `bytes` is added to `FileOutput`.
|
|
||||||
The CLI has been changed to evaluate this property, and write its contents to the designated output location.
|
|
||||||
|
|
||||||
This change means that Pkl modules can now output binary content.
|
|
||||||
For example, here is a simple module that outputs bytes:
|
|
||||||
|
|
||||||
[source,pkl]
|
|
||||||
----
|
|
||||||
output {
|
|
||||||
bytes = Bytes(1, 2, 3, 4) // <1>
|
|
||||||
}
|
|
||||||
----
|
|
||||||
<1> Write bytes 1, 2, 3, 4
|
|
||||||
|
|
||||||
The same change applies when evaluating in multiple-file output mode.
|
|
||||||
|
|
||||||
[source,pkl]
|
|
||||||
----
|
|
||||||
output {
|
|
||||||
files {
|
|
||||||
["foo.bin"] {
|
|
||||||
bytes = Bytes(1, 2, 3, 4) // <1>
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
----
|
|
||||||
<1> Write bytes 1, 2, 3, 4 to a file called `foo.bin`.
|
|
||||||
|
|
||||||
==== Rendering `Bytes`
|
|
||||||
|
|
||||||
Out of the box, only the `plist` and `pcf` formats are able to render `Bytes`.
|
|
||||||
For other formats, a renderer needs to be defined.
|
|
||||||
|
|
||||||
[source,pkl]
|
|
||||||
----
|
|
||||||
output {
|
|
||||||
renderer = new JsonRenderer {
|
|
||||||
[Bytes] = (it) -> it.base64 // <1>
|
|
||||||
}
|
|
||||||
}
|
|
||||||
----
|
|
||||||
<1> Render bytes as a base64 string in JSON.
|
|
||||||
|
|
||||||
==== Using `Bytes` from language bindings
|
|
||||||
|
|
||||||
Users of Pkl's language bindings also benefit from the new type.
|
|
||||||
When using code generation, the `Bytes` data type will turn into the following types:
|
|
||||||
|
|
||||||
|===
|
|
||||||
|Language |Type
|
|
||||||
|
|
||||||
|Java
|
|
||||||
|`byte[]`
|
|
||||||
|
|
||||||
|Kotlin
|
|
||||||
|`ByteArray`
|
|
||||||
|
|
||||||
|Go
|
|
||||||
|`[]byte`
|
|
||||||
|
|
||||||
|Swift
|
|
||||||
|`[UInt8]`
|
|
||||||
|===
|
|
||||||
|
|
||||||
Maintainers of other language bindings are encouraged to map `Bytes` into the corresponding binary type in their language.
|
|
||||||
|
|
||||||
==== `Bytes` versus `List<UInt8>`
|
|
||||||
|
|
||||||
Conceptually, `Bytes` is very similar to `List<UInt8>`, because both are data types that describe sequences of `UInt8` values.
|
|
||||||
However, they have different performance characteristics.
|
|
||||||
A `List` is a https://en.wikipedia.org/wiki/Persistent_data_structure[persistent data structure].
|
|
||||||
This means that creating modified copies of lists is very cheap.
|
|
||||||
|
|
||||||
However, lists have more overhead per element.
|
|
||||||
A `List<UInt8>` with 1000 elements takes up about 5.4 kilobytes of heap space, whereas the same data in `Bytes` takes roughly 1 kilobyte.
|
|
||||||
|
|
||||||
=== HTTP Rewrites and Package Mirroring
|
|
||||||
|
|
||||||
A new evaluator setting is introduced, which rewrites URLs before making outbound HTTP calls (https://github.com/apple/pkl/pull/1062[#1062], https://github.com/apple/pkl/pull/1127[#1127], https://github.com/apple/pkl/pull/1133[#1133]).
|
|
||||||
|
|
||||||
This setting can be configured via CLI flag `--http-rewrite`, and also in other ways:
|
|
||||||
|
|
||||||
* A builder option in `org.pkl.core.EvaluatorBuilder`
|
|
||||||
* A builder option in `org.pkl.executor.ExecutorOptions`
|
|
||||||
* A new property in `CreateEvaluatorRequest` in the Message Passing API
|
|
||||||
* A new property in the Gradle plugin
|
|
||||||
* A new property in `pkl.EvaluatorSettings#Http`
|
|
||||||
|
|
||||||
The main use-case for this setting is to enable package mirroring.
|
|
||||||
For example, let's assume that the following mirrors exist:
|
|
||||||
|
|
||||||
|===
|
|
||||||
|Original |Mirror
|
|
||||||
|
|
||||||
|\https://pkg.pkl-lang.org
|
|
||||||
|\https://my.internal.mirror/pkg-pkl-lang
|
|
||||||
|
|
||||||
|\https://github.com
|
|
||||||
|\https://my.internal.mirror/github
|
|
||||||
|===
|
|
||||||
|
|
||||||
A user of the CLI can use these mirrors with the following settings.
|
|
||||||
|
|
||||||
.~/.pkl/settings.pkl
|
|
||||||
[source,pkl]
|
|
||||||
----
|
|
||||||
amends "pkl:settings"
|
|
||||||
|
|
||||||
http {
|
|
||||||
rewrites {
|
|
||||||
["https://pkg.pkl-lang.org/"] = "https://my.internal.mirror/pkg-pkl-lang/"
|
|
||||||
["https://github.com/"] = "https://my.internal.mirror/github/"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
----
|
|
||||||
|
|
||||||
To learn more about this feature, consult https://github.com/apple/pkl-evolution/blob/main/spices/SPICE-0016-http-rewrites.adoc[SPICE-0016].
|
|
||||||
|
|
||||||
== Noteworthy [small]#🎶#
|
|
||||||
|
|
||||||
Ready when you need them.
|
|
||||||
|
|
||||||
=== pkldoc, pkl-codegen-java, pkl-codegen-kotlin executables
|
|
||||||
|
|
||||||
The pkldoc, pkl-config-java and pkl-config-kotlin CLIs are published as their own executables (https://github.com/apple/pkl/pull/1023[#1023]).
|
|
||||||
|
|
||||||
Currently, these tools have excellent support when called from within the pkl-gradle plugin.
|
|
||||||
However, the story for using these as CLIs is much clunkier.
|
|
||||||
Users must call Java by including their published `.jar` files, as well as all of their dependencies via the `-classpath` argument.
|
|
||||||
|
|
||||||
In 0.29, they are all being published as executables.
|
|
||||||
In particular, pkldoc is being published as both a Java executable and a native executable.
|
|
||||||
On the other hand, pkl-codegen-java and pkl-codegen-kotlin are published as Java executables only.
|
|
||||||
|
|
||||||
For more information, see their download instructions:
|
|
||||||
|
|
||||||
* xref:pkl-doc:index.adoc#install-cli[pkldoc]
|
|
||||||
* xref:java-binding:codegen.adoc#install-cli[pkl-codegen-java]
|
|
||||||
* xref:kotlin-binding:codegen.adoc#install-cli[pkl-codegen-kotlin]
|
|
||||||
|
|
||||||
=== Java API changes
|
|
||||||
|
|
||||||
==== Resource Readers SPI added to preconfigured evaluators
|
|
||||||
|
|
||||||
A change was made to the preconfigured evaluators (https://github.com/apple/pkl/pull/1094[#1094]).
|
|
||||||
|
|
||||||
Currently, they add module key factories from service providers, but not resource readers.
|
|
||||||
|
|
||||||
This means that users of pkl-spring, for example, cannot add custom resource readers.
|
|
||||||
This is also inconsistent (in the preconfigured evaluator, import can use custom schemes, but not read).
|
|
||||||
|
|
||||||
In Pkl 0.29, any resource reader registered via the Service Provider Interface will be added to the preconfigured evalutors.
|
|
||||||
|
|
||||||
==== New methods
|
|
||||||
|
|
||||||
New methods are introduced to the Java API.
|
|
||||||
|
|
||||||
* `org.pkl.core.Evaluator.evaluateOutputBytes`
|
|
||||||
* `org.pkl.core.http.HttpClient.Builder.setRewrites`
|
|
||||||
* `org.pkl.core.http.HttpClient.Builder.addRewrite`
|
|
||||||
* `org.pkl.executor.ExecutorOptions.httpRewrites`
|
|
||||||
* `org.pkl.config.java.ConfigEvaluatorBuilder.getHttpClient`
|
|
||||||
* `org.pkl.config.java.ConfigEvaluatorBuilder.setHttpClient`
|
|
||||||
|
|
||||||
=== Standard Library changes
|
|
||||||
|
|
||||||
New properties, methods, classes and typealiases have been added to the standard library (https://github.com/apple/pkl/pull/1019[#1019], https://github.com/apple/pkl/pull/1053[#1053], https://github.com/apple/pkl/pull/1063[#1063], https://github.com/apple/pkl/pull/1144[#1144]).
|
|
||||||
|
|
||||||
==== Additions to `pkl:base`
|
|
||||||
|
|
||||||
* {uri-stdlib-String}#isBase64[`String.isBase64`]
|
|
||||||
* {uri-stdlib-String}#base64DecodedBytes[`String.base64DecodedBytes`]
|
|
||||||
* {uri-stdlib-String}#encodeToBytes()[`String.encodeToBytes()`]
|
|
||||||
* {uri-stdlib-List}#mapNonNullIndexed()[`List.mapNonNullIndexed()`]
|
|
||||||
* {uri-stdlib-List}#toBytes()[`List.toBytes()`]
|
|
||||||
* {uri-stdlib-Set}#mapNonNullIndexed()[`Set.mapNonNullIndexed()`]
|
|
||||||
* {uri-stdlib-FileOutput}#bytes[`FileOutput.bytes`]
|
|
||||||
* {uri-stdlib-Resource}#bytes[`Resource.bytes`]
|
|
||||||
* {uri-stdlib-Mapping}#getOrDefault()[`Mapping.getOrDefault()`]
|
|
||||||
* {uri-stdlib-Listing}#getOrDefault()[`Listing.getOrDefault()`]
|
|
||||||
* {uri-stdlib-baseModule}#Charset[`Charset`]
|
|
||||||
* {uri-stdlib-Bytes}[`Bytes`]
|
|
||||||
|
|
||||||
==== Additions to `pkl:EvaluatorSettings`
|
|
||||||
|
|
||||||
* {uri-stdlib-evaluatorSettingsHttpClass}#rewrites[`Http.rewrites`]
|
|
||||||
|
|
||||||
==== Additions to `pkl:reflect`
|
|
||||||
|
|
||||||
* {uri-stdlib-reflectModule}#bytesType[`bytesType`]
|
|
||||||
|
|
||||||
=== `pkl` CLI changes
|
|
||||||
|
|
||||||
New features are added to the `pkl` CLI (https://github.com/apple/pkl/pull/1052[#1052], https://github.com/apple/pkl/pull/1056[#1056]).
|
|
||||||
|
|
||||||
==== Aggregated JUnit reports
|
|
||||||
|
|
||||||
A new set of CLI flags are introduced: `--junit-aggregate-reports`, and `--junit-aggregate-suite-name`.
|
|
||||||
Collectively, these flags tell Pkl to combine the JUnit reports into a single file, instead of creating a file per Pkl module.
|
|
||||||
|
|
||||||
Thanks to https://github.com/gordonbondon[@gordonbondon] for contributing to this feature!
|
|
||||||
|
|
||||||
==== shell-completion subcommand
|
|
||||||
|
|
||||||
A new subcommand called `shell-completion` has been added to the Pkl CLI.
|
|
||||||
|
|
||||||
This command produces autocompletion scripts for a given shell.
|
|
||||||
|
|
||||||
The following example installs shell completions for https://fishshell.com[fish shell]:
|
|
||||||
|
|
||||||
[source,shellscript]
|
|
||||||
----
|
|
||||||
pkl shell-completion fish > "~/.config/fish/completions/pkl.fish"
|
|
||||||
----
|
|
||||||
|
|
||||||
Thanks to https://github.com/gordonbondon[@gordonbondon] for contributing to this feature!
|
|
||||||
|
|
||||||
=== `@Generated` annotation for Java/Kotlin codegen
|
|
||||||
|
|
||||||
Classes generated by the Java and Kotlin code generator can optionally receive new annotation called `Generated` (https://github.com/apple/pkl/pull/1075[#1075], https://github.com/apple/pkl/pull/1115[#1115]).
|
|
||||||
|
|
||||||
This behavior is toggled with the `--generated-annotation` CLI flag, or the similarly named Gradle property.
|
|
||||||
|
|
||||||
When enabled, classes are annotated with `org.pkl.config.java.Generated`.
|
|
||||||
|
|
||||||
This allows users of JaCoCo to exclude Pkl-generated classes from coverage reports.
|
|
||||||
|
|
||||||
Thanks to https://github.com/arouel[@arouel] for their contributions here!
|
|
||||||
|
|
||||||
== Breaking Changes [small]#💔#
|
|
||||||
|
|
||||||
Things to watch out for when upgrading.
|
|
||||||
|
|
||||||
=== Standard library deprecations
|
|
||||||
|
|
||||||
The following methods have been deprecated in the standard library:
|
|
||||||
|
|
||||||
|===
|
|
||||||
|Method name |Details
|
|
||||||
|
|
||||||
|`Resource.md5`
|
|
||||||
|Replaced with `Resource.bytes.md5`
|
|
||||||
|
|
||||||
|`Resource.sha1`
|
|
||||||
|Replaced with `Resource.bytes.sha1`
|
|
||||||
|
|
||||||
|`Resource.sha256`
|
|
||||||
|Replaced with `Resource.bytes.sha256`
|
|
||||||
|
|
||||||
|`Resource.sha256Int`
|
|
||||||
|Replaced with `Resource.bytes.sha256Int`
|
|
||||||
|===
|
|
||||||
|
|
||||||
=== Grammar changes
|
|
||||||
|
|
||||||
New rules have been introduced to the parser (https://github.com/apple/pkl/pull/1022[#1022], https://github.com/apple/pkl/pull/1126[#1126]).
|
|
||||||
|
|
||||||
==== Block comment nesting is removed
|
|
||||||
|
|
||||||
Currently, block comments can be nested.
|
|
||||||
For example, the comment `/* /* my comment */ */` is two block comments; one outer comment and one inner comment.
|
|
||||||
|
|
||||||
However, this has some drawbacks.
|
|
||||||
|
|
||||||
1. Block comments can be possibly be closed incorrectly, like `/* /* my comment */`. However, this is a valid block comment in most languages.
|
|
||||||
2. Pkl's syntax highlighters do not support block comment nesting, leading to highlighting that is inconsistent with Pkl's parser.
|
|
||||||
|
|
||||||
To improve user experience, block comment nesting is removed.
|
|
||||||
As a result, block comments are always terminated upon the first `*/`.
|
|
||||||
|
|
||||||
==== Shebang line can only appear at the start of a file
|
|
||||||
|
|
||||||
The grammar around shebang comments has been made stricter.
|
|
||||||
|
|
||||||
Pkl files allow for a https://en.wikipedia.org/wiki/Shebang_(Unix)[shebang comment].
|
|
||||||
Currently, this comment can appear anywhere in a file.
|
|
||||||
In 0.29, this comment must appear at the start of a file.
|
|
||||||
|
|
||||||
=== Opaque `file:` URIs are invalid
|
|
||||||
|
|
||||||
A new rule is introduced to treat opaque `file:` URIs as errors (https://github.com/apple/pkl/pull/1087[#1087]).
|
|
||||||
|
|
||||||
Opaque file URIs are URIs whose scheme-specific part does not start with `/`.
|
|
||||||
For example, `file:foo/bar.txt` is an opaque URI.
|
|
||||||
|
|
||||||
Currently, this has the unintentional behavior of: look for file `foo/bar.txt` from the process working directory.
|
|
||||||
These are effectively dynamics imports; from a single import, we can't statically determine what file is actually being imported.
|
|
||||||
|
|
||||||
According to https://datatracker.ietf.org/doc/html/rfc8089#section-2[RFC-8089], `file` URIs must have paths that start with /.
|
|
||||||
So, these are actually not valid URIs.
|
|
||||||
|
|
||||||
In Pkl 0.29, it is an error to load a module or resource with an opaque `file:` URI.
|
|
||||||
|
|
||||||
NOTE: To import or read a relative path, omit `file:` from the import string. For example, `import("foo/bar.txt")` instead of `import("file:foo/bar.txt")`.
|
|
||||||
|
|
||||||
[[new-base-module-names]]
|
|
||||||
=== New base module names: `Bytes` and `Charset`
|
|
||||||
|
|
||||||
Two new names are introduced to the base module: `Bytes` and `Charset`.
|
|
||||||
That means that any code that currently references these names on implicit `this` will break (https://github.com/apple/pkl/pull/1019[#1019]).
|
|
||||||
|
|
||||||
The following snippet demonstrates this breaking behavior.
|
|
||||||
In 0.28 and below, `obj2.prop` resolves to string "my bytes".
|
|
||||||
In 0.29, it resolves to class `Bytes` in the base module.
|
|
||||||
|
|
||||||
[source,pkl]
|
|
||||||
----
|
|
||||||
obj1 {
|
|
||||||
Bytes = "my bytes"
|
|
||||||
}
|
|
||||||
|
|
||||||
obj2 = (obj1) {
|
|
||||||
prop = Bytes
|
|
||||||
}
|
|
||||||
----
|
|
||||||
|
|
||||||
To make this code continue to have the same meaning, an explicit `this` reference is required.
|
|
||||||
|
|
||||||
[source,diff]
|
|
||||||
----
|
|
||||||
obj1 {
|
|
||||||
Bytes = "my bytes"
|
|
||||||
}
|
|
||||||
|
|
||||||
obj2 = (obj1) {
|
|
||||||
- prop = Bytes
|
|
||||||
+ prop = this.Bytes
|
|
||||||
}
|
|
||||||
----
|
|
||||||
|
|
||||||
This only affects code that references these names off of implicit this.
|
|
||||||
Code that references the name from the lexical scope will continue to work as-is.
|
|
||||||
|
|
||||||
To learn more about name resolution, consult the xref:language-reference:index.adoc#name-resolution[language reference].
|
|
||||||
|
|
||||||
=== jpkl is not published to Maven Central
|
|
||||||
|
|
||||||
Due to a breakage in release pipeline, the `jpkl` executable is not published to Maven Central (https://github.com/apple/pkl/pull/1147[#1147]).
|
|
||||||
|
|
||||||
It is still available to download as a GitHub release asset.
|
|
||||||
|
|
||||||
== Miscellaneous [small]#🐸#
|
|
||||||
|
|
||||||
* Documentation improvements (https://github.com/apple/pkl/pull/1065[#1065], https://github.com/apple/pkl/pull/1127[#1127]).
|
|
||||||
* Dependency updates (https://github.com/apple/pkl/pull/1088[#1088], https://github.com/apple/pkl/pull/1128[#1128], https://github.com/apple/pkl/pull/1139[#1139]).
|
|
||||||
* Use `javac -release` and `kotlinc -Xjdk-release` compiler flags for improved bytecode compatibilty (https://github.com/apple/pkl/pull/1080[#1080]).
|
|
||||||
* Parser improvements (https://github.com/apple/pkl/pull/1066[#1066]).
|
|
||||||
|
|
||||||
== Bugs fixed [small]#🐜#
|
|
||||||
|
|
||||||
The following bugs have been fixed.
|
|
||||||
|
|
||||||
* New parser fails on nested multi line comments (https://github.com/apple/pkl/issues/1014[#1014])
|
|
||||||
* Fix package dependency links when generating pkldoc (https://github.com/apple/pkl/pull/1078[#1078])
|
|
||||||
* Don't show 100% when number of failures is rounded up (https://github.com/apple/pkl/pull/1110[#1110])
|
|
||||||
* Quoting the module name crashes pkl (https://github.com/apple/pkl/issues/1111[#1111])
|
|
||||||
* Shebang comment parsing is too lenient (https://github.com/apple/pkl/issues/1125[#1125])
|
|
||||||
* CLI: noProxy option in settings.pkl and PklProject are ignored (https://github.com/apple/pkl/issues/1142[#1142])
|
|
||||||
|
|
||||||
== Contributors [small]#🙏#
|
|
||||||
|
|
||||||
We would like to thank the contributors to this release (in alphabetical order):
|
|
||||||
|
|
||||||
* https://github.com/arouel[@arouel]
|
|
||||||
* https://github.com/gordonbondon[@gordonbondon]
|
|
||||||
* https://github.com/HT154[@HT154]
|
|
||||||
* https://github.com/KushalP[@KushalP]
|
|
||||||
* https://github.com/madrob[@madrob]
|
|
||||||
* https://github.com/MikeSchulze[@MikeSchulze]
|
|
||||||
* https://github.com/sitaktif[@sitaktif]
|
|
||||||
* https://github.com/vlsi[@vlsi]
|
|
||||||
@@ -1,429 +0,0 @@
|
|||||||
= Pkl 0.30 Release Notes
|
|
||||||
:version: 0.30
|
|
||||||
:version-minor: 0.30.2
|
|
||||||
:release-date: November 3rd, 2025
|
|
||||||
|
|
||||||
:yaml-binary-scalar: https://yaml.org/type/binary.html
|
|
||||||
|
|
||||||
include::ROOT:partial$component-attributes.adoc[]
|
|
||||||
|
|
||||||
Pkl {version} was released on {release-date}. +
|
|
||||||
[.small]#The latest bugfix release is {version-minor}. (xref:changelog.adoc[All Versions])#
|
|
||||||
|
|
||||||
This release introduces a code formatter, and an in-language API for producing `pkl-binary` output.
|
|
||||||
|
|
||||||
The next release (0.31) is scheduled for February 2026.
|
|
||||||
To see what's coming in the future, follow the {uri-pkl-roadmap}[Pkl Roadmap].
|
|
||||||
|
|
||||||
Please send feedback and questions to https://github.com/apple/pkl/discussions[GitHub Discussions], or submit an issue on https://github.com/apple/pkl/issues/new[GitHub]. +
|
|
||||||
|
|
||||||
[small]#Pkl is hosted on https://github.com/apple/pkl[GitHub].
|
|
||||||
To get started, follow xref:pkl-cli:index.adoc#installation[Installation].#
|
|
||||||
|
|
||||||
== Highlights [small]#💖#
|
|
||||||
|
|
||||||
[[formatter]]
|
|
||||||
=== Formatter
|
|
||||||
|
|
||||||
Pkl now has a formatter (https://github.com/apple/pkl/pull/1107[#1107], https://github.com/apple/pkl/pull/1208[#1208], https://github.com/apple/pkl/pull/1211[#1211], https://github.com/apple/pkl/pull/1215[#1215], https://github.com/apple/pkl/pull/1217[#1217], https://github.com/apple/pkl/pull/1235[#1235], https://github.com/apple/pkl/pull/1246[#1246], https://github.com/apple/pkl/pull/1247[#1247], https://github.com/apple/pkl/pull/1252[#1252], https://github.com/apple/pkl/pull/1256[#1256], https://github.com/apple/pkl/pull/1259[#1259], https://github.com/apple/pkl/pull/1260[#1260], https://github.com/apple/pkl/pull/1263[#1263], https://github.com/apple/pkl/pull/1265[#1265], https://github.com/apple/pkl/pull/1266[#1266], https://github.com/apple/pkl/pull/1267[#1267], https://github.com/apple/pkl/pull/1268[#1268], https://github.com/apple/pkl/pull/1270[#1270], https://github.com/apple/pkl/pull/1271[#1271], https://github.com/apple/pkl/pull/1272[#1272], https://github.com/apple/pkl/pull/1273[#1273], https://github.com/apple/pkl/pull/1274[#1274], https://github.com/apple/pkl/pull/1280[#1280], https://github.com/apple/pkl/pull/1283[#1283], https://github.com/apple/pkl/pull/1289[#1289], https://github.com/apple/pkl/pull/1290[#1290])!
|
|
||||||
|
|
||||||
Pkl's formatter is _canonical_, which means that it has a single set of formatting rules, with (almost) no configuration options.
|
|
||||||
The goal is to eliminate the possibility of formatting debates, which can lead to churn and bike-shedding.
|
|
||||||
|
|
||||||
The formatter is available both as a CLI subcommand and as a Java API.
|
|
||||||
|
|
||||||
To learn more about this feature, consult https://github.com/apple/pkl-evolution/blob/main/spices/SPICE-0014-canonical-formatter.adoc[SPICE-0014].
|
|
||||||
|
|
||||||
==== Using the CLI
|
|
||||||
|
|
||||||
The Pkl formatter is available under the `pkl format` subcommand. By default, the command will concatenate and write all formatted content to standard out.
|
|
||||||
|
|
||||||
To simply check for formatting violations, getting formatted output on stdout is likely too verbose.
|
|
||||||
The `--silent` flag can be used to omit any output, and the <<formatting-exit-codes,exit code>> can be used to determine
|
|
||||||
if there are formatting violations.
|
|
||||||
|
|
||||||
[source,shell]
|
|
||||||
----
|
|
||||||
pkl format --silent . || echo "Formatting violations were found!"
|
|
||||||
----
|
|
||||||
|
|
||||||
Alternatively, the `--names` flag will print out the names of any files that have formatting violations.
|
|
||||||
|
|
||||||
[source,shell]
|
|
||||||
----
|
|
||||||
pkl format --diff-name-only .
|
|
||||||
----
|
|
||||||
|
|
||||||
To apply formatting, use the `--write` (`-w`) flag.
|
|
||||||
This also implies the `--diff-name-only` flag.
|
|
||||||
|
|
||||||
[source,shell]
|
|
||||||
----
|
|
||||||
pkl format -w .
|
|
||||||
----
|
|
||||||
|
|
||||||
[[formatting-exit-codes]]
|
|
||||||
==== Exit codes
|
|
||||||
|
|
||||||
The formatter will exit with the following codes:
|
|
||||||
|
|
||||||
|===
|
|
||||||
|Code |Description
|
|
||||||
|
|
||||||
|0
|
|
||||||
|No formatting violations were found.
|
|
||||||
|
|
||||||
|1
|
|
||||||
|Non-formatting errors occurred.
|
|
||||||
|
|
||||||
|11
|
|
||||||
|Formatting violations were found.
|
|
||||||
|===
|
|
||||||
|
|
||||||
==== Grammar version
|
|
||||||
|
|
||||||
The formatter can be configured with a _grammar version_, which maps to a Pkl version range.
|
|
||||||
|
|
||||||
|===
|
|
||||||
|Grammar version |Pkl versions
|
|
||||||
|
|
||||||
|1
|
|
||||||
|0.25 - 0.29
|
|
||||||
|
|
||||||
|2
|
|
||||||
|0.30+
|
|
||||||
|===
|
|
||||||
|
|
||||||
Grammar version 2 uses the newly introduced <<trailing-commas,trailing commas>> feature, and therefore is not compatible with existing versions of Pkl.
|
|
||||||
To ensure compatibility, use the `--grammar-version 1` CLI flag.
|
|
||||||
|
|
||||||
[[binary-renderer-parser]]
|
|
||||||
=== `pkl-binary` in-language Renderer
|
|
||||||
|
|
||||||
A new in-language API has been added to render values into xref:bindings-specification:binary-encoding.adoc[pkl-binary encoding] (https://github.com/apple/pkl/pull/1203[#1203],
|
|
||||||
https://github.com/apple/pkl/pull/1250[#1250], https://github.com/apple/pkl/pull/1275[#1275]).
|
|
||||||
|
|
||||||
It's sometimes useful to separate Pkl evaluation from data consumption when used as application or service configuration.
|
|
||||||
This is possible with the `pkl-binary` format, which is a lossless encoding of Pkl data.
|
|
||||||
|
|
||||||
In this approach, Pkl is first rendered into `pkl-binary` during build time, and then deserialized into classes and structs at startup time.
|
|
||||||
This means that the Pkl evaluator does not need to be shipped with the application, which improves code portability and eliminates runtime overhead.
|
|
||||||
|
|
||||||
However, currently, the API for getting this binary format is somewhat cumbersome.
|
|
||||||
Only the host languages have access to this API (for example, https://swiftpackageindex.com/apple/pkl-swift/0.6.0/documentation/pklswift/evaluator/evaluateexpressionraw(source:expression:)[`evaluateExpressionRaw`] in pkl-swift).
|
|
||||||
This means that one-off logic must be written to render this format in the host language.
|
|
||||||
|
|
||||||
In 0.30, this renderer is added as an in-language API, through the {uri-stdlib-pklbinaryModule}[`pkl:pklbinary`] standard library module.
|
|
||||||
Additionally, it is available through CLI flag `--format pkl-binary`.
|
|
||||||
|
|
||||||
For example:
|
|
||||||
|
|
||||||
// this is parsed instead of tested because DocSnippetTests only handles textual output (via ReplServer)
|
|
||||||
[source%parsed,pkl]
|
|
||||||
----
|
|
||||||
import "pkl:pklbinary"
|
|
||||||
|
|
||||||
output {
|
|
||||||
renderer = new pklbinary.Renderer {}
|
|
||||||
}
|
|
||||||
----
|
|
||||||
|
|
||||||
To learn more about this feature, consult https://github.com/apple/pkl-evolution/blob/main/spices/SPICE-0021-binary-renderer-and-parser.adoc[SPICE-0021].
|
|
||||||
|
|
||||||
==== New renderer type: `BytesRenderer`
|
|
||||||
|
|
||||||
To enable the `pkl-binary` renderer feature, Pkl now supports renderers that produce `Bytes` output (https://github.com/apple/pkl/pull/1203[#1203]).
|
|
||||||
|
|
||||||
The existing `ValueRenderer` class now extends new class `BaseValueRenderer`, and a new `BytesRenderer` class is introduced.
|
|
||||||
|
|
||||||
Setting a module's output renderer to a `BytesRenderer` will control its resulting `output.bytes`.
|
|
||||||
|
|
||||||
This affects usage scenarios where a module's `output.bytes` is evaluated, for example, when using `pkl eval`.
|
|
||||||
|
|
||||||
==== Using `pkl-binary` data
|
|
||||||
|
|
||||||
Users of Pkl's language binding libraries can decode `pkl-binary` data into instances of code-generated types.
|
|
||||||
|
|
||||||
[tabs]
|
|
||||||
====
|
|
||||||
Java::
|
|
||||||
+
|
|
||||||
[source,java]
|
|
||||||
----
|
|
||||||
var encodedData = fetchEncodedData(); // some byte[] or InputStream
|
|
||||||
var config = Config.fromPklBinary(encodedData);
|
|
||||||
var appConfig = config.as(AppConfig.class);
|
|
||||||
----
|
|
||||||
|
|
||||||
Kotlin::
|
|
||||||
+
|
|
||||||
[source,kotlin]
|
|
||||||
----
|
|
||||||
val encodedData = fetchEncodedData() // some ByteArray or InputStream
|
|
||||||
val config = Config.fromPklBinary(encodedData, ValueMapper.preconfigured().forKotlin())
|
|
||||||
val appConfig = config.to<AppConfig>()
|
|
||||||
----
|
|
||||||
|
|
||||||
Go::
|
|
||||||
+
|
|
||||||
[source,go]
|
|
||||||
----
|
|
||||||
encodedData := fetchEncodedData() // some []byte
|
|
||||||
var appConfig AppConfig
|
|
||||||
if err := pkl.Unmarshal(encodedData, &appConfig); err != nil {
|
|
||||||
// handle error
|
|
||||||
}
|
|
||||||
----
|
|
||||||
|
|
||||||
Swift::
|
|
||||||
+
|
|
||||||
[source,swift]
|
|
||||||
----
|
|
||||||
let encodedData = fetchEncodedData() // some [UInt8]
|
|
||||||
let appConfig = try PklDecoder.decode(AppConfig.self, from: encodedData)
|
|
||||||
----
|
|
||||||
====
|
|
||||||
|
|
||||||
== Noteworthy [small]#🎶#
|
|
||||||
|
|
||||||
[[trailing-commas]]
|
|
||||||
=== Trailing Commas
|
|
||||||
|
|
||||||
Pkl's grammar has been updated to allow including a comma following the final item of comma-separated syntax elements (https://github.com/apple/pkl/pull/1137[#1137]).
|
|
||||||
|
|
||||||
These syntax elements are affected:
|
|
||||||
|
|
||||||
[source%tested,pkl]
|
|
||||||
----
|
|
||||||
function add(
|
|
||||||
bar,
|
|
||||||
baz, // <1>
|
|
||||||
) = bar + baz
|
|
||||||
|
|
||||||
foo = add(
|
|
||||||
1,
|
|
||||||
2, // <2>
|
|
||||||
)
|
|
||||||
|
|
||||||
typealias MyMapping<
|
|
||||||
Key,
|
|
||||||
Value, // <3>
|
|
||||||
> = Mapping<Key, Value>
|
|
||||||
|
|
||||||
bar: Mapping<
|
|
||||||
String,
|
|
||||||
Int, // <4>
|
|
||||||
>
|
|
||||||
|
|
||||||
baz: Mapping(
|
|
||||||
!containsKey("forbidden key"),
|
|
||||||
!containsKey("forbidden value"), // <5>
|
|
||||||
)
|
|
||||||
|
|
||||||
qux: (
|
|
||||||
String,
|
|
||||||
Int, // <6>
|
|
||||||
) -> Dynamic =
|
|
||||||
(paramA, paramB) -> new Dynamic {
|
|
||||||
quux = "\(paramA): \(paramB)"
|
|
||||||
}
|
|
||||||
|
|
||||||
corge = (qux) {
|
|
||||||
paramA,
|
|
||||||
paramB, // <7>
|
|
||||||
->
|
|
||||||
grault = paramA.length * paramB
|
|
||||||
}
|
|
||||||
----
|
|
||||||
<1> Function parameter lists in method definitions.
|
|
||||||
<2> Argument lists in method calls.
|
|
||||||
<3> Type parameter lists in generic type definitions.
|
|
||||||
<4> Type argument lists in type annotations and casts.
|
|
||||||
<5> Type constraint lists.
|
|
||||||
<6> Function type parameter lists in function type annotations.
|
|
||||||
<7> Object body parameter lists.
|
|
||||||
|
|
||||||
To learn more about this change, consult https://github.com/apple/pkl-evolution/blob/main/spices/SPICE-0019-trailing-commas.adoc[SPICE-0019].
|
|
||||||
|
|
||||||
=== Pretty-printed traces
|
|
||||||
|
|
||||||
A new evaluator option is added to enable pretty-printed traces (https://github.com/apple/pkl/pull/1100[#1100], https://github.com/apple/pkl/pull/1227[#1227], https://github.com/apple/pkl/pull/1230[#1230]).
|
|
||||||
|
|
||||||
Currently, the `trace()` operator will render values as a single line, and trims the output after 100 characters.
|
|
||||||
This can obscure information when debugging.
|
|
||||||
|
|
||||||
In 0.30, a new evaluator option is added to control how traces are emitted.
|
|
||||||
Two trace modes are introduced:
|
|
||||||
|
|
||||||
* `compact` - the current output mode (default).
|
|
||||||
* `pretty` - multiline, with no limit on output size.
|
|
||||||
|
|
||||||
For example, users of the CLI can specify `--trace-mode` as a flag.
|
|
||||||
|
|
||||||
[source,shell]
|
|
||||||
----
|
|
||||||
pkl eval --trace-mode pretty myModule.pkl
|
|
||||||
----
|
|
||||||
|
|
||||||
Thanks to https://github.com/ssalevan[@ssalevan] for their contribution to this feature!
|
|
||||||
|
|
||||||
=== Better support for `Bytes` when rendering YAML
|
|
||||||
|
|
||||||
Previously, attempting to render a `Bytes` value using {uri-stdlib-YamlRenderer}[`YamlRenderer`] required the use of a link:{uri-stdlib-PcfRenderer-converters}[converter].
|
|
||||||
Now, Pkl can natively render YAML containing link:{yaml-binary-scalar}[binary scalars] (https://github.com/apple/pkl/pull/1276[#1276]).
|
|
||||||
|
|
||||||
[source,pkl%tested]
|
|
||||||
----
|
|
||||||
foo {
|
|
||||||
bar = Bytes(1, 2, 3)
|
|
||||||
}
|
|
||||||
|
|
||||||
rendered = new YamlRenderer {}.renderValue(foo) // <1>
|
|
||||||
----
|
|
||||||
<1> Result: `bar: !!binary AQID`
|
|
||||||
|
|
||||||
Similarly, link:{uri-stdlib-YamlParser}[`yaml.Parser`] now parses binary YAML values as Pkl link:{uri-stdlib-Bytes}[`Bytes`] values (https://github.com/apple/pkl/pull/1277[#1277]).
|
|
||||||
This is a breaking change; previously these values were parsed as link:{uri-stdlib-String}[`String`] value containing the base64-encoded binary data.
|
|
||||||
|
|
||||||
[source,pkl%tested]
|
|
||||||
----
|
|
||||||
import "pkl:yaml"
|
|
||||||
|
|
||||||
yamlData =
|
|
||||||
"""
|
|
||||||
bytes: !!binary AQID
|
|
||||||
"""
|
|
||||||
|
|
||||||
parsed = new yaml.Parser {}.parse(yamlData).bytes // <1>
|
|
||||||
----
|
|
||||||
<1> Result: `Bytes(1, 2, 3)`
|
|
||||||
|
|
||||||
[[pkldoc-perf-improvements]]
|
|
||||||
=== `pkldoc` performance improvements
|
|
||||||
|
|
||||||
The `pkldoc` documentation generator has been overhauled (https://github.com/apple/pkl/pull/1169[#1169], https://github.com/apple/pkl/pull/1224[#1224], https://github.com/apple/pkl/pull/1241[#1241], https://github.com/apple/pkl/pull/1242[#1242]).
|
|
||||||
|
|
||||||
Currently, the `pkldoc` tool needs to consume much of an existing documentation website whenever generating new documentation.
|
|
||||||
This adds significant I/O overhead as a pkldoc documentation website grows.
|
|
||||||
|
|
||||||
The generator has been overhauled to minimize the amount of data needed to be read from the current site.
|
|
||||||
|
|
||||||
To read more about this change, consult https://github.com/apple/pkl-evolution/blob/main/spices/SPICE-0018-pkldoc-io-improvements.adoc[SPICE-0018].
|
|
||||||
|
|
||||||
[[pkldoc-migration]]
|
|
||||||
==== Migration
|
|
||||||
|
|
||||||
The new pkldoc website introduces breaking changes to the data model.
|
|
||||||
Because of this, existing sites must be migrated before using the `0.30` version of pkldoc.
|
|
||||||
|
|
||||||
To migrate, run the one-time command `pkldoc --migrate`.
|
|
||||||
|
|
||||||
=== Java API changes
|
|
||||||
|
|
||||||
==== New classes
|
|
||||||
|
|
||||||
New classes are introduced to the Java API.
|
|
||||||
|
|
||||||
* `org.pkl.core.PklBinaryDecoder`
|
|
||||||
|
|
||||||
==== New methods
|
|
||||||
|
|
||||||
New methods are introduced to the Java API.
|
|
||||||
|
|
||||||
* `org.pkl.core.Evaluator.evaluateExpressionPklBinary`
|
|
||||||
* `org.pkl.core.EvaluatorBuilder.setTraceMode`
|
|
||||||
* `org.pkl.core.EvaluatorBuilder.getTraceMode`
|
|
||||||
* `org.pkl.config.java.Config.fromPklBinary`
|
|
||||||
|
|
||||||
=== Standard Library changes
|
|
||||||
|
|
||||||
New modules, properties, methods, classes and typealiases have been added to the standard library (https://github.com/apple/pkl/pull/1106[#1106]).
|
|
||||||
|
|
||||||
==== Changes to `pkl:base`
|
|
||||||
|
|
||||||
Additions:
|
|
||||||
|
|
||||||
* New class: {uri-stdlib-BaseValueRenderer}[`BaseValueRenderer`]
|
|
||||||
* {uri-stdlib-ValueRenderer}[`ValueRenderer`] (now a subclass of {uri-stdlib-BaseValueRenderer}[`BaseValueRenderer`])
|
|
||||||
* {uri-stdlib-BytesRenderer}[`BytesRenderer`]
|
|
||||||
* {uri-stdlib-baseModule}/RenderDirective#bytes[`RenderDirective.bytes`]
|
|
||||||
|
|
||||||
==== Additions to `pkl:EvaluatorSettings`
|
|
||||||
|
|
||||||
* {uri-stdlib-evaluatorSettingsModule}#traceMode[`traceMode`]
|
|
||||||
|
|
||||||
==== Additions to `pkl:reflect`
|
|
||||||
|
|
||||||
* {uri-stdlib-reflectModule}/Class#allMethods[`Class.allMethods`]
|
|
||||||
* {uri-stdlib-reflectModule}/Class#allProperties[`Class.allProperties`]
|
|
||||||
* {uri-stdlib-reflectModule}/Property#allAnnotations[`Propterty.allAnnotations`]
|
|
||||||
* {uri-stdlib-reflectModule}/Propterty#allModifiers[`Propterty.allModifiers`]
|
|
||||||
|
|
||||||
==== New module: `pkl:pklbinary`
|
|
||||||
|
|
||||||
The `pkl:pklbinary` standard library module is added.
|
|
||||||
|
|
||||||
=== `pkl repl` improvements
|
|
||||||
|
|
||||||
The REPL now handles interrupts (Ctrl-C) in a more user-friendly way (https://github.com/apple/pkl/pull/1188[#1188]).
|
|
||||||
|
|
||||||
Instead of exiting immediately, it behaves like other REPLs:
|
|
||||||
|
|
||||||
* If the line is non-empty or in a continuation, the buffer is cleared.
|
|
||||||
* If the line is empty, print a message with instructions on exiting the REPL.
|
|
||||||
** If another interrupt is sent immediately after, exit.
|
|
||||||
|
|
||||||
== Breaking Changes [small]#💔#
|
|
||||||
|
|
||||||
Things to watch out for when upgrading.
|
|
||||||
|
|
||||||
=== Binary data handling `yaml.Parser`
|
|
||||||
|
|
||||||
link:{yaml-binary-scalar}[YAML binary scalars] are now parsed as link:{uri-stdlib-Bytes}[`Bytes`] values.
|
|
||||||
Prior versions of Pkl parsed binary scalars as link:{uri-stdlib-String}[`String`] values containing the base64-encoded binary data.
|
|
||||||
|
|
||||||
=== Minimum Kotlin version bump
|
|
||||||
|
|
||||||
For users of Pkl's Kotlin libraries, the minimum Kotlin version has been bumped to 2.1 (https://github.com/apple/pkl/pull/1232[#1232]).
|
|
||||||
|
|
||||||
=== New base module names: `BaseValueRenderer`, `BytesRenderer`
|
|
||||||
|
|
||||||
Two new names are introduced to the base module: `BaseValueRenderer`, and `BytesRenderer`.
|
|
||||||
That means that any code that currently references these names on implicit `this` will break (https://github.com/apple/pkl/pull/1203[#1203]).
|
|
||||||
|
|
||||||
To learn more about how this breaks code and how to fix it, see xref:0.29.adoc#new-base-module-names[New base module names] in 0.29's release notes.
|
|
||||||
|
|
||||||
=== `pkldoc` sites need to be migrated
|
|
||||||
|
|
||||||
Due to breaking changes made in pkldoc's data model, existing pkldoc websites must be migrated.
|
|
||||||
|
|
||||||
See <<pkldoc-migration>> for more details.
|
|
||||||
|
|
||||||
== Miscellaneous [small]#🐸#
|
|
||||||
|
|
||||||
* Dependency updates (https://github.com/apple/pkl/pull/1184[#1184], https://github.com/apple/pkl/pull/1225[#1225], https://github.com/apple/pkl/pull/1226[#1226], https://github.com/apple/pkl/pull/1228[#1228]).
|
|
||||||
* Enforce Pkl formatting of stdlib (https://github.com/apple/pkl/pull/1236[#1236], https://github.com/apple/pkl/pull/1253[#1253], https://github.com/apple/pkl/pull/1258[#1258], https://github.com/apple/pkl/pull/1278[#1278], https://github.com/apple/pkl/pull/1279[#1279]).
|
|
||||||
* Add internal IntelliJ plugin that's meant to assist with development of the Pkl codebase itself (https://github.com/apple/pkl/pull/1248[#1248]).
|
|
||||||
* Update CircleCI macOS instance type and Xcode version (https://github.com/apple/pkl/pull/1243[#1243], https://github.com/apple/pkl/pull/1244[#1244]).
|
|
||||||
* Disable multi-jdk testing when running on Windows ARM (https://github.com/apple/pkl/pull/1223[#1223]).
|
|
||||||
* Refine documentation for class `Any` (https://github.com/apple/pkl/pull/1194[#1194]).
|
|
||||||
|
|
||||||
== Bugs fixed [small]#🐜#
|
|
||||||
|
|
||||||
The following bugs have been fixed.
|
|
||||||
|
|
||||||
* Incorrect error message when refusing to read past root dir (https://github.com/apple/pkl/pull/1234[#1233]).
|
|
||||||
* Unicode U+7FFF character (翿) incorrectly parsed as EOF (https://github.com/apple/pkl/pull/1251[#1251]).
|
|
||||||
* Fallback certificates do not work in certain classloader setups (https://github.com/apple/pkl/pull/1198[#1199]).
|
|
||||||
|
|
||||||
== Contributors [small]#🙏#
|
|
||||||
|
|
||||||
We would like to thank the contributors to this release (in alphabetical order):
|
|
||||||
|
|
||||||
* https://github.com/bioball[@bioball]
|
|
||||||
* https://github.com/HT154[@HT154]
|
|
||||||
* https://github.com/netvl[@netvl]
|
|
||||||
* https://github.com/spyoungtech[@spyoungtech]
|
|
||||||
* https://github.com/srueg[@srueg]
|
|
||||||
* https://github.com/ssalevan[@ssalevan]
|
|
||||||
* https://github.com/stackoverflow[@stackoverflow]
|
|
||||||
@@ -1,352 +0,0 @@
|
|||||||
= Pkl 0.31 Release Notes
|
|
||||||
:version: 0.31
|
|
||||||
:version-minor: 0.31.1
|
|
||||||
:release-date: February 26th, 2026
|
|
||||||
:version-next: 0.32
|
|
||||||
:version-next-date: July 2026
|
|
||||||
|
|
||||||
include::partial$intro.adoc[]
|
|
||||||
|
|
||||||
== Highlights [small]#💖#
|
|
||||||
|
|
||||||
[[power-assertions]]
|
|
||||||
=== Power Assertions
|
|
||||||
|
|
||||||
Pkl's test output and error output has been improved with power assertions (pr:https://github.com/apple/pkl/pull/1384[], pr:https://github.com/apple/pkl/pull/1419[])!
|
|
||||||
|
|
||||||
Pkl has two places that are effectively assertions.
|
|
||||||
These are:
|
|
||||||
|
|
||||||
* Type constraint expressions
|
|
||||||
* Test facts
|
|
||||||
|
|
||||||
Currently, when these assertions fail, the error message prints the assertion's source section.
|
|
||||||
However, this information can sometimes be lacking.
|
|
||||||
It tells you what the mechanics of the assertion is, but doesn't tell you _why_ the assertion is failing.
|
|
||||||
|
|
||||||
For example, here is the current error output of a failing typecheck.
|
|
||||||
|
|
||||||
[source,text]
|
|
||||||
----
|
|
||||||
–– Pkl Error ––
|
|
||||||
Type constraint `name.endsWith(lastName)` violated.
|
|
||||||
Value: new Person { name = "Bub Johnson" }
|
|
||||||
|
|
||||||
7 | passenger: Person(name.endsWith(lastName)) = new { name = "Bub Johnson" }
|
|
||||||
----
|
|
||||||
|
|
||||||
Just from this error message, we don't know what the last name is supposed to be.
|
|
||||||
What is `name` supposed to end with?
|
|
||||||
We just know it's some property called `lastName` but, we don't know what it _is_.
|
|
||||||
|
|
||||||
In Pkl 0.31, the error output becomes:
|
|
||||||
|
|
||||||
[source,text]
|
|
||||||
----
|
|
||||||
–– Pkl Error ––
|
|
||||||
Type constraint `name.endsWith(lastName)` violated.
|
|
||||||
Value: new Person { name = "Bub Johnson" }
|
|
||||||
|
|
||||||
name.endsWith(lastName)
|
|
||||||
│ │ │
|
|
||||||
│ false "Smith"
|
|
||||||
"Bub Johnson"
|
|
||||||
|
|
||||||
7 | passenger: Person(name.endsWith(lastName)) = new { name = "Bub Johnson" }
|
|
||||||
----
|
|
||||||
|
|
||||||
Now, we know what the expectation is.
|
|
||||||
|
|
||||||
This type of diagram is also added to test facts.
|
|
||||||
When tests fail, Pkl emits a diagram of the expression, and the values produced.
|
|
||||||
|
|
||||||
For example, given the following test:
|
|
||||||
|
|
||||||
.math.pkl
|
|
||||||
[source,pkl]
|
|
||||||
----
|
|
||||||
amends "pkl:test"
|
|
||||||
|
|
||||||
facts {
|
|
||||||
local function add(a: Int, b: Int) = a * b
|
|
||||||
local function divide(a: Int, b: Int) = a % b
|
|
||||||
["math"] {
|
|
||||||
add(3, 4) == 7
|
|
||||||
divide(8, 2) == 4
|
|
||||||
}
|
|
||||||
}
|
|
||||||
----
|
|
||||||
|
|
||||||
The error output now includes a power assertion diagram, which helps explain why the test failed.
|
|
||||||
|
|
||||||
[source,text]
|
|
||||||
----
|
|
||||||
module math
|
|
||||||
facts
|
|
||||||
✘ math
|
|
||||||
add(3, 4) == 7 (math.pkl:9)
|
|
||||||
│ │
|
|
||||||
12 false
|
|
||||||
divide(8, 2) == 4 (math.pkl:10)
|
|
||||||
│ │
|
|
||||||
0 false
|
|
||||||
|
|
||||||
0.0% tests pass [1/1 failed], 0.0% asserts pass [2/2 failed]
|
|
||||||
----
|
|
||||||
|
|
||||||
To learn more about this feature, consult https://github.com/apple/pkl-evolution/blob/main/spices/SPICE-0026-power-assertions.adoc[SPICE-0026].
|
|
||||||
|
|
||||||
[[cli-framework]]
|
|
||||||
=== CLI Framework
|
|
||||||
|
|
||||||
Pkl 0.31 introduces a new framework for implementing CLI tools in Pkl (pr:https://github.com/apple/pkl/pull/1367[], pr:https://github.com/apple/pkl/pull/1431[], pr:https://github.com/apple/pkl/pull/1432[], pr:https://github.com/apple/pkl/pull/1436[], pr:https://github.com/apple/pkl/pull/1440[], pr:https://github.com/apple/pkl/pull/1444[]).
|
|
||||||
|
|
||||||
The framework provides a way to build command line tools with user experience idioms that will be immediately familiar to users.
|
|
||||||
CLI tools implemented in Pkl have largely the same capabilities as normal Pkl evaluation (i.e. writing to standard output and files), but this may be extended using xref:language-reference:index.adoc#external-readers[external readers].
|
|
||||||
|
|
||||||
Commands are defined by extending the pkldoc:#[pkl:Command] module:
|
|
||||||
|
|
||||||
.bird-generator.pkl
|
|
||||||
[source,pkl]
|
|
||||||
----
|
|
||||||
extends "pkl:Command"
|
|
||||||
|
|
||||||
options: Options
|
|
||||||
|
|
||||||
class Options {
|
|
||||||
/// Mapping of <bird>=<bird age> pairs defining the list of birds.
|
|
||||||
@Argument
|
|
||||||
birds: Mapping<String, Number>
|
|
||||||
|
|
||||||
/// Aggregation function to apply to all bird ages.
|
|
||||||
aggregate: *"sum" | "mean" | "count"
|
|
||||||
}
|
|
||||||
|
|
||||||
class Bird {
|
|
||||||
/// Name of the bird.
|
|
||||||
name: String
|
|
||||||
|
|
||||||
/// Age of the bird in years.
|
|
||||||
age: Number
|
|
||||||
}
|
|
||||||
|
|
||||||
birds: Listing<Bird> = new {
|
|
||||||
for (_name, _age in options.birds) {
|
|
||||||
new { name = _name; age = _age }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
result: Number =
|
|
||||||
if (options.aggregate == "sum")
|
|
||||||
birds.toList().fold(0.0, (result, bird) -> result + bird.age)
|
|
||||||
else if (options.aggregate == "mean")
|
|
||||||
birds.toList().fold(0.0, (result, bird) -> result + bird.age) / birds.length
|
|
||||||
else
|
|
||||||
birds.length
|
|
||||||
----
|
|
||||||
|
|
||||||
Commands are executed using the `pkl run` CLI subcommand:
|
|
||||||
|
|
||||||
[source,bash]
|
|
||||||
----
|
|
||||||
$ pkl run bird-generator.pkl pigeon --aggregate=mean Pigeon=1 Hawk=8 Eagle=3
|
|
||||||
birds {
|
|
||||||
new {
|
|
||||||
name = "Pigeon"
|
|
||||||
age = 1
|
|
||||||
}
|
|
||||||
new {
|
|
||||||
name = "Hawk"
|
|
||||||
age = 8
|
|
||||||
}
|
|
||||||
new {
|
|
||||||
name = "Eagle"
|
|
||||||
age = 3
|
|
||||||
}
|
|
||||||
}
|
|
||||||
result = 4.0
|
|
||||||
----
|
|
||||||
|
|
||||||
Automatic CLI help is provided:
|
|
||||||
|
|
||||||
[source,bash]
|
|
||||||
----
|
|
||||||
$ pkl run test.pkl -h
|
|
||||||
Usage: test.pkl [<options>] [<birds>]... <command> [<args>]...
|
|
||||||
|
|
||||||
Options:
|
|
||||||
--aggregate=<count, mean, sum> Aggregation function to apply to all bird ages.
|
|
||||||
-h, --help Show this message and exit
|
|
||||||
|
|
||||||
Arguments:
|
|
||||||
<birds> Mapping of <bird>=<bird age> pairs defining the list of birds.
|
|
||||||
----
|
|
||||||
|
|
||||||
To learn more about this feature, consult xref:pkl-cli:index.adoc#cli-tools[the documentation] and https://github.com/apple/pkl-evolution/blob/main/spices/SPICE-0025-pkl-run-cli-framework.adoc[SPICE-0025].
|
|
||||||
|
|
||||||
== Noteworthy [small]#🎶#
|
|
||||||
|
|
||||||
=== Syntax Highlighting
|
|
||||||
|
|
||||||
The Pkl CLI displays Pkl code in several locations: stack frames within errors messages, <<power-assertions,power assertions>>, and in the xref:pkl-cli:index.adoc#repl[REPL].
|
|
||||||
This code is now syntax highlighted to improve readability (pr:https://github.com/apple/pkl/pull/1385[], pr:https://github.com/apple/pkl/pull/1409[]):
|
|
||||||
|
|
||||||
image::syntax-highlight-error.png[syntax highlighted output]
|
|
||||||
|
|
||||||
[[cli-dependency-notation]]
|
|
||||||
=== CLI Support for Dependency Notation
|
|
||||||
|
|
||||||
The Pkl CLI now supports specifying modules using xref:language-reference:index.adoc#project-dependencies[dependency notation] (pr:https://github.com/apple/pkl/pull/1434[], pr:https://github.com/apple/pkl/pull/1439[]).
|
|
||||||
This is especially helpful for <<cli-framework,CLI commands>> defined in Packages:
|
|
||||||
|
|
||||||
[source,bash]
|
|
||||||
----
|
|
||||||
$ pkl run @my-tool/cmd.pkl ...
|
|
||||||
----
|
|
||||||
|
|
||||||
This enhancement applies to the `pkl eval`, `pkl run`, `pkl test`, and `pkl analyze imports` commands.
|
|
||||||
It also applies to the `pkldoc`, `pkl-codegen-java`, and `pkl-codegen-kotlin` tools.
|
|
||||||
|
|
||||||
[NOTE]
|
|
||||||
Dependency notation only works for remote package dependencies. xref:language-reference:index.adoc#local-dependencies[Local dependencies] are not supported.
|
|
||||||
|
|
||||||
=== Property Converter Annotations
|
|
||||||
|
|
||||||
Pkl provides the pkldoc:BaseValueRenderers#converters[] mechanism for transforming values during rendering.
|
|
||||||
Converters are flexible, but their design makes some transformations awkward.
|
|
||||||
In particular, modifying property names during rendering required a lot of extra code.
|
|
||||||
|
|
||||||
The new pkldoc:ConvertProperty[] annotation adds a way to express parameterized per-property name and value transformations (pr:https://github.com/apple/pkl/pull/1333[]).
|
|
||||||
|
|
||||||
To learn more about this feature, consult https://github.com/apple/pkl-evolution/blob/main/spices/SPICE-0024-annotation-converters.adoc[SPICE-0024].
|
|
||||||
|
|
||||||
Additional new Pkl APIs for per-format property renaming will be added for many built-in renderers:
|
|
||||||
|
|
||||||
.fmt.pkl
|
|
||||||
[source,pkl]
|
|
||||||
----
|
|
||||||
import "pkl:json"
|
|
||||||
import "pkl:yaml"
|
|
||||||
|
|
||||||
@json.Property { name = "foo_bar" }
|
|
||||||
@yaml.Property { name = "foo-bar" }
|
|
||||||
fooBar: String = "hello world"
|
|
||||||
----
|
|
||||||
|
|
||||||
[source,terminaloutput]
|
|
||||||
----
|
|
||||||
$ pkl eval fmt.pkl -f json
|
|
||||||
{
|
|
||||||
"foo_bar": "hello world"
|
|
||||||
}
|
|
||||||
|
|
||||||
$ pkl eval fmt.pkl -f yaml
|
|
||||||
foo-bar: hello world
|
|
||||||
----
|
|
||||||
|
|
||||||
=== Java API changes
|
|
||||||
|
|
||||||
==== New classes
|
|
||||||
|
|
||||||
New classes are introduced to the Java API.
|
|
||||||
|
|
||||||
* `org.pkl.core.CommandSpec`
|
|
||||||
|
|
||||||
==== New methods
|
|
||||||
|
|
||||||
New methods are introduced to the Java API.
|
|
||||||
|
|
||||||
* `org.pkl.core.Evaluator.evaluateCommand`
|
|
||||||
* `org.pkl.core.EvaluatorBuilder.setPowerAssertionsEnabled`
|
|
||||||
* `org.pkl.core.EvaluatorBuilder.getPowerAssertionsEnabled`
|
|
||||||
* `org.pkl.core.SecurityManager.resolveSecurePath`
|
|
||||||
* `org.pkl.config.java.ConfigEvaluator.evaluateOutputValue`
|
|
||||||
* `org.pkl.coznfig.java.ConfigEvaluator.evaluateExpression`
|
|
||||||
|
|
||||||
=== Standard Library changes
|
|
||||||
|
|
||||||
New properties have been added to the standard library (pr:https://github.com/apple/pkl/pull/1396[]).
|
|
||||||
|
|
||||||
==== Additions to `pkl:base`
|
|
||||||
|
|
||||||
* pkldoc:List#isNotEmpty[]
|
|
||||||
* pkldoc:Map#isNotEmpty[]
|
|
||||||
* pkldoc:Set#isNotEmpty[]
|
|
||||||
* pkldoc:Listing#isNotEmpty[]
|
|
||||||
* pkldoc:Mapping#isNotEmpty[]
|
|
||||||
* pkldoc:String#isNotEmpty[]
|
|
||||||
* pkldoc:String#isNotBlank[]
|
|
||||||
* pkldoc:ConvertProperty[]
|
|
||||||
* pkldoc:BaseValueRenderer#convertPropertyTransformers[]
|
|
||||||
|
|
||||||
==== New module `pkl:Command`
|
|
||||||
|
|
||||||
The pkldoc:#[pkl:Command] standard library module is added.
|
|
||||||
|
|
||||||
==== Additions to `pkl:json`
|
|
||||||
|
|
||||||
* pkldoc:Property[pkl:json]
|
|
||||||
|
|
||||||
==== Additions to `pkl:jsonnet`
|
|
||||||
|
|
||||||
* pkldoc:Property[pkl:jsonnet]
|
|
||||||
|
|
||||||
==== Additions to `pkl:protobuf`
|
|
||||||
|
|
||||||
* pkldoc:Property[pkl:protobuf]
|
|
||||||
|
|
||||||
==== Additions to `pkl:xml`
|
|
||||||
|
|
||||||
* pkldoc:Property[pkl:xml]
|
|
||||||
|
|
||||||
==== Additions to `pkl:yaml`
|
|
||||||
|
|
||||||
* pkldoc:Property[pkl:yaml]
|
|
||||||
|
|
||||||
== Breaking Changes [small]#💔#
|
|
||||||
|
|
||||||
Things to watch out for when upgrading.
|
|
||||||
|
|
||||||
=== Removal of `@argfile` support
|
|
||||||
|
|
||||||
Prior versions of Pkl had an undocumented feature allowing inclusion of CLI arguments from files using `@path/to/file`.
|
|
||||||
In order to support <<cli-dependency-notation,dependency notation>> on the CLI, `@argfile` support has been removed from Pkl.
|
|
||||||
|
|
||||||
=== Removal of `Collection#transpose()`
|
|
||||||
|
|
||||||
Prior versions of Pkl defined a `transpose()` method on the `Collection` class.
|
|
||||||
This method was never implemented and threw an error when called.
|
|
||||||
As it was never functional, it has been removed entirely without a deprecation warning (pr:https://github.com/apple/pkl/pull/1437[]).
|
|
||||||
|
|
||||||
== Miscellaneous [small]#🐸#
|
|
||||||
|
|
||||||
* Improve formatting of imports to keep surrounding comments (pr:https://github.com/apple/pkl/pull/1424[]).
|
|
||||||
* Add support for evaluating module output and expressions to `ConfigEvaluator` (pr:https://github.com/apple/pkl/pull/1297[]).
|
|
||||||
* The `pkl format --write` command now exits successfully when formatting violations are found and updated (pr:https://github.com/apple/pkl/pull/1340[]).
|
|
||||||
* Add `pkl-bom` module to aid in aligning Pkl Java dependencies (pr:https://github.com/apple/pkl/pull/1390[]).
|
|
||||||
* Improve error message when writing `PklProject.deps.json` fails (pr:https://github.com/apple/pkl/pull/1405[]).
|
|
||||||
* Add information about pkldoc:Annotation[]s to the language reference (pr:https://github.com/apple/pkl/pull/1427[]).
|
|
||||||
* Improved usability for the `org.pkl.formatter.Formatter` Java API (pr:https://github.com/apple/pkl/pull/1428[]).
|
|
||||||
|
|
||||||
== Bugs fixed [small]#🐜#
|
|
||||||
|
|
||||||
The following bugs have been fixed.
|
|
||||||
|
|
||||||
* `Function.toString()` returns incorrect result (pr:https://github.com/apple/pkl/pull/1411[]).
|
|
||||||
* Failure when `--multiple-file-output-path` is a symlink (pr:https://github.com/apple/pkl/pull/1389[]).
|
|
||||||
* The `module` type in a non-final module has default value of type `Dynamic` (pr:https://github.com/apple/pkl/pull/1392[]).
|
|
||||||
* The `module` type is cached incorrectly in some cases (pr:https://github.com/apple/pkl/pull/1393[]).
|
|
||||||
* A possible race condition involving symlinks could bypass `--root-dir` during module and resource reading (pr:https://github.com/apple/pkl/pull/1426[]).
|
|
||||||
* `pkl format` produces internal stack traces when lexing fails (pr:https://github.com/apple/pkl/pull/1430[]).
|
|
||||||
* `super` access expressions are parsed incorrectly inside the spread operator (pr:https://github.com/apple/pkl/pull/1364[]).
|
|
||||||
* Modules and resources with `jar:file:` URIs were not properly sandboxed by `--root-dir` (pr:https://github.com/apple/pkl/pull/1442[]).
|
|
||||||
|
|
||||||
== Contributors [small]#🙏#
|
|
||||||
|
|
||||||
We would like to thank the contributors to this release (in alphabetical order):
|
|
||||||
|
|
||||||
* https://github.com/bioball[@bioball]
|
|
||||||
* https://github.com/eddie4941[@eddie4941]
|
|
||||||
* https://github.com/HT154[@HT154]
|
|
||||||
* https://github.com/stackoverflow[@stackoverflow]
|
|
||||||
* https://github.com/StefMa[@StefMa]
|
|
||||||
@@ -1,110 +1,6 @@
|
|||||||
= Changelog
|
= Changelog
|
||||||
include::ROOT:partial$component-attributes.adoc[]
|
include::ROOT:partial$component-attributes.adoc[]
|
||||||
|
|
||||||
[[release-0.31.1]]
|
|
||||||
== 0.31.1 (2026-03-26)
|
|
||||||
|
|
||||||
=== Breaking Changes [small]#💔#
|
|
||||||
|
|
||||||
* Allow nullable reads for custom/external resources (pr:https://github.com/apple/pkl/pull/1471[]).
|
|
||||||
|
|
||||||
This allows custom/external resources to produce `null` values for xref:language-reference:index.adoc#nullable-reads[nullable reads] (`read?`).
|
|
||||||
While this is a breaking change in behavior, it is currently not possible to exercise with versions of pkl-go or pkl-swift released prior to this change.
|
|
||||||
|
|
||||||
=== Fixes
|
|
||||||
|
|
||||||
* Fix typo in changelog and language reference (pr:https://github.com/apple/pkl/pull/1455[]).
|
|
||||||
* Fix bugs in `CommandSpecParser` (pr:https://github.com/apple/pkl/pull/1448[], pr:https://github.com/apple/pkl/pull/1449[]).
|
|
||||||
* Respect `--omit-project-settings` for all evaluator options (pr:https://github.com/apple/pkl/pull/1459[]).
|
|
||||||
* Fix SecurityManager check for HTTP(S) module URIs (pr:https://github.com/apple/pkl/pull/1463[]).
|
|
||||||
* Fix performance regression caused by activation of power assertion instrumentation during some union type checks (pr:https://github.com/apple/pkl/pull/1462[]).
|
|
||||||
* Fix module reflection when power assertion instrumentation is active (pr:https://github.com/apple/pkl/pull/1464[]).
|
|
||||||
* Prevent I/O when checking UNC paths against `--root-dir` (pr:https://github.com/apple/pkl/pull/1466[]).
|
|
||||||
* Prevent `--multiple-file-output-path` writes from following symlinks outside the target directory
|
|
||||||
(pr:https://github.com/apple/pkl/pull/1467[]).
|
|
||||||
|
|
||||||
=== Contributors ❤️
|
|
||||||
|
|
||||||
Thank you to all the contributors for this release!
|
|
||||||
|
|
||||||
* https://github.com/04cb[@04cb]
|
|
||||||
* https://github.com/HT154[@HT154]
|
|
||||||
* https://github.com/KushalP[@KushalP]
|
|
||||||
|
|
||||||
[[release-0.31.0]]
|
|
||||||
== 0.31.0 (2026-02-26)
|
|
||||||
|
|
||||||
xref:0.31.adoc[Release Notes]
|
|
||||||
|
|
||||||
[[release-0.30.2]]
|
|
||||||
|
|
||||||
== 0.30.2 (2025-12-15)
|
|
||||||
|
|
||||||
=== Fixes
|
|
||||||
|
|
||||||
* Fixes formatting of blank files (https://github.com/apple/pkl/pull/1351[#1351]).
|
|
||||||
* Fixes an issue where the `pkl format` CLI command adds an extra newline when writing formatted content to standard output (https://github.com/apple/pkl/issues/1346[#1346]).
|
|
||||||
* Make linux executables link to glibc 2.17 (https://github.com/apple/pkl/pull/1352[#1352]).
|
|
||||||
* Fix incorrect parsing of super expressions (https://github.com/apple/pkl/pull/1364[#1364]).
|
|
||||||
|
|
||||||
=== Contributors ❤️
|
|
||||||
|
|
||||||
Thank you to all the contributors for this release!
|
|
||||||
|
|
||||||
* https://github.com/bioball[@bioball]
|
|
||||||
* https://github.com/HT154[@HT154]
|
|
||||||
* https://github.com/stackoverflow[@stackoverflow]
|
|
||||||
|
|
||||||
[[release-0.30.1]]
|
|
||||||
== 0.30.1 (2025-12-03)
|
|
||||||
|
|
||||||
=== Fixes
|
|
||||||
|
|
||||||
* Fixes formatting of `Map` constructors with line comments (https://github.com/apple/pkl/pull/1312[#1312]).
|
|
||||||
* Fixes a crash when parsing empty parenthesized types (https://github.com/apple/pkl/pull/1323[#1323]).
|
|
||||||
* Fixes a parser issue allowing too many newlines between tokens (https://github.com/apple/pkl/pull/1328[#1328]).
|
|
||||||
* Fixes parsing of URIs with schemes containing `+`, `-`, or `.` (https://github.com/apple/pkl/pull/1335[#1335]).
|
|
||||||
* Fixes a crash when creating very large `List` instances (https://github.com/apple/pkl/pull/1337[#1337]).
|
|
||||||
|
|
||||||
=== Contributors ❤️
|
|
||||||
|
|
||||||
Thank you to all the contributors for this release!
|
|
||||||
|
|
||||||
* https://github.com/bioball[@bioball]
|
|
||||||
* https://github.com/HT154[@HT154]
|
|
||||||
* https://github.com/spyoungtech[@spyoungtech]
|
|
||||||
* https://github.com/stackoverflow[@stackoverflow]
|
|
||||||
|
|
||||||
[[release-0.30.0]]
|
|
||||||
== 0.30.0 (2025-10-30)
|
|
||||||
|
|
||||||
xref:0.30.adoc[Release notes]
|
|
||||||
|
|
||||||
[[release-0.29.1]]
|
|
||||||
== 0.29.1 (2025-08-27)
|
|
||||||
|
|
||||||
=== Fixes
|
|
||||||
|
|
||||||
* Fixes an issue where autocompletion in Bash and ZSH do noes not suggest filenames (https://github.com/apple/pkl/pull/1161[#1161]).
|
|
||||||
* Fixes an issue where `pkldoc` throws a runtime error about failing to load class path resources (https://github.com/apple/pkl/issues/1174[#1174]).
|
|
||||||
* Fixes an issue where `pkldoc` always runs with `testMode` set to true.
|
|
||||||
* Fixes an issue where evaluating a module that ends with an unmatched backtick throws `ArrayIndexOutOfBoundsException` (https://github.com/apple/pkl/issues/1182[#1182]).
|
|
||||||
* Fixes the formatting of YAML strings when emitting backslash characters within quoted strings (https://github.com/apple/pkl/pull/1165[#1165]).
|
|
||||||
* Fixes an issue where `local` members inside `Mapping` objects are incorrectly encoded into binary format (https://github.com/apple/pkl/issues/1151[#1151]).
|
|
||||||
|
|
||||||
=== Contributors ❤️
|
|
||||||
|
|
||||||
Thank you to all the contributors for this release!
|
|
||||||
|
|
||||||
* https://github.com/bioball[@bioball]
|
|
||||||
* https://github.com/gordonbondon[@gordonbondon]
|
|
||||||
* https://github.com/HT154[@HT154]
|
|
||||||
|
|
||||||
[[release-0.29.0]]
|
|
||||||
== 0.29.0 (2025-07-24)
|
|
||||||
|
|
||||||
xref:0.29.adoc[Release notes]
|
|
||||||
|
|
||||||
[[release-0.28.2]]
|
[[release-0.28.2]]
|
||||||
== 0.28.2 (2025-04-17)
|
== 0.28.2 (2025-04-17)
|
||||||
|
|
||||||
|
|||||||
@@ -2,9 +2,6 @@
|
|||||||
|
|
||||||
The Pkl team aims to release a new version of Pkl in February, June, and October of each year.
|
The Pkl team aims to release a new version of Pkl in February, June, and October of each year.
|
||||||
|
|
||||||
* xref:0.31.adoc[0.31 Release Notes]
|
|
||||||
* xref:0.30.adoc[0.30 Release Notes]
|
|
||||||
* xref:0.29.adoc[0.29 Release Notes]
|
|
||||||
* xref:0.28.adoc[0.28 Release Notes]
|
* xref:0.28.adoc[0.28 Release Notes]
|
||||||
* xref:0.27.adoc[0.27 Release Notes]
|
* xref:0.27.adoc[0.27 Release Notes]
|
||||||
* xref:0.26.adoc[0.26 Release Notes]
|
* xref:0.26.adoc[0.26 Release Notes]
|
||||||
|
|||||||
@@ -1,12 +0,0 @@
|
|||||||
include::ROOT:partial$component-attributes.adoc[]
|
|
||||||
|
|
||||||
Pkl {version} was released on {release-date}. +
|
|
||||||
[.small]#The latest bugfix release is {version-minor}. (xref:changelog.adoc[All Versions])#
|
|
||||||
|
|
||||||
The next release ({version-next}) is scheduled for {version-next-date}.
|
|
||||||
To see what's coming in the future, follow the {uri-pkl-roadmap}[Pkl Roadmap].
|
|
||||||
|
|
||||||
Please send feedback and questions to https://github.com/apple/pkl/discussions[GitHub Discussions], or submit an issue on https://github.com/apple/pkl/issues/new[GitHub]. +
|
|
||||||
|
|
||||||
[small]#Pkl is hosted on https://github.com/apple/pkl[GitHub].
|
|
||||||
To get started, follow xref:pkl-cli:index.adoc#installation[Installation].#
|
|
||||||
@@ -2,10 +2,20 @@
|
|||||||
:version: XXX (e.g., 0.9)
|
:version: XXX (e.g., 0.9)
|
||||||
:version-minor: XXX (e.g., 0.9.0)
|
:version-minor: XXX (e.g., 0.9.0)
|
||||||
:release-date: XXX (e.g., July 11, 2018)
|
:release-date: XXX (e.g., July 11, 2018)
|
||||||
:version-next: XXX (e.g., 0.10)
|
|
||||||
:version-next-date: XXX (e.g., July 2018)
|
|
||||||
|
|
||||||
include::partial$intro.adoc[]
|
include::ROOT:partial$component-attributes.adoc[]
|
||||||
|
|
||||||
|
Pkl {version} was released on {release-date}. +
|
||||||
|
[.small]#The latest bugfix release is {version-minor}. (xref:changelog.adoc[All Versions])#
|
||||||
|
|
||||||
|
XXX
|
||||||
|
|
||||||
|
The next release (XXX) is scheduled for XXX (e.g., August 2, 2021).
|
||||||
|
|
||||||
|
Please send feedback and questions to https://github.com/apple/pkl/discussions[GitHub Discussions], or submit an issue on https://github.com/apple/pkl/issues/new[GitHub]. +
|
||||||
|
|
||||||
|
[small]#Pkl is hosted on https://github.com/apple/pkl[GitHub].
|
||||||
|
To get started, follow xref:pkl-cli:index.adoc#installation[Installation].#
|
||||||
|
|
||||||
== Highlights [small]#💖#
|
== Highlights [small]#💖#
|
||||||
|
|
||||||
|
|||||||
@@ -98,7 +98,7 @@ A module that doesn't add new properties shouldn't use the `extends` clause.
|
|||||||
==== Imports
|
==== Imports
|
||||||
|
|
||||||
Sort imports sections using https://en.wikipedia.org/wiki/Natural_sort_order[natural sorting] by their module URI.
|
Sort imports sections using https://en.wikipedia.org/wiki/Natural_sort_order[natural sorting] by their module URI.
|
||||||
Relative path and package imports should be in their own section, separated by a newline.
|
Relative path imports should be in their own section, separated by a newline.
|
||||||
There should be no unused imports.
|
There should be no unused imports.
|
||||||
|
|
||||||
[source%parsed,{pkl}]
|
[source%parsed,{pkl}]
|
||||||
@@ -106,8 +106,6 @@ There should be no unused imports.
|
|||||||
import "modulepath:/foo.pkl"
|
import "modulepath:/foo.pkl"
|
||||||
import "package://example.com/mypackage@1.0.0#/foo.pkl"
|
import "package://example.com/mypackage@1.0.0#/foo.pkl"
|
||||||
|
|
||||||
import "@mypackage/baz.pkl"
|
|
||||||
|
|
||||||
import ".../my/file/bar2.pkl"
|
import ".../my/file/bar2.pkl"
|
||||||
import ".../my/file/bar11.pkl"
|
import ".../my/file/bar11.pkl"
|
||||||
----
|
----
|
||||||
@@ -268,6 +266,7 @@ Use line comments or block comments to convey implementation concerns to authors
|
|||||||
|
|
||||||
Doc comments should start with a one sentence summary paragraph, followed by additional paragraphs if necessary.
|
Doc comments should start with a one sentence summary paragraph, followed by additional paragraphs if necessary.
|
||||||
Start new sentences on their own line.
|
Start new sentences on their own line.
|
||||||
|
Add a single space after `///`.
|
||||||
|
|
||||||
[source%parsed,{pkl}]
|
[source%parsed,{pkl}]
|
||||||
----
|
----
|
||||||
@@ -336,6 +335,7 @@ class ZebraParty {}
|
|||||||
[source%tested,{pkl}]
|
[source%tested,{pkl}]
|
||||||
----
|
----
|
||||||
class zebraParty {}
|
class zebraParty {}
|
||||||
|
class zebraparty {}
|
||||||
----
|
----
|
||||||
|
|
||||||
== Strings
|
== Strings
|
||||||
@@ -472,6 +472,13 @@ else
|
|||||||
if (bar) bar else foo
|
if (bar) bar else foo
|
||||||
----
|
----
|
||||||
|
|
||||||
|
.good.pkl
|
||||||
|
[source%parsed,{pkl-expr}]
|
||||||
|
----
|
||||||
|
if (bar) bar
|
||||||
|
else foo
|
||||||
|
----
|
||||||
|
|
||||||
.good.pkl
|
.good.pkl
|
||||||
[source%parsed,{pkl-expr}]
|
[source%parsed,{pkl-expr}]
|
||||||
----
|
----
|
||||||
@@ -617,15 +624,19 @@ res2 = 1 + 2 // <3>
|
|||||||
res3 = res2 as Number // <3>
|
res3 = res2 as Number // <3>
|
||||||
res4 = List(1, 2, 3) // <4>
|
res4 = List(1, 2, 3) // <4>
|
||||||
res5 = if (foo) bar else baz // <5>
|
res5 = if (foo) bar else baz // <5>
|
||||||
|
|
||||||
typealias Foo = "foo" | "bar" | "baz" // <6>
|
|
||||||
----
|
----
|
||||||
<1> After keywords
|
<1> After keywords
|
||||||
<2> Before and after braces
|
<2> Before and after braces
|
||||||
<3> Around infix operators
|
<3> Around infix operators
|
||||||
<4> After a comma
|
<4> After a comma
|
||||||
<5> Before opening parentheses in control operators (`if`, `for`, `when` are control operators)
|
<5> Before opening parentheses in control operators (`if`, `for`, `when` are control operators)
|
||||||
<6> Before and after the pipe symbol (`|`)
|
|
||||||
|
NOTE: No spaces are added around the pipe symbol (`|`) in union types.
|
||||||
|
|
||||||
|
[source%tested,{pkl}]
|
||||||
|
----
|
||||||
|
typealias Foo = "foo"|"bar"|"baz"
|
||||||
|
----
|
||||||
|
|
||||||
=== Object bodies
|
=== Object bodies
|
||||||
|
|
||||||
|
|||||||
@@ -41,9 +41,6 @@
|
|||||||
* xref:ROOT:evolution-and-roadmap.adoc[Evolution and Roadmap]
|
* xref:ROOT:evolution-and-roadmap.adoc[Evolution and Roadmap]
|
||||||
|
|
||||||
* xref:release-notes:index.adoc[Release Notes]
|
* xref:release-notes:index.adoc[Release Notes]
|
||||||
** xref:release-notes:0.31.adoc[0.31 Release Notes]
|
|
||||||
** xref:release-notes:0.30.adoc[0.30 Release Notes]
|
|
||||||
** xref:release-notes:0.29.adoc[0.29 Release Notes]
|
|
||||||
** xref:release-notes:0.28.adoc[0.28 Release Notes]
|
** xref:release-notes:0.28.adoc[0.28 Release Notes]
|
||||||
** xref:release-notes:0.27.adoc[0.27 Release Notes]
|
** xref:release-notes:0.27.adoc[0.27 Release Notes]
|
||||||
** xref:release-notes:0.26.adoc[0.26 Release Notes]
|
** xref:release-notes:0.26.adoc[0.26 Release Notes]
|
||||||
|
|||||||
@@ -15,16 +15,15 @@ import org.pkl.commons.test.FileTestUtils.rootProjectDir
|
|||||||
import org.pkl.core.Loggers
|
import org.pkl.core.Loggers
|
||||||
import org.pkl.core.SecurityManagers
|
import org.pkl.core.SecurityManagers
|
||||||
import org.pkl.core.StackFrameTransformers
|
import org.pkl.core.StackFrameTransformers
|
||||||
import org.pkl.core.evaluatorSettings.TraceMode
|
|
||||||
import org.pkl.core.module.ModuleKeyFactories
|
import org.pkl.core.module.ModuleKeyFactories
|
||||||
import org.pkl.core.repl.ReplRequest
|
import org.pkl.core.repl.ReplRequest
|
||||||
import org.pkl.core.repl.ReplResponse
|
import org.pkl.core.repl.ReplResponse
|
||||||
import org.pkl.core.repl.ReplServer
|
import org.pkl.core.repl.ReplServer
|
||||||
import org.pkl.core.util.IoUtils
|
import org.pkl.core.util.IoUtils
|
||||||
import org.pkl.core.http.HttpClient
|
import org.pkl.core.http.HttpClient
|
||||||
import org.pkl.parser.Parser
|
import org.pkl.core.parser.Parser
|
||||||
import org.pkl.parser.ParserError
|
import org.pkl.core.parser.ParserError
|
||||||
import org.pkl.parser.syntax.ClassProperty
|
import org.pkl.core.parser.syntax.ClassProperty
|
||||||
import org.pkl.core.resource.ResourceReaders
|
import org.pkl.core.resource.ResourceReaders
|
||||||
import java.nio.file.Files
|
import java.nio.file.Files
|
||||||
import kotlin.io.path.isDirectory
|
import kotlin.io.path.isDirectory
|
||||||
@@ -98,7 +97,6 @@ class DocSnippetTestsEngine : HierarchicalTestEngine<DocSnippetTestsEngine.Execu
|
|||||||
IoUtils.getCurrentWorkingDir(),
|
IoUtils.getCurrentWorkingDir(),
|
||||||
StackFrameTransformers.defaultTransformer,
|
StackFrameTransformers.defaultTransformer,
|
||||||
false,
|
false,
|
||||||
TraceMode.COMPACT,
|
|
||||||
)
|
)
|
||||||
return ExecutionContext(replServer)
|
return ExecutionContext(replServer)
|
||||||
}
|
}
|
||||||
@@ -304,7 +302,7 @@ class DocSnippetTestsEngine : HierarchicalTestEngine<DocSnippetTestsEngine.Execu
|
|||||||
|
|
||||||
override fun getType() = Type.TEST
|
override fun getType() = Type.TEST
|
||||||
|
|
||||||
private val parsed: org.pkl.parser.syntax.Node by lazy {
|
private val parsed: org.pkl.core.parser.syntax.Node by lazy {
|
||||||
when (language) {
|
when (language) {
|
||||||
"pkl" -> Parser().parseModule(code)
|
"pkl" -> Parser().parseModule(code)
|
||||||
"pkl-expr" -> Parser().parseExpressionInput(code)
|
"pkl-expr" -> Parser().parseExpressionInput(code)
|
||||||
|
|||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
# suppress inspection "UnusedProperty" for whole file
|
# suppress inspection "UnusedProperty" for whole file
|
||||||
|
|
||||||
group=org.pkl-lang
|
group=org.pkl-lang
|
||||||
version=0.31.1
|
version=0.28.2
|
||||||
|
|
||||||
# google-java-format requires jdk.compiler exports
|
# google-java-format requires jdk.compiler exports
|
||||||
org.gradle.jvmargs= \
|
org.gradle.jvmargs= \
|
||||||
|
|||||||
+15
-28
@@ -1,4 +1,5 @@
|
|||||||
[versions] # ordered alphabetically
|
[versions] # ordered alphabetically
|
||||||
|
antlr = "4.+"
|
||||||
assertj = "3.+"
|
assertj = "3.+"
|
||||||
checksumPlugin = "1.4.0"
|
checksumPlugin = "1.4.0"
|
||||||
clikt = "5.+"
|
clikt = "5.+"
|
||||||
@@ -8,23 +9,15 @@ geantyref = "1.+"
|
|||||||
googleJavaFormat = "1.25.2"
|
googleJavaFormat = "1.25.2"
|
||||||
# must not use `+` because used in download URL
|
# must not use `+` because used in download URL
|
||||||
# 23.1.x requires JDK 20+
|
# 23.1.x requires JDK 20+
|
||||||
graalVm = "25.0.0"
|
graalVm = "24.1.2"
|
||||||
#noinspection UnusedVersionCatalogEntry
|
graalVmJdkVersion = "21.0.5"
|
||||||
graalVmJdkVersion = "25.0.0"
|
|
||||||
# slightly hacky but convenient place so we remember to update the checksum
|
# slightly hacky but convenient place so we remember to update the checksum
|
||||||
#noinspection UnusedVersionCatalogEntry
|
graalVmSha256-macos-x64 = "2d9b09e28bc1bb6ff219bf62eacc4626c7740b4f1829ede9ea4450f33e9c0826"
|
||||||
graalVmSha256-macos-x64 = "04278cf867d040e29dc71dd7727793f0ea67eb72adce8a35d04b87b57906778d"
|
graalVmSha256-macos-aarch64 = "cb68cb2c796f42f37a56fcd1385d8b86cca12e0b46c5618a5ed3ec7dd2260f6f"
|
||||||
#noinspection UnusedVersionCatalogEntry
|
graalVmSha256-linux-x64 = "c1960d4f9d278458bde1cd15115ac2f0b3240cb427d51cfeceb79dab91a7f5c9"
|
||||||
graalVmSha256-macos-aarch64 = "c446d5aaeda98660a4c14049d299e9fba72105a007df89f19d27cf3979d37158"
|
graalVmSha256-linux-aarch64 = "3ad68fbb2d13da528dfa0aea9e9345383245ec9c31094dce3905cefba9aac01e"
|
||||||
#noinspection UnusedVersionCatalogEntry
|
graalVmSha256-windows-x64 = "d5784cbdc87f84b5cbd6c9d09c6f1d4611954f139fcfc795005c58dffd7f6b41"
|
||||||
graalVmSha256-linux-x64 = "1862f2ce97387a303cae4c512cb21baf36fafd2457c3cbbc10d87db94b89d3dd"
|
|
||||||
#noinspection UnusedVersionCatalogEntry
|
|
||||||
graalVmSha256-linux-aarch64 = "6c3c8b7617006c5d174d9cf7d357ccfb4bae77a4df1294ee28084fcb6eea8921"
|
|
||||||
#noinspection UnusedVersionCatalogEntry
|
|
||||||
graalVmSha256-windows-x64 = "33ef1d186b5c1e95465fcc97e637bc26e72d5f2250a8615b9c5d667ed5c17fd0"
|
|
||||||
ideaExtPlugin = "1.1.9"
|
ideaExtPlugin = "1.1.9"
|
||||||
intellijPlugin = "2.10.1"
|
|
||||||
intellij = "2025.2.3"
|
|
||||||
javaPoet = "0.+"
|
javaPoet = "0.+"
|
||||||
javaxInject = "1"
|
javaxInject = "1"
|
||||||
jansi = "2.+"
|
jansi = "2.+"
|
||||||
@@ -36,13 +29,11 @@ jmh = "1.+"
|
|||||||
jmhPlugin = "0.7.2"
|
jmhPlugin = "0.7.2"
|
||||||
jsr305 = "3.+"
|
jsr305 = "3.+"
|
||||||
junit = "5.+"
|
junit = "5.+"
|
||||||
junitPlatform = "1.+"
|
kotlin = "2.0.21"
|
||||||
kotlin = "2.2.20"
|
|
||||||
# 1.7+ generates much more verbose code
|
# 1.7+ generates much more verbose code
|
||||||
kotlinPoet = "1.6.+"
|
kotlinPoet = "1.6.+"
|
||||||
kotlinxHtml = "0.11.0"
|
kotlinxHtml = "0.11.0"
|
||||||
kotlinxSerialization = "1.8.0"
|
kotlinxSerialization = "1.8.0"
|
||||||
kotlinxCoroutines = "1.+"
|
|
||||||
ktfmt = "0.53"
|
ktfmt = "0.53"
|
||||||
# replaces nuValidator's log4j dependency
|
# replaces nuValidator's log4j dependency
|
||||||
# something related to log4j-1.2-api is apparently broken in 2.17.2
|
# something related to log4j-1.2-api is apparently broken in 2.17.2
|
||||||
@@ -51,13 +42,15 @@ msgpack = "0.9.8"
|
|||||||
nexusPublishPlugin = "2.0.0"
|
nexusPublishPlugin = "2.0.0"
|
||||||
nuValidator = "20.+"
|
nuValidator = "20.+"
|
||||||
paguro = "3.+"
|
paguro = "3.+"
|
||||||
shadowPlugin = "9.+"
|
shadowPlugin = "8.1.1"
|
||||||
slf4j = "1.+"
|
slf4j = "1.+"
|
||||||
snakeYaml = "2.+"
|
snakeYaml = "2.+"
|
||||||
spotlessPlugin = "6.25.0"
|
spotlessPlugin = "6.25.0"
|
||||||
wiremock = "3.+"
|
wiremock = "3.+"
|
||||||
|
|
||||||
[libraries] # ordered alphabetically
|
[libraries] # ordered alphabetically
|
||||||
|
antlr = { group = "com.tunnelvisionlabs", name = "antlr4", version.ref = "antlr" }
|
||||||
|
antlrRuntime = { group = "com.tunnelvisionlabs", name = "antlr4-runtime", version.ref = "antlr" }
|
||||||
assertj = { group = "org.assertj", name = "assertj-core", version.ref = "assertj" }
|
assertj = { group = "org.assertj", name = "assertj-core", version.ref = "assertj" }
|
||||||
clikt = { group = "com.github.ajalt.clikt", name = "clikt", version.ref = "clikt" }
|
clikt = { group = "com.github.ajalt.clikt", name = "clikt", version.ref = "clikt" }
|
||||||
cliktMarkdown = { group = "com.github.ajalt.clikt", name = "clikt-markdown", version.ref = "clikt" }
|
cliktMarkdown = { group = "com.github.ajalt.clikt", name = "clikt-markdown", version.ref = "clikt" }
|
||||||
@@ -68,8 +61,6 @@ geantyref = { group = "io.leangen.geantyref", name = "geantyref", version.ref =
|
|||||||
graalCompiler = { group = "org.graalvm.compiler", name = "compiler", version.ref = "graalVm" }
|
graalCompiler = { group = "org.graalvm.compiler", name = "compiler", version.ref = "graalVm" }
|
||||||
graalSdk = { group = "org.graalvm.sdk", name = "graal-sdk", version.ref = "graalVm" }
|
graalSdk = { group = "org.graalvm.sdk", name = "graal-sdk", version.ref = "graalVm" }
|
||||||
graalJs = { group = "org.graalvm.js", name = "js", version.ref = "graalVm" }
|
graalJs = { group = "org.graalvm.js", name = "js", version.ref = "graalVm" }
|
||||||
#noinspection UnusedVersionCatalogEntry
|
|
||||||
intellij = { group = "com.jetbrains.intellij.idea", name = "ideaIC", version.ref = "intellij" }
|
|
||||||
javaPoet = { group = "com.palantir.javapoet", name = "javapoet", version.ref = "javaPoet" }
|
javaPoet = { group = "com.palantir.javapoet", name = "javapoet", version.ref = "javaPoet" }
|
||||||
javaxInject = { group = "javax.inject", name = "javax.inject", version.ref = "javaxInject" }
|
javaxInject = { group = "javax.inject", name = "javax.inject", version.ref = "javaxInject" }
|
||||||
jansi = { group = "org.fusesource.jansi", name = "jansi", version.ref = "jansi" }
|
jansi = { group = "org.fusesource.jansi", name = "jansi", version.ref = "jansi" }
|
||||||
@@ -81,7 +72,7 @@ jsr305 = { group = "com.google.code.findbugs", name = "jsr305", version.ref = "j
|
|||||||
junitApi = { group = "org.junit.jupiter", name = "junit-jupiter-api", version.ref = "junit" }
|
junitApi = { group = "org.junit.jupiter", name = "junit-jupiter-api", version.ref = "junit" }
|
||||||
junitEngine = { group = "org.junit.jupiter", name = "junit-jupiter-engine", version.ref = "junit" }
|
junitEngine = { group = "org.junit.jupiter", name = "junit-jupiter-engine", version.ref = "junit" }
|
||||||
junitParams = { group = "org.junit.jupiter", name = "junit-jupiter-params", version.ref = "junit" }
|
junitParams = { group = "org.junit.jupiter", name = "junit-jupiter-params", version.ref = "junit" }
|
||||||
junitLauncher = { group = "org.junit.platform", name = "junit-platform-launcher", version.ref = "junitPlatform" }
|
kotlinCompilerEmbeddable = { group = "org.jetbrains.kotlin", name = "kotlin-compiler-embeddable", version.ref = "kotlin" }
|
||||||
kotlinPlugin = { group = "org.jetbrains.kotlin", name = "kotlin-gradle-plugin", version.ref = "kotlin" }
|
kotlinPlugin = { group = "org.jetbrains.kotlin", name = "kotlin-gradle-plugin", version.ref = "kotlin" }
|
||||||
kotlinPoet = { group = "com.squareup", name = "kotlinpoet", version.ref = "kotlinPoet" }
|
kotlinPoet = { group = "com.squareup", name = "kotlinpoet", version.ref = "kotlinPoet" }
|
||||||
kotlinReflect = { group = "org.jetbrains.kotlin", name = "kotlin-reflect", version.ref = "kotlin" }
|
kotlinReflect = { group = "org.jetbrains.kotlin", name = "kotlin-reflect", version.ref = "kotlin" }
|
||||||
@@ -89,16 +80,13 @@ kotlinScripting = { group = "org.jetbrains.kotlin", name = "kotlin-scripting-jsr
|
|||||||
kotlinStdLib = { group = "org.jetbrains.kotlin", name = "kotlin-stdlib-jdk8", version.ref = "kotlin" }
|
kotlinStdLib = { group = "org.jetbrains.kotlin", name = "kotlin-stdlib-jdk8", version.ref = "kotlin" }
|
||||||
kotlinxHtml = { group = "org.jetbrains.kotlinx", name = "kotlinx-html-jvm", version.ref = "kotlinxHtml" }
|
kotlinxHtml = { group = "org.jetbrains.kotlinx", name = "kotlinx-html-jvm", version.ref = "kotlinxHtml" }
|
||||||
kotlinxSerializationJson = { group = "org.jetbrains.kotlinx", name = "kotlinx-serialization-json", version.ref = "kotlinxSerialization" }
|
kotlinxSerializationJson = { group = "org.jetbrains.kotlinx", name = "kotlinx-serialization-json", version.ref = "kotlinxSerialization" }
|
||||||
kotlinxCoroutinesCore = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-core", version.ref = "kotlinxCoroutines" }
|
|
||||||
#noinspection UnusedVersionCatalogEntry
|
|
||||||
log4j12Api = { group = "org.apache.logging.log4j", name = "log4j-1.2-api", version.ref = "log4j" }
|
log4j12Api = { group = "org.apache.logging.log4j", name = "log4j-1.2-api", version.ref = "log4j" }
|
||||||
msgpack = { group = "org.msgpack", name = "msgpack-core", version.ref = "msgpack" }
|
msgpack = { group = "org.msgpack", name = "msgpack-core", version.ref = "msgpack" }
|
||||||
#noinspection UnusedVersionCatalogEntry
|
|
||||||
nuValidator = { group = "nu.validator", name = "validator", version.ref = "nuValidator" }
|
nuValidator = { group = "nu.validator", name = "validator", version.ref = "nuValidator" }
|
||||||
# to be replaced with https://github.com/usethesource/capsule or https://github.com/lacuna/bifurcan
|
# to be replaced with https://github.com/usethesource/capsule or https://github.com/lacuna/bifurcan
|
||||||
paguro = { group = "org.organicdesign", name = "Paguro", version.ref = "paguro" }
|
paguro = { group = "org.organicdesign", name = "Paguro", version.ref = "paguro" }
|
||||||
pklConfigJavaAll025 = { group = "org.pkl-lang", name = "pkl-config-java-all", version = "0.25.0" }
|
pklConfigJavaAll025 = { group = "org.pkl-lang", name = "pkl-config-java-all", version = "0.25.0" }
|
||||||
shadowPlugin = { group = "com.gradleup.shadow", name = "com.gradleup.shadow.gradle.plugin", version.ref = "shadowPlugin" }
|
shadowPlugin = { group = "com.github.johnrengelman", name = "shadow", version.ref = "shadowPlugin" }
|
||||||
slf4jApi = { group = "org.slf4j", name = "slf4j-api", version.ref = "slf4j" }
|
slf4jApi = { group = "org.slf4j", name = "slf4j-api", version.ref = "slf4j" }
|
||||||
slf4jSimple = { group = "org.slf4j", name = "slf4j-simple", version.ref = "slf4j" }
|
slf4jSimple = { group = "org.slf4j", name = "slf4j-simple", version.ref = "slf4j" }
|
||||||
snakeYaml = { group = "org.snakeyaml", name = "snakeyaml-engine", version.ref = "snakeYaml" }
|
snakeYaml = { group = "org.snakeyaml", name = "snakeyaml-engine", version.ref = "snakeYaml" }
|
||||||
@@ -116,5 +104,4 @@ ideaExt = { id = "org.jetbrains.gradle.plugin.idea-ext", version.ref = "ideaExtP
|
|||||||
jmh = { id = "me.champeau.jmh", version.ref = "jmhPlugin" }
|
jmh = { id = "me.champeau.jmh", version.ref = "jmhPlugin" }
|
||||||
kotlinxSerialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
|
kotlinxSerialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
|
||||||
nexusPublish = { id = "io.github.gradle-nexus.publish-plugin", version.ref = "nexusPublishPlugin" }
|
nexusPublish = { id = "io.github.gradle-nexus.publish-plugin", version.ref = "nexusPublishPlugin" }
|
||||||
shadow = { id = "com.gradleup.shadow", version.ref = "shadowPlugin" }
|
shadow = { id = "com.github.johnrengelman.shadow", version.ref = "shadowPlugin" }
|
||||||
intellij = { id = "org.jetbrains.intellij.platform", version.ref = "intellijPlugin" }
|
|
||||||
|
|||||||
Vendored
BIN
Binary file not shown.
+2
-2
@@ -1,7 +1,7 @@
|
|||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
distributionSha256Sum=a17ddd85a26b6a7f5ddb71ff8b05fc5104c0202c6e64782429790c933686c806
|
distributionSha256Sum=8d97a97984f6cbd2b85fe4c60a743440a347544bf18818048e611f5288d46c94
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-8.12.1-bin.zip
|
||||||
networkTimeout=10000
|
networkTimeout=10000
|
||||||
validateDistributionUrl=true
|
validateDistributionUrl=true
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
|
|||||||
@@ -114,7 +114,7 @@ case "$( uname )" in #(
|
|||||||
NONSTOP* ) nonstop=true ;;
|
NONSTOP* ) nonstop=true ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
CLASSPATH="\\\"\\\""
|
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
||||||
|
|
||||||
|
|
||||||
# Determine the Java command to use to start the JVM.
|
# Determine the Java command to use to start the JVM.
|
||||||
@@ -205,7 +205,7 @@ fi
|
|||||||
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
||||||
|
|
||||||
# Collect all arguments for the java command:
|
# Collect all arguments for the java command:
|
||||||
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
|
# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
|
||||||
# and any embedded shellness will be escaped.
|
# and any embedded shellness will be escaped.
|
||||||
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
|
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
|
||||||
# treated as '${Hostname}' itself on the command line.
|
# treated as '${Hostname}' itself on the command line.
|
||||||
@@ -213,7 +213,7 @@ DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
|||||||
set -- \
|
set -- \
|
||||||
"-Dorg.gradle.appname=$APP_BASE_NAME" \
|
"-Dorg.gradle.appname=$APP_BASE_NAME" \
|
||||||
-classpath "$CLASSPATH" \
|
-classpath "$CLASSPATH" \
|
||||||
-jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \
|
org.gradle.wrapper.GradleWrapperMain \
|
||||||
"$@"
|
"$@"
|
||||||
|
|
||||||
# Stop when "xargs" is not available.
|
# Stop when "xargs" is not available.
|
||||||
|
|||||||
Vendored
+2
-2
@@ -70,11 +70,11 @@ goto fail
|
|||||||
:execute
|
:execute
|
||||||
@rem Setup the command line
|
@rem Setup the command line
|
||||||
|
|
||||||
set CLASSPATH=
|
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
||||||
|
|
||||||
|
|
||||||
@rem Execute Gradle
|
@rem Execute Gradle
|
||||||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %*
|
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
|
||||||
|
|
||||||
:end
|
:end
|
||||||
@rem End local scope for the variables with windows NT shell
|
@rem End local scope for the variables with windows NT shell
|
||||||
|
|||||||
+3
-3
@@ -2,15 +2,15 @@
|
|||||||
"catalogs": {},
|
"catalogs": {},
|
||||||
"aliases": {
|
"aliases": {
|
||||||
"pkl": {
|
"pkl": {
|
||||||
"script-ref": "org.pkl-lang:pkl-cli-java:0.31.1",
|
"script-ref": "org.pkl-lang:pkl-cli-java:0.28.2",
|
||||||
"java-agents": []
|
"java-agents": []
|
||||||
},
|
},
|
||||||
"pkl-codegen-java": {
|
"pkl-codegen-java": {
|
||||||
"script-ref": "org.pkl-lang:pkl-codegen-java:0.31.1",
|
"script-ref": "org.pkl-lang:pkl-codegen-java:0.28.2",
|
||||||
"java-agents": []
|
"java-agents": []
|
||||||
},
|
},
|
||||||
"pkl-codegen-kotlin": {
|
"pkl-codegen-kotlin": {
|
||||||
"script-ref": "org.pkl-lang:pkl-codegen-kotlin:0.31.1",
|
"script-ref": "org.pkl-lang:pkl-codegen-kotlin:0.28.2",
|
||||||
"java-agents": []
|
"java-agents": []
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,60 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright © 2024-2026 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.
|
|
||||||
*/
|
|
||||||
plugins {
|
|
||||||
pklAllProjects
|
|
||||||
`java-platform`
|
|
||||||
`maven-publish`
|
|
||||||
signing
|
|
||||||
}
|
|
||||||
|
|
||||||
description = "Pkl BOM that includes all modules"
|
|
||||||
|
|
||||||
dependencies {
|
|
||||||
constraints {
|
|
||||||
api(projects.pklCli)
|
|
||||||
api(projects.pklCodegenJava)
|
|
||||||
api(projects.pklCodegenKotlin)
|
|
||||||
// Use explicit coordinates for pkl-config-java to avoid ambiguity with fatJar publication
|
|
||||||
api("${project.group}:pkl-config-java:${project.version}")
|
|
||||||
api("${project.group}:pkl-config-java-all:${project.version}")
|
|
||||||
api(projects.pklConfigKotlin)
|
|
||||||
api(projects.pklCore)
|
|
||||||
api(projects.pklDoc)
|
|
||||||
api(projects.pklExecutor)
|
|
||||||
api(projects.pklFormatter)
|
|
||||||
api(projects.pklGradle)
|
|
||||||
api(projects.pklParser)
|
|
||||||
api(projects.pklTools)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
publishing {
|
|
||||||
publications {
|
|
||||||
create<MavenPublication>("library") {
|
|
||||||
from(components["javaPlatform"])
|
|
||||||
pom {
|
|
||||||
url.set("https://github.com/apple/pkl/tree/main/pkl-bom")
|
|
||||||
description.set("Bill of Materials for managing Pkl dependency versions")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
configurePklPomMetadata()
|
|
||||||
|
|
||||||
configurePomValidation()
|
|
||||||
|
|
||||||
configurePklSigning()
|
|
||||||
+104
-105
@@ -2,64 +2,55 @@
|
|||||||
# Manual edits can break the build and are not advised.
|
# Manual edits can break the build and are not advised.
|
||||||
# This file is expected to be part of source control.
|
# This file is expected to be part of source control.
|
||||||
com.ethlo.time:itu:1.10.3=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
com.ethlo.time:itu:1.10.3=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
com.fasterxml.jackson.core:jackson-annotations:2.19.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
com.fasterxml.jackson.core:jackson-annotations:2.18.2=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
com.fasterxml.jackson.core:jackson-core:2.19.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
com.fasterxml.jackson.core:jackson-core:2.18.2=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
com.fasterxml.jackson.core:jackson-databind:2.19.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
com.fasterxml.jackson.core:jackson-databind:2.18.2=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.19.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.18.2=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.19.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.18.2=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
com.fasterxml.jackson:jackson-bom:2.19.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
com.fasterxml.jackson:jackson-bom:2.18.2=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
com.github.ajalt.clikt:clikt-core-jvm:5.0.3=compileClasspath,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
|
com.github.ajalt.clikt:clikt-core-jvm:5.0.3=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
|
||||||
com.github.ajalt.clikt:clikt-core:5.0.3=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
com.github.ajalt.clikt:clikt-core:5.0.3=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
com.github.ajalt.clikt:clikt-jvm:5.0.3=compileClasspath,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
|
com.github.ajalt.clikt:clikt-jvm:5.0.3=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
|
||||||
com.github.ajalt.clikt:clikt-markdown-jvm:5.0.3=nativeImageClasspath,runtimeClasspath,testRuntimeClasspath
|
com.github.ajalt.clikt:clikt-markdown-jvm:5.0.3=runtimeClasspath,testRuntimeClasspath
|
||||||
com.github.ajalt.clikt:clikt-markdown:5.0.3=nativeImageClasspath,runtimeClasspath,testRuntimeClasspath
|
com.github.ajalt.clikt:clikt-markdown:5.0.3=runtimeClasspath,testRuntimeClasspath
|
||||||
com.github.ajalt.clikt:clikt:5.0.3=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
com.github.ajalt.clikt:clikt:5.0.3=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
com.github.ajalt.colormath:colormath-jvm:3.6.0=compileClasspath,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
|
com.github.ajalt.colormath:colormath-jvm:3.6.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
|
||||||
com.github.ajalt.colormath:colormath:3.6.0=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
com.github.ajalt.colormath:colormath:3.6.0=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
com.github.ajalt.mordant:mordant-core-jvm:3.0.1=compileClasspath,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
|
com.github.ajalt.mordant:mordant-core-jvm:3.0.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
|
||||||
com.github.ajalt.mordant:mordant-core:3.0.1=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
com.github.ajalt.mordant:mordant-core:3.0.1=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
com.github.ajalt.mordant:mordant-jvm-ffm-jvm:3.0.1=runtimeClasspath,testRuntimeClasspath
|
com.github.ajalt.mordant:mordant-jvm-ffm-jvm:3.0.1=runtimeClasspath,testRuntimeClasspath
|
||||||
com.github.ajalt.mordant:mordant-jvm-ffm:3.0.1=runtimeClasspath,testRuntimeClasspath
|
com.github.ajalt.mordant:mordant-jvm-ffm:3.0.1=runtimeClasspath,testRuntimeClasspath
|
||||||
com.github.ajalt.mordant:mordant-jvm-graal-ffi-jvm:3.0.1=nativeImageClasspath,runtimeClasspath,testRuntimeClasspath
|
com.github.ajalt.mordant:mordant-jvm-graal-ffi-jvm:3.0.1=runtimeClasspath,testRuntimeClasspath
|
||||||
com.github.ajalt.mordant:mordant-jvm-graal-ffi:3.0.1=nativeImageClasspath,runtimeClasspath,testRuntimeClasspath
|
com.github.ajalt.mordant:mordant-jvm-graal-ffi:3.0.1=runtimeClasspath,testRuntimeClasspath
|
||||||
com.github.ajalt.mordant:mordant-jvm-jna-jvm:3.0.1=runtimeClasspath,testRuntimeClasspath
|
com.github.ajalt.mordant:mordant-jvm-jna-jvm:3.0.1=runtimeClasspath,testRuntimeClasspath
|
||||||
com.github.ajalt.mordant:mordant-jvm-jna:3.0.1=runtimeClasspath,testRuntimeClasspath
|
com.github.ajalt.mordant:mordant-jvm-jna:3.0.1=runtimeClasspath,testRuntimeClasspath
|
||||||
com.github.ajalt.mordant:mordant-jvm:3.0.1=compileClasspath,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
|
com.github.ajalt.mordant:mordant-jvm:3.0.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
|
||||||
com.github.ajalt.mordant:mordant-markdown-jvm:3.0.1=nativeImageClasspath,runtimeClasspath,testRuntimeClasspath
|
com.github.ajalt.mordant:mordant-markdown-jvm:3.0.1=runtimeClasspath,testRuntimeClasspath
|
||||||
com.github.ajalt.mordant:mordant-markdown:3.0.1=nativeImageClasspath,runtimeClasspath,testRuntimeClasspath
|
com.github.ajalt.mordant:mordant-markdown:3.0.1=runtimeClasspath,testRuntimeClasspath
|
||||||
com.github.ajalt.mordant:mordant:3.0.1=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
com.github.ajalt.mordant:mordant:3.0.1=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
com.github.ben-manes.caffeine:caffeine:2.9.3=swiftExportClasspathResolvable
|
|
||||||
com.github.jknack:handlebars-helpers:4.3.1=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
com.github.jknack:handlebars-helpers:4.3.1=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
com.github.jknack:handlebars:4.3.1=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
com.github.jknack:handlebars:4.3.1=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
com.google.errorprone:error_prone_annotations:2.28.0=swiftExportClasspathResolvable
|
|
||||||
com.google.errorprone:error_prone_annotations:2.36.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
com.google.errorprone:error_prone_annotations:2.36.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
com.google.guava:failureaccess:1.0.3=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
com.google.guava:failureaccess:1.0.2=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
com.google.guava:guava:33.4.8-jre=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
com.google.guava:guava:33.4.0-jre=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
com.google.j2objc:j2objc-annotations:3.0.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
com.google.j2objc:j2objc-annotations:3.0.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
com.jayway.jsonpath:json-path:2.9.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
com.jayway.jsonpath:json-path:2.9.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
com.networknt:json-schema-validator:1.5.7=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
com.networknt:json-schema-validator:1.5.5=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
commons-fileupload:commons-fileupload:1.6.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
commons-fileupload:commons-fileupload:1.5=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
commons-io:commons-io:2.19.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
commons-io:commons-io:2.11.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
io.github.java-diff-utils:java-diff-utils:4.12=kotlinInternalAbiValidation
|
net.bytebuddy:byte-buddy:1.15.11=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
io.opentelemetry:opentelemetry-api:1.41.0=swiftExportClasspathResolvable
|
|
||||||
io.opentelemetry:opentelemetry-context:1.41.0=swiftExportClasspathResolvable
|
|
||||||
net.bytebuddy:byte-buddy:1.17.7=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
|
||||||
net.java.dev.jna:jna:5.14.0=runtimeClasspath,testRuntimeClasspath
|
net.java.dev.jna:jna:5.14.0=runtimeClasspath,testRuntimeClasspath
|
||||||
net.javacrumbs.json-unit:json-unit-core:2.40.1=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
net.javacrumbs.json-unit:json-unit-core:2.40.1=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
net.minidev:accessors-smart:2.5.0=testRuntimeClasspath
|
net.minidev:accessors-smart:2.5.1=testRuntimeClasspath
|
||||||
net.minidev:json-smart:2.5.0=testRuntimeClasspath
|
net.minidev:json-smart:2.5.1=testRuntimeClasspath
|
||||||
net.sf.jopt-simple:jopt-simple:5.0.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
net.sf.jopt-simple:jopt-simple:5.0.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
org.apache.httpcomponents.client5:httpclient5:5.5=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.apache.httpcomponents.client5:httpclient5:5.4.1=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
org.apache.httpcomponents.core5:httpcore5-h2:5.3.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.apache.httpcomponents.core5:httpcore5-h2:5.3.1=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
org.apache.httpcomponents.core5:httpcore5:5.3.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.apache.httpcomponents.core5:httpcore5:5.3.1=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
org.apiguardian:apiguardian-api:1.1.2=testCompileClasspath,testImplementationDependenciesMetadata
|
org.apiguardian:apiguardian-api:1.1.2=testCompileClasspath,testImplementationDependenciesMetadata,testJdk17CompileClasspath,testJdk17ImplementationDependenciesMetadata,testRuntimeOnlyDependenciesMetadata
|
||||||
org.assertj:assertj-core:3.27.6=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.assertj:assertj-core:3.27.3=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
org.bouncycastle:bcpg-jdk18on:1.80=kotlinBouncyCastleConfiguration
|
org.checkerframework:checker-qual:3.43.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
org.bouncycastle:bcpkix-jdk18on:1.80=kotlinBouncyCastleConfiguration
|
|
||||||
org.bouncycastle:bcprov-jdk18on:1.80=kotlinBouncyCastleConfiguration
|
|
||||||
org.bouncycastle:bcutil-jdk18on:1.80=kotlinBouncyCastleConfiguration
|
|
||||||
org.checkerframework:checker-qual:3.43.0=swiftExportClasspathResolvable
|
|
||||||
org.eclipse.jetty.http2:http2-common:11.0.24=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.eclipse.jetty.http2:http2-common:11.0.24=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
org.eclipse.jetty.http2:http2-hpack:11.0.24=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.eclipse.jetty.http2:http2-hpack:11.0.24=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
org.eclipse.jetty.http2:http2-server:11.0.24=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.eclipse.jetty.http2:http2-server:11.0.24=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
@@ -80,66 +71,74 @@ org.eclipse.jetty:jetty-servlets:11.0.24=testCompileClasspath,testImplementation
|
|||||||
org.eclipse.jetty:jetty-util:11.0.24=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.eclipse.jetty:jetty-util:11.0.24=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
org.eclipse.jetty:jetty-webapp:11.0.24=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.eclipse.jetty:jetty-webapp:11.0.24=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
org.eclipse.jetty:jetty-xml:11.0.24=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.eclipse.jetty:jetty-xml:11.0.24=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
org.fusesource.jansi:jansi:2.4.2=compileClasspath,implementationDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.fusesource.jansi:jansi:2.4.1=compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
org.graalvm.polyglot:polyglot:25.0.0=compileClasspath,compileOnlyDependenciesMetadata,implementationDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.graalvm.compiler:compiler:24.1.2=compileClasspath,compileOnlyDependenciesMetadata
|
||||||
org.graalvm.sdk:collections:25.0.0=compileClasspath,compileOnlyDependenciesMetadata,implementationDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.graalvm.nativeimage:native-image-base:24.1.2=compileClasspath,compileOnlyDependenciesMetadata
|
||||||
org.graalvm.sdk:graal-sdk:25.0.0=compileClasspath,compileOnlyDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testRuntimeClasspath
|
org.graalvm.nativeimage:objectfile:24.1.2=compileClasspath,compileOnlyDependenciesMetadata
|
||||||
org.graalvm.sdk:jniutils:25.0.0=compileClasspath,implementationDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.graalvm.nativeimage:pointsto:24.1.2=compileClasspath,compileOnlyDependenciesMetadata
|
||||||
org.graalvm.sdk:nativeimage:25.0.0=compileClasspath,compileOnlyDependenciesMetadata,implementationDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.graalvm.nativeimage:svm:24.1.2=compileClasspath,compileOnlyDependenciesMetadata
|
||||||
org.graalvm.sdk:word:25.0.0=compileClasspath,compileOnlyDependenciesMetadata,implementationDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.graalvm.nativeimage:truffle-runtime-svm:24.1.2=compileClasspath,compileOnlyDependenciesMetadata
|
||||||
org.graalvm.truffle:truffle-api:25.0.0=compileClasspath,implementationDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.graalvm.polyglot:polyglot:24.1.2=compileClasspath,compileOnlyDependenciesMetadata,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
org.graalvm.truffle:truffle-compiler:25.0.0=compileClasspath,implementationDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.graalvm.sdk:collections:24.1.2=compileClasspath,compileOnlyDependenciesMetadata,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
org.graalvm.truffle:truffle-runtime:25.0.0=compileClasspath,implementationDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.graalvm.sdk:graal-sdk:24.1.2=compileClasspath,compileOnlyDependenciesMetadata,runtimeClasspath,testRuntimeClasspath
|
||||||
|
org.graalvm.sdk:jniutils:24.1.2=compileClasspath,compileOnlyDependenciesMetadata,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
|
org.graalvm.sdk:nativeimage:24.1.2=compileClasspath,compileOnlyDependenciesMetadata,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
|
org.graalvm.sdk:word:24.1.2=compileClasspath,compileOnlyDependenciesMetadata,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
|
org.graalvm.truffle:truffle-api:24.1.2=compileClasspath,compileOnlyDependenciesMetadata,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
|
org.graalvm.truffle:truffle-compiler:24.1.2=compileClasspath,compileOnlyDependenciesMetadata,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
|
org.graalvm.truffle:truffle-runtime:24.1.2=compileClasspath,compileOnlyDependenciesMetadata,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
org.hamcrest:hamcrest-core:2.2=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.hamcrest:hamcrest-core:2.2=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
org.hamcrest:hamcrest:2.2=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.hamcrest:hamcrest:2.2=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
org.jetbrains.kotlin:abi-tools-api:2.2.20=kotlinInternalAbiValidation
|
org.jetbrains.intellij.deps:trove4j:1.0.20200330=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||||
org.jetbrains.kotlin:abi-tools:2.2.20=kotlinInternalAbiValidation
|
org.jetbrains.kotlin:kotlin-build-common:2.0.21=kotlinBuildToolsApiClasspath
|
||||||
org.jetbrains.kotlin:kotlin-build-tools-api:2.2.20=kotlinBuildToolsApiClasspath
|
org.jetbrains.kotlin:kotlin-build-tools-api:2.0.21=kotlinBuildToolsApiClasspath
|
||||||
org.jetbrains.kotlin:kotlin-build-tools-impl:2.2.20=kotlinBuildToolsApiClasspath
|
org.jetbrains.kotlin:kotlin-build-tools-impl:2.0.21=kotlinBuildToolsApiClasspath
|
||||||
org.jetbrains.kotlin:kotlin-compiler-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable
|
org.jetbrains.kotlin:kotlin-compiler-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||||
org.jetbrains.kotlin:kotlin-compiler-runner:2.2.20=kotlinBuildToolsApiClasspath
|
org.jetbrains.kotlin:kotlin-compiler-runner:2.0.21=kotlinBuildToolsApiClasspath
|
||||||
org.jetbrains.kotlin:kotlin-daemon-client:2.2.20=kotlinBuildToolsApiClasspath
|
org.jetbrains.kotlin:kotlin-daemon-client:2.0.21=kotlinBuildToolsApiClasspath
|
||||||
org.jetbrains.kotlin:kotlin-daemon-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable
|
org.jetbrains.kotlin:kotlin-daemon-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||||
org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:2.2.20=kotlinKlibCommonizerClasspath
|
org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:2.0.21=kotlinKlibCommonizerClasspath
|
||||||
org.jetbrains.kotlin:kotlin-metadata-jvm:2.2.20=kotlinInternalAbiValidation
|
|
||||||
org.jetbrains.kotlin:kotlin-native-prebuilt:2.0.21=kotlinNativeBundleConfiguration
|
org.jetbrains.kotlin:kotlin-native-prebuilt:2.0.21=kotlinNativeBundleConfiguration
|
||||||
org.jetbrains.kotlin:kotlin-reflect:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable
|
org.jetbrains.kotlin:kotlin-reflect:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||||
org.jetbrains.kotlin:kotlin-script-runtime:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable
|
org.jetbrains.kotlin:kotlin-script-runtime:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinCompilerPluginClasspathTestJdk17,kotlinKlibCommonizerClasspath
|
||||||
org.jetbrains.kotlin:kotlin-scripting-common:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
|
org.jetbrains.kotlin:kotlin-scripting-common:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinCompilerPluginClasspathTestJdk17
|
||||||
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
|
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinCompilerPluginClasspathTestJdk17
|
||||||
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
|
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinCompilerPluginClasspathTestJdk17
|
||||||
org.jetbrains.kotlin:kotlin-scripting-jvm:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
|
org.jetbrains.kotlin:kotlin-scripting-jvm:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinCompilerPluginClasspathTestJdk17
|
||||||
org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.2.20=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.0.21=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.2.20=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.0.21=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
org.jetbrains.kotlin:kotlin-stdlib:2.2.20=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,nativeImageClasspath,runtimeClasspath,swiftExportClasspathResolvable,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.jetbrains.kotlin:kotlin-stdlib:2.0.21=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinCompilerPluginClasspathTestJdk17,kotlinKlibCommonizerClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
org.jetbrains.kotlin:swift-export-embeddable:2.2.20=swiftExportClasspathResolvable
|
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||||
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.0=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable
|
org.jetbrains:annotations:13.0=compileClasspath,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinCompilerPluginClasspathTestJdk17,kotlinKlibCommonizerClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
|
||||||
org.jetbrains.kotlinx:kotlinx-serialization-bom:1.7.3=swiftExportClasspathResolvable
|
org.jetbrains:markdown-jvm:0.7.3=runtimeClasspath,testRuntimeClasspath
|
||||||
org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.7.3=swiftExportClasspathResolvable
|
org.jetbrains:markdown:0.7.3=runtimeClasspath,testRuntimeClasspath
|
||||||
org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3=swiftExportClasspathResolvable
|
org.jline:jline-native:3.23.0=compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
org.jetbrains:annotations:13.0=compileClasspath,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,nativeImageClasspath,runtimeClasspath,swiftExportClasspathResolvable,testCompileClasspath,testRuntimeClasspath
|
org.jline:jline-reader:3.23.0=compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
org.jetbrains:markdown-jvm:0.7.3=nativeImageClasspath,runtimeClasspath,testRuntimeClasspath
|
org.jline:jline-terminal-jansi:3.23.0=compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
org.jetbrains:markdown:0.7.3=nativeImageClasspath,runtimeClasspath,testRuntimeClasspath
|
org.jline:jline-terminal:3.23.0=compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
org.jline:jline-native:3.23.0=compileClasspath,implementationDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.junit.jupiter:junit-jupiter-api:5.11.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath,testRuntimeOnlyDependenciesMetadata
|
||||||
org.jline:jline-reader:3.23.0=compileClasspath,implementationDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.junit.jupiter:junit-jupiter-api:5.8.2=testJdk17CompileClasspath,testJdk17ImplementationDependenciesMetadata,testJdk17RuntimeClasspath
|
||||||
org.jline:jline-terminal-jansi:3.23.0=compileClasspath,implementationDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.junit.jupiter:junit-jupiter-engine:5.11.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath,testRuntimeOnlyDependenciesMetadata
|
||||||
org.jline:jline-terminal:3.23.0=compileClasspath,implementationDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.junit.jupiter:junit-jupiter-engine:5.8.2=testJdk17RuntimeClasspath
|
||||||
org.jspecify:jspecify:1.0.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.junit.jupiter:junit-jupiter-params:5.11.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
org.junit.jupiter:junit-jupiter-api:5.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.junit.jupiter:junit-jupiter-params:5.8.2=testJdk17CompileClasspath,testJdk17ImplementationDependenciesMetadata,testJdk17RuntimeClasspath
|
||||||
org.junit.jupiter:junit-jupiter-engine:5.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.junit.jupiter:junit-jupiter:5.8.2=testJdk17CompileClasspath,testJdk17ImplementationDependenciesMetadata,testJdk17RuntimeClasspath
|
||||||
org.junit.jupiter:junit-jupiter-params:5.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.junit.platform:junit-platform-commons:1.11.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath,testRuntimeOnlyDependenciesMetadata
|
||||||
org.junit.platform:junit-platform-commons:1.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.junit.platform:junit-platform-commons:1.8.2=testJdk17CompileClasspath,testJdk17ImplementationDependenciesMetadata,testJdk17RuntimeClasspath
|
||||||
org.junit.platform:junit-platform-engine:1.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.junit.platform:junit-platform-engine:1.11.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath,testRuntimeOnlyDependenciesMetadata
|
||||||
org.junit.platform:junit-platform-launcher:1.14.0=testRuntimeClasspath
|
org.junit.platform:junit-platform-engine:1.8.2=testJdk17RuntimeClasspath
|
||||||
org.junit:junit-bom:5.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.junit.platform:junit-platform-launcher:1.8.2=testJdk17RuntimeClasspath
|
||||||
org.msgpack:msgpack-core:0.9.8=nativeImageClasspath,runtimeClasspath,testRuntimeClasspath
|
org.junit:junit-bom:5.11.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath,testRuntimeOnlyDependenciesMetadata
|
||||||
org.opentest4j:opentest4j:1.3.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.junit:junit-bom:5.8.2=testJdk17CompileClasspath,testJdk17ImplementationDependenciesMetadata,testJdk17RuntimeClasspath
|
||||||
org.organicdesign:Paguro:3.10.3=nativeImageClasspath,runtimeClasspath,testRuntimeClasspath
|
org.msgpack:msgpack-core:0.9.8=runtimeClasspath,testRuntimeClasspath
|
||||||
org.slf4j:slf4j-api:2.0.17=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.opentest4j:opentest4j:1.2.0=testJdk17CompileClasspath,testJdk17ImplementationDependenciesMetadata,testJdk17RuntimeClasspath
|
||||||
org.snakeyaml:snakeyaml-engine:2.10=nativeImageClasspath,runtimeClasspath,testRuntimeClasspath
|
org.opentest4j:opentest4j:1.3.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath,testRuntimeOnlyDependenciesMetadata
|
||||||
org.wiremock:wiremock:3.13.1=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.organicdesign:Paguro:3.10.3=runtimeClasspath,testRuntimeClasspath
|
||||||
org.xmlunit:xmlunit-core:2.10.2=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.slf4j:slf4j-api:2.0.16=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
org.xmlunit:xmlunit-legacy:2.10.2=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.snakeyaml:snakeyaml-engine:2.9=runtimeClasspath,testRuntimeClasspath
|
||||||
org.xmlunit:xmlunit-placeholders:2.10.2=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.wiremock:wiremock:3.11.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
org.yaml:snakeyaml:2.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
org.xmlunit:xmlunit-core:2.10.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
empty=annotationProcessor,intransitiveDependenciesMetadata,javaExecutable,kotlinCompilerPluginClasspath,kotlinNativeCompilerPluginClasspath,kotlinScriptDefExtensions,shadow,signatures,sourcesJar,stagedAlpineLinuxAmd64Executable,stagedLinuxAarch64Executable,stagedLinuxAmd64Executable,stagedMacAarch64Executable,stagedMacAmd64Executable,stagedWindowsAmd64Executable,testAnnotationProcessor,testApiDependenciesMetadata,testCompileOnlyDependenciesMetadata,testIntransitiveDependenciesMetadata,testKotlinScriptDefExtensions
|
org.xmlunit:xmlunit-legacy:2.10.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
|
org.xmlunit:xmlunit-placeholders:2.10.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
|
org.yaml:snakeyaml:2.3=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||||
|
empty=annotationProcessor,archives,compile,intransitiveDependenciesMetadata,javaExecutable,kotlinCompilerPluginClasspath,kotlinNativeCompilerPluginClasspath,kotlinScriptDef,kotlinScriptDefExtensions,runtime,runtimeOnlyDependenciesMetadata,shadow,signatures,sourcesJar,stagedAlpineLinuxAmd64Executable,stagedLinuxAarch64Executable,stagedLinuxAmd64Executable,stagedMacAarch64Executable,stagedMacAmd64Executable,stagedWindowsAmd64Executable,testAnnotationProcessor,testApiDependenciesMetadata,testCompile,testCompileOnly,testCompileOnlyDependenciesMetadata,testIntransitiveDependenciesMetadata,testJdk17AnnotationProcessor,testJdk17ApiDependenciesMetadata,testJdk17CompileOnlyDependenciesMetadata,testJdk17IntransitiveDependenciesMetadata,testJdk17KotlinScriptDefExtensions,testKotlinScriptDef,testKotlinScriptDefExtensions,testRuntime
|
||||||
|
|||||||
+373
-25
@@ -14,22 +14,20 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
import java.io.ByteArrayOutputStream
|
import java.io.ByteArrayOutputStream
|
||||||
import java.io.OutputStream
|
|
||||||
import org.gradle.kotlin.dsl.support.serviceOf
|
import org.gradle.kotlin.dsl.support.serviceOf
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
pklAllProjects
|
pklAllProjects
|
||||||
pklKotlinLibrary
|
pklKotlinLibrary
|
||||||
pklPublishLibrary
|
pklPublishLibrary
|
||||||
pklJavaExecutable
|
pklNativeBuild
|
||||||
pklNativeExecutable
|
|
||||||
`maven-publish`
|
`maven-publish`
|
||||||
|
|
||||||
// already on build script class path (see buildSrc/build.gradle.kts),
|
// already on build script class path (see buildSrc/build.gradle.kts),
|
||||||
// hence must only specify plugin ID here
|
// hence must only specify plugin ID here
|
||||||
id(libs.plugins.shadow.get().pluginId)
|
@Suppress("DSL_SCOPE_VIOLATION") id(libs.plugins.shadow.get().pluginId)
|
||||||
|
|
||||||
alias(libs.plugins.checksum)
|
@Suppress("DSL_SCOPE_VIOLATION") alias(libs.plugins.checksum)
|
||||||
}
|
}
|
||||||
|
|
||||||
// make Java executable available to other subprojects
|
// make Java executable available to other subprojects
|
||||||
@@ -46,7 +44,16 @@ publishing {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val stagedMacAmd64Executable: Configuration by configurations.creating
|
||||||
|
val stagedMacAarch64Executable: Configuration by configurations.creating
|
||||||
|
val stagedLinuxAmd64Executable: Configuration by configurations.creating
|
||||||
|
val stagedLinuxAarch64Executable: Configuration by configurations.creating
|
||||||
|
val stagedAlpineLinuxAmd64Executable: Configuration by configurations.creating
|
||||||
|
val stagedWindowsAmd64Executable: Configuration by configurations.creating
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
compileOnly(libs.svm)
|
||||||
|
compileOnly(libs.truffleSvm)
|
||||||
implementation(libs.truffleRuntime)
|
implementation(libs.truffleRuntime)
|
||||||
compileOnly(libs.graalSdk)
|
compileOnly(libs.graalSdk)
|
||||||
|
|
||||||
@@ -61,11 +68,19 @@ dependencies {
|
|||||||
implementation(libs.jlineTerminal)
|
implementation(libs.jlineTerminal)
|
||||||
implementation(libs.jlineTerminalJansi)
|
implementation(libs.jlineTerminalJansi)
|
||||||
implementation(projects.pklServer)
|
implementation(projects.pklServer)
|
||||||
implementation(projects.pklFormatter)
|
|
||||||
implementation(libs.clikt)
|
implementation(libs.clikt)
|
||||||
|
|
||||||
testImplementation(projects.pklCommonsTest)
|
testImplementation(projects.pklCommonsTest)
|
||||||
testImplementation(libs.wiremock)
|
testImplementation(libs.wiremock)
|
||||||
|
|
||||||
|
fun executableDir(name: String) = files(layout.buildDirectory.dir("executable/$name"))
|
||||||
|
stagedMacAmd64Executable(executableDir("pkl-macos-amd64"))
|
||||||
|
stagedMacAmd64Executable(executableDir("pkl-macos-amd64"))
|
||||||
|
stagedMacAarch64Executable(executableDir("pkl-macos-aarch64"))
|
||||||
|
stagedLinuxAmd64Executable(executableDir("pkl-linux-amd64"))
|
||||||
|
stagedLinuxAarch64Executable(executableDir("pkl-linux-aarch64"))
|
||||||
|
stagedAlpineLinuxAmd64Executable(executableDir("pkl-alpine-linux-amd64"))
|
||||||
|
stagedWindowsAmd64Executable(executableDir("pkl-windows-amd64.exe"))
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.jar {
|
tasks.jar {
|
||||||
@@ -84,6 +99,15 @@ tasks.shadowJar {
|
|||||||
exclude("module-info.*")
|
exclude("module-info.*")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val javaExecutable by
|
||||||
|
tasks.registering(ExecutableJar::class) {
|
||||||
|
inJar.set(tasks.shadowJar.flatMap { it.archiveFile })
|
||||||
|
outJar.set(layout.buildDirectory.file("executable/jpkl"))
|
||||||
|
|
||||||
|
// uncomment for debugging
|
||||||
|
// jvmArgs.addAll("-ea", "-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005")
|
||||||
|
}
|
||||||
|
|
||||||
val testJavaExecutable by
|
val testJavaExecutable by
|
||||||
tasks.registering(Test::class) {
|
tasks.registering(Test::class) {
|
||||||
testClassesDirs = tasks.test.get().testClassesDirs
|
testClassesDirs = tasks.test.get().testClassesDirs
|
||||||
@@ -91,7 +115,7 @@ val testJavaExecutable by
|
|||||||
// compiled test classes
|
// compiled test classes
|
||||||
sourceSets.test.get().output +
|
sourceSets.test.get().output +
|
||||||
// java executable
|
// java executable
|
||||||
tasks.javaExecutable.get().outputs.files +
|
javaExecutable.get().outputs.files +
|
||||||
// test-only dependencies
|
// test-only dependencies
|
||||||
// (test dependencies that are also main dependencies must already be contained in java
|
// (test dependencies that are also main dependencies must already be contained in java
|
||||||
// executable;
|
// executable;
|
||||||
@@ -100,7 +124,12 @@ val testJavaExecutable by
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Setup `testJavaExecutable` tasks for multi-JDK testing.
|
// Setup `testJavaExecutable` tasks for multi-JDK testing.
|
||||||
val testJavaExecutableOnOtherJdks = buildInfo.multiJdkTestingWith(testJavaExecutable)
|
val testJavaExecutableOnOtherJdks =
|
||||||
|
if (buildInfo.multiJdkTesting) {
|
||||||
|
buildInfo.multiJdkTestingWith(testJavaExecutable)
|
||||||
|
} else {
|
||||||
|
emptyList()
|
||||||
|
}
|
||||||
|
|
||||||
// Prepare a run of the fat JAR, optionally with a specific Java launcher.
|
// Prepare a run of the fat JAR, optionally with a specific Java launcher.
|
||||||
private fun setupJavaExecutableRun(
|
private fun setupJavaExecutableRun(
|
||||||
@@ -110,7 +139,7 @@ private fun setupJavaExecutableRun(
|
|||||||
configurator: Exec.() -> Unit = {},
|
configurator: Exec.() -> Unit = {},
|
||||||
) =
|
) =
|
||||||
tasks.register(name, Exec::class) {
|
tasks.register(name, Exec::class) {
|
||||||
dependsOn(tasks.javaExecutable)
|
dependsOn(javaExecutable)
|
||||||
val outputFile = layout.buildDirectory.file(name) // dummy output to satisfy up-to-date check
|
val outputFile = layout.buildDirectory.file(name) // dummy output to satisfy up-to-date check
|
||||||
outputs.file(outputFile)
|
outputs.file(outputFile)
|
||||||
|
|
||||||
@@ -119,9 +148,8 @@ private fun setupJavaExecutableRun(
|
|||||||
null -> "java"
|
null -> "java"
|
||||||
else -> launcher.get().executablePath.asFile.absolutePath
|
else -> launcher.get().executablePath.asFile.absolutePath
|
||||||
}
|
}
|
||||||
standardOutput = OutputStream.nullOutputStream()
|
|
||||||
|
|
||||||
args("-jar", tasks.javaExecutable.get().outputs.files.singleFile.toString(), *args)
|
args("-jar", javaExecutable.get().outputs.files.singleFile.toString(), *args)
|
||||||
|
|
||||||
doFirst { outputFile.get().asFile.delete() }
|
doFirst { outputFile.get().asFile.delete() }
|
||||||
|
|
||||||
@@ -130,6 +158,25 @@ private fun setupJavaExecutableRun(
|
|||||||
configurator()
|
configurator()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 0.14 Java executable was broken because javaExecutable.jvmArgs wasn't commented out.
|
||||||
|
// To catch this and similar problems, test that Java executable starts successfully.
|
||||||
|
val testStartJavaExecutable by
|
||||||
|
setupJavaExecutableRun("testStartJavaExecutable", arrayOf("--version"))
|
||||||
|
|
||||||
|
// Setup `testStartJavaExecutable` tasks for multi-JDK testing.
|
||||||
|
val testStartJavaExecutableOnOtherJdks =
|
||||||
|
if (buildInfo.multiJdkTesting) {
|
||||||
|
buildInfo.jdkTestRange.map { jdkTarget ->
|
||||||
|
setupJavaExecutableRun(
|
||||||
|
"testStartJavaExecutableJdk${jdkTarget.asInt()}",
|
||||||
|
arrayOf("--version"),
|
||||||
|
serviceOf<JavaToolchainService>().launcherFor { languageVersion = jdkTarget },
|
||||||
|
)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
emptyList()
|
||||||
|
}
|
||||||
|
|
||||||
val evalTestFlags = arrayOf("eval", "-x", "1 + 1", "pkl:base")
|
val evalTestFlags = arrayOf("eval", "-x", "1 + 1", "pkl:base")
|
||||||
|
|
||||||
fun Exec.useRootDirAndSuppressOutput() {
|
fun Exec.useRootDirAndSuppressOutput() {
|
||||||
@@ -138,7 +185,8 @@ fun Exec.useRootDirAndSuppressOutput() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 0.28 Preparing for JDK21 toolchains revealed that `testStartJavaExecutable` may pass, even though
|
// 0.28 Preparing for JDK21 toolchains revealed that `testStartJavaExecutable` may pass, even though
|
||||||
// the evaluator fails. To catch this, we eval a simple expression using the fat jar.
|
// the evaluator fails. To catch this, we need to test the evaluator. We render the CircleCI config
|
||||||
|
// as a realistic test of the fat JAR.
|
||||||
val testEvalJavaExecutable by
|
val testEvalJavaExecutable by
|
||||||
setupJavaExecutableRun("testEvalJavaExecutable", evalTestFlags) { useRootDirAndSuppressOutput() }
|
setupJavaExecutableRun("testEvalJavaExecutable", evalTestFlags) { useRootDirAndSuppressOutput() }
|
||||||
|
|
||||||
@@ -157,35 +205,335 @@ val testEvalJavaExecutableOnOtherJdks =
|
|||||||
tasks.check {
|
tasks.check {
|
||||||
dependsOn(
|
dependsOn(
|
||||||
testJavaExecutable,
|
testJavaExecutable,
|
||||||
|
testStartJavaExecutable,
|
||||||
testJavaExecutableOnOtherJdks,
|
testJavaExecutableOnOtherJdks,
|
||||||
|
testStartJavaExecutableOnOtherJdks,
|
||||||
testEvalJavaExecutable,
|
testEvalJavaExecutable,
|
||||||
testEvalJavaExecutableOnOtherJdks,
|
testEvalJavaExecutableOnOtherJdks,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.checkNative {
|
fun Exec.configureExecutable(
|
||||||
dependsOn(":pkl-core:checkNative")
|
graalVm: BuildInfo.GraalVm,
|
||||||
dependsOn(":pkl-server:checkNative")
|
outputFile: Provider<RegularFile>,
|
||||||
|
extraArgs: List<String> = listOf(),
|
||||||
|
) {
|
||||||
|
inputs
|
||||||
|
.files(sourceSets.main.map { it.output })
|
||||||
|
.withPropertyName("mainSourceSets")
|
||||||
|
.withPathSensitivity(PathSensitivity.RELATIVE)
|
||||||
|
inputs
|
||||||
|
.files(configurations.runtimeClasspath)
|
||||||
|
.withPropertyName("runtimeClasspath")
|
||||||
|
.withNormalizer(ClasspathNormalizer::class)
|
||||||
|
val nativeImageCommandName = if (buildInfo.os.isWindows) "native-image.cmd" else "native-image"
|
||||||
|
inputs
|
||||||
|
.files(file(graalVm.baseDir).resolve("bin/$nativeImageCommandName"))
|
||||||
|
.withPropertyName("graalVmNativeImage")
|
||||||
|
.withPathSensitivity(PathSensitivity.ABSOLUTE)
|
||||||
|
outputs.file(outputFile)
|
||||||
|
outputs.cacheIf { true }
|
||||||
|
|
||||||
|
workingDir(outputFile.map { it.asFile.parentFile })
|
||||||
|
executable = "${graalVm.baseDir}/bin/$nativeImageCommandName"
|
||||||
|
|
||||||
|
// For any system properties starting with `pkl.native`, strip off that prefix and pass the rest
|
||||||
|
// through as arguments to native-image.
|
||||||
|
//
|
||||||
|
// Allow setting args using flags like
|
||||||
|
// (-Dpkl.native-Dpolyglot.engine.userResourceCache=/my/cache/dir) when building through Gradle.
|
||||||
|
val extraArgsFromProperties =
|
||||||
|
System.getProperties()
|
||||||
|
.filter { it.key.toString().startsWith("pkl.native") }
|
||||||
|
.map { "${it.key}=${it.value}".substring("pkl.native".length) }
|
||||||
|
|
||||||
|
// JARs to exclude from the class path for the native-image build.
|
||||||
|
val exclusions = listOf(libs.graalSdk).map { it.get().module.name }
|
||||||
|
// https://www.graalvm.org/22.0/reference-manual/native-image/Options/
|
||||||
|
argumentProviders.add(
|
||||||
|
CommandLineArgumentProvider {
|
||||||
|
buildList {
|
||||||
|
// must be emitted before any experimental options are used
|
||||||
|
add("-H:+UnlockExperimentalVMOptions")
|
||||||
|
// currently gives a deprecation warning, but we've been told
|
||||||
|
// that the "initialize everything at build time" *CLI* option is likely here to stay
|
||||||
|
add("--initialize-at-build-time=")
|
||||||
|
// needed for messagepack-java (see https://github.com/msgpack/msgpack-java/issues/600)
|
||||||
|
add("--initialize-at-run-time=org.msgpack.core.buffer.DirectBufferAccess")
|
||||||
|
add("--no-fallback")
|
||||||
|
add("-H:IncludeResources=org/pkl/core/stdlib/.*\\.pkl")
|
||||||
|
add("-H:IncludeResources=org/jline/utils/.*")
|
||||||
|
add("-H:IncludeResourceBundles=org.pkl.core.errorMessages")
|
||||||
|
add("-H:IncludeResources=org/pkl/commons/cli/PklCARoots.pem")
|
||||||
|
add("-H:Class=org.pkl.cli.Main")
|
||||||
|
add("-o")
|
||||||
|
add(outputFile.get().asFile.name)
|
||||||
|
// the actual limit (currently) used by native-image is this number + 1400 (idea is to
|
||||||
|
// compensate for Truffle's own nodes)
|
||||||
|
add("-H:MaxRuntimeCompileMethods=1800")
|
||||||
|
add("-H:+EnforceMaxRuntimeCompileMethods")
|
||||||
|
add("--enable-url-protocols=http,https")
|
||||||
|
add("-H:+ReportExceptionStackTraces")
|
||||||
|
// disable automatic support for JVM CLI options (puts our main class in full control of
|
||||||
|
// argument parsing)
|
||||||
|
add("-H:-ParseRuntimeOptions")
|
||||||
|
// quick build mode: 40% faster compilation, 20% smaller (but presumably also slower)
|
||||||
|
// executable
|
||||||
|
if (!buildInfo.isReleaseBuild) {
|
||||||
|
add("-Ob")
|
||||||
|
}
|
||||||
|
if (buildInfo.isNativeArch) {
|
||||||
|
add("-march=native")
|
||||||
|
} else {
|
||||||
|
add("-march=compatibility")
|
||||||
|
}
|
||||||
|
// native-image rejects non-existing class path entries -> filter
|
||||||
|
add("--class-path")
|
||||||
|
val pathInput =
|
||||||
|
sourceSets.main.get().output +
|
||||||
|
configurations.runtimeClasspath.get().filter {
|
||||||
|
it.exists() && !exclusions.any { exclude -> it.name.contains(exclude) }
|
||||||
|
}
|
||||||
|
add(pathInput.asPath)
|
||||||
|
// make sure dev machine stays responsive (15% slowdown on my laptop)
|
||||||
|
val processors =
|
||||||
|
Runtime.getRuntime().availableProcessors() /
|
||||||
|
if (buildInfo.os.isMacOsX && !buildInfo.isCiBuild) 4 else 1
|
||||||
|
add("-J-XX:ActiveProcessorCount=${processors}")
|
||||||
|
// Pass through all `HOMEBREW_` prefixed environment variables to allow build with shimmed
|
||||||
|
// tools.
|
||||||
|
addAll(environment.keys.filter { it.startsWith("HOMEBREW_") }.map { "-E$it" })
|
||||||
|
addAll(extraArgs)
|
||||||
|
addAll(extraArgsFromProperties)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
executable {
|
/** Builds the pkl CLI for macOS/amd64. */
|
||||||
name = "pkl"
|
val macExecutableAmd64: TaskProvider<Exec> by
|
||||||
javaName = "jpkl"
|
tasks.registering(Exec::class) {
|
||||||
documentationName = "Pkl CLI"
|
dependsOn(":installGraalVmAmd64")
|
||||||
publicationName = "pkl-cli"
|
configureExecutable(
|
||||||
javaPublicationName = "pkl-cli-java"
|
buildInfo.graalVmAmd64,
|
||||||
mainClass = "org.pkl.cli.Main"
|
layout.buildDirectory.file("executable/pkl-macos-amd64"),
|
||||||
website = "https://pkl-lang.org/main/current/pkl-cli/index.html"
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Builds the pkl CLI for macOS/aarch64. */
|
||||||
|
val macExecutableAarch64: TaskProvider<Exec> by
|
||||||
|
tasks.registering(Exec::class) {
|
||||||
|
dependsOn(":installGraalVmAarch64")
|
||||||
|
configureExecutable(
|
||||||
|
buildInfo.graalVmAarch64,
|
||||||
|
layout.buildDirectory.file("executable/pkl-macos-aarch64"),
|
||||||
|
listOf("-H:+AllowDeprecatedBuilderClassesOnImageClasspath"),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Builds the pkl CLI for linux/amd64. */
|
||||||
|
val linuxExecutableAmd64: TaskProvider<Exec> by
|
||||||
|
tasks.registering(Exec::class) {
|
||||||
|
dependsOn(":installGraalVmAmd64")
|
||||||
|
configureExecutable(
|
||||||
|
buildInfo.graalVmAmd64,
|
||||||
|
layout.buildDirectory.file("executable/pkl-linux-amd64"),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Builds the pkl CLI for linux/aarch64.
|
||||||
|
*
|
||||||
|
* Right now, this is built within a container on Mac using emulation because CI does not have ARM
|
||||||
|
* instances.
|
||||||
|
*/
|
||||||
|
val linuxExecutableAarch64: TaskProvider<Exec> by
|
||||||
|
tasks.registering(Exec::class) {
|
||||||
|
dependsOn(":installGraalVmAarch64")
|
||||||
|
configureExecutable(
|
||||||
|
buildInfo.graalVmAarch64,
|
||||||
|
layout.buildDirectory.file("executable/pkl-linux-aarch64"),
|
||||||
|
listOf(
|
||||||
|
// Ensure compatibility for kernels with page size set to 4k, 16k and 64k
|
||||||
|
// (e.g. Raspberry Pi 5, Asahi Linux)
|
||||||
|
"-H:PageSize=65536"
|
||||||
|
),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Builds a statically linked CLI for linux/amd64.
|
||||||
|
*
|
||||||
|
* Note: we don't publish the same for linux/aarch64 because native-image doesn't support this.
|
||||||
|
* Details: https://www.graalvm.org/22.0/reference-manual/native-image/ARM64/
|
||||||
|
*/
|
||||||
|
val alpineExecutableAmd64: TaskProvider<Exec> by
|
||||||
|
tasks.registering(Exec::class) {
|
||||||
|
dependsOn(":installGraalVmAmd64")
|
||||||
|
configureExecutable(
|
||||||
|
buildInfo.graalVmAmd64,
|
||||||
|
layout.buildDirectory.file("executable/pkl-alpine-linux-amd64"),
|
||||||
|
listOf("--static", "--libc=musl"),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
val windowsExecutableAmd64: TaskProvider<Exec> by
|
||||||
|
tasks.registering(Exec::class) {
|
||||||
|
dependsOn(":installGraalVmAmd64")
|
||||||
|
configureExecutable(
|
||||||
|
buildInfo.graalVmAmd64,
|
||||||
|
layout.buildDirectory.file("executable/pkl-windows-amd64"),
|
||||||
|
listOf("-Dfile.encoding=UTF-8"),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.assembleNative {
|
||||||
|
when {
|
||||||
|
buildInfo.os.isMacOsX -> {
|
||||||
|
dependsOn(macExecutableAmd64)
|
||||||
|
if (buildInfo.arch == "aarch64") {
|
||||||
|
dependsOn(macExecutableAarch64)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
buildInfo.os.isWindows -> {
|
||||||
|
dependsOn(windowsExecutableAmd64)
|
||||||
|
}
|
||||||
|
buildInfo.os.isLinux && buildInfo.arch == "aarch64" -> {
|
||||||
|
dependsOn(linuxExecutableAarch64)
|
||||||
|
}
|
||||||
|
buildInfo.os.isLinux && buildInfo.arch == "amd64" -> {
|
||||||
|
dependsOn(linuxExecutableAmd64)
|
||||||
|
if (buildInfo.hasMuslToolchain) {
|
||||||
|
dependsOn(alpineExecutableAmd64)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// make Java executable available to other subprojects
|
// make Java executable available to other subprojects
|
||||||
// (we don't do the same for native executables because we don't want tasks assemble/build to build
|
// (we don't do the same for native executables because we don't want tasks assemble/build to build
|
||||||
// them)
|
// them)
|
||||||
artifacts {
|
artifacts {
|
||||||
add("javaExecutable", tasks.javaExecutable.map { it.outputs.files.singleFile }) {
|
add("javaExecutable", javaExecutable.map { it.outputs.files.singleFile }) {
|
||||||
name = "pkl-cli-java"
|
name = "pkl-cli-java"
|
||||||
classifier = null
|
classifier = null
|
||||||
extension = "jar"
|
extension = "jar"
|
||||||
builtBy(tasks.javaExecutable)
|
builtBy(javaExecutable)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// region Maven Publishing
|
||||||
|
publishing {
|
||||||
|
publications {
|
||||||
|
register<MavenPublication>("javaExecutable") {
|
||||||
|
artifactId = "pkl-cli-java"
|
||||||
|
|
||||||
|
artifact(javaExecutable.map { it.outputs.files.singleFile }) {
|
||||||
|
classifier = null
|
||||||
|
extension = "jar"
|
||||||
|
builtBy(javaExecutable)
|
||||||
|
}
|
||||||
|
|
||||||
|
pom {
|
||||||
|
url.set("https://github.com/apple/pkl/tree/main/pkl-cli")
|
||||||
|
description.set(
|
||||||
|
"""
|
||||||
|
Pkl CLI executable for Java.
|
||||||
|
Can be executed directly, or with `java -jar <path/to/jpkl>`.
|
||||||
|
Requires Java 17 or higher.
|
||||||
|
"""
|
||||||
|
.trimIndent()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
create<MavenPublication>("macExecutableAmd64") {
|
||||||
|
artifactId = "pkl-cli-macos-amd64"
|
||||||
|
artifact(stagedMacAmd64Executable.singleFile) {
|
||||||
|
classifier = null
|
||||||
|
extension = "bin"
|
||||||
|
builtBy(stagedMacAmd64Executable)
|
||||||
|
}
|
||||||
|
pom {
|
||||||
|
name.set("pkl-cli-macos-amd64")
|
||||||
|
url.set("https://github.com/apple/pkl/tree/main/pkl-cli")
|
||||||
|
description.set("Native Pkl CLI executable for macOS/amd64.")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
create<MavenPublication>("macExecutableAarch64") {
|
||||||
|
artifactId = "pkl-cli-macos-aarch64"
|
||||||
|
artifact(stagedMacAarch64Executable.singleFile) {
|
||||||
|
classifier = null
|
||||||
|
extension = "bin"
|
||||||
|
builtBy(stagedMacAarch64Executable)
|
||||||
|
}
|
||||||
|
pom {
|
||||||
|
name.set("pkl-cli-macos-aarch64")
|
||||||
|
url.set("https://github.com/apple/pkl/tree/main/pkl-cli")
|
||||||
|
description.set("Native Pkl CLI executable for macOS/aarch64.")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
create<MavenPublication>("linuxExecutableAmd64") {
|
||||||
|
artifactId = "pkl-cli-linux-amd64"
|
||||||
|
artifact(stagedLinuxAmd64Executable.singleFile) {
|
||||||
|
classifier = null
|
||||||
|
extension = "bin"
|
||||||
|
builtBy(stagedLinuxAmd64Executable)
|
||||||
|
}
|
||||||
|
pom {
|
||||||
|
name.set("pkl-cli-linux-amd64")
|
||||||
|
url.set("https://github.com/apple/pkl/tree/main/pkl-cli")
|
||||||
|
description.set("Native Pkl CLI executable for linux/amd64.")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
create<MavenPublication>("linuxExecutableAarch64") {
|
||||||
|
artifactId = "pkl-cli-linux-aarch64"
|
||||||
|
artifact(stagedLinuxAarch64Executable.singleFile) {
|
||||||
|
classifier = null
|
||||||
|
extension = "bin"
|
||||||
|
builtBy(stagedLinuxAarch64Executable)
|
||||||
|
}
|
||||||
|
pom {
|
||||||
|
name.set("pkl-cli-linux-aarch64")
|
||||||
|
url.set("https://github.com/apple/pkl/tree/main/pkl-cli")
|
||||||
|
description.set("Native Pkl CLI executable for linux/aarch64.")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
create<MavenPublication>("alpineLinuxExecutableAmd64") {
|
||||||
|
artifactId = "pkl-cli-alpine-linux-amd64"
|
||||||
|
artifact(stagedAlpineLinuxAmd64Executable.singleFile) {
|
||||||
|
classifier = null
|
||||||
|
extension = "bin"
|
||||||
|
builtBy(stagedAlpineLinuxAmd64Executable)
|
||||||
|
}
|
||||||
|
pom {
|
||||||
|
name.set("pkl-cli-alpine-linux-amd64")
|
||||||
|
url.set("https://github.com/apple/pkl/tree/main/pkl-cli")
|
||||||
|
description.set("Native Pkl CLI executable for linux/amd64 and statically linked to musl.")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
create<MavenPublication>("windowsExecutableAmd64") {
|
||||||
|
artifactId = "pkl-cli-windows-amd64"
|
||||||
|
artifact(stagedWindowsAmd64Executable.singleFile) {
|
||||||
|
classifier = null
|
||||||
|
extension = "exe"
|
||||||
|
builtBy(stagedWindowsAmd64Executable)
|
||||||
|
}
|
||||||
|
pom {
|
||||||
|
name.set("pkl-cli-windows-amd64")
|
||||||
|
url.set("https://github.com/apple/pkl/tree/main/pkl-cli")
|
||||||
|
description.set("Native Pkl CLI executable for windows/amd64.")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
signing {
|
||||||
|
sign(publishing.publications["javaExecutable"])
|
||||||
|
sign(publishing.publications["linuxExecutableAarch64"])
|
||||||
|
sign(publishing.publications["linuxExecutableAmd64"])
|
||||||
|
sign(publishing.publications["macExecutableAarch64"])
|
||||||
|
sign(publishing.publications["macExecutableAmd64"])
|
||||||
|
sign(publishing.publications["alpineLinuxExecutableAmd64"])
|
||||||
|
sign(publishing.publications["windowsExecutableAmd64"])
|
||||||
|
} // endregion
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user