Compare commits

..

1 Commits

Author SHA1 Message Date
Islon Scherer 2904b719bb Prepare 0.31.0 release 2026-02-26 18:13:41 +01:00
763 changed files with 14266 additions and 21993 deletions
-2
View File
@@ -1,4 +1,2 @@
# Auto-format Kotlin code # Auto-format Kotlin code
816cd483c8adf4c04e14236c173a1dc6bd2579ea 816cd483c8adf4c04e14236c173a1dc6bd2579ea
# Format Kotlin code again
2b3603b544bae2ad87374b65afaf8ac018216261
+2 -2
View File
@@ -2,9 +2,9 @@ amends "pkl:Project"
dependencies { dependencies {
["pkl.impl.ghactions"] { ["pkl.impl.ghactions"] {
uri = "package://pkg.pkl-lang.org/pkl-project-commons/pkl.impl.ghactions@1.7.0" uri = "package://pkg.pkl-lang.org/pkl-project-commons/pkl.impl.ghactions@1.3.5"
} }
["gha"] { ["gha"] {
uri = "package://pkg.pkl-lang.org/pkl-pantry/com.github.actions@1.4.0" uri = "package://pkg.pkl-lang.org/pkl-pantry/com.github.actions@1.2.0"
} }
} }
+8 -8
View File
@@ -3,16 +3,16 @@
"resolvedDependencies": { "resolvedDependencies": {
"package://pkg.pkl-lang.org/pkl-pantry/com.github.actions@1": { "package://pkg.pkl-lang.org/pkl-pantry/com.github.actions@1": {
"type": "remote", "type": "remote",
"uri": "projectpackage://pkg.pkl-lang.org/pkl-pantry/com.github.actions@1.6.0", "uri": "projectpackage://pkg.pkl-lang.org/pkl-pantry/com.github.actions@1.3.1",
"checksums": { "checksums": {
"sha256": "10e27d63df4a4520d8a9375962406ca5ffe74f396bd3cb1c19b1f8358505010a" "sha256": "fd515da685ea126678c3ec684e84a4f992d43481cc1d75cb866cd55775f675f9"
} }
}, },
"package://pkg.pkl-lang.org/pkl-project-commons/pkl.impl.ghactions@1": { "package://pkg.pkl-lang.org/pkl-project-commons/pkl.impl.ghactions@1": {
"type": "remote", "type": "remote",
"uri": "projectpackage://pkg.pkl-lang.org/pkl-project-commons/pkl.impl.ghactions@1.7.0", "uri": "projectpackage://pkg.pkl-lang.org/pkl-project-commons/pkl.impl.ghactions@1.3.5",
"checksums": { "checksums": {
"sha256": "962cdba703b50e86ecfda1a1345bf58caa7b4839dd090eae6120024d862793d0" "sha256": "2b26d02c3b244a28e7913457ba195cbf767a1d1079ab2ed469074c4da870de12"
} }
}, },
"package://pkg.pkl-lang.org/pkl-pantry/pkl.experimental.deepToTyped@1": { "package://pkg.pkl-lang.org/pkl-pantry/pkl.experimental.deepToTyped@1": {
@@ -24,16 +24,16 @@
}, },
"package://pkg.pkl-lang.org/pkl-pantry/pkl.github.dependabotManagedActions@1": { "package://pkg.pkl-lang.org/pkl-pantry/pkl.github.dependabotManagedActions@1": {
"type": "remote", "type": "remote",
"uri": "projectpackage://pkg.pkl-lang.org/pkl-pantry/pkl.github.dependabotManagedActions@1.1.3", "uri": "projectpackage://pkg.pkl-lang.org/pkl-pantry/pkl.github.dependabotManagedActions@1.0.3",
"checksums": { "checksums": {
"sha256": "521feb6f5ff12075ebad0758799fe7ec2675d231a0e0f5456694c8d4822a8171" "sha256": "d368900942efb88ed51a98f9614748b06c74ba43423f045fcd6dedb5dbdc0bea"
} }
}, },
"package://pkg.pkl-lang.org/pkl-pantry/com.github.dependabot@1": { "package://pkg.pkl-lang.org/pkl-pantry/com.github.dependabot@1": {
"type": "remote", "type": "remote",
"uri": "projectpackage://pkg.pkl-lang.org/pkl-pantry/com.github.dependabot@1.0.3", "uri": "projectpackage://pkg.pkl-lang.org/pkl-pantry/com.github.dependabot@1.0.0",
"checksums": { "checksums": {
"sha256": "a8934d84ffd11992d7baf6acfd97bae31d6112fa8add5cc8b5b4a722ce5b9ffc" "sha256": "02ef6f25bfca5b1d095db73ea15de79d2d2c6832ebcab61e6aba90554382abcb"
} }
} }
} }
-8
View File
@@ -1,14 +1,6 @@
version: 2 version: 2
updates: updates:
- package-ecosystem: gradle
cooldown:
default-days: 7
directory: /
schedule:
interval: weekly
- package-ecosystem: github-actions - package-ecosystem: github-actions
cooldown:
default-days: 7
directory: / directory: /
ignore: ignore:
- dependency-name: '*' - dependency-name: '*'
+2 -58
View File
@@ -22,8 +22,6 @@ testReports {
excludeJobs { excludeJobs {
"bench" "bench"
"github-release" "github-release"
"dependency-submission"
"dependency-review"
Regex("deploy-.*") Regex("deploy-.*")
} }
} }
@@ -42,15 +40,11 @@ local gradleCheckWindows = (baseGradleCheck) {
os = "windows" os = "windows"
} }
local typealias PklJobs = Mapping<String, PklJob | *Workflow.Job> local typealias PklJobs = Mapping<String, PklJob>
local toWorkflowJobs: (PklJobs) -> Workflow.Jobs = (it) -> new Workflow.Jobs { local toWorkflowJobs: (PklJobs) -> Workflow.Jobs = (it) -> new Workflow.Jobs {
for (k, v in it) { for (k, v in it) {
when (v is PklJob) { [k] = v.job
[k] = v.job
} else {
[k] = v
}
} }
} }
@@ -179,28 +173,6 @@ main {
) { ) {
needs = buildAndTestJobs.keys.toListing() needs = buildAndTestJobs.keys.toListing()
} }
["dependency-submission"] {
`runs-on` = "ubuntu-latest"
permissions {
contents = "write"
}
steps {
module.catalog.`actions/checkout@v6`
(module.catalog.`actions/setup-java@v5`) {
with {
`java-version` = "25"
distribution = "temurin"
}
}
(module.catalog.`gradle/actions/dependency-submission@v6`) {
with {
// language=regexp
`dependency-graph-include-configurations` =
".*[rR]untimeClasspath|.*[cC]ompileClasspath"
}
}
}
}
} |> toWorkflowJobs } |> toWorkflowJobs
} }
@@ -224,31 +196,3 @@ release {
} }
} |> toWorkflowJobs } |> toWorkflowJobs
} }
dependabot {
updates {
new {
`package-ecosystem` = "gradle"
schedule {
interval = "weekly"
}
cooldown {
`default-days` = 7
}
directory = "/"
}
}
}
codeql {
scans {
new {
language = "java-kotlin"
buildMode = "autobuild"
}
new {
language = "javascript-typescript"
buildMode = "none"
}
}
}
+3 -4
View File
@@ -12,7 +12,7 @@ project: String
extraGradleArgs { extraGradleArgs {
when (os == "macOS" && arch == "amd64") { when (os == "macOS" && arch == "amd64") {
"-Dpkl.targetArch=\(module.arch)" "-Dpkl.targetArch=\(module.arch)"
#""-Dpkl.native--native-compiler-path=${GITHUB_WORKSPACE}/.github/scripts/cc_macos_amd64.sh""# "-Dpkl.native--native-compiler-path=\(context.github.workspace)/.github/scripts/cc_macos_amd64.sh"
} }
when (musl) { when (musl) {
"-Dpkl.musl=true" "-Dpkl.musl=true"
@@ -23,8 +23,7 @@ preSteps {
when (os == "linux" && !musl) { when (os == "linux" && !musl) {
new { new {
name = "Install deps" name = "Install deps"
run = run = "dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en"
"dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en"
} }
} }
} }
@@ -41,7 +40,7 @@ steps {
new { new {
name = "Fix git ownership" name = "Fix git ownership"
// language=bash // language=bash
run = #"git status || git config --system --add safe.directory "$GITHUB_WORKSPACE""# run = "git status || git config --system --add safe.directory $GITHUB_WORKSPACE"
} }
} }
new { new {
+4 -24
View File
@@ -3,7 +3,6 @@ abstract module GradleJob
extends "PklJob.pkl" extends "PklJob.pkl"
import "@gha/Workflow.pkl" import "@gha/Workflow.pkl"
import "@gha/context.pkl"
import "@pkl.impl.ghactions/catalog.pkl" import "@pkl.impl.ghactions/catalog.pkl"
/// Whether this is a release build or not. /// Whether this is a release build or not.
@@ -30,7 +29,8 @@ fetchDepth: Int?
fixed gradleArgs = fixed gradleArgs =
new Listing { new Listing {
"$DEBUG_ARGS" "--info"
"--stacktrace"
"--no-daemon" "--no-daemon"
"-DpklMultiJdkTesting=true" "-DpklMultiJdkTesting=true"
when (isRelease) { when (isRelease) {
@@ -81,7 +81,7 @@ fixed job {
} }
(catalog.`actions/setup-java@v5`) { (catalog.`actions/setup-java@v5`) {
with { with {
`java-version` = "25" `java-version` = "21"
distribution = "temurin" distribution = "temurin"
architecture = architecture =
if (arch == "amd64") if (arch == "amd64")
@@ -90,27 +90,7 @@ fixed job {
"aarch64" "aarch64"
} }
} }
(catalog.`gradle/actions/setup-gradle@v5`) { catalog.`gradle/actions/setup-gradle@v5`
when (isRelease) {
with {
`cache-disabled` = true
}
}
}
new {
name = "Set DEBUG_ARGS env var"
env {
["RUNNER_DEBUG"] = context.runner.debug
}
shell = "bash"
// language=bash
run =
"""
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
"""
}
...module.steps ...module.steps
} }
} }
+2 -8
View File
@@ -21,7 +21,7 @@ jobs:
- name: actions/checkout@v6 - name: actions/checkout@v6
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- name: actions/create-github-app-token@v2 - name: actions/create-github-app-token@v2
uses: actions/create-github-app-token@fee1f7d63c2ff003460e3d139729b119787bc349 # v2 uses: actions/create-github-app-token@29824e69f54612133e76f7eaac726eef6c875baf # v2
- name: actions/download-artifact@v6 - name: actions/download-artifact@v6
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6 uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
- name: actions/setup-java@v5 - name: actions/setup-java@v5
@@ -30,11 +30,5 @@ jobs:
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
- name: dawidd6/action-download-artifact@v11 - name: dawidd6/action-download-artifact@v11
uses: dawidd6/action-download-artifact@ac66b43f0e6a346234dd65d4d0c8fbb31cb316e5 # v11 uses: dawidd6/action-download-artifact@ac66b43f0e6a346234dd65d4d0c8fbb31cb316e5 # v11
- name: github/codeql-action/analyze@v4
uses: github/codeql-action/analyze@68bde559dea0fdcac2102bfdf6230c5f70eb485e # v4
- name: github/codeql-action/init@v4
uses: github/codeql-action/init@68bde559dea0fdcac2102bfdf6230c5f70eb485e # v4
- name: gradle/actions/dependency-submission@v6
uses: gradle/actions/dependency-submission@50e97c2cd7a37755bbfafc9c5b7cafaece252f6e # v6
- name: gradle/actions/setup-gradle@v5 - name: gradle/actions/setup-gradle@v5
uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
+55 -191
View File
@@ -25,22 +25,14 @@ jobs:
fetch-depth: 0 fetch-depth: 0
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: check - name: check
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true check run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true check
- name: Upload Test Result XML - name: Upload Test Result XML
if: '!cancelled()' if: '!cancelled()'
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
@@ -66,22 +58,14 @@ jobs:
fetch-depth: 0 fetch-depth: 0
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: check - name: check
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true check run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true check
- name: Upload Test Result XML - name: Upload Test Result XML
if: '!cancelled()' if: '!cancelled()'
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
@@ -105,22 +89,14 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: bench:jmh - name: bench:jmh
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true bench:jmh run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true bench:jmh
gradle-compatibility: gradle-compatibility:
runs-on: ubuntu-latest runs-on: ubuntu-latest
env: env:
@@ -132,22 +108,14 @@ jobs:
fetch-depth: 0 fetch-depth: 0
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: :pkl-gradle:build :pkl-gradle:compatibilityTestReleases - name: :pkl-gradle:build :pkl-gradle:compatibilityTestReleases
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true :pkl-gradle:build :pkl-gradle:compatibilityTestReleases run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true :pkl-gradle:build :pkl-gradle:compatibilityTestReleases
- name: Upload Test Result XML - name: Upload Test Result XML
if: '!cancelled()' if: '!cancelled()'
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
@@ -172,25 +140,17 @@ jobs:
fetch-depth: 0 fetch-depth: 0
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- name: gradle build java executables - name: gradle build java executables
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true pkl-doc:build pkl-cli:build pkl-codegen-java:build pkl-codegen-kotlin:build 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 - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -222,22 +182,14 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true -Dpkl.targetArch=amd64 "-Dpkl.native--native-compiler-path=${GITHUB_WORKSPACE}/.github/scripts/cc_macos_amd64.sh" pkl-cli:buildNative 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 - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -268,24 +220,16 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: Fix git ownership - name: Fix git ownership
run: git status || git config --system --add safe.directory "$GITHUB_WORKSPACE" run: git status || git config --system --add safe.directory $GITHUB_WORKSPACE
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true pkl-cli:buildNative run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-cli:buildNative
- name: Upload executable artifacts - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -319,22 +263,14 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: aarch64 architecture: aarch64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true pkl-cli:buildNative run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-cli:buildNative
- name: Upload executable artifacts - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -365,24 +301,16 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: aarch64 architecture: aarch64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: Fix git ownership - name: Fix git ownership
run: git status || git config --system --add safe.directory "$GITHUB_WORKSPACE" run: git status || git config --system --add safe.directory $GITHUB_WORKSPACE
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true pkl-cli:buildNative run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-cli:buildNative
- name: Upload executable artifacts - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -413,19 +341,11 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: Install musl and zlib - name: Install musl and zlib
run: | run: |
set -e set -e
@@ -501,7 +421,7 @@ jobs:
echo "${HOME}/staticdeps/bin" >> "$GITHUB_PATH" echo "${HOME}/staticdeps/bin" >> "$GITHUB_PATH"
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true -Dpkl.musl=true pkl-cli:buildNative run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true -Dpkl.musl=true pkl-cli:buildNative
- name: Upload executable artifacts - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -531,22 +451,14 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true pkl-cli:buildNative run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-cli:buildNative
- name: Upload executable artifacts - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -578,22 +490,14 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true -Dpkl.targetArch=amd64 "-Dpkl.native--native-compiler-path=${GITHUB_WORKSPACE}/.github/scripts/cc_macos_amd64.sh" pkl-doc:buildNative 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 - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -624,24 +528,16 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: Fix git ownership - name: Fix git ownership
run: git status || git config --system --add safe.directory "$GITHUB_WORKSPACE" run: git status || git config --system --add safe.directory $GITHUB_WORKSPACE
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true pkl-doc:buildNative run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-doc:buildNative
- name: Upload executable artifacts - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -675,22 +571,14 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: aarch64 architecture: aarch64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true pkl-doc:buildNative run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-doc:buildNative
- name: Upload executable artifacts - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -721,24 +609,16 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: aarch64 architecture: aarch64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: Fix git ownership - name: Fix git ownership
run: git status || git config --system --add safe.directory "$GITHUB_WORKSPACE" run: git status || git config --system --add safe.directory $GITHUB_WORKSPACE
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true pkl-doc:buildNative run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-doc:buildNative
- name: Upload executable artifacts - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -769,19 +649,11 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: Install musl and zlib - name: Install musl and zlib
run: | run: |
set -e set -e
@@ -857,7 +729,7 @@ jobs:
echo "${HOME}/staticdeps/bin" >> "$GITHUB_PATH" echo "${HOME}/staticdeps/bin" >> "$GITHUB_PATH"
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true -Dpkl.musl=true pkl-doc:buildNative run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true -Dpkl.musl=true pkl-doc:buildNative
- name: Upload executable artifacts - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -887,22 +759,14 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true pkl-doc:buildNative run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-doc:buildNative
- name: Upload executable artifacts - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
-62
View File
@@ -1,62 +0,0 @@
# Generated from Workflow.pkl. DO NOT EDIT.
'on':
pull_request:
branches:
- main
push:
branches:
- main
schedule:
- cron: 29 17 * * 4
jobs:
analyze-actions:
name: Analyze (actions)
permissions:
security-events: write
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
persist-credentials: false
- uses: github/codeql-action/init@68bde559dea0fdcac2102bfdf6230c5f70eb485e # v4
with:
languages: actions
build-mode: none
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@68bde559dea0fdcac2102bfdf6230c5f70eb485e # v4
with:
category: /language:actions
analyze-java-kotlin:
name: Analyze (java-kotlin)
permissions:
security-events: write
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
persist-credentials: false
- uses: github/codeql-action/init@68bde559dea0fdcac2102bfdf6230c5f70eb485e # v4
with:
languages: java-kotlin
build-mode: autobuild
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@68bde559dea0fdcac2102bfdf6230c5f70eb485e # v4
with:
category: /language:java-kotlin
analyze-javascript-typescript:
name: Analyze (javascript-typescript)
permissions:
security-events: write
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
persist-credentials: false
- uses: github/codeql-action/init@68bde559dea0fdcac2102bfdf6230c5f70eb485e # v4
with:
languages: javascript-typescript
build-mode: none
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@68bde559dea0fdcac2102bfdf6230c5f70eb485e # v4
with:
category: /language:javascript-typescript
+60 -221
View File
@@ -23,22 +23,14 @@ jobs:
fetch-depth: 0 fetch-depth: 0
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: check - name: check
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true check run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true check
- name: Upload Test Result XML - name: Upload Test Result XML
if: '!cancelled()' if: '!cancelled()'
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
@@ -64,22 +56,14 @@ jobs:
fetch-depth: 0 fetch-depth: 0
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: check - name: check
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true check run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true check
- name: Upload Test Result XML - name: Upload Test Result XML
if: '!cancelled()' if: '!cancelled()'
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
@@ -103,22 +87,14 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: bench:jmh - name: bench:jmh
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true bench:jmh run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true bench:jmh
gradle-compatibility: gradle-compatibility:
runs-on: ubuntu-latest runs-on: ubuntu-latest
env: env:
@@ -130,22 +106,14 @@ jobs:
fetch-depth: 0 fetch-depth: 0
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: :pkl-gradle:build :pkl-gradle:compatibilityTestReleases - name: :pkl-gradle:build :pkl-gradle:compatibilityTestReleases
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true :pkl-gradle:build :pkl-gradle:compatibilityTestReleases run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true :pkl-gradle:build :pkl-gradle:compatibilityTestReleases
- name: Upload Test Result XML - name: Upload Test Result XML
if: '!cancelled()' if: '!cancelled()'
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
@@ -170,25 +138,17 @@ jobs:
fetch-depth: 0 fetch-depth: 0
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- name: gradle build java executables - name: gradle build java executables
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true pkl-doc:build pkl-cli:build pkl-codegen-java:build pkl-codegen-kotlin:build 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 - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -220,22 +180,14 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true -Dpkl.targetArch=amd64 "-Dpkl.native--native-compiler-path=${GITHUB_WORKSPACE}/.github/scripts/cc_macos_amd64.sh" pkl-cli:buildNative 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 - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -266,24 +218,16 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: Fix git ownership - name: Fix git ownership
run: git status || git config --system --add safe.directory "$GITHUB_WORKSPACE" run: git status || git config --system --add safe.directory $GITHUB_WORKSPACE
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true pkl-cli:buildNative run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-cli:buildNative
- name: Upload executable artifacts - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -317,22 +261,14 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: aarch64 architecture: aarch64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true pkl-cli:buildNative run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-cli:buildNative
- name: Upload executable artifacts - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -363,24 +299,16 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: aarch64 architecture: aarch64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: Fix git ownership - name: Fix git ownership
run: git status || git config --system --add safe.directory "$GITHUB_WORKSPACE" run: git status || git config --system --add safe.directory $GITHUB_WORKSPACE
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true pkl-cli:buildNative run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-cli:buildNative
- name: Upload executable artifacts - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -411,19 +339,11 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: Install musl and zlib - name: Install musl and zlib
run: | run: |
set -e set -e
@@ -499,7 +419,7 @@ jobs:
echo "${HOME}/staticdeps/bin" >> "$GITHUB_PATH" echo "${HOME}/staticdeps/bin" >> "$GITHUB_PATH"
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true -Dpkl.musl=true pkl-cli:buildNative run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true -Dpkl.musl=true pkl-cli:buildNative
- name: Upload executable artifacts - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -529,22 +449,14 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true pkl-cli:buildNative run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-cli:buildNative
- name: Upload executable artifacts - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -576,22 +488,14 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true -Dpkl.targetArch=amd64 "-Dpkl.native--native-compiler-path=${GITHUB_WORKSPACE}/.github/scripts/cc_macos_amd64.sh" pkl-doc:buildNative 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 - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -622,24 +526,16 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: Fix git ownership - name: Fix git ownership
run: git status || git config --system --add safe.directory "$GITHUB_WORKSPACE" run: git status || git config --system --add safe.directory $GITHUB_WORKSPACE
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true pkl-doc:buildNative run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-doc:buildNative
- name: Upload executable artifacts - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -673,22 +569,14 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: aarch64 architecture: aarch64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true pkl-doc:buildNative run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-doc:buildNative
- name: Upload executable artifacts - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -719,24 +607,16 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: aarch64 architecture: aarch64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: Fix git ownership - name: Fix git ownership
run: git status || git config --system --add safe.directory "$GITHUB_WORKSPACE" run: git status || git config --system --add safe.directory $GITHUB_WORKSPACE
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true pkl-doc:buildNative run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-doc:buildNative
- name: Upload executable artifacts - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -767,19 +647,11 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: Install musl and zlib - name: Install musl and zlib
run: | run: |
set -e set -e
@@ -855,7 +727,7 @@ jobs:
echo "${HOME}/staticdeps/bin" >> "$GITHUB_PATH" echo "${HOME}/staticdeps/bin" >> "$GITHUB_PATH"
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true -Dpkl.musl=true pkl-doc:buildNative run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true -Dpkl.musl=true pkl-doc:buildNative
- name: Upload executable artifacts - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -885,22 +757,14 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true pkl-doc:buildNative run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-doc:buildNative
- name: Upload executable artifacts - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -948,19 +812,11 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
@@ -974,22 +830,7 @@ jobs:
ORG_GRADLE_PROJECT_signingPassword: ${{ secrets.ORG_GRADLE_PROJECT_SIGNINGPASSWORD }} ORG_GRADLE_PROJECT_signingPassword: ${{ secrets.ORG_GRADLE_PROJECT_SIGNINGPASSWORD }}
ORG_GRADLE_PROJECT_sonatypePassword: ${{ secrets.ORG_GRADLE_PROJECT_SONATYPEPASSWORD }} ORG_GRADLE_PROJECT_sonatypePassword: ${{ secrets.ORG_GRADLE_PROJECT_SONATYPEPASSWORD }}
ORG_GRADLE_PROJECT_sonatypeUsername: ${{ secrets.ORG_GRADLE_PROJECT_SONATYPEUSERNAME }} ORG_GRADLE_PROJECT_sonatypeUsername: ${{ secrets.ORG_GRADLE_PROJECT_SONATYPEUSERNAME }}
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true --no-parallel publishToSonatype run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true --no-parallel publishToSonatype
dependency-submission:
permissions:
contents: write
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with:
java-version: '25'
distribution: temurin
- uses: gradle/actions/dependency-submission@50e97c2cd7a37755bbfafc9c5b7cafaece252f6e # v6
with:
dependency-graph-include-configurations: .*[rR]untimeClasspath|.*[cC]ompileClasspath
publish-test-results: publish-test-results:
if: '!cancelled()' if: '!cancelled()'
needs: needs:
@@ -1050,13 +891,12 @@ jobs:
- pkl-doc-alpine-linux-amd64-snapshot - pkl-doc-alpine-linux-amd64-snapshot
- pkl-doc-windows-amd64-snapshot - pkl-doc-windows-amd64-snapshot
- deploy-snapshot - deploy-snapshot
- dependency-submission
- publish-test-results - publish-test-results
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Create app token - name: Create app token
id: app-token id: app-token
uses: actions/create-github-app-token@fee1f7d63c2ff003460e3d139729b119787bc349 # v2 uses: actions/create-github-app-token@29824e69f54612133e76f7eaac726eef6c875baf # v2
with: with:
app-id: ${{ secrets.PKL_CI_CLIENT_ID }} app-id: ${{ secrets.PKL_CI_CLIENT_ID }}
private-key: ${{ secrets.PKL_CI }} private-key: ${{ secrets.PKL_CI }}
@@ -1064,10 +904,9 @@ jobs:
- name: Trigger pkl-lang.org build - name: Trigger pkl-lang.org build
env: env:
GH_TOKEN: ${{ steps.app-token.outputs.token }} GH_TOKEN: ${{ steps.app-token.outputs.token }}
SOURCE_RUN: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
run: |- run: |-
gh workflow run \ gh workflow run \
--repo apple/pkl-lang.org \ --repo apple/pkl-lang.org \
--ref main \ --ref main \
--field source_run="${SOURCE_RUN}" \ --field source_run="${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" \
main.yml main.yml
+46 -158
View File
@@ -19,22 +19,14 @@ jobs:
fetch-depth: 0 fetch-depth: 0
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: check - name: check
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true check run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true check
- name: Upload Test Result XML - name: Upload Test Result XML
if: '!cancelled()' if: '!cancelled()'
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
@@ -62,22 +54,14 @@ jobs:
fetch-depth: 0 fetch-depth: 0
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: check - name: check
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true check run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true check
- name: Upload Test Result XML - name: Upload Test Result XML
if: '!cancelled()' if: '!cancelled()'
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
@@ -105,22 +89,14 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true -Dpkl.targetArch=amd64 "-Dpkl.native--native-compiler-path=${GITHUB_WORKSPACE}/.github/scripts/cc_macos_amd64.sh" pkl-cli:buildNative 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 - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -153,24 +129,16 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: Fix git ownership - name: Fix git ownership
run: git status || git config --system --add safe.directory "$GITHUB_WORKSPACE" run: git status || git config --system --add safe.directory $GITHUB_WORKSPACE
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true pkl-cli:buildNative run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-cli:buildNative
- name: Upload executable artifacts - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -205,22 +173,14 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: aarch64 architecture: aarch64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true pkl-cli:buildNative run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-cli:buildNative
- name: Upload executable artifacts - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -253,24 +213,16 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: aarch64 architecture: aarch64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: Fix git ownership - name: Fix git ownership
run: git status || git config --system --add safe.directory "$GITHUB_WORKSPACE" run: git status || git config --system --add safe.directory $GITHUB_WORKSPACE
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true pkl-cli:buildNative run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-cli:buildNative
- name: Upload executable artifacts - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -303,19 +255,11 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: Install musl and zlib - name: Install musl and zlib
run: | run: |
set -e set -e
@@ -391,7 +335,7 @@ jobs:
echo "${HOME}/staticdeps/bin" >> "$GITHUB_PATH" echo "${HOME}/staticdeps/bin" >> "$GITHUB_PATH"
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true -Dpkl.musl=true pkl-cli:buildNative run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true -Dpkl.musl=true pkl-cli:buildNative
- name: Upload executable artifacts - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -423,22 +367,14 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true pkl-cli:buildNative run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-cli:buildNative
- name: Upload executable artifacts - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -471,22 +407,14 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true -Dpkl.targetArch=amd64 "-Dpkl.native--native-compiler-path=${GITHUB_WORKSPACE}/.github/scripts/cc_macos_amd64.sh" pkl-doc:buildNative 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 - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -519,24 +447,16 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: Fix git ownership - name: Fix git ownership
run: git status || git config --system --add safe.directory "$GITHUB_WORKSPACE" run: git status || git config --system --add safe.directory $GITHUB_WORKSPACE
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true pkl-doc:buildNative run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-doc:buildNative
- name: Upload executable artifacts - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -571,22 +491,14 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: aarch64 architecture: aarch64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true pkl-doc:buildNative run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-doc:buildNative
- name: Upload executable artifacts - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -619,24 +531,16 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: aarch64 architecture: aarch64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: Fix git ownership - name: Fix git ownership
run: git status || git config --system --add safe.directory "$GITHUB_WORKSPACE" run: git status || git config --system --add safe.directory $GITHUB_WORKSPACE
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true pkl-doc:buildNative run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-doc:buildNative
- name: Upload executable artifacts - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -669,19 +573,11 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: Install musl and zlib - name: Install musl and zlib
run: | run: |
set -e set -e
@@ -757,7 +653,7 @@ jobs:
echo "${HOME}/staticdeps/bin" >> "$GITHUB_PATH" echo "${HOME}/staticdeps/bin" >> "$GITHUB_PATH"
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true -Dpkl.musl=true pkl-doc:buildNative run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true -Dpkl.musl=true pkl-doc:buildNative
- name: Upload executable artifacts - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -789,22 +685,14 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true pkl-doc:buildNative run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-doc:buildNative
- name: Upload executable artifacts - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
+57 -194
View File
@@ -23,22 +23,14 @@ jobs:
fetch-depth: 0 fetch-depth: 0
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: check - name: check
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true check run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true check
- name: Upload Test Result XML - name: Upload Test Result XML
if: '!cancelled()' if: '!cancelled()'
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
@@ -64,22 +56,14 @@ jobs:
fetch-depth: 0 fetch-depth: 0
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: check - name: check
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true check run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true check
- name: Upload Test Result XML - name: Upload Test Result XML
if: '!cancelled()' if: '!cancelled()'
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
@@ -103,22 +87,14 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: bench:jmh - name: bench:jmh
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true bench:jmh run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true bench:jmh
gradle-compatibility: gradle-compatibility:
runs-on: ubuntu-latest runs-on: ubuntu-latest
env: env:
@@ -130,22 +106,14 @@ jobs:
fetch-depth: 0 fetch-depth: 0
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: :pkl-gradle:build :pkl-gradle:compatibilityTestReleases - name: :pkl-gradle:build :pkl-gradle:compatibilityTestReleases
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true :pkl-gradle:build :pkl-gradle:compatibilityTestReleases run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true :pkl-gradle:build :pkl-gradle:compatibilityTestReleases
- name: Upload Test Result XML - name: Upload Test Result XML
if: '!cancelled()' if: '!cancelled()'
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
@@ -170,25 +138,17 @@ jobs:
fetch-depth: 0 fetch-depth: 0
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- name: gradle build java executables - name: gradle build java executables
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true pkl-doc:build pkl-cli:build pkl-codegen-java:build pkl-codegen-kotlin:build 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 - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -220,22 +180,14 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true -Dpkl.targetArch=amd64 "-Dpkl.native--native-compiler-path=${GITHUB_WORKSPACE}/.github/scripts/cc_macos_amd64.sh" pkl-cli:buildNative 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 - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -266,24 +218,16 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: Fix git ownership - name: Fix git ownership
run: git status || git config --system --add safe.directory "$GITHUB_WORKSPACE" run: git status || git config --system --add safe.directory $GITHUB_WORKSPACE
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true pkl-cli:buildNative run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-cli:buildNative
- name: Upload executable artifacts - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -317,22 +261,14 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: aarch64 architecture: aarch64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true pkl-cli:buildNative run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-cli:buildNative
- name: Upload executable artifacts - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -363,24 +299,16 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: aarch64 architecture: aarch64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: Fix git ownership - name: Fix git ownership
run: git status || git config --system --add safe.directory "$GITHUB_WORKSPACE" run: git status || git config --system --add safe.directory $GITHUB_WORKSPACE
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true pkl-cli:buildNative run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-cli:buildNative
- name: Upload executable artifacts - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -411,19 +339,11 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: Install musl and zlib - name: Install musl and zlib
run: | run: |
set -e set -e
@@ -499,7 +419,7 @@ jobs:
echo "${HOME}/staticdeps/bin" >> "$GITHUB_PATH" echo "${HOME}/staticdeps/bin" >> "$GITHUB_PATH"
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true -Dpkl.musl=true pkl-cli:buildNative run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true -Dpkl.musl=true pkl-cli:buildNative
- name: Upload executable artifacts - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -529,22 +449,14 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true pkl-cli:buildNative run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-cli:buildNative
- name: Upload executable artifacts - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -576,22 +488,14 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true -Dpkl.targetArch=amd64 "-Dpkl.native--native-compiler-path=${GITHUB_WORKSPACE}/.github/scripts/cc_macos_amd64.sh" pkl-doc:buildNative 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 - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -622,24 +526,16 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: Fix git ownership - name: Fix git ownership
run: git status || git config --system --add safe.directory "$GITHUB_WORKSPACE" run: git status || git config --system --add safe.directory $GITHUB_WORKSPACE
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true pkl-doc:buildNative run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-doc:buildNative
- name: Upload executable artifacts - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -673,22 +569,14 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: aarch64 architecture: aarch64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true pkl-doc:buildNative run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-doc:buildNative
- name: Upload executable artifacts - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -719,24 +607,16 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: aarch64 architecture: aarch64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: Fix git ownership - name: Fix git ownership
run: git status || git config --system --add safe.directory "$GITHUB_WORKSPACE" run: git status || git config --system --add safe.directory $GITHUB_WORKSPACE
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true pkl-doc:buildNative run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-doc:buildNative
- name: Upload executable artifacts - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -767,19 +647,11 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: Install musl and zlib - name: Install musl and zlib
run: | run: |
set -e set -e
@@ -855,7 +727,7 @@ jobs:
echo "${HOME}/staticdeps/bin" >> "$GITHUB_PATH" echo "${HOME}/staticdeps/bin" >> "$GITHUB_PATH"
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true -Dpkl.musl=true pkl-doc:buildNative run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true -Dpkl.musl=true pkl-doc:buildNative
- name: Upload executable artifacts - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -885,22 +757,14 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true pkl-doc:buildNative run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true pkl-doc:buildNative
- name: Upload executable artifacts - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -983,7 +847,7 @@ jobs:
steps: steps:
- name: Create app token - name: Create app token
id: app-token id: app-token
uses: actions/create-github-app-token@fee1f7d63c2ff003460e3d139729b119787bc349 # v2 uses: actions/create-github-app-token@29824e69f54612133e76f7eaac726eef6c875baf # v2
with: with:
app-id: ${{ secrets.PKL_CI_CLIENT_ID }} app-id: ${{ secrets.PKL_CI_CLIENT_ID }}
private-key: ${{ secrets.PKL_CI }} private-key: ${{ secrets.PKL_CI }}
@@ -991,10 +855,9 @@ jobs:
- name: Trigger pkl-lang.org build - name: Trigger pkl-lang.org build
env: env:
GH_TOKEN: ${{ steps.app-token.outputs.token }} GH_TOKEN: ${{ steps.app-token.outputs.token }}
SOURCE_RUN: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
run: |- run: |-
gh workflow run \ gh workflow run \
--repo apple/pkl-lang.org \ --repo apple/pkl-lang.org \
--ref main \ --ref main \
--field source_run="${SOURCE_RUN}" \ --field source_run="${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" \
main.yml main.yml
+74 -233
View File
@@ -23,22 +23,14 @@ jobs:
fetch-depth: 0 fetch-depth: 0
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: check - name: check
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true check run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true check
- name: Upload Test Result XML - name: Upload Test Result XML
if: '!cancelled()' if: '!cancelled()'
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
@@ -64,22 +56,14 @@ jobs:
fetch-depth: 0 fetch-depth: 0
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: check - name: check
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true check run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true check
- name: Upload Test Result XML - name: Upload Test Result XML
if: '!cancelled()' if: '!cancelled()'
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
@@ -103,22 +87,14 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: bench:jmh - name: bench:jmh
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true bench:jmh run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true bench:jmh
gradle-compatibility: gradle-compatibility:
runs-on: ubuntu-latest runs-on: ubuntu-latest
env: env:
@@ -130,22 +106,14 @@ jobs:
fetch-depth: 0 fetch-depth: 0
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: :pkl-gradle:build :pkl-gradle:compatibilityTestReleases - name: :pkl-gradle:build :pkl-gradle:compatibilityTestReleases
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true :pkl-gradle:build :pkl-gradle:compatibilityTestReleases run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true :pkl-gradle:build :pkl-gradle:compatibilityTestReleases
- name: Upload Test Result XML - name: Upload Test Result XML
if: '!cancelled()' if: '!cancelled()'
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
@@ -170,26 +138,17 @@ jobs:
fetch-depth: 0 fetch-depth: 0
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: with: {}
cache-disabled: true
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- name: gradle build java executables - name: gradle build java executables
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true -DreleaseBuild=true pkl-doc:build pkl-cli:build pkl-codegen-java:build pkl-codegen-kotlin:build 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 - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -221,23 +180,14 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: with: {}
cache-disabled: true
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --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 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 - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -268,25 +218,16 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: with: {}
cache-disabled: true
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: Fix git ownership - name: Fix git ownership
run: git status || git config --system --add safe.directory "$GITHUB_WORKSPACE" run: git status || git config --system --add safe.directory $GITHUB_WORKSPACE
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true -DreleaseBuild=true pkl-cli:buildNative run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true -DreleaseBuild=true pkl-cli:buildNative
- name: Upload executable artifacts - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -320,23 +261,14 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: aarch64 architecture: aarch64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: with: {}
cache-disabled: true
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true -DreleaseBuild=true pkl-cli:buildNative run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true -DreleaseBuild=true pkl-cli:buildNative
- name: Upload executable artifacts - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -367,25 +299,16 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: aarch64 architecture: aarch64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: with: {}
cache-disabled: true
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: Fix git ownership - name: Fix git ownership
run: git status || git config --system --add safe.directory "$GITHUB_WORKSPACE" run: git status || git config --system --add safe.directory $GITHUB_WORKSPACE
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true -DreleaseBuild=true pkl-cli:buildNative run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true -DreleaseBuild=true pkl-cli:buildNative
- name: Upload executable artifacts - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -416,20 +339,11 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: with: {}
cache-disabled: true
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: Install musl and zlib - name: Install musl and zlib
run: | run: |
set -e set -e
@@ -505,7 +419,7 @@ jobs:
echo "${HOME}/staticdeps/bin" >> "$GITHUB_PATH" echo "${HOME}/staticdeps/bin" >> "$GITHUB_PATH"
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true -DreleaseBuild=true -Dpkl.musl=true pkl-cli:buildNative run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true -DreleaseBuild=true -Dpkl.musl=true pkl-cli:buildNative
- name: Upload executable artifacts - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -535,23 +449,14 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: with: {}
cache-disabled: true
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true -DreleaseBuild=true pkl-cli:buildNative run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true -DreleaseBuild=true pkl-cli:buildNative
- name: Upload executable artifacts - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -583,23 +488,14 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: with: {}
cache-disabled: true
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --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 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 - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -630,25 +526,16 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: with: {}
cache-disabled: true
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: Fix git ownership - name: Fix git ownership
run: git status || git config --system --add safe.directory "$GITHUB_WORKSPACE" run: git status || git config --system --add safe.directory $GITHUB_WORKSPACE
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true -DreleaseBuild=true pkl-doc:buildNative run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true -DreleaseBuild=true pkl-doc:buildNative
- name: Upload executable artifacts - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -682,23 +569,14 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: aarch64 architecture: aarch64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: with: {}
cache-disabled: true
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true -DreleaseBuild=true pkl-doc:buildNative run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true -DreleaseBuild=true pkl-doc:buildNative
- name: Upload executable artifacts - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -729,25 +607,16 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: aarch64 architecture: aarch64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: with: {}
cache-disabled: true
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: Fix git ownership - name: Fix git ownership
run: git status || git config --system --add safe.directory "$GITHUB_WORKSPACE" run: git status || git config --system --add safe.directory $GITHUB_WORKSPACE
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true -DreleaseBuild=true pkl-doc:buildNative run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true -DreleaseBuild=true pkl-doc:buildNative
- name: Upload executable artifacts - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -778,20 +647,11 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: with: {}
cache-disabled: true
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: Install musl and zlib - name: Install musl and zlib
run: | run: |
set -e set -e
@@ -867,7 +727,7 @@ jobs:
echo "${HOME}/staticdeps/bin" >> "$GITHUB_PATH" echo "${HOME}/staticdeps/bin" >> "$GITHUB_PATH"
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true -DreleaseBuild=true -Dpkl.musl=true pkl-doc:buildNative run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true -DreleaseBuild=true -Dpkl.musl=true pkl-doc:buildNative
- name: Upload executable artifacts - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -897,23 +757,14 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: with: {}
cache-disabled: true
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- name: gradle buildNative - name: gradle buildNative
shell: bash shell: bash
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true -DreleaseBuild=true pkl-doc:buildNative run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true -DreleaseBuild=true pkl-doc:buildNative
- name: Upload executable artifacts - name: Upload executable artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with: with:
@@ -961,20 +812,11 @@ jobs:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '21'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # v5
with: with: {}
cache-disabled: true
- name: Set DEBUG_ARGS env var
env:
RUNNER_DEBUG: ${{ runner.debug }}
shell: bash
run: |-
if [[ "$RUNNER_DEBUG" -eq 1 ]]; then
echo "DEBUG_ARGS=--info --stacktrace" >> $GITHUB_ENV
fi
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
@@ -988,7 +830,7 @@ jobs:
ORG_GRADLE_PROJECT_signingPassword: ${{ secrets.ORG_GRADLE_PROJECT_SIGNINGPASSWORD }} ORG_GRADLE_PROJECT_signingPassword: ${{ secrets.ORG_GRADLE_PROJECT_SIGNINGPASSWORD }}
ORG_GRADLE_PROJECT_sonatypePassword: ${{ secrets.ORG_GRADLE_PROJECT_SONATYPEPASSWORD }} ORG_GRADLE_PROJECT_sonatypePassword: ${{ secrets.ORG_GRADLE_PROJECT_SONATYPEPASSWORD }}
ORG_GRADLE_PROJECT_sonatypeUsername: ${{ secrets.ORG_GRADLE_PROJECT_SONATYPEUSERNAME }} ORG_GRADLE_PROJECT_sonatypeUsername: ${{ secrets.ORG_GRADLE_PROJECT_SONATYPEUSERNAME }}
run: ./gradlew $DEBUG_ARGS --no-daemon -DpklMultiJdkTesting=true -DreleaseBuild=true publishToSonatype closeAndReleaseSonatypeStagingRepository run: ./gradlew --info --stacktrace --no-daemon -DpklMultiJdkTesting=true -DreleaseBuild=true publishToSonatype closeAndReleaseSonatypeStagingRepository
github-release: github-release:
needs: deploy-release needs: deploy-release
permissions: permissions:
@@ -1081,7 +923,7 @@ jobs:
steps: steps:
- name: Create app token - name: Create app token
id: app-token id: app-token
uses: actions/create-github-app-token@fee1f7d63c2ff003460e3d139729b119787bc349 # v2 uses: actions/create-github-app-token@29824e69f54612133e76f7eaac726eef6c875baf # v2
with: with:
app-id: ${{ secrets.PKL_CI_CLIENT_ID }} app-id: ${{ secrets.PKL_CI_CLIENT_ID }}
private-key: ${{ secrets.PKL_CI }} private-key: ${{ secrets.PKL_CI }}
@@ -1089,10 +931,9 @@ jobs:
- name: Trigger pkl-lang.org build - name: Trigger pkl-lang.org build
env: env:
GH_TOKEN: ${{ steps.app-token.outputs.token }} GH_TOKEN: ${{ steps.app-token.outputs.token }}
SOURCE_RUN: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
run: |- run: |-
gh workflow run \ gh workflow run \
--repo apple/pkl-lang.org \ --repo apple/pkl-lang.org \
--ref main \ --ref main \
--field source_run="${SOURCE_RUN}" \ --field source_run="${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" \
main.yml main.yml
+10
View File
@@ -10,6 +10,16 @@
<option name="INSERT_INNER_CLASS_IMPORTS" value="true" /> <option name="INSERT_INNER_CLASS_IMPORTS" value="true" />
<option name="CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND" value="999" /> <option name="CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND" value="999" />
<option name="NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND" value="999" /> <option name="NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND" value="999" />
<option name="PACKAGES_TO_USE_IMPORT_ON_DEMAND">
<value />
</option>
<option name="IMPORT_LAYOUT_TABLE">
<value>
<package name="" withSubpackages="true" static="true" />
<emptyLine />
<package name="" withSubpackages="true" static="false" />
</value>
</option>
<option name="RIGHT_MARGIN" value="100" /> <option name="RIGHT_MARGIN" value="100" />
<option name="KEEP_BLANK_LINES_IN_CODE" value="1" /> <option name="KEEP_BLANK_LINES_IN_CODE" value="1" />
<option name="KEEP_CONTROL_STATEMENT_IN_ONE_LINE" value="false" /> <option name="KEEP_CONTROL_STATEMENT_IN_ONE_LINE" value="false" />
-22
View File
@@ -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>
+13 -6
View File
@@ -13,11 +13,11 @@ To import the project into IntelliJ, go to File->Open and select the project's r
If the project is opened but not imported, look for a popup in the lower right corner If the project is opened but not imported, look for a popup in the lower right corner
and click its "Import Gradle Project" link. and click its "Import Gradle Project" link.
. (recommended) Install {uri-gng}[gng] + . (recommended) Install {uri-gng}[gng] +
_gng_ enables you to run Gradle commands with `gw` (instead of `./gradlew`) from any subdirectory. _gng_ enables to run Gradle commands with `gw` (instead of `./gradlew`) from any subdirectory.
. (recommended) Set up Git ignore-revs + . (recommended) Set up Git ignore-revs +
`git config blame.ignoreRevsFile .git-blame-ignore-revs` `git config blame.ignoreRevsFile .git-blame-ignore-revs`
. (recommended) Install {uri-jenv}[jenv] and plugins + . (recommended) Install {uri-jenv}[jenv] and plugins +
_jenv_ uses specific JDK versions in certain subdirectories. _Pkl_ comes with a `.java-version` file specifying JDK 21. + _jenv_ use specific JDK versions in certain subdirectories. _Pkl_ comes with a `.java-version` file specifying JDK 21. +
Enable _jenv_ plugins for better handling by `gradle`: Enable _jenv_ plugins for better handling by `gradle`:
+ +
[source,shell] [source,shell]
@@ -74,7 +74,9 @@ gw wrapper --gradle-version [version] --gradle-distribution-sha256-sum [sha]
. (optional) Update _gradle/libs.version.toml_ . (optional) Update _gradle/libs.version.toml_
based on version information from https://search.maven.org, https://plugins.gradle.org, and GitHub repos based on version information from https://search.maven.org, https://plugins.gradle.org, and GitHub repos
. Run `gw updateDependencyLocks`
. Validate changes with `gw build buildNative` . Validate changes with `gw build buildNative`
. Review and commit the updated dependency lock files
== Code Generation == Code Generation
@@ -90,9 +92,14 @@ Example: `./gradlew test -Djvmdebug=true`
== Snippet Test Plugin == Snippet Test Plugin
There is an IntelliJ plugin meant for development on the Pkl project itself located in https://github.com/apple/pkl-project-commons[pkl-project-commons]. 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.
See https://github.com/apple/pkl-project-commons?tab=readme-ov-file#internal-intellij-plugin[its readme] for instructions on how to set it up. 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
@@ -103,12 +110,12 @@ For automated build setup examples see our https://github.com/apple/pkl/blob/mai
* http://ssw.jku.at/Research/Projects/JVM/Truffle.html[Homepage] * http://ssw.jku.at/Research/Projects/JVM/Truffle.html[Homepage]
* https://github.com/graalvm/truffle[GitHub] * https://github.com/graalvm/truffle[GitHub]
* http://lafo.ssw.uni-linz.ac.at/javadoc/truffle/latest/[Javadoc] * http://lafo.ssw.uni-linz.ac.at/javadoc/truffle/latest/[Javadoc]
* https://mail.openjdk.org/pipermail/graal-dev/[Mailing List] * http://mail.openjdk.java.net/pipermail/graal-dev/[Mailing List]
* https://medium.com/@octskyward/graal-truffle-134d8f28fb69#.2db370y2g[Graal & Truffle (Article)] * https://medium.com/@octskyward/graal-truffle-134d8f28fb69#.2db370y2g[Graal & Truffle (Article)]
* https://comserv.cs.ut.ee/home/files/Pool_ComputerScience_2016.pdf?study=ATILoputoo&reference=6319668E7151D556131810BC3F4A627D7FEF5F3B[Truffle Overview (see chapter 1)] * https://comserv.cs.ut.ee/home/files/Pool_ComputerScience_2016.pdf?study=ATILoputoo&reference=6319668E7151D556131810BC3F4A627D7FEF5F3B[Truffle Overview (see chapter 1)]
* https://gist.github.com/smarr/d1f8f2101b5cc8e14e12[Truffle: Languages and Material] * https://gist.github.com/smarr/d1f8f2101b5cc8e14e12[Truffle: Languages and Material]
* https://github.com/smarr/truffle-notes[Truffle Notes] * https://github.com/smarr/truffle-notes[Truffle Notes]
* https://www.graalvm.org/latest/graalvm-as-a-platform/language-implementation-framework/[Truffle Language Implementation Framework] * https://wiki.openjdk.java.net/display/Graal/Truffle+FAQ+and+Guidelines[Truffle FAQ]
=== Other Config Languages === Other Config Languages
+1 -1
View File
@@ -1,4 +1,4 @@
Copyright © 2024-2026 Apple Inc. and the Pkl project authors Copyright © 2024-2025 Apple Inc. and the Pkl project authors
Portions of this software were originally based on 'SnakeYAML' developed by Andrey Somov. Portions of this software were originally based on 'SnakeYAML' developed by Andrey Somov.
+3 -3
View File
@@ -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.
@@ -14,8 +14,8 @@
* limitations under the License. * limitations under the License.
*/ */
plugins { plugins {
id("pklAllProjects") pklAllProjects
id("pklJavaLibrary") pklJavaLibrary
id("me.champeau.jmh") id("me.champeau.jmh")
} }
+69
View File
@@ -0,0 +1,69 @@
# This is a Gradle generated file for dependency locking.
# Manual edits can break the build and are not advised.
# This file is expected to be part of source control.
com.github.ben-manes.caffeine:caffeine:2.9.3=swiftExportClasspathResolvable
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
org.apache.commons:commons-math3:3.6.1=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath
org.apiguardian:apiguardian-api:1.1.2=jmhCompileClasspath,jmhImplementationDependenciesMetadata,testCompileClasspath,testImplementationDependenciesMetadata
org.assertj:assertj-core:3.27.6=jmh,jmhRuntimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.bouncycastle:bcpg-jdk18on:1.80=kotlinBouncyCastleConfiguration
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.graalvm.compiler:compiler:25.0.0=graal
org.graalvm.polyglot:polyglot:25.0.0=jmh,jmhRuntimeClasspath,truffle
org.graalvm.sdk:collections:25.0.0=graal,jmh,jmhRuntimeClasspath,truffle
org.graalvm.sdk:graal-sdk:25.0.0=jmh,jmhRuntimeClasspath
org.graalvm.sdk:nativeimage:25.0.0=jmh,jmhRuntimeClasspath,truffle
org.graalvm.sdk:word:25.0.0=graal,jmh,jmhRuntimeClasspath,truffle
org.graalvm.truffle:truffle-api:25.0.0=jmh,jmhRuntimeClasspath,truffle
org.graalvm.truffle:truffle-compiler:25.0.0=graal
org.jetbrains.kotlin:abi-tools-api:2.2.20=kotlinInternalAbiValidation
org.jetbrains.kotlin:abi-tools:2.2.20=kotlinInternalAbiValidation
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-reflect:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable
org.jetbrains.kotlin:kotlin-script-runtime:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathJmh,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable
org.jetbrains.kotlin:kotlin-scripting-common:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathJmh,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathJmh,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathJmh,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-scripting-jvm:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathJmh,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.2.20=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:2.2.20=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathJmh,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlin:swift-export-embeddable:2.2.20=swiftExportClasspathResolvable
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.0=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable
org.jetbrains.kotlinx:kotlinx-serialization-bom:1.7.3=swiftExportClasspathResolvable
org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.7.3=swiftExportClasspathResolvable
org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3=swiftExportClasspathResolvable
org.jetbrains:annotations:13.0=jmh,jmhCompileClasspath,jmhRuntimeClasspath,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathJmh,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable,testCompileClasspath,testRuntimeClasspath
org.junit.jupiter:junit-jupiter-api:5.14.0=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.14.0=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.junit.platform:junit-platform-commons:1.14.0=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.junit.platform:junit-platform-engine:1.14.0=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath,testRuntimeClasspath
org.junit.platform:junit-platform-launcher:1.14.0=testRuntimeClasspath
org.junit:junit-bom:5.14.0=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.msgpack:msgpack-core:0.9.8=jmh,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-bytecode: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.organicdesign:Paguro:3.10.3=jmh,jmhRuntimeClasspath
org.ow2.asm:asm:9.0=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath
org.snakeyaml:snakeyaml-engine:2.10=jmh,jmhRuntimeClasspath
empty=annotationProcessor,apiDependenciesMetadata,compileClasspath,compileOnlyDependenciesMetadata,implementationDependenciesMetadata,intransitiveDependenciesMetadata,jmhAnnotationProcessor,jmhApiDependenciesMetadata,jmhCompileOnlyDependenciesMetadata,jmhIntransitiveDependenciesMetadata,jmhKotlinScriptDefExtensions,kotlinCompilerPluginClasspath,kotlinNativeCompilerPluginClasspath,kotlinScriptDefExtensions,runtimeClasspath,sourcesJar,testAnnotationProcessor,testApiDependenciesMetadata,testCompileOnlyDependenciesMetadata,testIntransitiveDependenciesMetadata,testKotlinScriptDefExtensions
@@ -1,76 +0,0 @@
/*
* Copyright © 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 groovy.util.Node
import groovy.xml.XmlParser
import groovy.xml.XmlUtil
import org.gradle.api.DefaultTask
import org.gradle.api.tasks.TaskAction
abstract class ConfigureLateInitAnnotation : DefaultTask() {
private val miscXmlFile = project.rootProject.file(".idea/misc.xml")
init {
inputs.file(miscXmlFile)
outputs.file(miscXmlFile)
}
@TaskAction
fun run() {
val annotationName = "org.pkl.core.util.LateInit"
if (!miscXmlFile.exists()) {
miscXmlFile.writeText(
"""
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
</project>
"""
.trimIndent()
.trim()
)
}
val root = XmlParser().parse(miscXmlFile)
fun Node.childNodes() = children().filterIsInstance<Node>()
var entryPointsManager =
root.childNodes().find {
it.name() == "component" && it.attribute("name") == "EntryPointsManager"
}
if (entryPointsManager == null) {
entryPointsManager = root.appendNode("component", mapOf("name" to "EntryPointsManager"))
}
var writeAnnotations = entryPointsManager.childNodes().find { it.name() == "writeAnnotations" }
if (writeAnnotations == null) {
writeAnnotations = entryPointsManager.appendNode("writeAnnotations")
}
val alreadyExists =
writeAnnotations.childNodes().any {
it.name() == "writeAnnotation" && it.attribute("name") == annotationName
}
if (!alreadyExists) {
writeAnnotations.appendNode("writeAnnotation", mapOf("name" to annotationName))
miscXmlFile.writeText(XmlUtil.serialize(root))
logger.lifecycle("Updated .idea/misc.xml")
} else {
logger.info("$annotationName is already configured in .idea/misc.xml")
}
}
}
@@ -1,77 +0,0 @@
/*
* Copyright © 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.File
import java.io.Serial
import java.io.Serializable
/**
* A Spotless [FormatterStep] that suppresses formatting changes where the only difference between
* the formatted output and the file's content in the upstream base ref is the license header year.
*
* Avoids an issue where, in the process of working on the codebase:
* 1. A file is modified.
* 2. Spotless formats the file, and also updates the copyright year.
* 3. The original modification is reverted.
* 4. Spotless formats the file again, but now the copyright year is the updated year.
*/
class RevertYearOnlyChangesStep(private val repoRoot: File, private val ratchetFrom: String) :
Serializable {
companion object {
@Serial private const val serialVersionUID: Long = 1L
}
fun create(): FormatterStep =
FormatterStep.createLazy(
"revertYearOnlyChanges",
{ this },
{ RevertYearOnlyChangesFunc(repoRoot, ratchetFrom) },
)
}
class RevertYearOnlyChangesFunc(private val repoRoot: File, private val ratchetFrom: String) :
FormatterFunc.NeedsFile, Serializable {
companion object {
@Serial private const val serialVersionUID: Long = 1L
// Matches "Copyright © 2024" or "Copyright © 2024-2025"
private val YEAR_REGEX = Regex("""(Copyright © )\d{4}(-\d{4})?""")
}
override fun applyWithFile(unix: String, file: File): String {
val relativePath = repoRoot.toPath().relativize(file.toPath()).toString()
val upstreamContent = gitShow(ratchetFrom, relativePath) ?: return unix
val normalizedRaw = YEAR_REGEX.replace(unix, "\$1YEAR")
val normalizedUpstream = YEAR_REGEX.replace(upstreamContent, "\$1YEAR")
return if (normalizedRaw == normalizedUpstream) {
// Only the year changed — return the upstream content
upstreamContent
} else {
unix
}
}
private fun gitShow(ref: String, path: String): String? {
val process =
ProcessBuilder("git", "show", "$ref:$path")
.directory(repoRoot)
.redirectErrorStream(true)
.start()
val output = process.inputStream.readBytes().toString(Charsets.UTF_8)
return if (process.waitFor() == 0) output.replace("\r\n", "\n") else null
}
}
@@ -1,46 +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 net.ltgt.gradle.errorprone.errorprone
import net.ltgt.gradle.nullaway.nullaway
import org.gradle.accessors.dm.LibrariesForLibs
import org.gradle.api.tasks.compile.JavaCompile
plugins {
`java-library`
id("net.ltgt.errorprone")
id("net.ltgt.nullaway")
}
val libs = the<LibrariesForLibs>()
dependencies {
api(libs.jspecify)
errorprone(libs.errorProne)
errorprone(libs.nullaway)
}
nullaway { onlyNullMarked = true }
tasks.withType<JavaCompile>().configureEach {
options.errorprone.disableAllChecks = true
options.errorprone.nullaway {
error()
onlyNullMarked = true
jspecifyMode = true
// honor assert x != null in addition to Objects.requireNonNull(x)
assertsEnabled = true
}
}
@@ -1,114 +0,0 @@
/*
* Copyright © 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 org.gradle.accessors.dm.LibrariesForLibs
import org.gradle.api.GradleException
import org.gradle.kotlin.dsl.getByType
import org.gradle.kotlin.dsl.kotlin
import org.gradle.kotlin.dsl.the
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
import org.jetbrains.kotlin.gradle.dsl.KotlinVersion
plugins {
java
kotlin("jvm")
id("com.diffplug.spotless")
}
val buildInfo = project.extensions.getByType<BuildInfo>()
val libs = the<LibrariesForLibs>()
kotlin {
jvmToolchain {
languageVersion.set(buildInfo.jdkToolchainVersion)
vendor.set(buildInfo.jdkVendor)
}
compilerOptions {
val kotlinTarget = KotlinVersion.fromVersion(libs.versions.kotlinTarget.get())
languageVersion.set(kotlinTarget)
apiVersion.set(kotlinTarget)
jvmTarget = JvmTarget.fromTarget(buildInfo.jvmTarget.toString())
freeCompilerArgs.addAll(
"-jvm-default=no-compatibility", // was: -Xjvm-default=all
"-Xjdk-release=${buildInfo.jvmTarget}",
)
}
}
spotless {
val revertYearOnlyChanges = RevertYearOnlyChangesStep(rootProject.rootDir, ratchetFrom!!).create()
kotlin {
addStep(revertYearOnlyChanges)
ktfmt(libs.versions.ktfmt.get()).googleStyle()
target("src/*/kotlin/**/*.kt")
licenseHeaderFile(
rootProject.file("build-logic/src/main/resources/license-header.star-block.txt")
)
}
}
/**
* Kotlin modules to guard: fail the build if any dependency resolves to a version higher than
* `libs.versions.kotlinTarget`. This includes versions introduced via direct declarations, BOMs,
* version catalogs, or constraints.
*/
val guardedKotlinModules = setOf(libs.kotlinStdLib.get().module, libs.kotlinReflect.get().module)
/**
* Classpath configurations where the above rule applies. Kept narrow to avoid interfering with
* Gradle/Kotlin plugin internal configurations.
*/
val guardedConfigurations =
setOf(
configurations.compileClasspath,
configurations.runtimeClasspath,
configurations.testCompileClasspath,
configurations.testRuntimeClasspath,
)
guardedConfigurations.forEach { configuration ->
configuration.configure {
incoming.afterResolve {
resolutionResult.allComponents.forEach { component ->
val moduleVersion = component.moduleVersion ?: return@forEach
if (
moduleVersion.module in guardedKotlinModules &&
moduleVersion.version.exceedsKotlinTarget()
) {
throw GradleException(
"Resolved ${moduleVersion.module}:${moduleVersion.version} on configuration $name, " +
"which exceeds the allowed Kotlin version ($kotlinTargetVersion)"
)
}
}
}
}
}
// also works for version ranges like: [2.3.0,)
val kotlinVersionRegex = Regex("""(\d+)\.(\d+)(?:\.\d+)?""")
val kotlinTargetVersion = libs.versions.kotlinTarget.get()
val targetMajor = kotlinTargetVersion.substringBefore('.').toInt()
val targetMinor = kotlinTargetVersion.substringAfter('.').toInt()
fun String.exceedsKotlinTarget(): Boolean {
val version =
kotlinVersionRegex.find(this) ?: throw GradleException("Could not parse Kotlin version: $this")
val major = version.groupValues[1].toInt()
val minor = version.groupValues[2].toInt()
return major > targetMajor || (major == targetMajor && minor > targetMinor)
}
@@ -1,29 +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 org.gradle.accessors.dm.LibrariesForLibs
plugins { id("pklJavaLibrary") }
val buildInfo = project.extensions.getByType<BuildInfo>()
val libs = the<LibrariesForLibs>()
dependencies {
// Kotlin libraries typically expose stdlib types in their public APIs.
// Therefore, the stdlib must be available on the consumer's compile classpath,
// and "implementation" is not sufficient.
api(libs.kotlinStdLib)
}
@@ -1,122 +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.
*/
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)
}
+2 -6
View File
@@ -17,11 +17,10 @@
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.taskTriggers
plugins { plugins {
id("pklAllProjects") pklAllProjects
id("pklGraalVm") pklGraalVm
alias(libs.plugins.ideaExt) alias(libs.plugins.ideaExt)
alias(libs.plugins.jmh) apply false alias(libs.plugins.jmh) apply false
@@ -37,8 +36,6 @@ nexusPublishing {
} }
} }
val configureLateInitAnnotation by tasks.registering(ConfigureLateInitAnnotation::class)
idea { idea {
project { project {
this as ExtensionAware this as ExtensionAware
@@ -48,7 +45,6 @@ idea {
delegateBuildRunToGradle = true delegateBuildRunToGradle = true
testRunner = PLATFORM testRunner = PLATFORM
} }
taskTriggers.afterSync(configureLateInitAnnotation)
} }
} }
} }
@@ -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.
@@ -20,16 +20,11 @@ plugins {
`jvm-toolchains` `jvm-toolchains`
} }
/** // Keep this in sync with the constants in `BuildInfo.kt` (those are not addressable here).
* To avoid the provisioning of multiple JDKs and other build issues, keep this value in sync with val toolchainVersion = 21
* the JVM toolchain versions in `BuildInfo.kt` and `gradle-daemon-jvm.properties`.
*/
val toolchainVersion = 25
dependencies { dependencies {
implementation(libs.downloadTaskPlugin) implementation(libs.downloadTaskPlugin)
implementation(libs.errorPronePlugin)
implementation(libs.nullawayPlugin)
implementation(libs.spotlessPlugin) implementation(libs.spotlessPlugin)
implementation(libs.kotlinPlugin) { exclude(module = "kotlin-android-extensions") } implementation(libs.kotlinPlugin) { exclude(module = "kotlin-android-extensions") }
implementation(libs.shadowPlugin) implementation(libs.shadowPlugin)
@@ -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.
@@ -15,7 +15,7 @@
*/ */
@file:Suppress("UnstableApiUsage") @file:Suppress("UnstableApiUsage")
rootProject.name = "build-logic" rootProject.name = "buildSrc"
pluginManagement { pluginManagement {
repositories { repositories {
@@ -24,7 +24,7 @@ pluginManagement {
} }
} }
plugins { id("org.gradle.toolchains.foojay-resolver-convention") version "1.0.0" } plugins { id("org.gradle.toolchains.foojay-resolver-convention") }
// makes ~/.gradle/init.gradle unnecessary and ~/.gradle/gradle.properties optional // makes ~/.gradle/init.gradle unnecessary and ~/.gradle/gradle.properties optional
dependencyResolutionManagement { dependencyResolutionManagement {
@@ -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.
@@ -31,7 +31,7 @@ import org.gradle.process.CommandLineArgumentProvider
/** /**
* 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
* which consume Pkl will need a minimum bytecode level at or above this one. * which consume Pkl will need a minimum Bytecode level at or above this one.
* *
* Kotlin and Java need matching bytecode targets, so this is expressed as a build setting and * Kotlin and Java need matching bytecode targets, so this is expressed as a build setting and
* constant default. To override, pass `-DpklJdkToolchain=X` to the Gradle command line, where X is * constant default. To override, pass `-DpklJdkToolchain=X` to the Gradle command line, where X is
@@ -40,13 +40,10 @@ import org.gradle.process.CommandLineArgumentProvider
const val PKL_JVM_TARGET_DEFAULT_MAXIMUM = 17 const val PKL_JVM_TARGET_DEFAULT_MAXIMUM = 17
/** /**
* The Pkl build requires JDK 25+; otherwise, NullAway will not work correctly. * The Pkl build requires JDK 21+ to build, because JDK 17 is no longer within the default set of
* * supported JDKs for GraalVM. This is a build-time requirement, not a runtime requirement.
* This is a build-time requirement, not a runtime requirement. To avoid the provisioning of
* multiple JDKs and other build issues, keep this value in sync with the JVM toolchain versions in
* `build-logic/build.gradle.kts` and `gradle-daemon-jvm.properties`.
*/ */
const val PKL_JDK_VERSION_MIN = 25 const val PKL_JDK_VERSION_MIN = 21
/** /**
* The JDK minimum is set to match the bytecode minimum, to guarantee that fat JARs work against the * The JDK minimum is set to match the bytecode minimum, to guarantee that fat JARs work against the
@@ -55,15 +52,14 @@ const val PKL_JDK_VERSION_MIN = 25
const val PKL_TEST_JDK_MINIMUM = PKL_JVM_TARGET_DEFAULT_MAXIMUM const val PKL_TEST_JDK_MINIMUM = PKL_JVM_TARGET_DEFAULT_MAXIMUM
/** /**
* Maximum JDK version which Pkl is tested with; this should be bumped when new JDK releases are * Maximum JDK version which Pkl is tested with; this should be bumped when new JDK stable releases
* issued. * are issued. At the time of this writing, JDK 23 is the latest available release.
*/ */
const val PKL_TEST_JDK_MAXIMUM = 26 const val PKL_TEST_JDK_MAXIMUM = 23
/** /**
* If `true`, all JDK releases between [PKL_TEST_JDK_MINIMUM] and [PKL_TEST_JDK_MAXIMUM] are tested. * Test the full suite of JDKs between [PKL_TEST_JDK_MINIMUM] and [PKL_TEST_JDK_MAXIMUM]; if this is
* If `false`, only LTS releases within that range are tested. To override, pass * set to `false` (or overridden on the command line), only LTS releases are tested by default.
* `-DpklTestAllJdks=true` on the Gradle command line.
*/ */
const val PKL_TEST_ALL_JDKS = false const val PKL_TEST_ALL_JDKS = false
@@ -201,8 +197,8 @@ open class BuildInfo(private val project: Project) {
} }
val testJdkVendors: Sequence<JvmVendorSpec> by lazy { val testJdkVendors: Sequence<JvmVendorSpec> by lazy {
// By default, only Adoptium is tested during multi-JDK testing. Flip `-DpklTestAllVendors=true` // By default, only OpenJDK is tested during multi-JDK testing. Flip `-DpklTestAllVendors=true`
// to additionally test against GraalVM and Oracle. // to additionally test against a suite of JDK vendors, including Azul, Oracle, and GraalVM.
when (System.getProperty("pklTestAllVendors")?.toBoolean()) { when (System.getProperty("pklTestAllVendors")?.toBoolean()) {
true -> sequenceOf(JvmVendorSpec.ADOPTIUM, JvmVendorSpec.GRAAL_VM, JvmVendorSpec.ORACLE) true -> sequenceOf(JvmVendorSpec.ADOPTIUM, JvmVendorSpec.GRAAL_VM, JvmVendorSpec.ORACLE)
else -> sequenceOf(JvmVendorSpec.ADOPTIUM) else -> sequenceOf(JvmVendorSpec.ADOPTIUM)
@@ -282,9 +278,8 @@ open class BuildInfo(private val project: Project) {
val namer = testNamer(baseNameProvider) val namer = testNamer(baseNameProvider)
val applyConfig: MultiJdkTestConfigurator = { (version, jdk) -> val applyConfig: MultiJdkTestConfigurator = { (version, jdk) ->
// 1) copy configurations from the template task // 1) copy configurations from the template task
dependsOn(templateTask)
templateTask.get().let { template -> templateTask.get().let { template ->
// copy explicit dependencies not inferred from task inputs
dependsOn(template.dependsOn)
classpath = template.classpath classpath = template.classpath
testClassesDirs = template.testClassesDirs testClassesDirs = template.testClassesDirs
jvmArgs.addAll(template.jvmArgs) jvmArgs.addAll(template.jvmArgs)
@@ -310,8 +305,8 @@ 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) }
} }
.mapNotNull { (jdkTarget, vendor) -> .map { (jdkTarget, vendor) ->
if (jdkToolchainVersion == jdkTarget) { if (jdkToolchainVersion == jdkTarget)
tasks.register(namer(jdkTarget, vendor)) { tasks.register(namer(jdkTarget, vendor)) {
// alias to `test` // alias to `test`
dependsOn(templateTask) dependsOn(templateTask)
@@ -319,24 +314,20 @@ open class BuildInfo(private val project: Project) {
description = description =
"Alias for regular '${baseNameProvider()}' task, on JDK ${jdkTarget.asInt()}" "Alias for regular '${baseNameProvider()}' task, on JDK ${jdkTarget.asInt()}"
} }
} else { else
// Always register and enable the task so it can be run explicitly, tasks.register(namer(jdkTarget, vendor.takeIf { isMultiVendor }), Test::class) {
// but only return it if it should be included in "check". enabled = jdkTarget.isEnabled
val task = group = Category.VERIFICATION
tasks.register(namer(jdkTarget, vendor.takeIf { isMultiVendor }), Test::class) { description = "Run tests against JDK ${jdkTarget.asInt()}"
group = Category.VERIFICATION applyConfig(jdkTarget to toolchains.launcherFor { languageVersion = jdkTarget })
description = "Run tests against JDK ${jdkTarget.asInt()}" // fix: on jdk17, we must force the polyglot module on to the modulepath
applyConfig(jdkTarget to toolchains.launcherFor { languageVersion = jdkTarget }) if (jdkTarget.asInt() == 17)
// fix: on jdk17, we must force the polyglot module on to the modulepath jvmArgumentProviders.add(
if (jdkTarget.asInt() == 17) CommandLineArgumentProvider {
jvmArgumentProviders.add( buildList { listOf("--add-modules=org.graalvm.polyglot") }
CommandLineArgumentProvider { }
buildList { listOf("--add-modules=org.graalvm.polyglot") } )
} }
)
}
task.takeIf { jdkTarget.isEnabled }
}
} }
.toList() .toList()
} }
@@ -377,7 +368,7 @@ open class BuildInfo(private val project: Project) {
// allow -DcommitId=abc123 for build environments that don't have git. // allow -DcommitId=abc123 for build environments that don't have git.
System.getProperty("commitId").let { if (it != null) return@lazy it } System.getProperty("commitId").let { if (it != null) return@lazy it }
// only run command once per build invocation // only run command once per build invocation
if (project.path == project.rootProject.path) { if (project === project.rootProject) {
val process = val process =
ProcessBuilder() ProcessBuilder()
.command("git", "rev-parse", "--short", "HEAD") .command("git", "rev-parse", "--short", "HEAD")
@@ -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.
@@ -36,7 +36,6 @@ abstract class ExecutableJar : DefaultTask() {
@get:Input abstract val jvmArgs: ListProperty<String> @get:Input abstract val jvmArgs: ListProperty<String>
@TaskAction @TaskAction
@Suppress("unused")
fun buildJar() { fun buildJar() {
val inFile = inJar.get().asFile val inFile = inJar.get().asFile
val outFile = outJar.get().asFile val outFile = outJar.get().asFile
@@ -1,5 +1,5 @@
/* /*
* Copyright © 2025-2026 Apple Inc. and the Pkl project authors. All rights reserved. * Copyright © 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.
@@ -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.
@@ -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.
@@ -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.
@@ -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.
@@ -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.
@@ -27,7 +27,6 @@ private val ltsReleases =
JavaLanguageVersion.of(11), JavaLanguageVersion.of(11),
JavaLanguageVersion.of(17), JavaLanguageVersion.of(17),
JavaLanguageVersion.of(21), JavaLanguageVersion.of(21),
JavaLanguageVersion.of(25),
) )
/** Describes an inclusive range of JVM versions, based on the [JavaLanguageVersion] type. */ /** Describes an inclusive range of JVM versions, based on the [JavaLanguageVersion] type. */
@@ -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.
@@ -57,7 +57,7 @@ open class MergeSourcesJars : DefaultTask() {
// a word or a period character. should catch most cases. // a word or a period character. should catch most cases.
val importPattern = val importPattern =
Pattern.compile( Pattern.compile(
"(?<!([\\w.]))(" + relocatedPkgs.keys.joinToString("|") { it.replace(".", "\\.") } + ")" "(?<!(\\w|\\.))(" + relocatedPkgs.keys.joinToString("|") { it.replace(".", "\\.") } + ")"
) )
val sourceFileExts = sourceFileExtensions.get() val sourceFileExts = sourceFileExtensions.get()
@@ -1,5 +1,5 @@
/* /*
* Copyright © 2025-2026 Apple Inc. and the Pkl project authors. All rights reserved. * Copyright © 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.
@@ -55,12 +55,13 @@ abstract class NativeImageBuild : DefaultTask() {
@get:Inject protected abstract val execOperations: ExecOperations @get:Inject protected abstract val execOperations: ExecOperations
private val graalVm: Provider<BuildInfo.GraalVm> = arch.map { a -> private val graalVm: Provider<BuildInfo.GraalVm> =
when (a) { arch.map { a ->
Architecture.AMD64 -> buildInfo.graalVmAmd64 when (a) {
Architecture.AARCH64 -> buildInfo.graalVmAarch64 Architecture.AMD64 -> buildInfo.graalVmAmd64
Architecture.AARCH64 -> buildInfo.graalVmAarch64
}
} }
}
private val buildInfo: BuildInfo = project.extensions.getByType(BuildInfo::class.java) private val buildInfo: BuildInfo = project.extensions.getByType(BuildInfo::class.java)
@@ -101,7 +102,6 @@ abstract class NativeImageBuild : DefaultTask() {
} }
@TaskAction @TaskAction
@Suppress("unused")
protected fun run() { protected fun run() {
execOperations.exec { execOperations.exec {
val exclusions = val exclusions =
@@ -118,8 +118,6 @@ abstract class NativeImageBuild : DefaultTask() {
add("--initialize-at-build-time=") add("--initialize-at-build-time=")
// needed for messagepack-java (see https://github.com/msgpack/msgpack-java/issues/600) // needed for messagepack-java (see https://github.com/msgpack/msgpack-java/issues/600)
add("--initialize-at-run-time=org.msgpack.core.buffer.DirectBufferAccess") add("--initialize-at-run-time=org.msgpack.core.buffer.DirectBufferAccess")
// needed for jline-terminal-jni
add("--initialize-at-run-time=org.jline.nativ,org.jline.terminal.impl.jni")
add("--no-fallback") add("--no-fallback")
add("-H:IncludeResources=org/pkl/core/stdlib/.*\\.pkl") add("-H:IncludeResources=org/pkl/core/stdlib/.*\\.pkl")
add("-H:IncludeResources=org/jline/utils/.*") add("-H:IncludeResources=org/jline/utils/.*")
@@ -150,9 +148,10 @@ abstract class NativeImageBuild : DefaultTask() {
} }
// native-image rejects non-existing class path entries -> filter // native-image rejects non-existing class path entries -> filter
add("--class-path") add("--class-path")
val pathInput = classpath.filter { val pathInput =
it.exists() && !exclusions.any { exclude -> it.name.contains(exclude) } classpath.filter {
} it.exists() && !exclusions.any { exclude -> it.name.contains(exclude) }
}
add(pathInput.asPath) add(pathInput.asPath)
// make sure dev machine stays responsive (15% slowdown on my laptop) // make sure dev machine stays responsive (15% slowdown on my laptop)
val processors = val processors =
@@ -42,8 +42,7 @@ class PklFormatterFunc(@Transient private val configuration: Configuration) :
private val classLoader by lazy { private val classLoader by lazy {
val urls = configuration.files.map { it.toURI().toURL() } val urls = configuration.files.map { it.toURI().toURL() }
// Use the platform classloader as parent to isolate from Gradle's classloader URLClassLoader(urls.toTypedArray())
URLClassLoader(urls.toTypedArray(), ClassLoader.getPlatformClassLoader())
} }
private val formatterClass by lazy { classLoader.loadClass("org.pkl.formatter.Formatter") } private val formatterClass by lazy { classLoader.loadClass("org.pkl.formatter.Formatter") }
@@ -63,58 +63,59 @@ fun Project.configurePklPomMetadata() {
/** Configures POM validation task to check for unresolved versions and snapshots in releases. */ /** Configures POM validation task to check for unresolved versions and snapshots in releases. */
fun Project.configurePomValidation() { fun Project.configurePomValidation() {
val validatePom by tasks.registering { val validatePom by
if (tasks.findByName("generatePomFileForLibraryPublication") == null) { tasks.registering {
return@registering if (tasks.findByName("generatePomFileForLibraryPublication") == null) {
} return@registering
val generatePomFileForLibraryPublication by tasks.existing(GenerateMavenPom::class) }
val outputFile = val generatePomFileForLibraryPublication by tasks.existing(GenerateMavenPom::class)
layout.buildDirectory.file("validatePom") // dummy output to satisfy up-to-date check val outputFile =
layout.buildDirectory.file("validatePom") // dummy output to satisfy up-to-date check
dependsOn(generatePomFileForLibraryPublication) dependsOn(generatePomFileForLibraryPublication)
inputs.file(generatePomFileForLibraryPublication.get().destination) inputs.file(generatePomFileForLibraryPublication.get().destination)
outputs.file(outputFile) outputs.file(outputFile)
doLast { doLast {
outputFile.get().asFile.delete() outputFile.get().asFile.delete()
val pomFile = generatePomFileForLibraryPublication.get().destination val pomFile = generatePomFileForLibraryPublication.get().destination
assert(pomFile.exists()) assert(pomFile.exists())
val text = pomFile.readText() val text = pomFile.readText()
run { run {
val unresolvedVersion = Regex("<version>.*[+,()\\[\\]].*</version>") val unresolvedVersion = Regex("<version>.*[+,()\\[\\]].*</version>")
val matches = unresolvedVersion.findAll(text).toList() val matches = unresolvedVersion.findAll(text).toList()
if (matches.isNotEmpty()) { if (matches.isNotEmpty()) {
throw org.gradle.api.GradleException( throw org.gradle.api.GradleException(
""" """
Found unresolved version selector(s) in generated POM: Found unresolved version selector(s) in generated POM:
${matches.joinToString("\n") { it.groupValues[0] }} ${matches.joinToString("\n") { it.groupValues[0] }}
""" """
.trimIndent() .trimIndent()
) )
}
} }
}
val buildInfo = project.extensions.getByType<BuildInfo>() val buildInfo = project.extensions.getByType<BuildInfo>()
if (buildInfo.isReleaseBuild) { if (buildInfo.isReleaseBuild) {
val snapshotVersion = Regex("<version>.*-SNAPSHOT</version>") val snapshotVersion = Regex("<version>.*-SNAPSHOT</version>")
val matches = snapshotVersion.findAll(text).toList() val matches = snapshotVersion.findAll(text).toList()
if (matches.isNotEmpty()) { if (matches.isNotEmpty()) {
throw org.gradle.api.GradleException( throw org.gradle.api.GradleException(
""" """
Found snapshot version(s) in generated POM of Pkl release version: Found snapshot version(s) in generated POM of Pkl release version:
${matches.joinToString("\n") { it.groupValues[0] }} ${matches.joinToString("\n") { it.groupValues[0] }}
""" """
.trimIndent() .trimIndent()
) )
}
} }
}
outputFile.get().asFile.writeText("OK") outputFile.get().asFile.writeText("OK")
}
} }
}
tasks.named("publish") { dependsOn(validatePom) } tasks.named("publish") { dependsOn(validatePom) }
} }
@@ -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.
@@ -15,19 +15,19 @@
*/ */
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.tasks.KotlinJvmCompile
plugins { id("com.diffplug.spotless") } plugins { id("com.diffplug.spotless") }
val buildInfo = extensions.create<BuildInfo>("buildInfo", project) val buildInfo = extensions.create<BuildInfo>("buildInfo", project)
dependencyLocking { lockAllConfigurations() }
configurations { configurations {
val rejectedVersionSuffix = Regex("-alpha|-beta|-eap|-m|-rc|-snapshot", RegexOption.IGNORE_CASE) val rejectedVersionSuffix = Regex("-alpha|-beta|-eap|-m|-rc|-snapshot", RegexOption.IGNORE_CASE)
configureEach { configureEach {
resolutionStrategy { resolutionStrategy {
// forbid dependencies whose pom.xml's include version ranges, because this will lead to
// unreproducible builds.
failOnDynamicVersions()
componentSelection { componentSelection {
all { all {
if (rejectedVersionSuffix.containsMatchIn(candidate.version)) { if (rejectedVersionSuffix.containsMatchIn(candidate.version)) {
@@ -42,9 +42,25 @@ configurations {
} }
} }
tasks.withType<JavaCompile>().configureEach { configurations.all {
javaCompiler = buildInfo.javaCompiler resolutionStrategy.eachDependency {
options.release = buildInfo.jvmTarget if (requested.group == "org.jetbrains.kotlin") {
// prevent transitive deps from bumping Koltin version
useVersion(libs.versions.kotlin.get())
}
}
}
plugins.withType(JavaPlugin::class).configureEach {
tasks.withType<JavaCompile>().configureEach { options.release = 17 }
}
tasks.withType<KotlinJvmCompile>().configureEach {
compilerOptions {
jvmTarget = JvmTarget.JVM_17
freeCompilerArgs.addAll("-Xjsr305=strict", "-Xjvm-default=all")
freeCompilerArgs.add("-Xjdk-release=17")
}
} }
plugins.withType(IdeaPlugin::class).configureEach { plugins.withType(IdeaPlugin::class).configureEach {
@@ -79,6 +95,13 @@ plugins.withType(MavenPublishPlugin::class).configureEach {
} }
} }
// settings.gradle.kts sets `--write-locks`
// if Gradle command line contains this task name
val updateDependencyLocks by
tasks.registering {
doLast { configurations.filter { it.isCanBeResolved }.forEach { it.resolve() } }
}
val allDependencies by tasks.registering(DependencyReportTask::class) val allDependencies by tasks.registering(DependencyReportTask::class)
tasks.withType(Test::class).configureEach { tasks.withType(Test::class).configureEach {
@@ -87,6 +110,7 @@ tasks.withType(Test::class).configureEach {
} }
debugOptions { debugOptions {
enabled = System.getProperty("jvmdebug")?.toBoolean() ?: false enabled = System.getProperty("jvmdebug")?.toBoolean() ?: false
@Suppress("UnstableApiUsage")
host = "*" host = "*"
port = 5005 port = 5005
suspend = true suspend = true
@@ -97,6 +121,7 @@ tasks.withType(Test::class).configureEach {
tasks.withType(JavaExec::class).configureEach { tasks.withType(JavaExec::class).configureEach {
debugOptions { debugOptions {
enabled = System.getProperty("jvmdebug")?.toBoolean() ?: false enabled = System.getProperty("jvmdebug")?.toBoolean() ?: false
@Suppress("UnstableApiUsage")
host = "*" host = "*"
port = 5005 port = 5005
suspend = true suspend = true
@@ -108,7 +133,7 @@ tasks.withType(JavaExec::class).configureEach {
private val libs = the<LibrariesForLibs>() private val libs = the<LibrariesForLibs>()
private val licenseHeaderFile by lazy { private val licenseHeaderFile by lazy {
rootProject.file("build-logic/src/main/resources/license-header.star-block.txt") rootProject.file("buildSrc/src/main/resources/license-header.star-block.txt")
} }
private fun KotlinGradleExtension.configureFormatter() { private fun KotlinGradleExtension.configureFormatter() {
@@ -129,28 +154,22 @@ val ratchetBranchName =
spotless { spotless {
ratchetFrom = "$originalRemoteName/$ratchetBranchName" ratchetFrom = "$originalRemoteName/$ratchetBranchName"
val revertYearOnlyChangesStep = // When building root project, format buildSrc files too.
RevertYearOnlyChangesStep(rootProject.rootDir, ratchetFrom!!).create() // We need this because buildSrc is not a subproject of the root project, so a top-level
// `spotlessApply` will not trigger `buildSrc:spotlessApply`.
// When building root project, format build-logic files too. if (project === rootProject) {
// We need this because build-logic is not a subproject of the root project, so a top-level
// `spotlessApply` will not trigger `build-logic:spotlessApply`.
if (project.path == rootProject.path) {
kotlinGradle { kotlinGradle {
configureFormatter() configureFormatter()
addStep(revertYearOnlyChangesStep) target("*.kts", "buildSrc/*.kts", "buildSrc/src/*/kotlin/**/*.kts")
target("*.kts", "build-logic/*.kts", "build-logic/src/*/kotlin/**/*.kts")
} }
kotlin { kotlin {
ktfmt(libs.versions.ktfmt.get()).googleStyle() ktfmt(libs.versions.ktfmt.get()).googleStyle()
target("build-logic/src/*/kotlin/**/*.kt") target("buildSrc/src/*/kotlin/**/*.kt")
licenseHeaderFile(licenseHeaderFile) licenseHeaderFile(licenseHeaderFile)
addStep(revertYearOnlyChangesStep)
} }
} else { } else {
kotlinGradle { kotlinGradle {
configureFormatter() configureFormatter()
addStep(revertYearOnlyChangesStep)
target("*.kts") target("*.kts")
} }
} }
@@ -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.
@@ -84,7 +84,7 @@ for ((key, value) in relocations) {
} }
} }
val nonRelocations = listOf("com/oracle/truffle/", "org/graalvm/", "org/jspecify") val nonRelocations = listOf("com/oracle/truffle/", "org/graalvm/")
tasks.shadowJar { tasks.shadowJar {
inputs.property("relocations", relocations) inputs.property("relocations", relocations)
@@ -148,36 +148,37 @@ val testFatJar by
tasks.check { dependsOn(testFatJar) } tasks.check { dependsOn(testFatJar) }
val validateFatJar by tasks.registering { val validateFatJar by
val outputFile = layout.buildDirectory.file("validateFatJar/result.txt") tasks.registering {
inputs.files(tasks.shadowJar) val outputFile = layout.buildDirectory.file("validateFatJar/result.txt")
inputs.property("nonRelocations", nonRelocations) inputs.files(tasks.shadowJar)
outputs.file(outputFile) inputs.property("nonRelocations", nonRelocations)
outputs.file(outputFile)
doLast { doLast {
val unshadowedFiles = mutableListOf<String>() val unshadowedFiles = mutableListOf<String>()
zipTree(tasks.shadowJar.get().outputs.files.singleFile).visit { zipTree(tasks.shadowJar.get().outputs.files.singleFile).visit {
val fileDetails = this val fileDetails = this
val path = fileDetails.relativePath.pathString val path = fileDetails.relativePath.pathString
if ( if (
!(fileDetails.isDirectory || !(fileDetails.isDirectory ||
path.startsWith("org/pkl/") || path.startsWith("org/pkl/") ||
path.startsWith("META-INF/") || path.startsWith("META-INF/") ||
nonRelocations.any { path.startsWith(it) }) nonRelocations.any { path.startsWith(it) })
) { ) {
// don't throw exception inside `visit` // don't throw exception inside `visit`
// as this gives a misleading "Could not expand ZIP" error message // as this gives a misleading "Could not expand ZIP" error message
unshadowedFiles.add(path) unshadowedFiles.add(path)
}
}
if (unshadowedFiles.isEmpty()) {
outputFile.get().asFile.writeText("SUCCESS")
} else {
outputFile.get().asFile.writeText("FAILURE")
throw GradleException("Found unshadowed files:\n" + unshadowedFiles.joinToString("\n"))
} }
} }
if (unshadowedFiles.isEmpty()) {
outputFile.get().asFile.writeText("SUCCESS")
} else {
outputFile.get().asFile.writeText("FAILURE")
throw GradleException("Found unshadowed files:\n" + unshadowedFiles.joinToString("\n"))
}
} }
}
tasks.check { dependsOn(validateFatJar) } tasks.check { dependsOn(validateFatJar) }
@@ -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.
@@ -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.
@@ -21,8 +21,6 @@ tasks.addRule("Pattern: compatibilityTest[All|Releases|Latest|Candidate|Nightly|
val taskName = this val taskName = this
val matchResult = Regex("compatibilityTest(.+)").matchEntire(taskName) ?: return@addRule val matchResult = Regex("compatibilityTest(.+)").matchEntire(taskName) ?: return@addRule
// https://github.com/gradle/gradle/issues/32599
@Suppress("DEPRECATION")
when (val taskNameSuffix = matchResult.groupValues[1]) { when (val taskNameSuffix = matchResult.groupValues[1]) {
"All" -> "All" ->
task("compatibilityTestAll") { task("compatibilityTestAll") {
@@ -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.
@@ -23,27 +23,25 @@ val validatorConfiguration: Configuration =
configurations.create("validator") { configurations.create("validator") {
resolutionStrategy.eachDependency { resolutionStrategy.eachDependency {
if (requested.group == "log4j" && requested.name == "log4j") { if (requested.group == "log4j" && requested.name == "log4j") {
useTarget(buildInfo.libs.findLibrary("log4j12Api").get()) @Suppress("UnstableApiUsage") useTarget(buildInfo.libs.findLibrary("log4j12Api").get())
because("mitigate critical security vulnerabilities") because("mitigate critical security vulnerabilities")
} }
} }
} }
dependencies { dependencies {
@Suppress("UnstableApiUsage")
validatorConfiguration(buildInfo.libs.findLibrary("nuValidator").get()) { validatorConfiguration(buildInfo.libs.findLibrary("nuValidator").get()) {
// remove unnecessary dependencies // we only want jetty-util and jetty-util-ajax (with the right version)
// (some of the requested versions don't even exist on Maven Central) // couldn't find a more robust way to express this
exclude(group = "org.eclipse.jetty", module = "jetty-alpn-client")
exclude(group = "org.eclipse.jetty", module = "jetty-continuation") exclude(group = "org.eclipse.jetty", module = "jetty-continuation")
exclude(group = "org.eclipse.jetty", module = "jetty-http") exclude(group = "org.eclipse.jetty", module = "jetty-http")
exclude(group = "org.eclipse.jetty", module = "jetty-io")
exclude(group = "org.eclipse.jetty", module = "jetty-security") exclude(group = "org.eclipse.jetty", module = "jetty-security")
exclude(group = "org.eclipse.jetty", module = "jetty-server") exclude(group = "org.eclipse.jetty", module = "jetty-server")
exclude(group = "org.eclipse.jetty", module = "jetty-servlets") exclude(group = "org.eclipse.jetty", module = "jetty-servlets")
exclude(group = "org.eclipse.jetty", module = "jetty-jakarta-servlet-api")
exclude(group = "org.eclipse.jetty.toolchain")
exclude(group = "javax.servlet") exclude(group = "javax.servlet")
exclude(group = "org.apache.commons", module = "commons-fileupload2-core") exclude(group = "commons-fileupload")
exclude(group = "org.apache.commons", module = "commons-fileupload2-jakarta-servlet5")
} }
} }
@@ -1,5 +1,5 @@
/* /*
* Copyright © 2025-2026 Apple Inc. and the Pkl project authors. All rights reserved. * Copyright © 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.
@@ -47,19 +47,20 @@ fun Task.setupTestStartJavaExecutable(launcher: Provider<JavaLauncher>? = null)
val outputFile = layout.buildDirectory.file("testStartJavaExecutable/$name") val outputFile = layout.buildDirectory.file("testStartJavaExecutable/$name")
outputs.file(outputFile) outputs.file(outputFile)
val execOutput = providers.exec { val execOutput =
val executablePath = javaExecutable.get().outputs.files.singleFile providers.exec {
if (launcher?.isPresent == true) { val executablePath = javaExecutable.get().outputs.files.singleFile
commandLine( if (launcher?.isPresent == true) {
launcher.get().executablePath.asFile.absolutePath, commandLine(
"-jar", launcher.get().executablePath.asFile.absolutePath,
executablePath.absolutePath, "-jar",
"--version", executablePath.absolutePath,
) "--version",
} else { )
commandLine(executablePath.absolutePath, "--version") } else {
commandLine(executablePath.absolutePath, "--version")
}
} }
}
doLast { doLast {
val outputText = execOutput.standardOutput.asText.get() val outputText = execOutput.standardOutput.asText.get()
@@ -71,7 +72,7 @@ fun Task.setupTestStartJavaExecutable(launcher: Provider<JavaLauncher>? = null)
outputFile.get().asFile.toPath().apply { outputFile.get().asFile.toPath().apply {
try { try {
parent.createDirectories() parent.createDirectories()
} catch (_: java.nio.file.FileAlreadyExistsException) {} } catch (ignored: java.nio.file.FileAlreadyExistsException) {}
writeText("OK") writeText("OK")
} }
} }
@@ -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.
@@ -50,18 +50,20 @@ artifacts {
} }
spotless { spotless {
val revertYearOnlyChanges = RevertYearOnlyChangesStep(rootProject.rootDir, ratchetFrom!!).create()
java { java {
addStep(revertYearOnlyChanges)
googleJavaFormat(libs.versions.googleJavaFormat.get()) googleJavaFormat(libs.versions.googleJavaFormat.get())
target("src/*/java/**/*.java") target("src/*/java/**/*.java")
licenseHeaderFile( licenseHeaderFile(rootProject.file("buildSrc/src/main/resources/license-header.star-block.txt"))
rootProject.file("build-logic/src/main/resources/license-header.star-block.txt") }
) kotlin {
ktfmt(libs.versions.ktfmt.get()).googleStyle()
target("src/*/kotlin/**/*.kt")
licenseHeaderFile(rootProject.file("buildSrc/src/main/resources/license-header.star-block.txt"))
} }
} }
tasks.compileKotlin { enabled = false }
tasks.jar { tasks.jar {
manifest { manifest {
attributes += attributes +=
@@ -79,6 +81,19 @@ tasks.javadoc {
(options as StandardJavadocDocletOptions).addStringOption("Xdoclint:none", "-quiet") (options as StandardJavadocDocletOptions).addStringOption("Xdoclint:none", "-quiet")
} }
val workAroundKotlinGradlePluginBug by
tasks.registering {
doLast {
// Works around this problem, which sporadically appears and disappears in different
// subprojects:
// A problem was found with the configuration of task ':pkl-executor:compileJava' (type
// 'JavaCompile').
// > Directory '[...]/pkl/pkl-executor/build/classes/kotlin/main'
// specified for property 'compileKotlinOutputClasses' does not exist.
layout.buildDirectory.dir("classes/kotlin/main").get().asFile.mkdirs()
}
}
val truffleJavacArgs = val truffleJavacArgs =
listOf( listOf(
// TODO: determine correct limits for Truffle specializations // TODO: determine correct limits for Truffle specializations
@@ -88,6 +103,7 @@ val truffleJavacArgs =
tasks.compileJava { tasks.compileJava {
javaCompiler = info.javaCompiler javaCompiler = info.javaCompiler
dependsOn(workAroundKotlinGradlePluginBug)
options.compilerArgs.addAll(truffleJavacArgs + info.jpmsAddModulesFlags) options.compilerArgs.addAll(truffleJavacArgs + info.jpmsAddModulesFlags)
} }
@@ -0,0 +1,51 @@
/*
* 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.
*/
import org.gradle.accessors.dm.LibrariesForLibs
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
import org.jetbrains.kotlin.gradle.dsl.KotlinVersion
import org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile
plugins {
id("pklJavaLibrary")
kotlin("jvm")
}
// Build configuration.
val buildInfo = project.extensions.getByType<BuildInfo>()
// Version Catalog library symbols.
val libs = the<LibrariesForLibs>()
dependencies {
// At least some of our kotlin APIs contain Kotlin stdlib types
// that aren't compiled away by kotlinc (e.g., `kotlin.Function`).
// So let's be conservative and default to `api` for now.
// For Kotlin APIs that only target Kotlin users (e.g., pkl-config-kotlin),
// it won't make a difference.
api(buildInfo.libs.findLibrary("kotlinStdLib").get())
}
tasks.compileKotlin {
enabled = true // disabled by pklJavaLibrary
}
tasks.withType<KotlinJvmCompile>().configureEach {
compilerOptions {
languageVersion = KotlinVersion.KOTLIN_2_1
jvmTarget = JvmTarget.fromTarget(buildInfo.jvmTarget.toString())
freeCompilerArgs.addAll("-Xjdk-release=${buildInfo.jvmTarget}")
}
}
@@ -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.
@@ -19,7 +19,7 @@ import org.gradle.api.tasks.testing.logging.TestExceptionFormat
plugins { plugins {
`jvm-test-suite` `jvm-test-suite`
id("pklKotlinBase") kotlin("jvm")
} }
val buildInfo = project.extensions.getByType<BuildInfo>() val buildInfo = project.extensions.getByType<BuildInfo>()
@@ -27,11 +27,10 @@ val buildInfo = project.extensions.getByType<BuildInfo>()
val libs = the<LibrariesForLibs>() val libs = the<LibrariesForLibs>()
dependencies { dependencies {
testImplementation(libs.kotlinStdLib)
testImplementation(libs.assertj) testImplementation(libs.assertj)
testImplementation(libs.junitApi) testImplementation(libs.junitApi)
testImplementation(libs.junitParams) testImplementation(libs.junitParams)
testImplementation(libs.kotlinStdLib)
testRuntimeOnly(libs.junitEngine) testRuntimeOnly(libs.junitEngine)
testRuntimeOnly(libs.junitLauncher) testRuntimeOnly(libs.junitLauncher)
@@ -45,7 +44,7 @@ tasks.withType<Test>().configureEach {
// enable checking of stdlib return types // enable checking of stdlib return types
systemProperty("org.pkl.testMode", "true") systemProperty("org.pkl.testMode", "true")
reports.named("html") { required = true } reports.named("html") { enabled = true }
testLogging { exceptionFormat = TestExceptionFormat.FULL } testLogging { exceptionFormat = TestExceptionFormat.FULL }
@@ -1,5 +1,5 @@
/* /*
* Copyright © 2025-2026 Apple Inc. and the Pkl project authors. All rights reserved. * Copyright © 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.
@@ -37,15 +37,16 @@ val stagedLinuxAarch64Executable: Configuration by configurations.creating
val stagedAlpineLinuxAmd64Executable: Configuration by configurations.creating val stagedAlpineLinuxAmd64Executable: Configuration by configurations.creating
val stagedWindowsAmd64Executable: Configuration by configurations.creating val stagedWindowsAmd64Executable: Configuration by configurations.creating
val nativeImageClasspath by configurations.creating { val nativeImageClasspath by
extendsFrom(configurations.runtimeClasspath.get()) configurations.creating {
// Ensure native-image version uses GraalVM C SDKs instead of Java FFI or JNA extendsFrom(configurations.runtimeClasspath.get())
// (comes from artifact `mordant-jvm-graal-ffi`). // Ensure native-image version uses GraalVM C SDKs instead of Java FFI or JNA
exclude("com.github.ajalt.mordant", "mordant-jvm-ffm") // (comes from artifact `mordant-jvm-graal-ffi`).
exclude("com.github.ajalt.mordant", "mordant-jvm-ffm-jvm") exclude("com.github.ajalt.mordant", "mordant-jvm-ffm")
exclude("com.github.ajalt.mordant", "mordant-jvm-jna") exclude("com.github.ajalt.mordant", "mordant-jvm-ffm-jvm")
exclude("com.github.ajalt.mordant", "mordant-jvm-jna-jvm") exclude("com.github.ajalt.mordant", "mordant-jvm-jna")
} exclude("com.github.ajalt.mordant", "mordant-jvm-jna-jvm")
}
val libs = the<LibrariesForLibs>() val libs = the<LibrariesForLibs>()
@@ -139,63 +140,65 @@ val windowsExecutableAmd64 by
val assembleNative by tasks.existing val assembleNative by tasks.existing
val testStartNativeExecutable by tasks.registering { val testStartNativeExecutable by
dependsOn(assembleNative) tasks.registering {
dependsOn(assembleNative)
// dummy file for up-to-date checking // dummy file for up-to-date checking
val outputFile = project.layout.buildDirectory.file("testStartNativeExecutable/output.txt") val outputFile = project.layout.buildDirectory.file("testStartNativeExecutable/output.txt")
outputs.file(outputFile) outputs.file(outputFile)
val execOutput = providers.exec { val execOutput =
commandLine(assembleNative.get().outputs.files.singleFile, "--version") providers.exec { commandLine(assembleNative.get().outputs.files.singleFile, "--version") }
}
doLast { doLast {
val outputText = execOutput.standardOutput.asText.get() val outputText = execOutput.standardOutput.asText.get()
if (!outputText.contains(buildInfo.pklVersionNonUnique)) { if (!outputText.contains(buildInfo.pklVersionNonUnique)) {
throw GradleException( throw GradleException(
"Expected version output to contain current version (${buildInfo.pklVersionNonUnique}), but got '$outputText'" "Expected version output to contain current version (${buildInfo.pklVersionNonUnique}), but got '$outputText'"
) )
} }
outputFile.get().asFile.toPath().apply { outputFile.get().asFile.toPath().apply {
try { try {
parent.createDirectories() parent.createDirectories()
} catch (_: java.nio.file.FileAlreadyExistsException) {} } catch (ignored: java.nio.file.FileAlreadyExistsException) {}
writeText("OK") writeText("OK")
}
} }
} }
}
val requiredGlibcVersion: Version = Version.parse("2.17") val requiredGlibcVersion: Version = Version.parse("2.17")
val checkGlibc by tasks.registering { val checkGlibc by
enabled = buildInfo.os.isLinux && !buildInfo.musl tasks.registering {
dependsOn(assembleNative) enabled = buildInfo.os.isLinux && !buildInfo.musl
doLast { dependsOn(assembleNative)
val exec = providers.exec { doLast {
commandLine("objdump", "-T", assembleNative.get().outputs.files.singleFile) val exec =
} providers.exec {
val output = exec.standardOutput.asText.get() commandLine("objdump", "-T", assembleNative.get().outputs.files.singleFile)
val minimumGlibcVersion =
output
.split("\n")
.mapNotNull { line ->
val match = Regex("GLIBC_([.0-9]*)").find(line)
match?.groups[1]?.let { Version.parse(it.value) }
} }
.maxOrNull() val output = exec.standardOutput.asText.get()
if (minimumGlibcVersion == null) { val minimumGlibcVersion =
throw GradleException( output
"Could not determine glibc version from executable. objdump output: $output" .split("\n")
) .mapNotNull { line ->
} val match = Regex("GLIBC_([.0-9]*)").find(line)
if (minimumGlibcVersion > requiredGlibcVersion) { match?.groups[1]?.let { Version.parse(it.value) }
throw GradleException( }
"Incorrect glibc version. Found: $minimumGlibcVersion, required: $requiredGlibcVersion" .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 // Expose underlying task's outputs
private fun <T : Task> Task.wraps(other: TaskProvider<T>) { private fun <T : Task> Task.wraps(other: TaskProvider<T>) {
@@ -0,0 +1,128 @@
/*
* 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 © 2025-2026 Apple Inc. and the Pkl project authors. All rights reserved. * Copyright © 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.
@@ -24,7 +24,7 @@ spotless {
target("**/*.pkl") target("**/*.pkl")
addStep(PklFormatterStep(pklFormatter).create()) addStep(PklFormatterStep(pklFormatter).create())
licenseHeaderFile( licenseHeaderFile(
rootProject.file("build-logic/src/main/resources/license-header.line-comment.txt"), rootProject.file("buildSrc/src/main/resources/license-header.line-comment.txt"),
"/// ", "/// ",
) )
// disable ratcheting for Pkl sources // disable ratcheting for Pkl sources
+2 -2
View File
@@ -1,6 +1,6 @@
name: main name: main
title: Main Project title: Main Project
version: 0.32.0-dev version: 0.31.0
prerelease: true prerelease: false
nav: nav:
- nav.adoc - nav.adoc
+3 -3
View File
@@ -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,8 +16,8 @@
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension
plugins { plugins {
id("pklAllProjects") pklAllProjects
id("pklKotlinTest") pklKotlinTest
} }
sourceSets { sourceSets {
+61
View File
@@ -0,0 +1,61 @@
# This is a Gradle generated file for dependency locking.
# Manual edits can break the build and are not advised.
# This file is expected to be part of source control.
com.github.ben-manes.caffeine:caffeine:2.9.3=swiftExportClasspathResolvable
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.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
org.apiguardian:apiguardian-api:1.1.2=testCompileClasspath,testImplementationDependenciesMetadata
org.assertj:assertj-core:3.27.6=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.bouncycastle:bcpg-jdk18on:1.80=kotlinBouncyCastleConfiguration
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.graalvm.polyglot:polyglot:25.0.0=testRuntimeClasspath
org.graalvm.sdk:collections:25.0.0=testRuntimeClasspath
org.graalvm.sdk:graal-sdk:25.0.0=testRuntimeClasspath
org.graalvm.sdk:nativeimage:25.0.0=testRuntimeClasspath
org.graalvm.sdk:word:25.0.0=testRuntimeClasspath
org.graalvm.truffle:truffle-api:25.0.0=testRuntimeClasspath
org.jetbrains.kotlin:abi-tools-api:2.2.20=kotlinInternalAbiValidation
org.jetbrains.kotlin:abi-tools:2.2.20=kotlinInternalAbiValidation
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-reflect:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable,testRuntimeClasspath
org.jetbrains.kotlin:kotlin-script-runtime:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable
org.jetbrains.kotlin:kotlin-scripting-common:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-scripting-jvm:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.2.20=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.2.20=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlin:kotlin-stdlib:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlin:swift-export-embeddable:2.2.20=swiftExportClasspathResolvable
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.0=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable
org.jetbrains.kotlinx:kotlinx-serialization-bom:1.7.3=swiftExportClasspathResolvable
org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.7.3=swiftExportClasspathResolvable
org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3=swiftExportClasspathResolvable
org.jetbrains:annotations:13.0=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable,testCompileClasspath,testRuntimeClasspath
org.junit.jupiter:junit-jupiter-api:5.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.junit.jupiter:junit-jupiter-engine:5.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
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.opentest4j:opentest4j:1.3.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.organicdesign:Paguro:3.10.3=testRuntimeClasspath
org.snakeyaml:snakeyaml-engine:2.10=testRuntimeClasspath
empty=annotationProcessor,apiDependenciesMetadata,compileClasspath,compileOnlyDependenciesMetadata,implementationDependenciesMetadata,intransitiveDependenciesMetadata,kotlinCompilerPluginClasspath,kotlinNativeCompilerPluginClasspath,kotlinScriptDefExtensions,runtimeClasspath,testAnnotationProcessor,testApiDependenciesMetadata,testCompileOnlyDependenciesMetadata,testIntransitiveDependenciesMetadata,testKotlinScriptDefExtensions
@@ -3,10 +3,10 @@
// 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.32.0 :pkl-version-no-suffix: 0.31.0
// 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: ''
// the remaining attributes do not need to be updated regularly // the remaining attributes do not need to be updated regularly
@@ -210,11 +210,6 @@ class Http {
/// ///
/// Each rewrite must start with `http://` or `https://`, and must end with `/`. /// Each rewrite must start with `http://` or `https://`, and must end with `/`.
rewrites: Mapping<String, String>? rewrites: Mapping<String, String>?
/// HTTP headers.
/// Each entry key is a glob pattern that is matched against outbound request URLs.
/// Each value is a map of headers that is added to the matching request.
headers: Mapping<String, Mapping<String, Listing<String>>>?
} }
/// Settings that control how Pkl talks to HTTP proxies. /// Settings that control how Pkl talks to HTTP proxies.
+1 -1
View File
@@ -198,7 +198,7 @@ For Spring Boot applications, and for users of `pkl-config-java` compiling the g
.--non-null-annotation .--non-null-annotation
[%collapsible] [%collapsible]
==== ====
Default: `org.jspecify.annotations.NonNull` + Default: `org.pkl.config.java.mapper.NonNull` +
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.
@@ -255,7 +255,8 @@ String literals are enclosed in double quotes:
"Hello, World!" "Hello, World!"
---- ----
TIP: Except for a few minor differences footnote:[Pkl's string literals have fewer character escape sequences and stricter rules for line indentation in multiline strings.], TIP: Except for a few minor differences footnote:[Pkl's string literals have fewer character escape sequences,
have stricter rules for line indentation in multiline strings, and do not have a line continuation character.],
String literals have the same syntax and semantics as in Swift 5. Learn one of them, know both of them! String literals have the same syntax and semantics as in Swift 5. Learn one of them, know both of them!
Inside a string literal, the following character escape sequences have special meaning: Inside a string literal, the following character escape sequences have special meaning:
@@ -361,23 +362,6 @@ str = """
""" """
---- ----
To prevent line breaks from becoming part of the string's value, use a backslash (`\`) to end those lines.
[source%tested,{pkl}]
----
str = """
Although the Dodo is extinct, \
the species will be remembered.
"""
----
This multiline string is equivalent to the following single-line string:
[source%parsed,{pkl-expr}]
----
"Although the Dodo is extinct, the species will be remembered."
----
[[custom-string-delimiters]] [[custom-string-delimiters]]
=== Custom String Delimiters === Custom String Delimiters
@@ -4938,7 +4922,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]
@@ -5059,6 +5043,8 @@ in the context of that module.
[[glob-patterns]] [[glob-patterns]]
=== Glob Patterns === Glob Patterns
Resources and modules may be imported at the same time by globbing with the <<globbed-imports>> and <<globbed-reads>> features.
Pkl's glob patterns mostly follow the rules described by link:{uri-glob-7}[glob(7)], with the following differences: Pkl's glob patterns mostly follow the rules described by link:{uri-glob-7}[glob(7)], with the following differences:
* `*` includes names that start with a dot (`.`). * `*` includes names that start with a dot (`.`).
-17
View File
@@ -546,15 +546,6 @@ When enabled, test failures will show intermediate values in the assertion expre
Use `--no-power-assertions` to disable this feature if you prefer simpler output. Use `--no-power-assertions` to disable this feature if you prefer simpler output.
==== ====
[[test-reporter]]
.--test-reporter
[%collapsible]
====
Default: `spec` +
Example: `--test-reporter minimal` +
Which test reporter to use for CLI output. Possible values are `spec` and `minimal`.
====
This command also takes <<common-options, common options>>. This command also takes <<common-options, common options>>.
[[command-run]] [[command-run]]
@@ -676,14 +667,6 @@ Force generation of expected examples. +
The old expected files will be deleted if present. The old expected files will be deleted if present.
==== ====
.--test-reporter
[%collapsible]
====
Default: `spec` +
Example: `--test-reporter minimal` +
Which test reporter to use for CLI output. Possible values are `spec` and `minimal`.
====
This command also takes <<common-options,common options>>. This command also takes <<common-options,common options>>.
[[command-project-resolve]] [[command-project-resolve]]
@@ -158,23 +158,6 @@ 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`. 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`.
==== ====
.--http-header
[%collapsible]
====
Default: (none) +
Example: `**=User-Agent: My User Agent` +
Additional headers to add to outbound HTTP requests.
The syntax is `<glob pattern>=<header name>:<header value>`, and any whitespace after the leading colon is trimmed.
The glob pattern is used to match against the URLs of outbound HTTP calls, and the value is the header name and value to add.
In the case of multiple matches, every header is added.
To describe a prefix match, the `\\**` wildcard should be added to the pattern.
For example, `https?://example.com/**` matches against every request to host `example.com`.
====
.--trace-mode .--trace-mode
[%collapsible] [%collapsible]
==== ====
+1 -1
View File
@@ -204,7 +204,7 @@ Download links:
The Pkldoc tool is offered as Gradle plugin, Java library, and CLI. The Pkldoc tool is offered as Gradle plugin, Java library, and CLI.
It can generate documentation either for modules directly, or generate documentation for _package uris_. It can generate documentation either for modules directly, or generate documentation for _package uris_.
The tool accepts an optional argument of a module named _docsite-info.pkl_, that amends link:{uri-DocsiteInfo}[pkl.DocsiteInfo]. The tool requires an argument of a module named _docsite-info.pkl_, that amends link:{uri-DocsiteInfo}[pkl.DocsiteInfo].
[discrete] [discrete]
==== Generating documentation for modules directly ==== Generating documentation for modules directly
+1 -18
View File
@@ -322,15 +322,6 @@ Default: `false` +
Whether to ignore expected example files and generate them again. Whether to ignore expected example files and generate them again.
==== ====
[[test-reporter]]
.testReporter: Property<String>
[%collapsible]
====
Default: `"spec"` +
Example: `reporter = "minimal"` +
Which test reporter to use for CLI output. Possible values are `"spec"` and `"minimal"`.
====
[[power-assertions-test]] [[power-assertions-test]]
.powerAssertions: Property<Boolean> .powerAssertions: Property<Boolean>
[%collapsible] [%collapsible]
@@ -423,7 +414,7 @@ For Spring Boot applications, and for users of `pkl-config-java` compiling the g
.nonNullAnnotation: Property<String> .nonNullAnnotation: Property<String>
[%collapsible] [%collapsible]
==== ====
Default: `"org.jspecify.annotations.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)`
@@ -686,14 +677,6 @@ Default: `false` +
Whether to ignore expected example files and generate them again. Whether to ignore expected example files and generate them again.
==== ====
.testReporter: Property<String>
[%collapsible]
====
Default: `"spec"` +
Example: `reporter = "minimal"` +
Which test reporter to use for CLI output. Possible values are `"spec"` and `"minimal"`.
====
Common properties: Common properties:
include::../partials/gradle-common-properties.adoc[] include::../partials/gradle-common-properties.adoc[]
@@ -119,19 +119,6 @@ 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`. 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`.
==== ====
.httpHeaders: MapProperty<String, Map<String, List<String>>>
[%collapsible]
====
Default: `null` +
Example: `httpHeaders = ["**": ["User-Agent": ["My User Agent"]]]` +
Additional headers to add to outbound HTTP requests.
The key is a glob pattern that is used to match against the URLs of outbound HTTP calls, and the value is the header name and values to add.
Each header value becomes its own HTTP header.
To describe a prefix match, the `\\**` wildcard should be added to the pattern.
For example, `https?://example.com/**` matches against every request to host `example.com`.
====
.powerAssertions: Property<Boolean> .powerAssertions: Property<Boolean>
[%collapsible] [%collapsible]
==== ====
+1 -1
View File
@@ -266,7 +266,7 @@ Thanks to https://github.com/gordonbondon[@gordonbondon] for contributing to thi
=== `@Generated` annotation for Java/Kotlin codegen === `@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]). Classes generated by the Java and Kotlin code generator can optionally recieve 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. This behavior is toggled with the `--generated-annotation` CLI flag, or the similarly named Gradle property.
+2 -2
View File
@@ -1,6 +1,6 @@
= Pkl 0.31 Release Notes = Pkl 0.31 Release Notes
:version: 0.31 :version: 0.31
:version-minor: 0.31.1 :version-minor: 0.31.0
:release-date: February 26th, 2026 :release-date: February 26th, 2026
:version-next: 0.32 :version-next: 0.32
:version-next-date: July 2026 :version-next-date: July 2026
@@ -55,7 +55,7 @@ Value: new Person { name = "Bub Johnson" }
7 | passenger: Person(name.endsWith(lastName)) = new { name = "Bub Johnson" } 7 | passenger: Person(name.endsWith(lastName)) = new { name = "Bub Johnson" }
---- ----
Now, we know what the expectation is. Now, we know what the expecation actually is.
This type of diagram is also added to test facts. This type of diagram is also added to test facts.
When tests fail, Pkl emits a diagram of the expression, and the values produced. When tests fail, Pkl emits a diagram of the expression, and the values produced.
@@ -1,64 +0,0 @@
= Pkl 0.32.0 Release Notes
:version: 0.32
:version-minor: 0.32.0
:release-date: TBD
:version-next: 0.33
:version-next-date: TBD
include::partial$intro.adoc[]
== Highlights [small]#💖#
News you don't want to miss.
.XXX
[%collapsible]
====
XXX
====
== Noteworthy [small]#🎶#
Ready when you need them.
.XXX
[%collapsible]
====
XXX
====
== Breaking Changes [small]#💔#
Things to watch out for when upgrading.
=== Removed Java APIs
The following APIs have been removed without replacement.
* `org.pkl.config.java.Config#makeConfig` (pr:https://github.com/apple/pkl/pull/1531[])
The following APIs have been deprecated for removal.
* `org.pkl.config.java.mapper.NonNull` (https://github.com/apple/pkl/pull/1607[#1607]).
.XXX
[%collapsible]
====
XXX
====
== Work In Progress [small]#🚆#
They missed the train but deserve a mention.
.XXX
[%collapsible]
====
XXX
====
== Contributors [small]#🙏#
We would like to thank the contributors to this release (in alphabetical order):
* XXX
@@ -1,41 +1,8 @@
= Changelog = Changelog
include::ROOT:partial$component-attributes.adoc[] include::ROOT:partial$component-attributes.adoc[]
[[release-0.32.0]]
== 0.32.0 (UNRELEASED)
[[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]] [[release-0.31.0]]
== 0.31.0 (2026-02-26) == 0.31.0 (UNRELEASED)
xref:0.31.adoc[Release Notes] xref:0.31.adoc[Release Notes]
[[release-0.30.2]] [[release-0.30.2]]
@@ -2,7 +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.32.adoc[0.32 Release Notes]
* xref:0.31.adoc[0.31 Release Notes] * xref:0.31.adoc[0.31 Release Notes]
* xref:0.30.adoc[0.30 Release Notes] * xref:0.30.adoc[0.30 Release Notes]
* xref:0.29.adoc[0.29 Release Notes] * xref:0.29.adoc[0.29 Release Notes]
+7
View File
@@ -52,3 +52,10 @@ XXX
We would like to thank the contributors to this release (in alphabetical order): We would like to thank the contributors to this release (in alphabetical order):
* XXX * XXX
== Closed Radars [small]#🔒#
XXX Radars down, Inbox Zero in sight ...
[smaller]
. XXX (https://github.com/apple/pkl/issues/new[XXX])
-1
View File
@@ -41,7 +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.32.adoc[0.32 Release Notes]
** xref:release-notes:0.31.adoc[0.31 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.30.adoc[0.30 Release Notes]
** xref:release-notes:0.29.adoc[0.29 Release Notes] ** xref:release-notes:0.29.adoc[0.29 Release Notes]
+101 -113
View File
@@ -1,22 +1,3 @@
/*
* 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.file.Files
import kotlin.io.path.isDirectory
import kotlin.io.path.isRegularFile
import kotlin.io.path.useDirectoryEntries
import org.junit.platform.commons.annotation.Testable import org.junit.platform.commons.annotation.Testable
import org.junit.platform.engine.* import org.junit.platform.engine.*
import org.junit.platform.engine.TestDescriptor.Type import org.junit.platform.engine.TestDescriptor.Type
@@ -35,18 +16,23 @@ 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.evaluatorSettings.TraceMode
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
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.resource.ResourceReaders
import org.pkl.core.util.IoUtils import org.pkl.core.util.IoUtils
import org.pkl.core.http.HttpClient
import org.pkl.parser.Parser import org.pkl.parser.Parser
import org.pkl.parser.ParserError import org.pkl.parser.ParserError
import org.pkl.parser.syntax.ClassProperty import org.pkl.parser.syntax.ClassProperty
import org.pkl.core.resource.ResourceReaders
import java.nio.file.Files
import kotlin.io.path.isDirectory
import kotlin.io.path.isRegularFile
import kotlin.io.path.useDirectoryEntries
@Testable class DocSnippetTests @Testable
class DocSnippetTests
class DocSnippetTestsEngine : HierarchicalTestEngine<DocSnippetTestsEngine.ExecutionContext>() { class DocSnippetTestsEngine : HierarchicalTestEngine<DocSnippetTestsEngine.ExecutionContext>() {
private val projectDir = rootProjectDir.resolve("docs") private val projectDir = rootProjectDir.resolve("docs")
@@ -55,8 +41,7 @@ class DocSnippetTestsEngine : HierarchicalTestEngine<DocSnippetTestsEngine.Execu
private companion object { private companion object {
val headingRegex = Regex("""(?u)^\s*(=++)\s*(.+)""") val headingRegex = Regex("""(?u)^\s*(=++)\s*(.+)""")
val collapsibleBlockRegex = Regex("""(?u)^\s*\[%collapsible""") val collapsibleBlockRegex = Regex("""(?u)^\s*\[%collapsible""")
val codeBlockRegex = val codeBlockRegex = Regex("""(?u)^\s*\[source(?:%(tested|parsed)(%error)?)?(?:,\{?([a-zA-Z-_]+)}?)?""")
Regex("""(?u)^\s*\[source(?:%(tested|parsed)(%error)?)?(?:,\{?([a-zA-Z-_]+)}?)?""")
val codeBlockNameRegex = Regex("""(?u)^\s*\.(.+)""") val codeBlockNameRegex = Regex("""(?u)^\s*\.(.+)""")
val codeBlockDelimiterRegex = Regex("""(?u)^\s*----""") val codeBlockDelimiterRegex = Regex("""(?u)^\s*----""")
val graphicsRegex = Regex("\\[small]#.+#") val graphicsRegex = Regex("\\[small]#.+#")
@@ -66,7 +51,7 @@ class DocSnippetTestsEngine : HierarchicalTestEngine<DocSnippetTestsEngine.Execu
override fun discover( override fun discover(
discoveryRequest: EngineDiscoveryRequest, discoveryRequest: EngineDiscoveryRequest,
uniqueId: UniqueId, uniqueId: UniqueId
): TestDescriptor { ): TestDescriptor {
val packageSelectors = discoveryRequest.getSelectorsByType(PackageSelector::class.java) val packageSelectors = discoveryRequest.getSelectorsByType(PackageSelector::class.java)
val classSelectors = discoveryRequest.getSelectorsByType(ClassSelector::class.java) val classSelectors = discoveryRequest.getSelectorsByType(ClassSelector::class.java)
@@ -77,14 +62,12 @@ class DocSnippetTestsEngine : HierarchicalTestEngine<DocSnippetTestsEngine.Execu
val packageName = testClass.`package`.name val packageName = testClass.`package`.name
val className = testClass.name val className = testClass.name
if ( if (methodSelectors.isEmpty()
methodSelectors.isEmpty() && && (packageSelectors.isEmpty() || packageSelectors.any { it.packageName == packageName })
(packageSelectors.isEmpty() || packageSelectors.any { it.packageName == packageName }) && && (classSelectors.isEmpty() || classSelectors.any { it.className == className })
(classSelectors.isEmpty() || classSelectors.any { it.className == className })
) { ) {
val rootDescriptor = val rootDescriptor = Descriptor.Path(uniqueId, docsDir.fileName.toString(), ClassSource.from(testClass), docsDir)
Descriptor.Path(uniqueId, docsDir.fileName.toString(), ClassSource.from(testClass), docsDir)
doDiscover(rootDescriptor, uniqueIdSelectors) doDiscover(rootDescriptor, uniqueIdSelectors)
return rootDescriptor return rootDescriptor
} }
@@ -94,34 +77,36 @@ class DocSnippetTestsEngine : HierarchicalTestEngine<DocSnippetTestsEngine.Execu
} }
override fun createExecutionContext(request: ExecutionRequest): ExecutionContext { override fun createExecutionContext(request: ExecutionRequest): ExecutionContext {
val replServer = val replServer = ReplServer(
ReplServer( SecurityManagers.defaultManager,
SecurityManagers.defaultManager, HttpClient.dummyClient(),
HttpClient.dummyClient(), Loggers.stdErr(),
Loggers.stdErr(), listOf(
listOf( ModuleKeyFactories.standardLibrary,
ModuleKeyFactories.standardLibrary, ModuleKeyFactories.classPath(DocSnippetTests::class.java.classLoader),
ModuleKeyFactories.classPath(DocSnippetTests::class.java.classLoader), ModuleKeyFactories.file
ModuleKeyFactories.file, ),
), listOf(
listOf(ResourceReaders.environmentVariable(), ResourceReaders.externalProperty()), ResourceReaders.environmentVariable(),
System.getenv(), ResourceReaders.externalProperty()
emptyMap(), ),
null, System.getenv(),
null, emptyMap(),
null, null,
IoUtils.getCurrentWorkingDir(), null,
StackFrameTransformers.defaultTransformer, null,
false, IoUtils.getCurrentWorkingDir(),
TraceMode.COMPACT, StackFrameTransformers.defaultTransformer,
) false,
TraceMode.COMPACT,
)
return ExecutionContext(replServer) return ExecutionContext(replServer)
} }
private fun doDiscover(rootDescriptor: TestDescriptor, selectors: List<UniqueIdSelector>) { private fun doDiscover(rootDescriptor: TestDescriptor, selectors: List<UniqueIdSelector>) {
fun isMatch(other: UniqueId) = fun isMatch(other: UniqueId) = selectors.isEmpty() || selectors.any {
selectors.isEmpty() || it.uniqueId.hasPrefix(other) || other.hasPrefix(it.uniqueId)
selectors.any { it.uniqueId.hasPrefix(other) || other.hasPrefix(it.uniqueId) } }
docsDir.useDirectoryEntries { docsDirEntries -> docsDir.useDirectoryEntries { docsDirEntries ->
for (docsDirEntry in docsDirEntries) { for (docsDirEntry in docsDirEntries) {
@@ -131,13 +116,12 @@ class DocSnippetTestsEngine : HierarchicalTestEngine<DocSnippetTestsEngine.Execu
val docsDirEntryId = rootDescriptor.uniqueId.append("dir", docsDirEntryName) val docsDirEntryId = rootDescriptor.uniqueId.append("dir", docsDirEntryName)
if (!isMatch(docsDirEntryId)) continue if (!isMatch(docsDirEntryId)) continue
val docsDirEntryDescriptor = val docsDirEntryDescriptor = Descriptor.Path(
Descriptor.Path( docsDirEntryId,
docsDirEntryId, docsDirEntryName,
docsDirEntryName, DirectorySource.from(docsDirEntry.toFile()),
DirectorySource.from(docsDirEntry.toFile()), docsDirEntry
docsDirEntry, )
)
rootDescriptor.addChild(docsDirEntryDescriptor) rootDescriptor.addChild(docsDirEntryDescriptor)
val pagesDir = docsDirEntry.resolve("pages") val pagesDir = docsDirEntry.resolve("pages")
@@ -147,20 +131,17 @@ class DocSnippetTestsEngine : HierarchicalTestEngine<DocSnippetTestsEngine.Execu
for (pagesDirEntry in pagesDirEntries) { for (pagesDirEntry in pagesDirEntries) {
val pagesDirEntryName = pagesDirEntry.fileName.toString() val pagesDirEntryName = pagesDirEntry.fileName.toString()
val pagesDirEntryId = docsDirEntryId.append("file", pagesDirEntryName) val pagesDirEntryId = docsDirEntryId.append("file", pagesDirEntryName)
if ( if (!pagesDirEntry.isRegularFile() ||
!pagesDirEntry.isRegularFile() || !pagesDirEntryName.endsWith(".adoc") ||
!pagesDirEntryName.endsWith(".adoc") || !isMatch(pagesDirEntryId)
!isMatch(pagesDirEntryId) ) continue
)
continue
val pagesDirEntryDescriptor = val pagesDirEntryDescriptor = Descriptor.Path(
Descriptor.Path( pagesDirEntryId,
pagesDirEntryId, pagesDirEntryName,
pagesDirEntryName, FileSource.from(pagesDirEntry.toFile()),
FileSource.from(pagesDirEntry.toFile()), pagesDirEntry
pagesDirEntry, )
)
docsDirEntryDescriptor.addChild(pagesDirEntryDescriptor) docsDirEntryDescriptor.addChild(pagesDirEntryDescriptor)
parseAsciidoc(pagesDirEntryDescriptor, selectors) parseAsciidoc(pagesDirEntryDescriptor, selectors)
@@ -193,15 +174,17 @@ class DocSnippetTestsEngine : HierarchicalTestEngine<DocSnippetTestsEngine.Execu
} }
val parent = sections.firstOrNull() ?: docDescriptor val parent = sections.firstOrNull() ?: docDescriptor
val normalizedTitle = val normalizedTitle = title
title.replace("<code>", "").replace("</code>", "").replace(graphicsRegex, "").trim() .replace("<code>", "")
val childSection = .replace("</code>", "")
Descriptor.Section( .replace(graphicsRegex, "")
parent.uniqueId.append("section", normalizedTitle), .trim()
normalizedTitle, val childSection = Descriptor.Section(
FileSource.from(docDescriptor.path.toFile(), FilePosition.from(lineNum)), parent.uniqueId.append("section", normalizedTitle),
newLevel, normalizedTitle,
) FileSource.from(docDescriptor.path.toFile(), FilePosition.from(lineNum)),
newLevel
)
sections.addFirst(childSection) sections.addFirst(childSection)
parent.addChild(childSection) parent.addChild(childSection)
@@ -234,8 +217,7 @@ class DocSnippetTestsEngine : HierarchicalTestEngine<DocSnippetTestsEngine.Execu
codeBlockNum += 1 codeBlockNum += 1
val (testMode, error, language) = codeBlockMatch.destructured val (testMode, error, language) = codeBlockMatch.destructured
if (testMode.isNotEmpty()) { if (testMode.isNotEmpty()) {
val blockName = val blockName = codeBlockNameRegex.find(prevLine)?.groupValues?.get(1) ?: "snippet$codeBlockNum"
codeBlockNameRegex.find(prevLine)?.groupValues?.get(1) ?: "snippet$codeBlockNum"
while (linesIterator.hasNext()) { while (linesIterator.hasNext()) {
advance() advance()
val startDelimiterMatch = codeBlockDelimiterRegex.find(line) val startDelimiterMatch = codeBlockDelimiterRegex.find(line)
@@ -254,13 +236,10 @@ class DocSnippetTestsEngine : HierarchicalTestEngine<DocSnippetTestsEngine.Execu
snippetId, snippetId,
blockName, blockName,
language, language,
FileSource.from( FileSource.from(docDescriptor.path.toFile(), FilePosition.from(jumpToLineNum)),
docDescriptor.path.toFile(),
FilePosition.from(jumpToLineNum),
),
builder.toString(), builder.toString(),
testMode == "parsed", testMode == "parsed",
error.isNotEmpty(), error.isNotEmpty()
) )
) )
} }
@@ -282,21 +261,28 @@ class DocSnippetTestsEngine : HierarchicalTestEngine<DocSnippetTestsEngine.Execu
} }
} }
private sealed class Descriptor(uniqueId: UniqueId, displayName: String, source: TestSource) : private sealed class Descriptor(
AbstractTestDescriptor(uniqueId, displayName, source), Node<ExecutionContext> { uniqueId: UniqueId,
displayName: String,
source: TestSource
) : AbstractTestDescriptor(uniqueId, displayName, source), Node<ExecutionContext> {
class Path( class Path(
uniqueId: UniqueId, uniqueId: UniqueId,
displayName: String, displayName: String,
source: TestSource, source: TestSource,
val path: java.nio.file.Path, val path: java.nio.file.Path
) : Descriptor(uniqueId, displayName, source) { ) : Descriptor(uniqueId, displayName, source) {
override fun getType() = Type.CONTAINER override fun getType() = Type.CONTAINER
} }
class Section(uniqueId: UniqueId, displayName: String, source: TestSource, val level: Int) : class Section(
Descriptor(uniqueId, displayName, source) { uniqueId: UniqueId,
displayName: String,
source: TestSource,
val level: Int
) : Descriptor(uniqueId, displayName, source) {
override fun getType() = Type.CONTAINER override fun getType() = Type.CONTAINER
@@ -313,7 +299,7 @@ class DocSnippetTestsEngine : HierarchicalTestEngine<DocSnippetTestsEngine.Execu
source: TestSource, source: TestSource,
private val code: String, private val code: String,
private val parseOnly: Boolean, private val parseOnly: Boolean,
private val expectError: Boolean, private val expectError: Boolean
) : Descriptor(uniqueId, displayName, source) { ) : Descriptor(uniqueId, displayName, source) {
override fun getType() = Type.TEST override fun getType() = Type.TEST
@@ -322,14 +308,11 @@ class DocSnippetTestsEngine : HierarchicalTestEngine<DocSnippetTestsEngine.Execu
when (language) { when (language) {
"pkl" -> Parser().parseModule(code) "pkl" -> Parser().parseModule(code)
"pkl-expr" -> Parser().parseExpressionInput(code) "pkl-expr" -> Parser().parseExpressionInput(code)
else -> throw (Exception("Unrecognized language: $language")) else -> throw(Exception("Unrecognized language: $language"))
} }
} }
override fun execute( override fun execute(context: ExecutionContext, executor: DynamicTestExecutor): ExecutionContext {
context: ExecutionContext,
executor: DynamicTestExecutor,
): ExecutionContext {
if (parseOnly) { if (parseOnly) {
try { try {
parsed parsed
@@ -345,7 +328,12 @@ class DocSnippetTestsEngine : HierarchicalTestEngine<DocSnippetTestsEngine.Execu
} }
context.replServer.handleRequest( context.replServer.handleRequest(
ReplRequest.Eval("snippet", code, !expectError, !expectError) ReplRequest.Eval(
"snippet",
code,
!expectError,
!expectError
)
) )
val properties = parsed.children()?.filterIsInstance<ClassProperty>() ?: emptyList() val properties = parsed.children()?.filterIsInstance<ClassProperty>() ?: emptyList()
@@ -354,21 +342,21 @@ class DocSnippetTestsEngine : HierarchicalTestEngine<DocSnippetTestsEngine.Execu
// force each property // force each property
for (prop in properties) { for (prop in properties) {
responses.addAll( responses.addAll(context.replServer.handleRequest(
context.replServer.handleRequest( ReplRequest.Eval(
ReplRequest.Eval("snippet", prop.name.value, false, true) "snippet",
prop.name.value,
false,
true
) )
) ))
} }
if (expectError) { if (expectError) {
if ( if (responses.dropLast(1).any { it !is ReplResponse.EvalSuccess } ||
responses.dropLast(1).any { it !is ReplResponse.EvalSuccess } || responses.last() !is ReplResponse.EvalError) {
responses.last() !is ReplResponse.EvalError
) {
throw AssertionError( throw AssertionError(
"Expected %error snippet to fail at the end, but got the following REPL responses:\n\n" + "Expected %error snippet to fail at the end, but got the following REPL responses:\n\n" +
responses.joinToString("\n\n") { it.message } responses.joinToString("\n\n") { it.message })
)
} }
return context return context
+1 -1
View File
@@ -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.32.0 version=0.31.0
# google-java-format requires jdk.compiler exports # google-java-format requires jdk.compiler exports
org.gradle.jvmargs= \ org.gradle.jvmargs= \
-12
View File
@@ -1,12 +0,0 @@
#This file is generated by updateDaemonJvm
toolchainUrl.FREE_BSD.AARCH64=https\://api.foojay.io/disco/v3.0/ids/1630f7ebef05444cb27a2709ea0249b3/redirect
toolchainUrl.FREE_BSD.X86_64=https\://api.foojay.io/disco/v3.0/ids/cd495626d2ee49a75447e3fdc6afb287/redirect
toolchainUrl.LINUX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/1630f7ebef05444cb27a2709ea0249b3/redirect
toolchainUrl.LINUX.X86_64=https\://api.foojay.io/disco/v3.0/ids/cd495626d2ee49a75447e3fdc6afb287/redirect
toolchainUrl.MAC_OS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/d4fd992c9557644e637ebe98263e0ae7/redirect
toolchainUrl.MAC_OS.X86_64=https\://api.foojay.io/disco/v3.0/ids/faa12903720d410b387cc69ccafb1a74/redirect
toolchainUrl.UNIX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/1630f7ebef05444cb27a2709ea0249b3/redirect
toolchainUrl.UNIX.X86_64=https\://api.foojay.io/disco/v3.0/ids/cd495626d2ee49a75447e3fdc6afb287/redirect
toolchainUrl.WINDOWS.X86_64=https\://api.foojay.io/disco/v3.0/ids/8e1d9ee5d0f13e442218f6884a306da1/redirect
toolchainVendor=ADOPTIUM
toolchainVersion=25
+56 -73
View File
@@ -1,68 +1,61 @@
[versions] # ordered alphabetically [versions] # ordered alphabetically
assertj = "3.27.7" assertj = "3.+"
checksumPlugin = "1.4.0" checksumPlugin = "1.4.0"
# 5.0.3 is the last version compatible with Kotlin 2.2 clikt = "5.+"
clikt = "5.0.3" commonMark = "0.+"
commonMark = "0.28.0" downloadTaskPlugin = "5.6.0"
downloadTaskPlugin = "5.7.0" geantyref = "1.+"
errorProne = "2.49.0" googleJavaFormat = "1.25.2"
errorPronePlugin = "5.1.0" # must not use `+` because used in download URL
geantyref = "2.0.1" # 23.1.x requires JDK 20+
graalVm = "25.0.0"
#noinspection UnusedVersionCatalogEntry #noinspection UnusedVersionCatalogEntry
googleJavaFormat = "1.35.0" graalVmJdkVersion = "25.0.0"
# 25.0.2 no longer supports macos-x64
graalVm = "25.0.1"
#noinspection UnusedVersionCatalogEntry
graalVmJdkVersion = "25.0.1"
# 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 #noinspection UnusedVersionCatalogEntry
graalVmSha256-macos-x64 = "a3d895b4cd1c783badbd277ec70409806bd4102fca0d2a60dbaeb0bab41aec30" graalVmSha256-macos-x64 = "04278cf867d040e29dc71dd7727793f0ea67eb72adce8a35d04b87b57906778d"
#noinspection UnusedVersionCatalogEntry #noinspection UnusedVersionCatalogEntry
graalVmSha256-macos-aarch64 = "066339f24a8ab5c161548491a9400f7344e7761a1e46f8979e76c7ef11d5bc76" graalVmSha256-macos-aarch64 = "c446d5aaeda98660a4c14049d299e9fba72105a007df89f19d27cf3979d37158"
#noinspection UnusedVersionCatalogEntry #noinspection UnusedVersionCatalogEntry
graalVmSha256-linux-x64 = "01e39fe1a87f28b842a3e4e3b77be9b544dca3a58fa6e93b924a6106c8bac7fb" graalVmSha256-linux-x64 = "1862f2ce97387a303cae4c512cb21baf36fafd2457c3cbbc10d87db94b89d3dd"
#noinspection UnusedVersionCatalogEntry #noinspection UnusedVersionCatalogEntry
graalVmSha256-linux-aarch64 = "7aa0b9935a80e67f37c6025678393dbd123bb6f2226811decbc1a13093fc8ae2" graalVmSha256-linux-aarch64 = "6c3c8b7617006c5d174d9cf7d357ccfb4bae77a4df1294ee28084fcb6eea8921"
#noinspection UnusedVersionCatalogEntry #noinspection UnusedVersionCatalogEntry
graalVmSha256-windows-x64 = "fde83c5ceec2c75560c747ccd9f314f90e4cf5c5287416e67c4ce442e344ca27" graalVmSha256-windows-x64 = "33ef1d186b5c1e95465fcc97e637bc26e72d5f2250a8615b9c5d667ed5c17fd0"
# pklGraalVm.gradle.kts assumes this entry exists ideaExtPlugin = "1.1.9"
#noinspection UnusedVersionCatalogEntry intellijPlugin = "2.10.1"
graalVmSha256-windows-aarch64 = "unavailable" intellij = "2025.2.3"
ideaExtPlugin = "1.4.1" javaPoet = "0.+"
javaPoet = "0.15.0"
javaxInject = "1" javaxInject = "1"
jimfs = "1.3.1" jansi = "2.+"
jline = "4.0.14" jimfs = "1.+"
jmh = "1.37" # later versions don't work with native image
jmhPlugin = "0.7.3" # (at least not without additional configuration; tested with 3.25.1 and 3.27.1)
jspecify = "1.0.0" jline = "3.23.0"
junit = "6.0.3" jmh = "1.+"
jmhPlugin = "0.7.2"
jsr305 = "3.+"
junit = "5.+"
junitPlatform = "1.+"
kotlin = "2.2.20"
# 1.7+ generates much more verbose code # 1.7+ generates much more verbose code
kotlinPoet = "1.6.0" kotlinPoet = "1.6.+"
kotlinStdLib = "2.2.21" kotlinxHtml = "0.11.0"
#noinspection UnusedVersionCatalogEntry kotlinxSerialization = "1.8.0"
kotlinTarget = "2.2" kotlinxCoroutines = "1.+"
kotlinToolchain = "2.3.21" ktfmt = "0.53"
kotlinxHtml = "0.12.0"
# 1.9.0 is the last version compatible with Kotlin 2.2
kotlinxSerialization = "1.9.0"
kotlinxCoroutines = "1.10.2"
#noinspection UnusedVersionCatalogEntry
ktfmt = "0.62"
# replaces nuValidator's log4j dependency # replaces nuValidator's log4j dependency
# 2.17.1 is the last version compatible with nuValidator # something related to log4j-1.2-api is apparently broken in 2.17.2
log4j = "2.17.1" log4j = "2.17.1"
msgpack = "0.9.12" msgpack = "0.9.8"
nexusPublishPlugin = "2.0.0" nexusPublishPlugin = "2.0.0"
nullaway = "0.13.4" nuValidator = "20.+"
nullawayPlugin = "3.0.0" paguro = "3.+"
nuValidator = "26.5.7" shadowPlugin = "9.+"
paguro = "3.10.3" slf4j = "1.+"
shadowPlugin = "9.4.1" snakeYaml = "2.+"
slf4j = "2.0.18" spotlessPlugin = "6.25.0"
snakeYaml = "3.0.1" wiremock = "3.+"
spotlessPlugin = "8.4.0"
wiremock = "3.13.2"
[libraries] # ordered alphabetically [libraries] # ordered alphabetically
assertj = { group = "org.assertj", name = "assertj-core", version.ref = "assertj" } assertj = { group = "org.assertj", name = "assertj-core", version.ref = "assertj" }
@@ -71,33 +64,29 @@ cliktMarkdown = { group = "com.github.ajalt.clikt", name = "clikt-markdown", ver
commonMark = { group = "org.commonmark", name = "commonmark", version.ref = "commonMark" } commonMark = { group = "org.commonmark", name = "commonmark", version.ref = "commonMark" }
commonMarkTables = { group = "org.commonmark", name = "commonmark-ext-gfm-tables", version.ref = "commonMark" } commonMarkTables = { group = "org.commonmark", name = "commonmark-ext-gfm-tables", version.ref = "commonMark" }
downloadTaskPlugin = { group = "de.undercouch", name = "gradle-download-task", version.ref = "downloadTaskPlugin" } downloadTaskPlugin = { group = "de.undercouch", name = "gradle-download-task", version.ref = "downloadTaskPlugin" }
#noinspection UnusedVersionCatalogEntry
errorProne = { group = "com.google.errorprone", name = "error_prone_core", version.ref = "errorProne" }
errorProneAnnotations = { group = "com.google.errorprone", name = "error_prone_annotations", version.ref = "errorProne" }
errorPronePlugin = { group = "net.ltgt.gradle", name = "gradle-errorprone-plugin", version.ref = "errorPronePlugin" }
geantyref = { group = "io.leangen.geantyref", name = "geantyref", version.ref = "geantyref" } geantyref = { group = "io.leangen.geantyref", name = "geantyref", version.ref = "geantyref" }
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" }
jimfs = { group = "com.google.jimfs", name = "jimfs", version.ref = "jimfs" } jimfs = { group = "com.google.jimfs", name = "jimfs", version.ref = "jimfs" }
jlineReader = { group = "org.jline", name = "jline-reader", version.ref = "jline" } jlineReader = { group = "org.jline", name = "jline-reader", version.ref = "jline" }
jlineTerminal = { group = "org.jline", name = "jline-terminal", version.ref = "jline" } jlineTerminal = { group = "org.jline", name = "jline-terminal", version.ref = "jline" }
jlineTerminalJni = { group = "org.jline", name = "jline-terminal-jni", version.ref = "jline" } jlineTerminalJansi = { group = "org.jline", name = "jline-terminal-jansi", version.ref = "jline" }
#noinspection UnusedVersionCatalogEntry jsr305 = { group = "com.google.code.findbugs", name = "jsr305", version.ref = "jsr305" }
jspecify = { group = "org.jspecify", name = "jspecify", version.ref = "jspecify" }
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" }
#noinspection UnusedVersionCatalogEntry junitLauncher = { group = "org.junit.platform", name = "junit-platform-launcher", version.ref = "junitPlatform" }
junitLauncher = { group = "org.junit.platform", name = "junit-platform-launcher", version.ref = "junit" } kotlinPlugin = { group = "org.jetbrains.kotlin", name = "kotlin-gradle-plugin", version.ref = "kotlin" }
kotlinPlugin = { group = "org.jetbrains.kotlin", name = "kotlin-gradle-plugin", version.ref = "kotlinToolchain" }
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 = "kotlinStdLib" } kotlinReflect = { group = "org.jetbrains.kotlin", name = "kotlin-reflect", version.ref = "kotlin" }
kotlinScripting = { group = "org.jetbrains.kotlin", name = "kotlin-scripting-jsr223", version.ref = "kotlinStdLib" } kotlinScripting = { group = "org.jetbrains.kotlin", name = "kotlin-scripting-jsr223", version.ref = "kotlin" }
#noinspection UnusedVersionCatalogEntry kotlinStdLib = { group = "org.jetbrains.kotlin", name = "kotlin-stdlib-jdk8", version.ref = "kotlin" }
kotlinStdLib = { group = "org.jetbrains.kotlin", name = "kotlin-stdlib", version.ref = "kotlinStdLib" }
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" } kotlinxCoroutinesCore = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-core", version.ref = "kotlinxCoroutines" }
@@ -106,9 +95,6 @@ log4j12Api = { group = "org.apache.logging.log4j", name = "log4j-1.2-api", versi
msgpack = { group = "org.msgpack", name = "msgpack-core", version.ref = "msgpack" } msgpack = { group = "org.msgpack", name = "msgpack-core", version.ref = "msgpack" }
#noinspection UnusedVersionCatalogEntry #noinspection UnusedVersionCatalogEntry
nuValidator = { group = "nu.validator", name = "validator", version.ref = "nuValidator" } nuValidator = { group = "nu.validator", name = "validator", version.ref = "nuValidator" }
#noinspection UnusedVersionCatalogEntry
nullaway = { group = "com.uber.nullaway", name = "nullaway", version.ref = "nullaway" }
nullawayPlugin = { group = "net.ltgt.gradle", name = "gradle-nullaway-plugin", version.ref = "nullawayPlugin" }
# 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" }
@@ -126,12 +112,9 @@ wiremock = { group = "org.wiremock", name = "wiremock", version.ref = "wiremock"
[plugins] # ordered alphabetically [plugins] # ordered alphabetically
checksum = { id = "org.gradle.crypto.checksum", version.ref = "checksumPlugin" } checksum = { id = "org.gradle.crypto.checksum", version.ref = "checksumPlugin" }
#noinspection UnusedVersionCatalogEntry
errorProne = { id = "net.ltgt.errorprone", version.ref = "errorPronePlugin" }
ideaExt = { id = "org.jetbrains.gradle.plugin.idea-ext", version.ref = "ideaExtPlugin" } ideaExt = { id = "org.jetbrains.gradle.plugin.idea-ext", version.ref = "ideaExtPlugin" }
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 = "kotlinToolchain" } 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" }
#noinspection UnusedVersionCatalogEntry
nullaway = { id = "net.ltgt.nullaway", version.ref = "nullawayPlugin" }
shadow = { id = "com.gradleup.shadow", version.ref = "shadowPlugin" } shadow = { id = "com.gradleup.shadow", version.ref = "shadowPlugin" }
intellij = { id = "org.jetbrains.intellij.platform", version.ref = "intellijPlugin" }
Binary file not shown.
+2 -4
View File
@@ -1,10 +1,8 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionSha256Sum=bafc141b619ad6350fd975fc903156dd5c151998cc8b058e8c1044ab5f7b031f distributionSha256Sum=a17ddd85a26b6a7f5ddb71ff8b05fc5104c0202c6e64782429790c933686c806
distributionUrl=https\://services.gradle.org/distributions/gradle-9.5.1-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-bin.zip
networkTimeout=10000 networkTimeout=10000
retries=0
retryBackOffMs=500
validateDistributionUrl=true validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists
Vendored
+5 -2
View File
@@ -1,7 +1,7 @@
#!/bin/sh #!/bin/sh
# #
# Copyright © 2015 the original authors. # Copyright © 2015-2021 the original authors.
# #
# 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.
@@ -57,7 +57,7 @@
# Darwin, MinGW, and NonStop. # Darwin, MinGW, and NonStop.
# #
# (3) This script is generated from the Groovy template # (3) This script is generated from the Groovy template
# https://github.com/gradle/gradle/blob/3d91ce3b8caaf77ad09f381f43615b715b53f72c/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project. # within the Gradle project.
# #
# You can find Gradle at https://github.com/gradle/gradle/. # You can find Gradle at https://github.com/gradle/gradle/.
@@ -114,6 +114,7 @@ case "$( uname )" in #(
NONSTOP* ) nonstop=true ;; NONSTOP* ) nonstop=true ;;
esac esac
CLASSPATH="\\\"\\\""
# Determine the Java command to use to start the JVM. # Determine the Java command to use to start the JVM.
@@ -171,6 +172,7 @@ fi
# For Cygwin or MSYS, switch paths to Windows format before running java # For Cygwin or MSYS, switch paths to Windows format before running java
if "$cygwin" || "$msys" ; then if "$cygwin" || "$msys" ; then
APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
JAVACMD=$( cygpath --unix "$JAVACMD" ) JAVACMD=$( cygpath --unix "$JAVACMD" )
@@ -210,6 +212,7 @@ DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
set -- \ set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \ "-Dorg.gradle.appname=$APP_BASE_NAME" \
-classpath "$CLASSPATH" \
-jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \
"$@" "$@"
Vendored
+22 -10
View File
@@ -23,8 +23,8 @@
@rem @rem
@rem ########################################################################## @rem ##########################################################################
@rem Set local scope for the variables, and ensure extensions are enabled @rem Set local scope for the variables with windows NT shell
setlocal EnableExtensions if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0 set DIRNAME=%~dp0
if "%DIRNAME%"=="" set DIRNAME=. if "%DIRNAME%"=="" set DIRNAME=.
@@ -51,7 +51,7 @@ echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2 echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2 echo location of your Java installation. 1>&2
"%COMSPEC%" /c exit 1 goto fail
:findJavaFromJavaHome :findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=% set JAVA_HOME=%JAVA_HOME:"=%
@@ -65,18 +65,30 @@ echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2 echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2 echo location of your Java installation. 1>&2
"%COMSPEC%" /c exit 1 goto fail
:execute :execute
@rem Setup the command line @rem Setup the command line
set CLASSPATH=
@rem Execute Gradle @rem Execute Gradle
@rem endlocal doesn't take effect until after the line is parsed and variables are expanded "%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" %*
@rem which allows us to clear the local environment before executing the java command
endlocal & "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* & call :exitWithErrorLevel
:exitWithErrorLevel :end
@rem Use "%COMSPEC%" /c exit to allow operators to work properly in scripts @rem End local scope for the variables with windows NT shell
"%COMSPEC%" /c exit %ERRORLEVEL% if %ERRORLEVEL% equ 0 goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
set EXIT_CODE=%ERRORLEVEL%
if %EXIT_CODE% equ 0 set EXIT_CODE=1
if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
exit /b %EXIT_CODE%
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega
+3 -3
View File
@@ -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.31.0",
"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.31.0",
"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.31.0",
"java-agents": [] "java-agents": []
} }
}, },
+1 -1
View File
@@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
plugins { plugins {
id("pklAllProjects") pklAllProjects
`java-platform` `java-platform`
`maven-publish` `maven-publish`
signing signing
+145
View File
@@ -0,0 +1,145 @@
# This is a Gradle generated file for dependency locking.
# Manual edits can break the build and are not advised.
# This file is expected to be part of source control.
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-core:2.19.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
com.fasterxml.jackson.core:jackson-databind:2.19.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.19.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.19.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
com.fasterxml.jackson:jackson-bom:2.19.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
com.github.ajalt.clikt:clikt-core-jvm:5.0.3=compileClasspath,nativeImageClasspath,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-jvm:5.0.3=compileClasspath,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.github.ajalt.clikt:clikt-markdown-jvm:5.0.3=nativeImageClasspath,runtimeClasspath,testRuntimeClasspath
com.github.ajalt.clikt:clikt-markdown:5.0.3=nativeImageClasspath,runtimeClasspath,testRuntimeClasspath
com.github.ajalt.clikt:clikt:5.0.3=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
com.github.ajalt.colormath:colormath-jvm:3.6.0=compileClasspath,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.github.ajalt.colormath:colormath:3.6.0=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,nativeImageClasspath,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:3.0.1=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,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-graal-ffi-jvm:3.0.1=nativeImageClasspath,runtimeClasspath,testRuntimeClasspath
com.github.ajalt.mordant:mordant-jvm-graal-ffi:3.0.1=nativeImageClasspath,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:3.0.1=compileClasspath,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.github.ajalt.mordant:mordant-markdown-jvm:3.0.1=nativeImageClasspath,runtimeClasspath,testRuntimeClasspath
com.github.ajalt.mordant:mordant-markdown:3.0.1=nativeImageClasspath,runtimeClasspath,testRuntimeClasspath
com.github.ajalt.mordant:mordant:3.0.1=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,nativeImageClasspath,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: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.guava:failureaccess:1.0.3=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
com.google.guava:guava:33.4.8-jre=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.jayway.jsonpath:json-path:2.9.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
com.networknt:json-schema-validator:1.5.7=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
commons-fileupload:commons-fileupload:1.6.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
commons-io:commons-io:2.19.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
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=testCompileClasspath,testImplementationDependenciesMetadata,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.minidev:accessors-smart:2.5.0=testRuntimeClasspath
net.minidev:json-smart:2.5.0=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.core5:httpcore5-h2:5.3.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.apache.httpcomponents.core5:httpcore5:5.3.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.apiguardian:apiguardian-api:1.1.2=testCompileClasspath,testImplementationDependenciesMetadata
org.assertj:assertj-core:3.27.6=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.bouncycastle:bcpg-jdk18on:1.80=kotlinBouncyCastleConfiguration
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-hpack:11.0.24=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.eclipse.jetty.http2:http2-server:11.0.24=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.eclipse.jetty.toolchain:jetty-jakarta-servlet-api:5.0.2=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.eclipse.jetty:jetty-alpn-client:11.0.24=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.eclipse.jetty:jetty-alpn-java-client:11.0.24=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.eclipse.jetty:jetty-alpn-java-server:11.0.24=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.eclipse.jetty:jetty-alpn-server:11.0.24=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.eclipse.jetty:jetty-bom:11.0.24=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.eclipse.jetty:jetty-client:11.0.24=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.eclipse.jetty:jetty-http:11.0.24=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.eclipse.jetty:jetty-io:11.0.24=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.eclipse.jetty:jetty-proxy:11.0.24=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.eclipse.jetty:jetty-security:11.0.24=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.eclipse.jetty:jetty-server:11.0.24=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.eclipse.jetty:jetty-servlet:11.0.24=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.eclipse.jetty:jetty-servlets: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-xml:11.0.24=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.fusesource.jansi:jansi:2.4.2=compileClasspath,implementationDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.graalvm.polyglot:polyglot:25.0.0=compileClasspath,compileOnlyDependenciesMetadata,implementationDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.graalvm.sdk:collections:25.0.0=compileClasspath,compileOnlyDependenciesMetadata,implementationDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.graalvm.sdk:graal-sdk:25.0.0=compileClasspath,compileOnlyDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testRuntimeClasspath
org.graalvm.sdk:jniutils:25.0.0=compileClasspath,implementationDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.graalvm.sdk:nativeimage:25.0.0=compileClasspath,compileOnlyDependenciesMetadata,implementationDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.graalvm.sdk:word:25.0.0=compileClasspath,compileOnlyDependenciesMetadata,implementationDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.graalvm.truffle:truffle-api:25.0.0=compileClasspath,implementationDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.graalvm.truffle:truffle-compiler:25.0.0=compileClasspath,implementationDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.graalvm.truffle:truffle-runtime:25.0.0=compileClasspath,implementationDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.hamcrest:hamcrest-core: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.kotlin:abi-tools:2.2.20=kotlinInternalAbiValidation
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-reflect:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable
org.jetbrains.kotlin:kotlin-script-runtime:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable
org.jetbrains.kotlin:kotlin-scripting-common:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-scripting-jvm:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.2.20=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,nativeImageClasspath,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:2.2.20=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,nativeImageClasspath,runtimeClasspath,swiftExportClasspathResolvable,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlin:swift-export-embeddable:2.2.20=swiftExportClasspathResolvable
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.0=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable
org.jetbrains.kotlinx:kotlinx-serialization-bom:1.7.3=swiftExportClasspathResolvable
org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.7.3=swiftExportClasspathResolvable
org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3=swiftExportClasspathResolvable
org.jetbrains:annotations:13.0=compileClasspath,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,nativeImageClasspath,runtimeClasspath,swiftExportClasspathResolvable,testCompileClasspath,testRuntimeClasspath
org.jetbrains:markdown-jvm:0.7.3=nativeImageClasspath,runtimeClasspath,testRuntimeClasspath
org.jetbrains:markdown:0.7.3=nativeImageClasspath,runtimeClasspath,testRuntimeClasspath
org.jline:jline-native:3.23.0=compileClasspath,implementationDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jline:jline-reader:3.23.0=compileClasspath,implementationDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jline:jline-terminal-jansi:3.23.0=compileClasspath,implementationDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jline:jline-terminal:3.23.0=compileClasspath,implementationDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jspecify:jspecify:1.0.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.junit.jupiter:junit-jupiter-api:5.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.junit.jupiter:junit-jupiter-engine:5.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
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=nativeImageClasspath,runtimeClasspath,testRuntimeClasspath
org.opentest4j:opentest4j:1.3.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.organicdesign:Paguro:3.10.3=nativeImageClasspath,runtimeClasspath,testRuntimeClasspath
org.slf4j:slf4j-api:2.0.17=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.snakeyaml:snakeyaml-engine:2.10=nativeImageClasspath,runtimeClasspath,testRuntimeClasspath
org.wiremock:wiremock:3.13.1=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.xmlunit:xmlunit-core:2.10.2=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.xmlunit:xmlunit-legacy:2.10.2=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.xmlunit:xmlunit-placeholders:2.10.2=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.yaml:snakeyaml:2.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
empty=annotationProcessor,intransitiveDependenciesMetadata,javaExecutable,kotlinCompilerPluginClasspath,kotlinNativeCompilerPluginClasspath,kotlinScriptDefExtensions,shadow,signatures,sourcesJar,stagedAlpineLinuxAmd64Executable,stagedLinuxAarch64Executable,stagedLinuxAmd64Executable,stagedMacAarch64Executable,stagedMacAmd64Executable,stagedWindowsAmd64Executable,testAnnotationProcessor,testApiDependenciesMetadata,testCompileOnlyDependenciesMetadata,testIntransitiveDependenciesMetadata,testKotlinScriptDefExtensions
+9 -8
View File
@@ -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.
@@ -18,14 +18,14 @@ import java.io.OutputStream
import org.gradle.kotlin.dsl.support.serviceOf import org.gradle.kotlin.dsl.support.serviceOf
plugins { plugins {
id("pklAllProjects") pklAllProjects
id("pklKotlinLibrary") pklKotlinLibrary
id("pklPublishLibrary") pklPublishLibrary
id("pklJavaExecutable") pklJavaExecutable
id("pklNativeExecutable") pklNativeExecutable
`maven-publish` `maven-publish`
// already on build script class path (see build-logic/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) id(libs.plugins.shadow.get().pluginId)
@@ -56,9 +56,10 @@ dependencies {
api(projects.pklCommonsCli) api(projects.pklCommonsCli)
implementation(projects.pklCommons) implementation(projects.pklCommons)
implementation(libs.jansi)
implementation(libs.jlineReader) implementation(libs.jlineReader)
implementation(libs.jlineTerminal) implementation(libs.jlineTerminal)
implementation(libs.jlineTerminalJni) implementation(libs.jlineTerminalJansi)
implementation(projects.pklServer) implementation(projects.pklServer)
implementation(projects.pklFormatter) implementation(projects.pklFormatter)
implementation(libs.clikt) implementation(libs.clikt)
@@ -67,7 +67,7 @@ constructor(
val evaluator = builder.build() val evaluator = builder.build()
evaluator.use { evaluator.use {
evaluator.evaluateCommand( evaluator.evaluateCommand(
uri(options.normalizedSourceModules.first()), uri(resolvedSourceModules.first()),
reservedFlagNames, reservedFlagNames,
reservedFlagShortNames, reservedFlagShortNames,
) { spec -> ) { spec ->
@@ -115,7 +115,7 @@ constructor(
// used just to resolve the `%{moduleName}` placeholder // used just to resolve the `%{moduleName}` placeholder
val moduleResolver = ModuleResolver(moduleKeyFactories(ModulePathResolver.empty())) val moduleResolver = ModuleResolver(moduleKeyFactories(ModulePathResolver.empty()))
return options.base.normalizedSourceModules.associateWith { uri -> return resolvedSourceModules.associateWith { uri ->
val moduleDir: String? = val moduleDir: String? =
IoUtils.toPath(uri)?.let { IoUtils.toPath(uri)?.let {
IoUtils.relativize(it.parent, workingDir).toString().ifEmpty { "." } IoUtils.relativize(it.parent, workingDir).toString().ifEmpty { "." }
@@ -191,7 +191,7 @@ constructor(
} }
} else { } else {
var outputWritten = false var outputWritten = false
for (moduleUri in options.base.normalizedSourceModules) { for (moduleUri in resolvedSourceModules) {
val moduleSource = toModuleSource(moduleUri, inputStream) val moduleSource = toModuleSource(moduleUri, inputStream)
if (options.expression != null) { if (options.expression != null) {
val output = evaluator.evaluateExpressionString(moduleSource, options.expression) val output = evaluator.evaluateExpressionString(moduleSource, options.expression)
@@ -240,7 +240,8 @@ constructor(
for ((pathSpec, fileOutput) in output) { for ((pathSpec, fileOutput) in output) {
checkPathSpec(pathSpec) checkPathSpec(pathSpec)
val (realPath, resolvedPath) = realOutputDir.resolveRealPath(Path.of(pathSpec)) val resolvedPath = realOutputDir.resolve(pathSpec).normalize()
val realPath = if (resolvedPath.exists()) resolvedPath.toRealPath() else resolvedPath
if (!realPath.startsWith(realOutputDir)) { if (!realPath.startsWith(realOutputDir)) {
throw CliException( throw CliException(
"Output file conflict: `output.files` entry `\"$pathSpec\"` in module `$moduleUri` resolves to file path `$realPath`, which is outside output directory `$realOutputDir`." "Output file conflict: `output.files` entry `\"$pathSpec\"` in module `$moduleUri` resolves to file path `$realPath`, which is outside output directory `$realOutputDir`."
@@ -268,22 +269,4 @@ constructor(
} }
} }
} }
/**
* Resolves [rel] against this Path name-by-name. At each step, the real path is resolved if the
* file exists. The normalized real path and normalized resolved path are returned. This has a
* similar effect to `this.resolve(rel).toRealPath().normalize()`, but the real paths account for
* symlinks in the middle of the relative path so the full path need not exist.
*/
private fun Path.resolveRealPath(rel: Path): Pair<Path, Path> {
assert(!rel.isAbsolute)
var resolved = this
var real = this
for (name in rel) {
resolved = resolved.resolve(name)
real = real.resolve(name)
if (real.exists()) real = real.toRealPath()
}
return real.normalize() to resolved.normalize()
}
} }
@@ -47,7 +47,7 @@ constructor(
private val errWriter: Writer = System.err.writer(), private val errWriter: Writer = System.err.writer(),
) : CliCommand(CliBaseOptions()) { ) : CliCommand(CliBaseOptions()) {
private fun format(contents: String): String { private fun format(contents: String): String {
return Formatter(grammarVersion).format(contents) return Formatter().format(contents, grammarVersion)
} }
private fun writeErrLine(error: String) { private fun writeErrLine(error: String) {
@@ -44,19 +44,19 @@ constructor(
private val sourceModule = private val sourceModule =
ModuleSource.text( ModuleSource.text(
""" """
import "pkl:analyze" import "pkl:analyze"
local importStrings = read*("prop:pkl.analyzeImports.**").toMap().values.toSet() local importStrings = read*("prop:pkl.analyzeImports.**").toMap().values.toSet()
output { output {
value = analyze.importGraph(importStrings) value = analyze.importGraph(importStrings)
renderer { renderer {
converters { converters {
[Map] = (it) -> it.toMapping() [Map] = (it) -> it.toMapping()
[Set] = (it) -> it.toListing() [Set] = (it) -> it.toListing()
}
} }
} }
}
""" """
.trimIndent() .trimIndent()
) )
@@ -66,7 +66,7 @@ constructor(
try { try {
return builder return builder
.apply { .apply {
for ((idx, sourceModule) in options.base.normalizedSourceModules.withIndex()) { for ((idx, sourceModule) in resolvedSourceModules.withIndex()) {
addExternalProperty("pkl.analyzeImports.$idx", sourceModule.toString()) addExternalProperty("pkl.analyzeImports.$idx", sourceModule.toString())
} }
} }
@@ -15,7 +15,6 @@
*/ */
package org.pkl.cli package org.pkl.cli
import java.io.StringWriter
import java.io.Writer import java.io.Writer
import org.pkl.commons.cli.* import org.pkl.commons.cli.*
import org.pkl.core.Closeables import org.pkl.core.Closeables
@@ -23,9 +22,8 @@ import org.pkl.core.EvaluatorBuilder
import org.pkl.core.ModuleSource.uri import org.pkl.core.ModuleSource.uri
import org.pkl.core.PklException import org.pkl.core.PklException
import org.pkl.core.TestResults import org.pkl.core.TestResults
import org.pkl.core.stdlib.test.report.JUnitReporter import org.pkl.core.stdlib.test.report.JUnitReport
import org.pkl.core.stdlib.test.report.MinimalReporter import org.pkl.core.stdlib.test.report.SimpleReport
import org.pkl.core.stdlib.test.report.SpecReporter
import org.pkl.core.util.ErrorMessages import org.pkl.core.util.ErrorMessages
class CliTestRunner class CliTestRunner
@@ -49,7 +47,7 @@ constructor(
private fun evalTest(builder: EvaluatorBuilder) { private fun evalTest(builder: EvaluatorBuilder) {
val sources = val sources =
options.normalizedSourceModules.ifEmpty { project?.tests?.map { it.toUri() } } resolvedSourceModules.ifEmpty { project?.tests?.map { it.toUri() } }
?: ?:
// keep in sync with error message thrown by clikt // keep in sync with error message thrown by clikt
throw CliException( throw CliException(
@@ -57,7 +55,7 @@ constructor(
Usage: pkl test [<options>] <modules>... Usage: pkl test [<options>] <modules>...
Error: missing argument <modules> Error: missing argument <modules>
""" """
.trimIndent() .trimIndent()
) )
@@ -66,15 +64,13 @@ constructor(
var failed = false var failed = false
var isExampleWrittenFailure = true var isExampleWrittenFailure = true
val moduleNames = mutableSetOf<String>() val moduleNames = mutableSetOf<String>()
val reporter = val reporter = SimpleReport(useColor)
when (testOptions.reporter) {
TestReporter.SPEC -> SpecReporter(useColor)
TestReporter.MINIMAL -> MinimalReporter(useColor)
}
val allTestResults = mutableListOf<TestResults>() val allTestResults = mutableListOf<TestResults>()
val junitDir = testOptions.junitDir val junitDir = testOptions.junitDir
junitDir?.toFile()?.mkdirs() if (junitDir != null) {
junitDir.toFile().mkdirs()
}
for ((idx, moduleUri) in sources.withIndex()) { for ((idx, moduleUri) in sources.withIndex()) {
try { try {
@@ -84,11 +80,8 @@ constructor(
failed = results.failed() failed = results.failed()
isExampleWrittenFailure = results.isExampleWrittenFailure.and(isExampleWrittenFailure) isExampleWrittenFailure = results.isExampleWrittenFailure.and(isExampleWrittenFailure)
} }
val tmpWriter = StringWriter() reporter.report(results, consoleWriter)
reporter.report(results, tmpWriter) if (sources.size > 1 && idx != sources.size - 1) {
val report = tmpWriter.toString()
consoleWriter.write(report)
if (report.isNotEmpty() && sources.size > 1 && idx != sources.size - 1) {
consoleWriter.append('\n') consoleWriter.append('\n')
} }
consoleWriter.flush() consoleWriter.flush()
@@ -108,7 +101,7 @@ constructor(
moduleNames += moduleName moduleNames += moduleName
if (!testOptions.junitAggregateReports) { if (!testOptions.junitAggregateReports) {
JUnitReporter().reportToPath(results, junitDir.resolve(moduleName)) JUnitReport().reportToPath(results, junitDir.resolve(moduleName))
} }
} }
} catch (ex: Exception) { } catch (ex: Exception) {
@@ -126,7 +119,7 @@ constructor(
} }
if (testOptions.junitAggregateReports && junitDir != null) { if (testOptions.junitAggregateReports && junitDir != null) {
val fileName = "${testOptions.junitAggregateSuiteName}.xml" val fileName = "${testOptions.junitAggregateSuiteName}.xml"
JUnitReporter(testOptions.junitAggregateSuiteName) JUnitReport(testOptions.junitAggregateSuiteName)
.summarizeToPath(allTestResults, junitDir.resolve(fileName)) .summarizeToPath(allTestResults, junitDir.resolve(fileName))
} }
consoleWriter.append('\n') consoleWriter.append('\n')
@@ -20,6 +20,7 @@ import java.net.URI
import java.nio.file.Path import java.nio.file.Path
import java.util.regex.Pattern import java.util.regex.Pattern
import kotlin.io.path.deleteIfExists import kotlin.io.path.deleteIfExists
import org.fusesource.jansi.Ansi
import org.jline.reader.EndOfFileException import org.jline.reader.EndOfFileException
import org.jline.reader.Highlighter import org.jline.reader.Highlighter
import org.jline.reader.LineReader import org.jline.reader.LineReader
@@ -51,7 +52,7 @@ class PklHighlighter : Highlighter {
} }
internal class Repl(workingDir: Path, private val server: ReplServer, private val color: Boolean) { internal class Repl(workingDir: Path, private val server: ReplServer, private val color: Boolean) {
private val terminal = TerminalBuilder.builder().apply { jni(true) }.build() private val terminal = TerminalBuilder.builder().apply { jansi(true) }.build()
private val history = DefaultHistory() private val history = DefaultHistory()
private val reader = private val reader =
LineReaderBuilder.builder() LineReaderBuilder.builder()
@@ -248,20 +249,14 @@ internal class Repl(workingDir: Path, private val server: ReplServer, private va
} }
private fun highlight(str: String): String { private fun highlight(str: String): String {
// Inserting ANSI codes into a string that may already contain ANSI codes is problematic. val ansi = Ansi.ansi()
// This code preserves existing behavior but should eventually be removed. var normal = true
val builder = StringBuilder()
var bold = false
for (part in str.split("`", "```")) { for (part in str.split("`", "```")) {
if (bold) { ansi.a(part)
builder.append("\u001B[1m") normal = !normal
builder.append(part) if (!normal) ansi.bold() else ansi.boldOff()
builder.append("\u001B[22m")
} else {
builder.append(part)
}
bold = !bold
} }
return builder.toString() ansi.reset()
return ansi.toString()
} }
} }
@@ -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.
@@ -47,7 +47,7 @@ internal object ReplMessages {
* Incomplete input will be continued on the next line. * Incomplete input will be continued on the next line.
* Multi-line programs can be copy-pasted into the REPL. * Multi-line programs can be copy-pasted into the REPL.
""" """
.trimIndent() .trimIndent()
val examples: String = val examples: String =
@@ -44,13 +44,13 @@ import org.pkl.commons.writeString
class CliCommandRunnerTest { class CliCommandRunnerTest {
private val renderOptions = private val renderOptions =
""" """
extends "pkl:Command" extends "pkl:Command"
options: Options options: Options
output { output {
value = options value = options
} }
""" """
.trimIndent() .trimIndent()
@@ -104,10 +104,10 @@ class CliCommandRunnerTest {
"cmd.pkl", "cmd.pkl",
renderOptions + renderOptions +
""" """
class Options { class Options {
foo: String foo: String
} }
""" """
.trimIndent(), .trimIndent(),
) )
@@ -125,48 +125,48 @@ class CliCommandRunnerTest {
"cmd.pkl", "cmd.pkl",
renderOptions + renderOptions +
""" """
class Options { class Options {
`number-as-int`: Number `number-as-int`: Number
`number-as-float`: Number `number-as-float`: Number
`number-nullable`: Number? `number-nullable`: Number?
`number-default`: Number = 100.0 `number-default`: Number = 100.0
`number-default-overridden`: Number = 100.0 `number-default-overridden`: Number = 100.0
float: Float float: Float
`float-without-decimals`: Float `float-without-decimals`: Float
`float-nullable`: Float? `float-nullable`: Float?
`float-default`: Float = 100.0 `float-default`: Float = 100.0
`float-default-overridden`: Float = 100.0 `float-default-overridden`: Float = 100.0
int: Int int: Int
`int-nullable`: Int? `int-nullable`: Int?
`int-default`: Int = 100 `int-default`: Int = 100
`int-default-overridden`: Int = 100 `int-default-overridden`: Int = 100
int8: Int8 int8: Int8
int16: Int16 int16: Int16
int32: Int32 int32: Int32
uint: UInt uint: UInt
uint8: UInt8 uint8: UInt8
uint16: UInt16 uint16: UInt16
uint32: UInt32 uint32: UInt32
boolean: Boolean boolean: Boolean
`boolean-nullable`: Boolean? `boolean-nullable`: Boolean?
`boolean-default`: Boolean = true `boolean-default`: Boolean = true
`boolean-default-overridden`: Boolean = false `boolean-default-overridden`: Boolean = false
string: String string: String
`string-nullable`: String? `string-nullable`: String?
`string-default`: String = "default" `string-default`: String = "default"
`string-default-overridden`: String = "default" `string-default-overridden`: String = "default"
char: Char char: Char
`char-nullable`: Char? `char-nullable`: Char?
`char-default`: Char = "a" `char-default`: Char = "a"
`char-default-overridden`: Char = "b" `char-default-overridden`: Char = "b"
} }
""" """
.trimIndent(), .trimIndent(),
) )
val output = val output =
@@ -245,45 +245,45 @@ class CliCommandRunnerTest {
"cmd.pkl", "cmd.pkl",
renderOptions + renderOptions +
""" """
class Options { class Options {
@Argument @Argument
`number-as-int`: Number `number-as-int`: Number
@Argument @Argument
`number-as-float`: Number `number-as-float`: Number
@Argument @Argument
float: Float float: Float
@Argument @Argument
`float-without-decimals`: Float `float-without-decimals`: Float
@Argument @Argument
int: Int int: Int
@Argument @Argument
int8: Int8 int8: Int8
@Argument @Argument
int16: Int16 int16: Int16
@Argument @Argument
int32: Int32 int32: Int32
@Argument @Argument
uint: UInt uint: UInt
@Argument @Argument
uint8: UInt8 uint8: UInt8
@Argument @Argument
uint16: UInt16 uint16: UInt16
@Argument @Argument
uint32: UInt32 uint32: UInt32
@Argument @Argument
boolean: Boolean boolean: Boolean
@Argument @Argument
string: String string: String
@Argument @Argument
char: Char char: Char
} }
""" """
.trimIndent(), .trimIndent(),
) )
val output = val output =
@@ -338,21 +338,21 @@ class CliCommandRunnerTest {
"cmd.pkl", "cmd.pkl",
renderOptions + renderOptions +
""" """
typealias MyEnum = "d" | "e" | *"f" typealias MyEnum = "d" | "e" | *"f"
class Options { class Options {
enum: "a" | "b" | "c" enum: "a" | "b" | "c"
`enum-default`: "a" | *"b" | "c" `enum-default`: "a" | *"b" | "c"
`enum-explicit-default`: "a" | "b" | "c" = "c" `enum-explicit-default`: "a" | "b" | "c" = "c"
`enum-alias-default`: MyEnum `enum-alias-default`: MyEnum
`enum-alias-explicit-default`: MyEnum = "e" `enum-alias-explicit-default`: MyEnum = "e"
`enum-alias-default-overridden`: MyEnum `enum-alias-default-overridden`: MyEnum
`enum-single`: "x" `enum-single`: "x"
`enum-single-nullable`: "x"? `enum-single-nullable`: "x"?
`enum-single-explicit-default`: "x" = "x" `enum-single-explicit-default`: "x" = "x"
`enum-single-overridden`: "x" `enum-single-overridden`: "x"
} }
""" """
.trimIndent(), .trimIndent(),
) )
val output = val output =
@@ -386,16 +386,16 @@ class CliCommandRunnerTest {
"cmd.pkl", "cmd.pkl",
renderOptions + renderOptions +
""" """
typealias MyEnum = "d" | "e" | *"f" typealias MyEnum = "d" | "e" | *"f"
class Options { class Options {
@Argument @Argument
enum: "a" | "b" | "c" enum: "a" | "b" | "c"
@Argument @Argument
`enum-default`: "a" | *"b" | "c" `enum-default`: "a" | *"b" | "c"
@Argument @Argument
`enum-alias-default`: MyEnum `enum-alias-default`: MyEnum
} }
""" """
.trimIndent(), .trimIndent(),
) )
val output = val output =
@@ -419,18 +419,18 @@ class CliCommandRunnerTest {
"cmd.pkl", "cmd.pkl",
renderOptions + renderOptions +
""" """
class Options { class Options {
list: List<Number> list: List<Number>
`list-nullable`: List<Number>? `list-nullable`: List<Number>?
`list-default`: List<Number> = List(1, 2, 300.0) `list-default`: List<Number> = List(1, 2, 300.0)
set: Set<Number> set: Set<Number>
`set-nullable`: Set<Number>? `set-nullable`: Set<Number>?
`set-default`: Set<Number> = Set(1, 2, 300.0, 2) `set-default`: Set<Number> = Set(1, 2, 300.0, 2)
`enum-list`: List<"a" | "b" | *"c"> `enum-list`: List<"a" | "b" | *"c">
`enum-set`: Set<"a" | "b" | *"c"> `enum-set`: Set<"a" | "b" | *"c">
} }
""" """
.trimIndent(), .trimIndent(),
) )
val output = val output =
@@ -477,11 +477,11 @@ class CliCommandRunnerTest {
"cmd.pkl", "cmd.pkl",
renderOptions + renderOptions +
""" """
class Options { class Options {
@Argument @Argument
list: List<Number> list: List<Number>
} }
""" """
.trimIndent(), .trimIndent(),
) )
val output = val output =
@@ -500,11 +500,11 @@ class CliCommandRunnerTest {
"cmd.pkl", "cmd.pkl",
renderOptions + renderOptions +
""" """
class Options { class Options {
@Argument @Argument
set: Set<Number> set: Set<Number>
} }
""" """
.trimIndent(), .trimIndent(),
) )
val output2 = val output2 =
@@ -523,11 +523,11 @@ class CliCommandRunnerTest {
"cmd.pkl", "cmd.pkl",
renderOptions + renderOptions +
""" """
class Options { class Options {
@Argument @Argument
listing: Listing<Number> listing: Listing<Number>
} }
""" """
.trimIndent(), .trimIndent(),
) )
val output3 = val output3 =
@@ -554,11 +554,11 @@ class CliCommandRunnerTest {
"cmd.pkl", "cmd.pkl",
renderOptions + renderOptions +
""" """
class Options { class Options {
@Argument @Argument
map: Map<Number, Number> map: Map<Number, Number>
} }
""" """
.trimIndent(), .trimIndent(),
) )
val output = val output =
@@ -577,11 +577,11 @@ class CliCommandRunnerTest {
"cmd.pkl", "cmd.pkl",
renderOptions + renderOptions +
""" """
class Options { class Options {
@Argument @Argument
mapping: Mapping<Number, Number> mapping: Mapping<Number, Number>
} }
""" """
.trimIndent(), .trimIndent(),
) )
val output2 = val output2 =
@@ -603,11 +603,11 @@ class CliCommandRunnerTest {
"cmd.pkl", "cmd.pkl",
renderOptions + renderOptions +
""" """
class Options { class Options {
@Argument @Argument
pair: Pair<Number, Number> pair: Pair<Number, Number>
} }
""" """
.trimIndent(), .trimIndent(),
) )
val output3 = runToStdout(CliBaseOptions(sourceModules = listOf(moduleUri3)), listOf("1=0.0")) val output3 = runToStdout(CliBaseOptions(sourceModules = listOf(moduleUri3)), listOf("1=0.0"))
@@ -628,15 +628,15 @@ class CliCommandRunnerTest {
"cmd.pkl", "cmd.pkl",
renderOptions + renderOptions +
""" """
typealias MyEnum = "a" | "b" | *"c" typealias MyEnum = "a" | "b" | *"c"
class Options { class Options {
map: Map<Char, Number> map: Map<Char, Number>
`map-nullable`: Map<Char, Number>? `map-nullable`: Map<Char, Number>?
`map-default`: Map<Char, Number> = Map("x", 123, "y", 456.789) `map-default`: Map<Char, Number> = Map("x", 123, "y", 456.789)
`enum-map`: Map<MyEnum, MyEnum> `enum-map`: Map<MyEnum, MyEnum>
} }
""" """
.trimIndent(), .trimIndent(),
) )
val output = val output =
@@ -664,15 +664,15 @@ class CliCommandRunnerTest {
"cmd.pkl", "cmd.pkl",
renderOptions + renderOptions +
""" """
typealias MyEnum = "a" | "b" | *"c" typealias MyEnum = "a" | "b" | *"c"
class Options { class Options {
mapping: Mapping<Char, Number> mapping: Mapping<Char, Number>
`mapping-nullable`: Mapping<Char, Number>? `mapping-nullable`: Mapping<Char, Number>?
`mapping-default`: Mapping<Char, Number> = new { ["x"] = 123; ["y"] = 456.789 } `mapping-default`: Mapping<Char, Number> = new { ["x"] = 123; ["y"] = 456.789 }
`enum-mapping`: Mapping<MyEnum, MyEnum> `enum-mapping`: Mapping<MyEnum, MyEnum>
} }
""" """
.trimIndent(), .trimIndent(),
) )
val output = val output =
@@ -709,15 +709,15 @@ class CliCommandRunnerTest {
"cmd.pkl", "cmd.pkl",
renderOptions + renderOptions +
""" """
typealias MyEnum = "a" | "b" | *"c" typealias MyEnum = "a" | "b" | *"c"
class Options { class Options {
pair: Pair<Char, Number> pair: Pair<Char, Number>
`pair-nullable`: Pair<Char, Number>? `pair-nullable`: Pair<Char, Number>?
`pair-default`: Pair<Char, Number> = Pair("x", 123) `pair-default`: Pair<Char, Number> = Pair("x", 123)
`enum-pair`: Pair<MyEnum, MyEnum> `enum-pair`: Pair<MyEnum, MyEnum>
} }
""" """
.trimIndent(), .trimIndent(),
) )
val output = val output =
@@ -745,17 +745,17 @@ class CliCommandRunnerTest {
"cmd.pkl", "cmd.pkl",
renderOptions + renderOptions +
""" """
class Options { class Options {
@Argument { convert = module.convertDuration } @Argument { convert = module.convertDuration }
a: Duration a: Duration
@Argument { convert = module.convertDuration } @Argument { convert = module.convertDuration }
b: Duration b: Duration
@Argument { convert = module.convertDuration } @Argument { convert = module.convertDuration }
c: Duration c: Duration
@Argument { convert = module.convertDuration } @Argument { convert = module.convertDuration }
d: Duration d: Duration
} }
""" """
.trimIndent(), .trimIndent(),
) )
val output = val output =
@@ -783,17 +783,17 @@ class CliCommandRunnerTest {
"cmd.pkl", "cmd.pkl",
renderOptions + renderOptions +
""" """
class Options { class Options {
@Argument { convert = module.convertDataSize } @Argument { convert = module.convertDataSize }
a: DataSize a: DataSize
@Argument { convert = module.convertDataSize } @Argument { convert = module.convertDataSize }
b: DataSize b: DataSize
@Argument { convert = module.convertDataSize } @Argument { convert = module.convertDataSize }
c: DataSize c: DataSize
@Argument { convert = module.convertDataSize } @Argument { convert = module.convertDataSize }
d: DataSize d: DataSize
} }
""" """
.trimIndent(), .trimIndent(),
) )
val output = val output =
@@ -820,23 +820,23 @@ class CliCommandRunnerTest {
writePklFile( writePklFile(
"cmd.pkl", "cmd.pkl",
""" """
extends "pkl:Command" extends "pkl:Command"
options: Options options: Options
output { output {
value = (options) { value = (options) {
fromImport { fromImport {
baz = true // assert that imported modules are not forced baz = true // assert that imported modules are not forced
}
} }
} }
}
class Options { class Options {
@Argument { convert = (it) -> new Import{ uri = it } } @Argument { convert = (it) -> new Import{ uri = it } }
fromImport: Module fromImport: Module
} }
""" """
.trimIndent(), .trimIndent(),
) )
@@ -844,10 +844,10 @@ class CliCommandRunnerTest {
writePklFile( writePklFile(
"import.pkl", "import.pkl",
""" """
foo = 1 foo = 1
bar = "baz" bar = "baz"
baz: Boolean baz: Boolean
""" """
.trimIndent(), .trimIndent(),
) )
@@ -873,26 +873,26 @@ class CliCommandRunnerTest {
writePklFile( writePklFile(
"cmd.pkl", "cmd.pkl",
""" """
extends "pkl:Command" extends "pkl:Command"
options: Options options: Options
output { output {
value = (options) { value = (options) {
fromImport { fromImport {
baz = true // assert that imported modules are not forced baz = true // assert that imported modules are not forced
}
} }
} }
}
class Options { class Options {
@Flag { @Flag {
convert = (it) -> new Import{ uri = it } convert = (it) -> new Import{ uri = it }
transformAll = (values) -> values.firstOrNull ?? new Import { uri = "./default.pkl" } transformAll = (values) -> values.firstOrNull ?? new Import { uri = "./default.pkl" }
}
fromImport: Module
} }
""" fromImport: Module
}
"""
.trimIndent(), .trimIndent(),
) )
@@ -900,10 +900,10 @@ class CliCommandRunnerTest {
writePklFile( writePklFile(
"default.pkl", "default.pkl",
""" """
foo = 1 foo = 1
bar = "baz" bar = "baz"
baz: Boolean baz: Boolean
""" """
.trimIndent(), .trimIndent(),
) )
@@ -932,26 +932,26 @@ class CliCommandRunnerTest {
writePklFile( writePklFile(
"cmd.pkl", "cmd.pkl",
""" """
extends "pkl:Command" extends "pkl:Command"
import "base.pkl" import "base.pkl"
options: Options options: Options
output { output {
value = (options) { value = (options) {
fromGlobImport { fromGlobImport {
[[true]] { [[true]] {
baz = true // assert that imported modules are not forced baz = true // assert that imported modules are not forced
}
} }
} }
} }
}
class Options { class Options {
@Argument { convert = (it) -> new Import { uri = it; glob = true }; multiple = false } @Argument { convert = (it) -> new Import { uri = it; glob = true }; multiple = false }
fromGlobImport: Mapping<String, base> fromGlobImport: Mapping<String, base>
} }
""" """
.trimIndent(), .trimIndent(),
) )
@@ -959,10 +959,10 @@ class CliCommandRunnerTest {
writePklFile( writePklFile(
"base.pkl", "base.pkl",
""" """
foo: Int foo: Int
bar: String bar: String
baz: Boolean baz: Boolean
""" """
.trimIndent(), .trimIndent(),
) )
writePklFile( writePklFile(
@@ -971,7 +971,7 @@ class CliCommandRunnerTest {
amends "base.pkl" amends "base.pkl"
foo = 1 foo = 1
bar = "baz" bar = "baz"
""" """
.trimIndent(), .trimIndent(),
) )
writePklFile( writePklFile(
@@ -980,7 +980,7 @@ class CliCommandRunnerTest {
amends "base.pkl" amends "base.pkl"
foo = 2 foo = 2
bar = "qux" bar = "qux"
""" """
.trimIndent(), .trimIndent(),
) )
@@ -1019,11 +1019,11 @@ class CliCommandRunnerTest {
"cmd.pkl", "cmd.pkl",
renderOptions + renderOptions +
""" """
class Options { class Options {
@Argument { convert = (it) -> throw("oops!") } @Argument { convert = (it) -> throw("oops!") }
foo: String foo: String
} }
""" """
.trimIndent(), .trimIndent(),
) )
@@ -1041,11 +1041,11 @@ class CliCommandRunnerTest {
"cmd.pkl", "cmd.pkl",
renderOptions + renderOptions +
""" """
class Options { class Options {
@Argument { convert = (it) -> it.noSuchMethod() } @Argument { convert = (it) -> it.noSuchMethod() }
foo: String foo: String
} }
""" """
.trimIndent(), .trimIndent(),
) )
@@ -1063,12 +1063,12 @@ class CliCommandRunnerTest {
"cmd.pkl", "cmd.pkl",
renderOptions + renderOptions +
""" """
const function overflow(it) = overflow(it) const function overflow(it) = overflow(it)
class Options { class Options {
@Argument { convert = (it) -> overflow(it) } @Argument { convert = (it) -> overflow(it) }
foo: String foo: String
} }
""" """
.trimIndent(), .trimIndent(),
) )
@@ -1086,19 +1086,19 @@ class CliCommandRunnerTest {
"cmd.pkl", "cmd.pkl",
renderOptions + renderOptions +
""" """
class Options { class Options {
@BooleanFlag @BooleanFlag
`bool-true`: Boolean `bool-true`: Boolean
@BooleanFlag @BooleanFlag
`bool-false`: Boolean `bool-false`: Boolean
@BooleanFlag @BooleanFlag
`bool-nullable`: Boolean? `bool-nullable`: Boolean?
@BooleanFlag @BooleanFlag
`bool-default-true`: Boolean = true `bool-default-true`: Boolean = true
@BooleanFlag @BooleanFlag
`bool-default-false`: Boolean = false `bool-default-false`: Boolean = false
} }
""" """
.trimIndent(), .trimIndent(),
) )
@@ -1128,11 +1128,11 @@ class CliCommandRunnerTest {
"cmd.pkl", "cmd.pkl",
renderOptions + renderOptions +
""" """
class Options { class Options {
@BooleanFlag @BooleanFlag
foo: String foo: String
} }
""" """
.trimIndent(), .trimIndent(),
) )
@@ -1151,25 +1151,25 @@ class CliCommandRunnerTest {
"cmd.pkl", "cmd.pkl",
renderOptions + renderOptions +
""" """
class Options { class Options {
@CountedFlag { shortName = "a" } @CountedFlag { shortName = "a" }
int: Int int: Int
@CountedFlag { shortName = "b" } @CountedFlag { shortName = "b" }
int8: Int8 int8: Int8
@CountedFlag { shortName = "c" } @CountedFlag { shortName = "c" }
int16: Int16 int16: Int16
@CountedFlag { shortName = "d" } @CountedFlag { shortName = "d" }
int32: Int32 int32: Int32
@CountedFlag { shortName = "x" } @CountedFlag { shortName = "x" }
uint: UInt uint: UInt
@CountedFlag { shortName = "y" } @CountedFlag { shortName = "y" }
uint8: UInt8 uint8: UInt8
@CountedFlag { shortName = "g" } @CountedFlag { shortName = "g" }
uint16: UInt16 uint16: UInt16
@CountedFlag { shortName = "i" } @CountedFlag { shortName = "i" }
uint32: UInt32 uint32: UInt32
} }
""" """
.trimIndent(), .trimIndent(),
) )
@@ -1202,14 +1202,14 @@ class CliCommandRunnerTest {
"cmd.pkl", "cmd.pkl",
renderOptions + renderOptions +
""" """
class Options { class Options {
@Flag { @Flag {
multiple = true multiple = true
transformAll = (values) -> values.fold(0, (res, acc) -> res + acc) transformAll = (values) -> values.fold(0, (res, acc) -> res + acc)
} }
foo: Int foo: Int
} }
""" """
.trimIndent(), .trimIndent(),
) )
@@ -1235,21 +1235,21 @@ class CliCommandRunnerTest {
"cmd.pkl", "cmd.pkl",
renderOptions + renderOptions +
""" """
class Options { class Options {
none: String? none: String?
enum: *"a" | "b" | "c" enum: *"a" | "b" | "c"
@Flag { completionCandidates = "paths" } @Flag { completionCandidates = "paths" }
path: String? path: String?
@Flag { completionCandidates { "foo"; "bar"; "baz" } } @Flag { completionCandidates { "foo"; "bar"; "baz" } }
explicit: String? explicit: String?
@Argument @Argument
enumArg: *"a" | "b" | "c" enumArg: *"a" | "b" | "c"
@Argument { completionCandidates = "paths" } @Argument { completionCandidates = "paths" }
pathArg: String pathArg: String
@Argument { completionCandidates { "foo"; "bar"; "baz" } } @Argument { completionCandidates { "foo"; "bar"; "baz" } }
explicitArg: String explicitArg: String
} }
""" """
.trimIndent(), .trimIndent(),
) )
val exc = val exc =
@@ -58,7 +58,7 @@ class CliEvaluatorTest {
name = "pigeon" name = "pigeon"
age = 20 + 10 age = 20 + 10
} }
""" """
.trimIndent() .trimIndent()
private val packageServer = PackageServer() private val packageServer = PackageServer()
@@ -243,12 +243,12 @@ person:
.resolve("test2.pkl") .resolve("test2.pkl")
.writeString( .writeString(
""" """
amends "test.pkl" amends "test.pkl"
person { person {
name = "barn owl" name = "barn owl"
} }
""" """
.trimIndent() .trimIndent()
) )
@@ -739,7 +739,7 @@ result = someLib.x
} }
} }
} }
""" """
.trimIndent(), .trimIndent(),
) )
) )
@@ -815,31 +815,31 @@ result = someLib.x
writePklFile( writePklFile(
"test0.pkl", "test0.pkl",
""" """
output { output {
files { files {
["foo.pcf"] { ["foo.pcf"] {
value = new Dynamic { value = new Dynamic {
["bar"] = "baz" ["bar"] = "baz"
}
} }
} }
} }
""" }
"""
.trimIndent(), .trimIndent(),
), ),
writePklFile( writePklFile(
"test1.pkl", "test1.pkl",
""" """
output { output {
files { files {
["bar.pcf"] { ["bar.pcf"] {
value = new Dynamic { value = new Dynamic {
["bar"] = "baz" ["bar"] = "baz"
}
} }
} }
} }
""" }
"""
.trimIndent(), .trimIndent(),
), ),
) )
@@ -860,27 +860,27 @@ result = someLib.x
writePklFile( writePklFile(
"bar.pkl", "bar.pkl",
""" """
output { output {
files { files {
["foo.pcf"] { ["foo.pcf"] {
text = "myBar" text = "myBar"
}
} }
} }
""" }
"""
.trimIndent(), .trimIndent(),
), ),
writePklFile( writePklFile(
"foo.pkl", "foo.pkl",
""" """
output { output {
files { files {
["foo.pcf"] { ["foo.pcf"] {
text = "myFoo" text = "myFoo"
}
} }
} }
""" }
"""
.trimIndent(), .trimIndent(),
), ),
) )
@@ -918,38 +918,7 @@ result = someLib.x
} }
} }
} }
""" """
.trimIndent(),
)
val options =
CliEvaluatorOptions(
CliBaseOptions(sourceModules = listOf(moduleUri), workingDir = tempDir),
multipleFileOutputPath = ".output",
)
assertThatCode { evalToConsole(options) }
.hasMessageStartingWith("Output file conflict:")
.hasMessageContaining("which is outside output directory")
}
@Test
@DisabledOnOs(OS.WINDOWS)
fun `multiple file output throws if files are written outside the base path via symlink`() {
val output = tempDir.resolve(".output").createDirectories()
val outside = tempDir.resolve("outside").createDirectories()
output.resolve("outside").createSymbolicLinkPointingTo(outside)
val moduleUri =
writePklFile(
"test.pkl",
"""
output {
files {
["outside/foo.txt"] {
text = "bar"
}
}
}
"""
.trimIndent(), .trimIndent(),
) )
val options = val options =
@@ -970,23 +939,23 @@ result = someLib.x
writePklFile( writePklFile(
"test1.pkl", "test1.pkl",
""" """
output { output {
files { files {
["."] { text = "bar" } ["."] { text = "bar" }
}
} }
""" }
"""
.trimIndent(), .trimIndent(),
), ),
writePklFile( writePklFile(
"test2.pkl", "test2.pkl",
""" """
output { output {
files { files {
["myDir"] { text = "bar" } ["myDir"] { text = "bar" }
}
} }
""" }
"""
.trimIndent(), .trimIndent(),
), ),
) )
@@ -1009,23 +978,23 @@ result = someLib.x
writePklFile( writePklFile(
"test1.pkl", "test1.pkl",
""" """
output { output {
files { files {
["foo.txt"] { text = "bar" } ["foo.txt"] { text = "bar" }
}
} }
""" }
"""
.trimIndent(), .trimIndent(),
), ),
writePklFile( writePklFile(
"test2.pkl", "test2.pkl",
""" """
output { output {
files { files {
["foo.txt"] { text = "bar" } ["foo.txt"] { text = "bar" }
}
} }
""" }
"""
.trimIndent(), .trimIndent(),
), ),
) )
@@ -1045,13 +1014,13 @@ result = someLib.x
writePklFile( writePklFile(
"test.pkl", "test.pkl",
""" """
output { output {
files { files {
["foo.txt"] { text = "bar" } ["foo.txt"] { text = "bar" }
["./foo.txt"] { text = "bar" } ["./foo.txt"] { text = "bar" }
}
} }
""" }
"""
.trimIndent(), .trimIndent(),
) )
val options = val options =
@@ -1071,12 +1040,12 @@ result = someLib.x
writePklFile( writePklFile(
"test.pkl", "test.pkl",
""" """
output { output {
files { files {
["foo:bar"] { text = "bar" } ["foo:bar"] { text = "bar" }
}
} }
""" }
"""
.trimIndent(), .trimIndent(),
) )
@@ -1096,12 +1065,12 @@ result = someLib.x
writePklFile( writePklFile(
"test.pkl", "test.pkl",
""" """
output { output {
files { files {
["foo\\bar"] { text = "bar" } ["foo\\bar"] { text = "bar" }
}
} }
""" }
"""
.trimIndent(), .trimIndent(),
) )
@@ -1120,10 +1089,10 @@ result = someLib.x
writePklFile( writePklFile(
"test.pkl", "test.pkl",
""" """
foo { foo {
bar = 1 bar = 1
} }
""" """
.trimIndent(), .trimIndent(),
) )
val options = val options =
@@ -1136,8 +1105,8 @@ result = someLib.x
assertThat(buffer.toString(StandardCharsets.UTF_8)) assertThat(buffer.toString(StandardCharsets.UTF_8))
.isEqualTo( .isEqualTo(
""" """
new Dynamic { bar = 1 } new Dynamic { bar = 1 }
""" """
.trimIndent() .trimIndent()
) )
} }
@@ -1148,13 +1117,13 @@ result = someLib.x
writePklFile( writePklFile(
"test.pkl", "test.pkl",
""" """
class Person { class Person {
name: String name: String
function toString() = "Person(\(name))" function toString() = "Person(\(name))"
} }
person: Person = new { name = "Frodo" } person: Person = new { name = "Frodo" }
""" """
.trimIndent(), .trimIndent(),
) )
val options = val options =
@@ -1173,10 +1142,10 @@ result = someLib.x
writePklFile( writePklFile(
"test.pkl", "test.pkl",
""" """
person { person {
friend { name = "Bilbo" } friend { name = "Bilbo" }
} }
""" """
.trimIndent(), .trimIndent(),
) )
val options = val options =
@@ -1196,8 +1165,8 @@ result = someLib.x
writePklFile( writePklFile(
"test.pkl", "test.pkl",
""" """
res = 1 res = 1
""" """
.trimIndent(), .trimIndent(),
) )
writePklFile( writePklFile(
@@ -1206,7 +1175,7 @@ result = someLib.x
amends "pkl:Project" amends "pkl:Project"
package = throw("invalid project package") package = throw("invalid project package")
""" """
.trimIndent(), .trimIndent(),
) )
val options = val options =
@@ -1225,8 +1194,8 @@ result = someLib.x
writePklFile( writePklFile(
"test.pkl", "test.pkl",
""" """
res = read*("env:**") res = read*("env:**")
""" """
.trimIndent(), .trimIndent(),
) )
writePklFile( writePklFile(
@@ -1241,7 +1210,7 @@ result = someLib.x
["bar"] = "bar" ["bar"] = "bar"
} }
} }
""" """
.trimIndent(), .trimIndent(),
) )
val options = val options =
@@ -1251,12 +1220,12 @@ result = someLib.x
assertThat(buffer.toString(StandardCharsets.UTF_8)) assertThat(buffer.toString(StandardCharsets.UTF_8))
.isEqualTo( .isEqualTo(
""" """
res { res {
["env:bar"] = "bar" ["env:bar"] = "bar"
["env:foo"] = "foo" ["env:foo"] = "foo"
} }
""" """
.trimIndent() .trimIndent()
) )
} }
@@ -1353,10 +1322,10 @@ result = someLib.x
writePklFile( writePklFile(
"test.pkl", "test.pkl",
""" """
import "package://localhost:0/birds@0.5.0#/catalog/Swallow.pkl" import "package://localhost:0/birds@0.5.0#/catalog/Swallow.pkl"
res = Swallow res = Swallow
""" """
.trimIndent(), .trimIndent(),
) )
val buffer = ByteArrayOutputStream() val buffer = ByteArrayOutputStream()
@@ -1375,14 +1344,14 @@ result = someLib.x
assertThat(buffer.toString(StandardCharsets.UTF_8)) assertThat(buffer.toString(StandardCharsets.UTF_8))
.isEqualTo( .isEqualTo(
""" """
res { res {
name = "Swallow" name = "Swallow"
favoriteFruit { favoriteFruit {
name = "Apple" name = "Apple"
}
} }
}
""" """
.trimIndent() .trimIndent()
) )
assertThat(tempDir.resolve("package-2")).doesNotExist() assertThat(tempDir.resolve("package-2")).doesNotExist()
@@ -1481,13 +1450,13 @@ result = someLib.x
assertThat(output) assertThat(output)
.isEqualTo( .isEqualTo(
""" """
name = "Ostrich" name = "Ostrich"
favoriteFruit { favoriteFruit {
name = "Orange" name = "Orange"
} }
""" """
.trimIndent() .trimIndent()
) )
verify(getRequestedFor(urlEqualTo("birds@0.5.0"))) verify(getRequestedFor(urlEqualTo("birds@0.5.0")))
@@ -1590,13 +1559,13 @@ result = someLib.x
homeDir.writeFile( homeDir.writeFile(
"settings.pkl", "settings.pkl",
""" """
amends "pkl:settings" amends "pkl:settings"
http { http {
proxy { proxy {
address = "http://invalid.proxy.address" address = "http://invalid.proxy.address"
}
} }
}
""" """
.trimIndent(), .trimIndent(),
) )
@@ -1614,24 +1583,6 @@ result = someLib.x
assertThat(output).isEqualTo("result = 1\n") assertThat(output).isEqualTo("result = 1\n")
} }
@Test
fun `eval configured http headers`(wwRuntimeInfo: WireMockRuntimeInfo) {
stubFor(get(anyUrl()).willReturn(ok("result = 1")))
val file = URI("${wwRuntimeInfo.httpBaseUrl}/foo.pkl")
val output =
evalToConsole(
CliEvaluatorOptions(
CliBaseOptions(
sourceModules = listOf(file),
httpHeaders = mapOf("**" to mapOf("X-Foo" to listOf("Foo"))),
allowedModules =
listOf(Pattern.compile("http:"), Pattern.compile("file:"), Pattern.compile("pkl:")),
)
)
)
verify(getRequestedFor(urlEqualTo("/foo.pkl")).withHeader("X-Foo", equalTo("Foo")))
}
@Test @Test
fun `eval file with non-ASCII name`() { fun `eval file with non-ASCII name`() {
val tempDirUri = tempDir.toUri() val tempDirUri = tempDir.toUri()
@@ -1695,26 +1646,26 @@ result = someLib.x
writePklFile( writePklFile(
"test.pkl", "test.pkl",
""" """
pigeon { pigeon {
name = "Pigeon" name = "Pigeon"
diet = "Seeds" diet = "Seeds"
} }
parrot { parrot {
name = "Parrot" name = "Parrot"
diet = "Seeds" diet = "Seeds"
} }
output { output {
files { files {
["pigeon.json"] { ["pigeon.json"] {
value = pigeon value = pigeon
renderer = new JsonRenderer {} renderer = new JsonRenderer {}
} }
["birds/parrot.yaml"] { ["birds/parrot.yaml"] {
value = parrot value = parrot
renderer = new YamlRenderer {} renderer = new YamlRenderer {}
}
} }
} }
}
""" """
.trimIndent(), .trimIndent(),
) )
@@ -1731,10 +1682,10 @@ result = someLib.x
realOutputDir.resolve("pigeon.json"), realOutputDir.resolve("pigeon.json"),
"pigeon.json", "pigeon.json",
""" """
{ {
"name": "Pigeon", "name": "Pigeon",
"diet": "Seeds" "diet": "Seeds"
} }
""" """
.trimIndent(), .trimIndent(),
) )
@@ -1743,8 +1694,8 @@ result = someLib.x
realOutputDir.resolve("birds/parrot.yaml"), realOutputDir.resolve("birds/parrot.yaml"),
"parrot.yaml", "parrot.yaml",
""" """
name: Parrot name: Parrot
diet: Seeds diet: Seeds
""" """
.trimIndent(), .trimIndent(),
) )
@@ -1753,10 +1704,10 @@ result = someLib.x
symlinkOutputDir.resolve("pigeon.json"), symlinkOutputDir.resolve("pigeon.json"),
"pigeon.json", "pigeon.json",
""" """
{ {
"name": "Pigeon", "name": "Pigeon",
"diet": "Seeds" "diet": "Seeds"
} }
""" """
.trimIndent(), .trimIndent(),
) )
@@ -1765,39 +1716,13 @@ result = someLib.x
symlinkOutputDir.resolve("birds/parrot.yaml"), symlinkOutputDir.resolve("birds/parrot.yaml"),
"parrot.yaml", "parrot.yaml",
""" """
name: Parrot name: Parrot
diet: Seeds diet: Seeds
""" """
.trimIndent(), .trimIndent(),
) )
} }
@Test
fun `eval dependency notation source`(@TempDir tempDir: Path) {
PackageServer.populateCacheDir(tempDir)
val projectPath =
FileTestUtils.rootProjectDir.resolve(
"pkl-commons-cli/src/main/resources/org/pkl/commons/cli/project1/"
)
val options =
CliEvaluatorOptions(
CliBaseOptions(
sourceModules = listOf(URI("@fruit/catalog/apple.pkl")),
projectDir = projectPath,
moduleCacheDir = tempDir,
)
)
val output = evalToConsole(options)
assertThat(output)
.isEqualTo(
"""
name = "Apple 🍎"
"""
.trimIndent()
)
}
private fun evalModuleThatImportsPackage(certsFile: Path?, testPort: Int = -1) { private fun evalModuleThatImportsPackage(certsFile: Path?, testPort: Int = -1) {
val moduleUri = val moduleUri =
writePklFile( writePklFile(
@@ -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.
@@ -74,7 +74,7 @@ class CliMainTest {
value = x value = x
renderer = new JsonRenderer {} renderer = new JsonRenderer {}
} }
""" """
.trimIndent() .trimIndent()
val inputFile = tempDir.resolve("test.pkl").writeString(code).toString() val inputFile = tempDir.resolve("test.pkl").writeString(code).toString()
val outputFile = makeSymdir(tempDir, "out", "linkOut").resolve("test.pkl").toString() val outputFile = makeSymdir(tempDir, "out", "linkOut").resolve("test.pkl").toString()
@@ -169,60 +169,4 @@ class CliMainTest {
link.createSymbolicLinkPointingTo(dir) link.createSymbolicLinkPointingTo(dir)
return link return link
} }
@Test
fun `invalid http header glob pattern`() {
val ex =
assertThrows<BadParameterValue> {
rootCmd.parse(arrayOf("eval", "--http-header", "foo{{}}=bar:baz", "myModule.pkl"))
}
assertThat(ex.message)
.contains("Sub-patterns cannot be nested. To fix, remove or escape the inner `{` character.")
}
@Test
fun `forbidden http header name`() {
val ex =
assertThrows<BadParameterValue> {
rootCmd.parse(arrayOf("eval", "--http-header", "**=Connection: baz", "myModule.pkl"))
}
assertThat(ex.message).contains("HTTP header `Connection` is a reserved header")
}
@Test
fun `bad http header value`() {
val ex =
assertThrows<BadParameterValue> {
rootCmd.parse(arrayOf("eval", "--http-header", "**=X-Foo:🙃", "myModule.pkl"))
}
assertThat(ex.message).contains("HTTP header value `🙃` has invalid syntax")
}
@Test
fun `multiple headers`() {
val cmd = RootCommand()
cmd.parse(
arrayOf(
"eval",
"--http-header",
"**=X-Foo:Foo",
"--http-header",
"**=X-Foo:Foo2",
"--http-header",
"**=X-Bar:Bar",
"--http-header",
"https://example.com/**=X-Qux:Qux",
"pkl:base",
)
)
val evalCmd = cmd.registeredSubcommands().filterIsInstance<EvalCommand>().first()
assertThat(evalCmd.baseOptions.httpHeaders)
.isEqualTo(
mapOf(
"**" to mapOf("X-Foo" to listOf("Foo", "Foo2"), "X-Bar" to listOf("Bar")),
"https://example.com/**" to mapOf("X-Qux" to listOf("Qux")),
)
)
}
} }
@@ -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.
@@ -74,7 +74,7 @@ class CliPackageDownloaderTest {
evaluatorSettings { evaluatorSettings {
moduleCacheDir = ".my-cache" moduleCacheDir = ".my-cache"
} }
""" """
.trimIndent(), .trimIndent(),
) )
@@ -210,7 +210,7 @@ class CliPackageDownloaderTest {
Exception when making request `GET https://bogus.domain/notAPackage@1.0.0`: Exception when making request `GET https://bogus.domain/notAPackage@1.0.0`:
Error connecting to host `bogus.domain`. Error connecting to host `bogus.domain`.
""" """
.trimIndent() .trimIndent()
) )
} }
@@ -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.
@@ -85,8 +85,8 @@ class CliProjectPackagerTest {
.resolve("PklProject") .resolve("PklProject")
.writeString( .writeString(
""" """
amends "pkl:Project" amends "pkl:Project"
""" """
.trimIndent() .trimIndent()
) )
val packager = val packager =
@@ -114,7 +114,7 @@ class CliProjectPackagerTest {
1 == 2 1 == 2
} }
} }
""" """
.trimIndent(), .trimIndent(),
) )
tempDir.writeFile( tempDir.writeFile(
@@ -129,7 +129,7 @@ class CliProjectPackagerTest {
packageZipUrl = "https://foo.com" packageZipUrl = "https://foo.com"
apiTests { "myTest.pkl" } apiTests { "myTest.pkl" }
} }
""" """
.trimIndent(), .trimIndent(),
) )
val buffer = StringWriter() val buffer = StringWriter()
@@ -160,7 +160,7 @@ class CliProjectPackagerTest {
1 == 1 1 == 1
} }
} }
""" """
.trimIndent() .trimIndent()
) )
tempDir tempDir
@@ -176,7 +176,7 @@ class CliProjectPackagerTest {
packageZipUrl = "https://foo.com" packageZipUrl = "https://foo.com"
apiTests { "myTest.pkl" } apiTests { "myTest.pkl" }
} }
""" """
.trimIndent() .trimIndent()
) )
val buffer = StringWriter() val buffer = StringWriter()
@@ -209,7 +209,7 @@ class CliProjectPackagerTest {
new Bird { name = "Finch"; favoriteFruit { name = "Tangerine" } } new Bird { name = "Finch"; favoriteFruit { name = "Tangerine" } }
} }
} }
""" """
.trimIndent() .trimIndent()
) )
projectDir projectDir
@@ -227,7 +227,7 @@ class CliProjectPackagerTest {
} }
} }
""" """
.trimIndent() .trimIndent()
) )
projectDir projectDir
@@ -249,7 +249,7 @@ class CliProjectPackagerTest {
uri = "package://localhost:0/birds@0.5.0" uri = "package://localhost:0/birds@0.5.0"
} }
} }
""" """
.trimIndent() .trimIndent()
) )
projectDir projectDir
@@ -300,7 +300,7 @@ class CliProjectPackagerTest {
module foo module foo
name: String name: String
""" """
.trimIndent(), .trimIndent(),
) )
@@ -311,7 +311,7 @@ class CliProjectPackagerTest {
foo foo
bar bar
baz baz
""" """
.trimIndent(), .trimIndent(),
) )
@@ -327,7 +327,7 @@ class CliProjectPackagerTest {
baseUri = "package://example.com/mypackage" baseUri = "package://example.com/mypackage"
packageZipUrl = "https://foo.com" packageZipUrl = "https://foo.com"
} }
""" """
.trimIndent() .trimIndent()
) )
val packager = val packager =
@@ -348,18 +348,18 @@ class CliProjectPackagerTest {
assertThat(expectedMetadata) assertThat(expectedMetadata)
.hasContent( .hasContent(
""" """
{ {
"name": "mypackage", "name": "mypackage",
"packageUri": "package://example.com/mypackage@1.0.0", "packageUri": "package://example.com/mypackage@1.0.0",
"version": "1.0.0", "version": "1.0.0",
"packageZipUrl": "https://foo.com", "packageZipUrl": "https://foo.com",
"packageZipChecksums": { "packageZipChecksums": {
"sha256": "e83b67722ea17ba41717ce6e99ae8ee02d66df6294bd319ce403075b1071c3e0" "sha256": "e83b67722ea17ba41717ce6e99ae8ee02d66df6294bd319ce403075b1071c3e0"
}, },
"dependencies": {}, "dependencies": {},
"authors": [] "authors": []
} }
""" """
.trimIndent() .trimIndent()
) )
assertThat(expectedArchive).exists() assertThat(expectedArchive).exists()
@@ -395,21 +395,21 @@ class CliProjectPackagerTest {
tempDir.writeFile( tempDir.writeFile(
"PklProject", "PklProject",
""" """
amends "pkl:Project" amends "pkl:Project"
package { package {
name = "mypackage" name = "mypackage"
version = "1.0.0" version = "1.0.0"
baseUri = "package://example.com/mypackage" baseUri = "package://example.com/mypackage"
packageZipUrl = "https://foo.com" packageZipUrl = "https://foo.com"
exclude { exclude {
"*.bin" "*.bin"
"child/main.pkl" "child/main.pkl"
"*.test.pkl" "*.test.pkl"
"examples/Ex1.pkl" "examples/Ex1.pkl"
"tests/**" "tests/**"
}
} }
}
""" """
.trimIndent(), .trimIndent(),
) )
@@ -444,21 +444,21 @@ class CliProjectPackagerTest {
projectDir.writeFile( projectDir.writeFile(
"PklProject", "PklProject",
""" """
amends "pkl:Project" amends "pkl:Project"
package { package {
name = "mypackage" name = "mypackage"
version = "1.0.0" version = "1.0.0"
baseUri = "package://example.com/mypackage" baseUri = "package://example.com/mypackage"
packageZipUrl = "https://foo.com" packageZipUrl = "https://foo.com"
} }
dependencies { dependencies {
["birds"] { ["birds"] {
uri = "package://localhost:0/birds@0.5.0" uri = "package://localhost:0/birds@0.5.0"
}
["project2"] = import("../project2/PklProject")
} }
["project2"] = import("../project2/PklProject")
}
""" """
.trimIndent(), .trimIndent(),
) )
@@ -489,24 +489,24 @@ class CliProjectPackagerTest {
project2Dir.writeFile( project2Dir.writeFile(
"PklProject", "PklProject",
""" """
amends "pkl:Project" amends "pkl:Project"
package { package {
name = "project2" name = "project2"
baseUri = "package://localhost:0/project2" baseUri = "package://localhost:0/project2"
version = "5.0.0" version = "5.0.0"
packageZipUrl = "https://foo.com/project2.zip" packageZipUrl = "https://foo.com/project2.zip"
} }
""" """
.trimIndent(), .trimIndent(),
) )
project2Dir.writeFile( project2Dir.writeFile(
"PklProject.deps.json", "PklProject.deps.json",
""" """
{ {
"schemaVersion": 1, "schemaVersion": 1,
"resolvedDependencies": {} "resolvedDependencies": {}
} }
""" """
.trimIndent(), .trimIndent(),
) )
@@ -557,18 +557,18 @@ class CliProjectPackagerTest {
assertThat(project2Metadata.readString()) assertThat(project2Metadata.readString())
.isEqualTo( .isEqualTo(
""" """
{ {
"name": "project2", "name": "project2",
"packageUri": "package://localhost:0/project2@5.0.0", "packageUri": "package://localhost:0/project2@5.0.0",
"version": "5.0.0", "version": "5.0.0",
"packageZipUrl": "https://foo.com/project2.zip", "packageZipUrl": "https://foo.com/project2.zip",
"packageZipChecksums": { "packageZipChecksums": {
"sha256": "8739c76e681f900923b900c9df0ef75cf421d39cabb54650c4b9ad19b6a76d85" "sha256": "8739c76e681f900923b900c9df0ef75cf421d39cabb54650c4b9ad19b6a76d85"
}, },
"dependencies": {}, "dependencies": {},
"authors": [] "authors": []
} }
""" """
.trimIndent() .trimIndent()
) )
} }
@@ -582,44 +582,44 @@ class CliProjectPackagerTest {
projectDir.writeFile( projectDir.writeFile(
"PklProject", "PklProject",
""" """
amends "pkl:Project" amends "pkl:Project"
package { package {
name = "mypackage" name = "mypackage"
version = "1.0.0" version = "1.0.0"
baseUri = "package://example.com/mypackage" baseUri = "package://example.com/mypackage"
packageZipUrl = "https://foo.com" packageZipUrl = "https://foo.com"
} }
dependencies { dependencies {
["birds"] { ["birds"] {
uri = "package://localhost:0/birds@0.5.0" uri = "package://localhost:0/birds@0.5.0"
}
["project2"] = import("../project2/PklProject")
} }
["project2"] = import("../project2/PklProject")
}
""" """
.trimIndent(), .trimIndent(),
) )
projectDir.writeFile( projectDir.writeFile(
"PklProject.deps.json", "PklProject.deps.json",
""" """
{ {
"schemaVersion": 1, "schemaVersion": 1,
"resolvedDependencies": { "resolvedDependencies": {
"package://localhost:0/birds@0": { "package://localhost:0/birds@0": {
"type": "remote", "type": "remote",
"uri": "projectpackage://localhost:0/birds@0.5.0", "uri": "projectpackage://localhost:0/birds@0.5.0",
"checksums": { "checksums": {
"sha256": "0a5ad2dc13f06f73f96ba94e8d01d48252bc934e2de71a837620ca0fef8a7453" "sha256": "0a5ad2dc13f06f73f96ba94e8d01d48252bc934e2de71a837620ca0fef8a7453"
}
},
"package://localhost:0/project2@5": {
"type": "local",
"uri": "projectpackage://localhost:0/project2@5.0.0",
"path": "../project2"
} }
},
"package://localhost:0/project2@5": {
"type": "local",
"uri": "projectpackage://localhost:0/project2@5.0.0",
"path": "../project2"
} }
} }
}
""" """
.trimIndent(), .trimIndent(),
) )
@@ -627,24 +627,24 @@ class CliProjectPackagerTest {
project2Dir.writeFile( project2Dir.writeFile(
"PklProject", "PklProject",
""" """
amends "pkl:Project" amends "pkl:Project"
package { package {
name = "project2" name = "project2"
baseUri = "package://localhost:0/project2" baseUri = "package://localhost:0/project2"
version = "5.0.0" version = "5.0.0"
packageZipUrl = "https://foo.com/project2.zip" packageZipUrl = "https://foo.com/project2.zip"
} }
""" """
.trimIndent(), .trimIndent(),
) )
project2Dir.writeFile( project2Dir.writeFile(
"PklProject.deps.json", "PklProject.deps.json",
""" """
{ {
"schemaVersion": 1, "schemaVersion": 1,
"resolvedDependencies": {} "resolvedDependencies": {}
} }
""" """
.trimIndent(), .trimIndent(),
) )
@@ -667,23 +667,23 @@ class CliProjectPackagerTest {
tempDir.writeFile( tempDir.writeFile(
"main.pkl", "main.pkl",
""" """
import "../foo.pkl" import "../foo.pkl"
res = foo res = foo
""" """
.trimIndent(), .trimIndent(),
) )
tempDir.writeFile( tempDir.writeFile(
"PklProject", "PklProject",
""" """
amends "pkl:Project" amends "pkl:Project"
package { package {
name = "mypackage" name = "mypackage"
version = "1.0.0" version = "1.0.0"
baseUri = "package://example.com/mypackage" baseUri = "package://example.com/mypackage"
packageZipUrl = "https://foo.com" packageZipUrl = "https://foo.com"
} }
""" """
.trimIndent(), .trimIndent(),
) )
@@ -702,12 +702,12 @@ class CliProjectPackagerTest {
assertThat(e.message) assertThat(e.message)
.startsWith( .startsWith(
""" """
–– Pkl Error –– –– Pkl Error ––
Path `../foo.pkl` includes path segments that are outside the project root directory. Path `../foo.pkl` includes path segments that are outside the project root directory.
1 | import "../foo.pkl" 1 | import "../foo.pkl"
^^^^^^^^^^^^ ^^^^^^^^^^^^
""" """
.trimIndent() .trimIndent()
) )
} }
@@ -730,14 +730,14 @@ class CliProjectPackagerTest {
tempDir.writeFile( tempDir.writeFile(
"PklProject", "PklProject",
""" """
amends "pkl:Project" amends "pkl:Project"
package { package {
name = "mypackage" name = "mypackage"
version = "1.0.0" version = "1.0.0"
baseUri = "package://example.com/mypackage" baseUri = "package://example.com/mypackage"
packageZipUrl = "https://foo.com" packageZipUrl = "https://foo.com"
} }
""" """
.trimIndent(), .trimIndent(),
) )
@@ -763,43 +763,6 @@ class CliProjectPackagerTest {
) )
} }
@Test
fun `import path verification with glob imports`(@TempDir tempDir: Path) {
tempDir.writeFile(
"main.pkl",
"""
import* "**.pkl" as foo
res = foo
"""
.trimIndent(),
)
tempDir.writeFile(
"PklProject",
"""
amends "pkl:Project"
package {
name = "mypackage"
version = "1.0.0"
baseUri = "package://example.com/mypackage"
packageZipUrl = "https://foo.com"
}
"""
.trimIndent(),
)
CliProjectPackager(
CliBaseOptions(workingDir = tempDir),
listOf(tempDir),
CliTestOptions(),
".out/%{name}@%{version}",
skipPublishCheck = true,
consoleWriter = StringWriter(),
)
.run()
}
@Test @Test
@DisabledOnOs(OS.WINDOWS) @DisabledOnOs(OS.WINDOWS)
fun `import path verification -- absolute read from root dir`(@TempDir tempDir: Path) { fun `import path verification -- absolute read from root dir`(@TempDir tempDir: Path) {
@@ -813,14 +776,14 @@ class CliProjectPackagerTest {
tempDir.writeFile( tempDir.writeFile(
"PklProject", "PklProject",
""" """
amends "pkl:Project" amends "pkl:Project"
package { package {
name = "mypackage" name = "mypackage"
version = "1.0.0" version = "1.0.0"
baseUri = "package://example.com/mypackage" baseUri = "package://example.com/mypackage"
packageZipUrl = "https://foo.com" packageZipUrl = "https://foo.com"
} }
""" """
.trimIndent(), .trimIndent(),
) )
@@ -851,21 +814,21 @@ class CliProjectPackagerTest {
tempDir.writeFile( tempDir.writeFile(
"foo/bar.pkl", "foo/bar.pkl",
""" """
import "baz.pkl" import "baz.pkl"
""" """
.trimIndent(), .trimIndent(),
) )
tempDir.writeFile( tempDir.writeFile(
"PklProject", "PklProject",
""" """
amends "pkl:Project" amends "pkl:Project"
package { package {
name = "mypackage" name = "mypackage"
version = "1.0.0" version = "1.0.0"
baseUri = "package://example.com/mypackage" baseUri = "package://example.com/mypackage"
packageZipUrl = "https://foo.com" packageZipUrl = "https://foo.com"
} }
""" """
.trimIndent(), .trimIndent(),
) )
@@ -886,14 +849,14 @@ class CliProjectPackagerTest {
tempDir.writeFile( tempDir.writeFile(
"project1/PklProject", "project1/PklProject",
""" """
amends "pkl:Project" amends "pkl:Project"
package { package {
name = "project1" name = "project1"
version = "1.0.0" version = "1.0.0"
baseUri = "package://example.com/project1" baseUri = "package://example.com/project1"
packageZipUrl = "https://foo.com" packageZipUrl = "https://foo.com"
} }
""" """
.trimIndent(), .trimIndent(),
) )
@@ -901,14 +864,14 @@ class CliProjectPackagerTest {
tempDir.writeFile( tempDir.writeFile(
"project2/PklProject", "project2/PklProject",
""" """
amends "pkl:Project" amends "pkl:Project"
package { package {
name = "project2" name = "project2"
version = "2.0.0" version = "2.0.0"
baseUri = "package://example.com/project2" baseUri = "package://example.com/project2"
packageZipUrl = "https://foo.com" packageZipUrl = "https://foo.com"
} }
""" """
.trimIndent(), .trimIndent(),
) )
@@ -951,14 +914,14 @@ class CliProjectPackagerTest {
"project/PklProject", "project/PklProject",
// intentionally conflict with localhost:0/birds@0.5.0 from our test fixtures // intentionally conflict with localhost:0/birds@0.5.0 from our test fixtures
""" """
amends "pkl:Project" amends "pkl:Project"
package { package {
name = "birds" name = "birds"
version = "0.5.0" version = "0.5.0"
baseUri = "package://localhost:0/birds" baseUri = "package://localhost:0/birds"
packageZipUrl = "https://foo.com" packageZipUrl = "https://foo.com"
} }
""" """
.trimIndent(), .trimIndent(),
) )
@@ -996,14 +959,14 @@ class CliProjectPackagerTest {
tempDir.writeFile( tempDir.writeFile(
"project/PklProject", "project/PklProject",
""" """
amends "pkl:Project" amends "pkl:Project"
package { package {
name = "mangos" name = "mangos"
version = "1.0.0" version = "1.0.0"
baseUri = "package://localhost:0/mangos" baseUri = "package://localhost:0/mangos"
packageZipUrl = "https://foo.com" packageZipUrl = "https://foo.com"
} }
""" """
.trimIndent(), .trimIndent(),
) )
@@ -1052,7 +1015,7 @@ class CliProjectPackagerTest {
baseUri = "package://example.com/mypackage" baseUri = "package://example.com/mypackage"
packageZipUrl = "https://foo.com" packageZipUrl = "https://foo.com"
} }
""" """
.trimIndent() .trimIndent()
) )
val packager = val packager =
@@ -1070,53 +1033,53 @@ class CliProjectPackagerTest {
assertThat(expectedMetadata) assertThat(expectedMetadata)
.hasContent( .hasContent(
""" """
{ {
"name": "mypackage", "name": "mypackage",
"packageUri": "package://example.com/mypackage@1.0.0", "packageUri": "package://example.com/mypackage@1.0.0",
"version": "1.0.0", "version": "1.0.0",
"packageZipUrl": "https://foo.com", "packageZipUrl": "https://foo.com",
"packageZipChecksums": { "packageZipChecksums": {
"sha256": "8739c76e681f900923b900c9df0ef75cf421d39cabb54650c4b9ad19b6a76d85" "sha256": "8739c76e681f900923b900c9df0ef75cf421d39cabb54650c4b9ad19b6a76d85"
},
"dependencies": {},
"authors": [],
"annotations": [
{
"type": "PObject",
"classInfo": {
"moduleName": "pkl.base",
"class": "Unlisted",
"moduleUri": "pkl:base"
},
"properties": {}
}, },
"dependencies": {}, {
"authors": [], "type": "PObject",
"annotations": [ "classInfo": {
{ "moduleName": "pkl.base",
"type": "PObject", "class": "Deprecated",
"classInfo": { "moduleUri": "pkl:base"
"moduleName": "pkl.base",
"class": "Unlisted",
"moduleUri": "pkl:base"
},
"properties": {}
}, },
{ "properties": {
"type": "PObject", "since": "0.26.1",
"classInfo": { "message": "do not use",
"moduleName": "pkl.base", "replaceWith": null
"class": "Deprecated",
"moduleUri": "pkl:base"
},
"properties": {
"since": "0.26.1",
"message": "do not use",
"replaceWith": null
}
},
{
"type": "PObject",
"classInfo": {
"moduleName": "pkl.base",
"class": "ModuleInfo",
"moduleUri": "pkl:base"
},
"properties": {
"minPklVersion": "0.26.0"
}
} }
] },
} {
""" "type": "PObject",
"classInfo": {
"moduleName": "pkl.base",
"class": "ModuleInfo",
"moduleUri": "pkl:base"
},
"properties": {
"minPklVersion": "0.26.0"
}
}
]
}
"""
.trimIndent() .trimIndent()
) )
} }

Some files were not shown because too many files have changed in this diff Show More