Compare commits

..

1 Commits

Author SHA1 Message Date
dependabot[bot] 4aa2cd0fc1 Bump com.squareup:kotlinpoet from 1.6.0 to 2.3.0
Bumps [com.squareup:kotlinpoet](https://github.com/square/kotlinpoet) from 1.6.0 to 2.3.0.
- [Release notes](https://github.com/square/kotlinpoet/releases)
- [Changelog](https://github.com/square/kotlinpoet/blob/main/docs/changelog.md)
- [Commits](https://github.com/square/kotlinpoet/compare/1.6.0...2.3.0)

---
updated-dependencies:
- dependency-name: com.squareup:kotlinpoet
  dependency-version: 2.3.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-23 15:16:03 +00:00
802 changed files with 7020 additions and 22994 deletions
-2
View File
@@ -1,4 +1,2 @@
# Auto-format Kotlin code # Auto-format Kotlin code
816cd483c8adf4c04e14236c173a1dc6bd2579ea 816cd483c8adf4c04e14236c173a1dc6bd2579ea
# Format Kotlin code again
2b3603b544bae2ad87374b65afaf8ac018216261
+1 -1
View File
@@ -2,7 +2,7 @@ amends "pkl:Project"
dependencies { dependencies {
["pkl.impl.ghactions"] { ["pkl.impl.ghactions"] {
uri = "package://pkg.pkl-lang.org/pkl-project-commons/pkl.impl.ghactions@1.8.2" uri = "package://pkg.pkl-lang.org/pkl-project-commons/pkl.impl.ghactions@1.6.0"
} }
["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.4.0"
+10 -10
View File
@@ -3,37 +3,37 @@
"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.9.0", "uri": "projectpackage://pkg.pkl-lang.org/pkl-pantry/com.github.actions@1.4.0",
"checksums": { "checksums": {
"sha256": "5947924cf94fae9d8cdca42ade3f86db2675842cab7254214e7c0e281ddb6908" "sha256": "e0b9a9f71071d6101e9d764c069b2ec4a597d5315cb6e4c265b3f0d90c2b482c"
} }
}, },
"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.8.2", "uri": "projectpackage://pkg.pkl-lang.org/pkl-project-commons/pkl.impl.ghactions@1.6.0",
"checksums": { "checksums": {
"sha256": "12cca6326806ec37abc790a6707b6d907b4f8ba97628f2bc7fb327b5a6f68b49" "sha256": "fbc3c456ea468a0fe6baa9b3d30167259ac04e721a41a10fe82d2970026f0b1d"
} }
}, },
"package://pkg.pkl-lang.org/pkl-pantry/pkl.experimental.deepToTyped@1": { "package://pkg.pkl-lang.org/pkl-pantry/pkl.experimental.deepToTyped@1": {
"type": "remote", "type": "remote",
"uri": "projectpackage://pkg.pkl-lang.org/pkl-pantry/pkl.experimental.deepToTyped@1.2.1", "uri": "projectpackage://pkg.pkl-lang.org/pkl-pantry/pkl.experimental.deepToTyped@1.2.0",
"checksums": { "checksums": {
"sha256": "6e752d1e84aff24c3a1801658f27f12af70840c39b3fe7bac509c8178d566d25" "sha256": "84c7feb391f4ac273a99dc89b8fd51dbcd21dbda4ce640f6908527f83acdd4d6"
} }
}, },
"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.9", "uri": "projectpackage://pkg.pkl-lang.org/pkl-pantry/pkl.github.dependabotManagedActions@1.1.0",
"checksums": { "checksums": {
"sha256": "467b91559f31ad7401c78d3df9569b5ec7aa4e1b49209f9f22d02bd72971e0bd" "sha256": "025fac778f2c5f75c8229fa4ec0f49ebdb99a61affe9aae489fefd8fccd92faa"
} }
}, },
"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.4", "uri": "projectpackage://pkg.pkl-lang.org/pkl-pantry/com.github.dependabot@1.0.1",
"checksums": { "checksums": {
"sha256": "c7391119f946d7761d0ca0cc358ed8fe2bdfc691411087ccac89637bd96fec4a" "sha256": "0a4fe9b0983716ec49fb060b9e5e83f8c365eb899d517123b43134416a9574b6"
} }
} }
} }
+67
View File
@@ -0,0 +1,67 @@
amends "@gha/Workflow.pkl"
import "@gha/catalog.pkl"
on {
push {
branches {
"main"
}
}
pull_request {}
schedule {
// Run at 01:38 on Saturday
new { cron = "38 1 * * 6" }
}
}
local class CodeQLScan {
language: String
`build-mode`: String
}
local scans: Listing<CodeQLScan> = new {
new {
language = "actions"
`build-mode` = "none"
}
new {
language = "java-kotlin"
`build-mode` = "autobuild"
}
new {
language = "javascript-typescript"
`build-mode` = "none"
}
}
jobs {
for (scan in scans) {
["analyze-\(scan.language)"] {
name = "Analyze (\(scan.language))"
`runs-on` = "ubuntu-latest"
permissions {
`security-events` = "write"
}
steps {
catalog.`actions/checkout@v6`
new {
name = "Initialize CodeQL"
uses = "github/codeql-action/init@v4"
with {
["languages"] = scan.language
["build-mode"] = scan.`build-mode`
}
}
new {
name = "Perform CodeQL Analysis"
uses = "github/codeql-action/analyze@v4"
with {
["category"] = "/language:\(scan.language)"
}
}
}
}
}
}
+1 -8
View File
@@ -10,16 +10,9 @@ updates:
cooldown: cooldown:
default-days: 7 default-days: 7
directory: / directory: /
groups:
first-party:
patterns:
- actions/*
codeql:
patterns:
- github/codeql-action/*
ignore: ignore:
- dependency-name: '*' - dependency-name: '*'
update-types: update-types:
- version-update:semver-major - version-update:semver-major
schedule: schedule:
interval: quarterly interval: weekly
+4 -11
View File
@@ -9,6 +9,7 @@ import "jobs/GithubRelease.pkl"
import "jobs/GradleJob.pkl" import "jobs/GradleJob.pkl"
import "jobs/PklJob.pkl" import "jobs/PklJob.pkl"
import "jobs/SimpleGradleJob.pkl" import "jobs/SimpleGradleJob.pkl"
import "codeql.pkl"
triggerDocsBuild = "both" triggerDocsBuild = "both"
@@ -240,15 +241,7 @@ dependabot {
} }
} }
codeql { workflows {
scans { // add codeql workflow to set of workflows
new { ["workflows/codeql.yml"] = codeql
language = "java-kotlin"
buildMode = "autobuild"
}
new {
language = "javascript-typescript"
buildMode = "none"
}
}
} }
+2 -16
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) {
@@ -97,20 +97,6 @@ fixed job {
} }
} }
} }
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
} }
} }
+5 -5
View File
@@ -17,23 +17,23 @@ jobs:
runs-on: nothing runs-on: nothing
steps: steps:
- name: EnricoMi/publish-unit-test-result-action@v2 - name: EnricoMi/publish-unit-test-result-action@v2
uses: EnricoMi/publish-unit-test-result-action@d0a4676d0e0b938bc201470d88276b7c74c712b3 # v2 uses: EnricoMi/publish-unit-test-result-action@c950f6fb443cb5af20a377fd0dfaa78838901040 # v2
- name: actions/checkout@v6 - name: actions/checkout@v6
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # 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@fee1f7d63c2ff003460e3d139729b119787bc349 # 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
uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
- name: actions/upload-artifact@v5 - name: actions/upload-artifact@v5
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 - name: github/codeql-action/analyze@v4
uses: github/codeql-action/analyze@54f647b7e1bb85c95cddabcd46b0c578ec92bc1a # v4 uses: github/codeql-action/analyze@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v4
- name: github/codeql-action/init@v4 - name: github/codeql-action/init@v4
uses: github/codeql-action/init@54f647b7e1bb85c95cddabcd46b0c578ec92bc1a # v4 uses: github/codeql-action/init@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v4
- name: gradle/actions/dependency-submission@v6 - name: gradle/actions/dependency-submission@v6
uses: gradle/actions/dependency-submission@50e97c2cd7a37755bbfafc9c5b7cafaece252f6e # v6 uses: gradle/actions/dependency-submission@50e97c2cd7a37755bbfafc9c5b7cafaece252f6e # v6
- name: gradle/actions/setup-gradle@v5 - name: gradle/actions/setup-gradle@v5
+53 -189
View File
@@ -19,28 +19,20 @@ jobs:
env: env:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
fetch-depth: 0 fetch-depth: 0
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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
@@ -60,28 +52,20 @@ jobs:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
JAVA_HOME: /jdk JAVA_HOME: /jdk
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
fetch-depth: 0 fetch-depth: 0
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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
@@ -100,54 +84,38 @@ jobs:
env: env:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
fetch-depth: 0 fetch-depth: 0
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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
@@ -166,31 +134,23 @@ jobs:
env: env:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
fetch-depth: 0 fetch-depth: 0
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
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@df4cb1c069e1874edd31b4311f1884172cec0e10 # 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:
@@ -217,27 +177,19 @@ jobs:
env: env:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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:
@@ -263,29 +215,21 @@ jobs:
steps: steps:
- name: Install deps - name: Install deps
run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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:
@@ -314,27 +258,19 @@ jobs:
env: env:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: aarch64 architecture: aarch64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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:
@@ -360,29 +296,21 @@ jobs:
steps: steps:
- name: Install deps - name: Install deps
run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: aarch64 architecture: aarch64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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:
@@ -408,24 +336,16 @@ jobs:
env: env:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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:
@@ -526,27 +446,19 @@ jobs:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
JAVA_HOME: /jdk JAVA_HOME: /jdk
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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:
@@ -573,27 +485,19 @@ jobs:
env: env:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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:
@@ -619,29 +523,21 @@ jobs:
steps: steps:
- name: Install deps - name: Install deps
run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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:
@@ -670,27 +566,19 @@ jobs:
env: env:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: aarch64 architecture: aarch64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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:
@@ -716,29 +604,21 @@ jobs:
steps: steps:
- name: Install deps - name: Install deps
run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: aarch64 architecture: aarch64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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:
@@ -764,24 +644,16 @@ jobs:
env: env:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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:
@@ -882,27 +754,19 @@ jobs:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
JAVA_HOME: /jdk JAVA_HOME: /jdk
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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:
@@ -949,7 +813,7 @@ jobs:
pattern: test-results-xml-* pattern: test-results-xml-*
- name: Publish test results - name: Publish test results
if: '!cancelled()' if: '!cancelled()'
uses: EnricoMi/publish-unit-test-result-action@d0a4676d0e0b938bc201470d88276b7c74c712b3 # v2 uses: EnricoMi/publish-unit-test-result-action@c950f6fb443cb5af20a377fd0dfaa78838901040 # v2
with: with:
comment_mode: 'off' comment_mode: 'off'
files: test-results-xml-*/**/*.xml files: test-results-xml-*/**/*.xml
+14 -13
View File
@@ -1,13 +1,11 @@
# Generated from Workflow.pkl. DO NOT EDIT. # Generated from Workflow.pkl. DO NOT EDIT.
'on': 'on':
pull_request: pull_request: {}
branches:
- main
push: push:
branches: branches:
- main - main
schedule: schedule:
- cron: 29 17 * * 4 - cron: 38 1 * * 6
jobs: jobs:
analyze-actions: analyze-actions:
name: Analyze (actions) name: Analyze (actions)
@@ -15,15 +13,16 @@ jobs:
security-events: write security-events: write
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: github/codeql-action/init@54f647b7e1bb85c95cddabcd46b0c578ec92bc1a # v4 - name: Initialize CodeQL
uses: github/codeql-action/init@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v4
with: with:
languages: actions languages: actions
build-mode: none build-mode: none
- name: Perform CodeQL Analysis - name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@54f647b7e1bb85c95cddabcd46b0c578ec92bc1a # v4 uses: github/codeql-action/analyze@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v4
with: with:
category: /language:actions category: /language:actions
analyze-java-kotlin: analyze-java-kotlin:
@@ -32,15 +31,16 @@ jobs:
security-events: write security-events: write
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: github/codeql-action/init@54f647b7e1bb85c95cddabcd46b0c578ec92bc1a # v4 - name: Initialize CodeQL
uses: github/codeql-action/init@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v4
with: with:
languages: java-kotlin languages: java-kotlin
build-mode: autobuild build-mode: autobuild
- name: Perform CodeQL Analysis - name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@54f647b7e1bb85c95cddabcd46b0c578ec92bc1a # v4 uses: github/codeql-action/analyze@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v4
with: with:
category: /language:java-kotlin category: /language:java-kotlin
analyze-javascript-typescript: analyze-javascript-typescript:
@@ -49,14 +49,15 @@ jobs:
security-events: write security-events: write
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: github/codeql-action/init@54f647b7e1bb85c95cddabcd46b0c578ec92bc1a # v4 - name: Initialize CodeQL
uses: github/codeql-action/init@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v4
with: with:
languages: javascript-typescript languages: javascript-typescript
build-mode: none build-mode: none
- name: Perform CodeQL Analysis - name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@54f647b7e1bb85c95cddabcd46b0c578ec92bc1a # v4 uses: github/codeql-action/analyze@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v4
with: with:
category: /language:javascript-typescript category: /language:javascript-typescript
+59 -203
View File
@@ -17,28 +17,20 @@ jobs:
env: env:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
fetch-depth: 0 fetch-depth: 0
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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
@@ -58,28 +50,20 @@ jobs:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
JAVA_HOME: /jdk JAVA_HOME: /jdk
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
fetch-depth: 0 fetch-depth: 0
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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
@@ -98,54 +82,38 @@ jobs:
env: env:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
fetch-depth: 0 fetch-depth: 0
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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
@@ -164,31 +132,23 @@ jobs:
env: env:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
fetch-depth: 0 fetch-depth: 0
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
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@df4cb1c069e1874edd31b4311f1884172cec0e10 # 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:
@@ -215,27 +175,19 @@ jobs:
env: env:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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:
@@ -261,29 +213,21 @@ jobs:
steps: steps:
- name: Install deps - name: Install deps
run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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:
@@ -312,27 +256,19 @@ jobs:
env: env:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: aarch64 architecture: aarch64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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:
@@ -358,29 +294,21 @@ jobs:
steps: steps:
- name: Install deps - name: Install deps
run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: aarch64 architecture: aarch64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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:
@@ -406,24 +334,16 @@ jobs:
env: env:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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:
@@ -524,27 +444,19 @@ jobs:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
JAVA_HOME: /jdk JAVA_HOME: /jdk
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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:
@@ -571,27 +483,19 @@ jobs:
env: env:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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:
@@ -617,29 +521,21 @@ jobs:
steps: steps:
- name: Install deps - name: Install deps
run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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:
@@ -668,27 +564,19 @@ jobs:
env: env:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: aarch64 architecture: aarch64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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:
@@ -714,29 +602,21 @@ jobs:
steps: steps:
- name: Install deps - name: Install deps
run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: aarch64 architecture: aarch64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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:
@@ -762,24 +642,16 @@ jobs:
env: env:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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:
@@ -880,27 +752,19 @@ jobs:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
JAVA_HOME: /jdk JAVA_HOME: /jdk
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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:
@@ -943,25 +807,17 @@ jobs:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
environment: maven-release environment: maven-release
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
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@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6 - uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
@@ -974,16 +830,16 @@ 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: dependency-submission:
permissions: permissions:
contents: write contents: write
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
@@ -1018,7 +874,7 @@ jobs:
pattern: test-results-xml-* pattern: test-results-xml-*
- name: Publish test results - name: Publish test results
if: '!cancelled()' if: '!cancelled()'
uses: EnricoMi/publish-unit-test-result-action@d0a4676d0e0b938bc201470d88276b7c74c712b3 # v2 uses: EnricoMi/publish-unit-test-result-action@c950f6fb443cb5af20a377fd0dfaa78838901040 # v2
with: with:
comment_mode: 'off' comment_mode: 'off'
files: test-results-xml-*/**/*.xml files: test-results-xml-*/**/*.xml
+43 -180
View File
@@ -13,28 +13,20 @@ jobs:
env: env:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
fetch-depth: 0 fetch-depth: 0
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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
@@ -56,28 +48,20 @@ jobs:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
JAVA_HOME: /jdk JAVA_HOME: /jdk
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
fetch-depth: 0 fetch-depth: 0
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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
@@ -100,27 +84,19 @@ jobs:
env: env:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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:
@@ -148,29 +124,21 @@ jobs:
steps: steps:
- name: Install deps - name: Install deps
run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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:
@@ -200,27 +168,19 @@ jobs:
env: env:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: aarch64 architecture: aarch64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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:
@@ -248,29 +208,21 @@ jobs:
steps: steps:
- name: Install deps - name: Install deps
run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: aarch64 architecture: aarch64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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:
@@ -298,24 +250,16 @@ jobs:
env: env:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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:
@@ -418,27 +362,19 @@ jobs:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
JAVA_HOME: /jdk JAVA_HOME: /jdk
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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:
@@ -466,27 +402,19 @@ jobs:
env: env:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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:
@@ -514,29 +442,21 @@ jobs:
steps: steps:
- name: Install deps - name: Install deps
run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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:
@@ -566,27 +486,19 @@ jobs:
env: env:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: aarch64 architecture: aarch64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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:
@@ -614,29 +526,21 @@ jobs:
steps: steps:
- name: Install deps - name: Install deps
run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: aarch64 architecture: aarch64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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:
@@ -664,24 +568,16 @@ jobs:
env: env:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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:
@@ -784,27 +680,19 @@ jobs:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
JAVA_HOME: /jdk JAVA_HOME: /jdk
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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:
@@ -824,31 +712,6 @@ jobs:
name: test-results-html-pkl-doc-windows-amd64-snapshot name: test-results-html-pkl-doc-windows-amd64-snapshot
path: '**/build/reports/tests/**/*' path: '**/build/reports/tests/**/*'
if-no-files-found: ignore if-no-files-found: ignore
verdict:
if: always()
needs:
- check-pkl-github-actions
- gradle-check
- gradle-check-windows
- pkl-cli-macOS-amd64-snapshot
- pkl-cli-linux-amd64-snapshot
- pkl-cli-macOS-aarch64-snapshot
- pkl-cli-linux-aarch64-snapshot
- pkl-cli-alpine-linux-amd64-snapshot
- pkl-cli-windows-amd64-snapshot
- pkl-doc-macOS-amd64-snapshot
- pkl-doc-linux-amd64-snapshot
- pkl-doc-macOS-aarch64-snapshot
- pkl-doc-linux-aarch64-snapshot
- pkl-doc-alpine-linux-amd64-snapshot
- pkl-doc-windows-amd64-snapshot
runs-on: ubuntu-latest
steps:
- name: Failure verdict
if: contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled')
run: |-
echo "Some of the required jobs are either failing or were cancelled"
exit 1
upload-event-file: upload-event-file:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
@@ -861,7 +724,7 @@ jobs:
check-pkl-github-actions: check-pkl-github-actions:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- name: Setup Pkl - name: Setup Pkl
+53 -189
View File
@@ -17,28 +17,20 @@ jobs:
env: env:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
fetch-depth: 0 fetch-depth: 0
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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
@@ -58,28 +50,20 @@ jobs:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
JAVA_HOME: /jdk JAVA_HOME: /jdk
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
fetch-depth: 0 fetch-depth: 0
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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
@@ -98,54 +82,38 @@ jobs:
env: env:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
fetch-depth: 0 fetch-depth: 0
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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
@@ -164,31 +132,23 @@ jobs:
env: env:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
fetch-depth: 0 fetch-depth: 0
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
with: {} with: {}
- name: Set DEBUG_ARGS env var - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
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@df4cb1c069e1874edd31b4311f1884172cec0e10 # 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:
@@ -215,27 +175,19 @@ jobs:
env: env:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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:
@@ -261,29 +213,21 @@ jobs:
steps: steps:
- name: Install deps - name: Install deps
run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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:
@@ -312,27 +256,19 @@ jobs:
env: env:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: aarch64 architecture: aarch64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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:
@@ -358,29 +294,21 @@ jobs:
steps: steps:
- name: Install deps - name: Install deps
run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: aarch64 architecture: aarch64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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:
@@ -406,24 +334,16 @@ jobs:
env: env:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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:
@@ -524,27 +444,19 @@ jobs:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
JAVA_HOME: /jdk JAVA_HOME: /jdk
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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:
@@ -571,27 +483,19 @@ jobs:
env: env:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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:
@@ -617,29 +521,21 @@ jobs:
steps: steps:
- name: Install deps - name: Install deps
run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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:
@@ -668,27 +564,19 @@ jobs:
env: env:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: aarch64 architecture: aarch64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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:
@@ -714,29 +602,21 @@ jobs:
steps: steps:
- name: Install deps - name: Install deps
run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: aarch64 architecture: aarch64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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:
@@ -762,24 +642,16 @@ jobs:
env: env:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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:
@@ -880,27 +752,19 @@ jobs:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
JAVA_HOME: /jdk JAVA_HOME: /jdk
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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:
@@ -947,7 +811,7 @@ jobs:
pattern: test-results-xml-* pattern: test-results-xml-*
- name: Publish test results - name: Publish test results
if: '!cancelled()' if: '!cancelled()'
uses: EnricoMi/publish-unit-test-result-action@d0a4676d0e0b938bc201470d88276b7c74c712b3 # v2 uses: EnricoMi/publish-unit-test-result-action@c950f6fb443cb5af20a377fd0dfaa78838901040 # v2
with: with:
comment_mode: 'off' comment_mode: 'off'
files: test-results-xml-*/**/*.xml files: test-results-xml-*/**/*.xml
+57 -201
View File
@@ -17,28 +17,20 @@ jobs:
env: env:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
fetch-depth: 0 fetch-depth: 0
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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
@@ -58,28 +50,20 @@ jobs:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
JAVA_HOME: /jdk JAVA_HOME: /jdk
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
fetch-depth: 0 fetch-depth: 0
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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
@@ -98,54 +82,38 @@ jobs:
env: env:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
fetch-depth: 0 fetch-depth: 0
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
architecture: x64 architecture: x64
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # 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
@@ -164,11 +132,11 @@ jobs:
env: env:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
fetch-depth: 0 fetch-depth: 0
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
@@ -176,20 +144,12 @@ jobs:
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
with: with:
cache-disabled: true cache-disabled: true
- name: Set DEBUG_ARGS env var - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
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@df4cb1c069e1874edd31b4311f1884172cec0e10 # 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:
@@ -216,10 +176,10 @@ jobs:
env: env:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
@@ -227,17 +187,9 @@ jobs:
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
with: with:
cache-disabled: true 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:
@@ -263,10 +215,10 @@ jobs:
steps: steps:
- name: Install deps - name: Install deps
run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
@@ -274,19 +226,11 @@ jobs:
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
with: with:
cache-disabled: true 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:
@@ -315,10 +259,10 @@ jobs:
env: env:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
@@ -326,17 +270,9 @@ jobs:
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
with: with:
cache-disabled: true 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:
@@ -362,10 +298,10 @@ jobs:
steps: steps:
- name: Install deps - name: Install deps
run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
@@ -373,19 +309,11 @@ jobs:
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
with: with:
cache-disabled: true 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:
@@ -411,10 +339,10 @@ jobs:
env: env:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
@@ -422,14 +350,6 @@ jobs:
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
with: with:
cache-disabled: true 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 +425,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:
@@ -530,10 +450,10 @@ jobs:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
JAVA_HOME: /jdk JAVA_HOME: /jdk
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
@@ -541,17 +461,9 @@ jobs:
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
with: with:
cache-disabled: true 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:
@@ -578,10 +490,10 @@ jobs:
env: env:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
@@ -589,17 +501,9 @@ jobs:
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
with: with:
cache-disabled: true 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:
@@ -625,10 +529,10 @@ jobs:
steps: steps:
- name: Install deps - name: Install deps
run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
@@ -636,19 +540,11 @@ jobs:
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
with: with:
cache-disabled: true 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:
@@ -677,10 +573,10 @@ jobs:
env: env:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
@@ -688,17 +584,9 @@ jobs:
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
with: with:
cache-disabled: true 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:
@@ -724,10 +612,10 @@ jobs:
steps: steps:
- name: Install deps - name: Install deps
run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en run: dnf install -y git binutils gcc glibc-devel zlib-devel libstdc++-static glibc-langpack-en
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
@@ -735,19 +623,11 @@ jobs:
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
with: with:
cache-disabled: true 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:
@@ -773,10 +653,10 @@ jobs:
env: env:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
@@ -784,14 +664,6 @@ jobs:
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
with: with:
cache-disabled: true 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 +739,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:
@@ -892,10 +764,10 @@ jobs:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
JAVA_HOME: /jdk JAVA_HOME: /jdk
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
@@ -903,17 +775,9 @@ jobs:
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
with: with:
cache-disabled: true 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:
@@ -956,10 +820,10 @@ jobs:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
environment: maven-release environment: maven-release
steps: steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5 - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with: with:
java-version: '25' java-version: '25'
distribution: temurin distribution: temurin
@@ -967,15 +831,7 @@ jobs:
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5 - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
with: with:
cache-disabled: true cache-disabled: true
- name: Set DEBUG_ARGS env var - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
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@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6 - uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
@@ -988,7 +844,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:
@@ -1043,7 +899,7 @@ jobs:
pattern: test-results-xml-* pattern: test-results-xml-*
- name: Publish test results - name: Publish test results
if: '!cancelled()' if: '!cancelled()'
uses: EnricoMi/publish-unit-test-result-action@d0a4676d0e0b938bc201470d88276b7c74c712b3 # v2 uses: EnricoMi/publish-unit-test-result-action@c950f6fb443cb5af20a377fd0dfaa78838901040 # v2
with: with:
comment_mode: 'off' comment_mode: 'off'
files: test-results-xml-*/**/*.xml files: test-results-xml-*/**/*.xml
+1 -1
View File
@@ -25,7 +25,7 @@ jobs:
name_is_regexp: true name_is_regexp: true
run_id: ${{ github.event.workflow_run.id }} run_id: ${{ github.event.workflow_run.id }}
- name: Publish test results - name: Publish test results
uses: EnricoMi/publish-unit-test-result-action@d0a4676d0e0b938bc201470d88276b7c74c712b3 # v2 uses: EnricoMi/publish-unit-test-result-action@c950f6fb443cb5af20a377fd0dfaa78838901040 # v2
with: with:
commit: ${{ github.event.workflow_run.head_sha }} commit: ${{ github.event.workflow_run.head_sha }}
comment_mode: 'off' comment_mode: 'off'
+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" />
+1 -9
View File
@@ -27,19 +27,12 @@
<option name="searchContext" value="ANY" /> <option name="searchContext" value="ANY" />
<option name="replacement" value="evaluatorSettings" /> <option name="replacement" value="evaluatorSettings" />
</InspectionPattern> </InspectionPattern>
<InspectionPattern>
<option name="regExp" value="project\?\.resolvedEvaluatorSettings" />
<option name="_fileType" value="Kotlin" />
<option name="searchContext" value="ANY" />
<option name="replacement" value="evaluatorSettings" />
</InspectionPattern>
</list> </list>
</option> </option>
</RegExpInspectionConfiguration> </RegExpInspectionConfiguration>
</list> </list>
</option> </option>
</inspection_tool> </inspection_tool>
<inspection_tool class="FieldAccessNotGuarded" enabled="true" level="WARNING" enabled_by_default="true" />
<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>
@@ -101,7 +94,6 @@
<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="StringToUpperWithoutLocale" enabled="true" level="WARNING" enabled_by_default="true" editorAttributes="WARNING_ATTRIBUTES" />
<inspection_tool class="dd497f47-d38f-3fab-9ed7-eabe699620c8" enabled="true" level="ERROR" enabled_by_default="true" editorAttributes="ERRORS_ATTRIBUTES" /> <inspection_tool class="dd497f47-d38f-3fab-9ed7-eabe699620c8" enabled="true" level="ERROR" enabled_by_default="true" editorAttributes="ERRORS_ATTRIBUTES" />
</profile> </profile>
</component> </component>
+2 -2
View File
@@ -19,8 +19,8 @@ plugins {
id("me.champeau.jmh") id("me.champeau.jmh")
} }
val truffle: Configuration = configurations.create("truffle") val truffle: Configuration by configurations.creating
val graal: Configuration = configurations.create("graal") val graal: Configuration by configurations.creating
dependencies { dependencies {
jmh(projects.pklCore) jmh(projects.pklCore)
@@ -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")
}
}
}
+19 -78
View File
@@ -13,13 +13,10 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
import java.nio.file.AtomicMoveNotSupportedException
import java.nio.file.Files import java.nio.file.Files
import java.nio.file.Path
import java.nio.file.Paths import java.nio.file.Paths
import java.nio.file.StandardCopyOption import java.nio.file.StandardCopyOption
import java.util.* import java.util.*
import java.util.zip.ZipInputStream
import javax.inject.Inject import javax.inject.Inject
import kotlin.io.path.createDirectories import kotlin.io.path.createDirectories
import org.gradle.api.DefaultTask import org.gradle.api.DefaultTask
@@ -44,14 +41,19 @@ constructor(
@TaskAction @TaskAction
@Suppress("unused") @Suppress("unused")
fun run() { fun run() {
// minimize chance of corruption by extract-to-random-dir-and-publish // minimize chance of corruption by extract-to-random-dir-and-flip-symlink
val distroDir = Paths.get(graalVm.get().homeDir, UUID.randomUUID().toString()) val distroDir = Paths.get(graalVm.get().homeDir, UUID.randomUUID().toString())
try { try {
distroDir.createDirectories() distroDir.createDirectories()
println("Extracting ${graalVm.get().downloadFile} into $distroDir") println("Extracting ${graalVm.get().downloadFile} into $distroDir")
val os = org.gradle.internal.os.OperatingSystem.current() // faster and more reliable than Gradle's `copy { from tarTree() }`
if (os.isWindows) extractZip(distroDir) else extractTarGz(distroDir) execOperations.exec {
workingDir = distroDir.toFile()
executable = "tar"
args("--strip-components=1", "-xzf", graalVm.get().downloadFile)
}
val os = org.gradle.internal.os.OperatingSystem.current()
val distroBinDir = val distroBinDir =
if (os.isMacOsX) distroDir.resolve("Contents/Home/bin") else distroDir.resolve("bin") if (os.isMacOsX) distroDir.resolve("Contents/Home/bin") else distroDir.resolve("bin")
@@ -68,7 +70,17 @@ constructor(
} }
} }
publishInstallDir(distroDir, os) println("Creating symlink ${graalVm.get().installDir} for $distroDir")
val tempLink = Paths.get(graalVm.get().homeDir, UUID.randomUUID().toString())
Files.createSymbolicLink(tempLink, distroDir)
try {
Files.move(tempLink, graalVm.get().installDir.toPath(), StandardCopyOption.ATOMIC_MOVE)
} catch (e: Exception) {
try {
fileOperations.delete(tempLink.toFile())
} catch (ignored: Exception) {}
throw e
}
} catch (e: Exception) { } catch (e: Exception) {
try { try {
fileOperations.delete(distroDir) fileOperations.delete(distroDir)
@@ -76,75 +88,4 @@ constructor(
throw e throw e
} }
} }
private fun extractTarGz(distroDir: Path) {
// faster and more reliable than Gradle's `copy { from tarTree() }`
execOperations.exec {
workingDir = distroDir.toFile()
executable = "tar"
args("--strip-components=1", "-xzf", graalVm.get().downloadFile)
}
}
private fun extractZip(distroDir: Path) {
val targetDir = distroDir.toAbsolutePath().normalize()
ZipInputStream(graalVm.get().downloadFile.inputStream().buffered()).use { zipInput ->
var entry = zipInput.nextEntry
while (entry != null) {
try {
val strippedPath = stripFirstPathComponent(entry.name)
if (strippedPath != null) {
val target = targetDir.resolve(strippedPath).normalize()
require(target.startsWith(targetDir)) {
"GraalVM archive entry escapes destination directory: ${entry.name}"
}
if (entry.isDirectory) {
target.createDirectories()
} else {
target.parent?.createDirectories()
Files.copy(zipInput, target)
}
}
} finally {
zipInput.closeEntry()
}
entry = zipInput.nextEntry
}
}
}
private fun stripFirstPathComponent(path: String): String? {
val normalizedPath = path.replace('\\', '/').trimStart('/')
val separatorIndex = normalizedPath.indexOf('/')
if (separatorIndex == -1) return null
return normalizedPath.substring(separatorIndex + 1).takeIf { it.isNotEmpty() }
}
private fun publishInstallDir(distroDir: Path, os: org.gradle.internal.os.OperatingSystem) {
if (os.isWindows) {
println("Installing ${graalVm.get().installDir} from $distroDir")
moveAtomicallyOrRegularly(distroDir, graalVm.get().installDir.toPath())
return
}
println("Creating symlink ${graalVm.get().installDir} for $distroDir")
val tempLink = Paths.get(graalVm.get().homeDir, UUID.randomUUID().toString())
Files.createSymbolicLink(tempLink, distroDir)
try {
moveAtomicallyOrRegularly(tempLink, graalVm.get().installDir.toPath())
} catch (e: Exception) {
try {
fileOperations.delete(tempLink.toFile())
} catch (ignored: Exception) {}
throw e
}
}
private fun moveAtomicallyOrRegularly(source: Path, target: Path) {
try {
Files.move(source, target, StandardCopyOption.ATOMIC_MOVE)
} catch (e: AtomicMoveNotSupportedException) {
Files.move(source, target)
}
}
} }
+36 -38
View File
@@ -63,60 +63,58 @@ 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 = val validatePom by tasks.registering {
tasks.register("validatePom") { if (tasks.findByName("generatePomFileForLibraryPublication") == null) {
if (tasks.findByName("generatePomFileForLibraryPublication") == null) { return@registering
return@register }
} val generatePomFileForLibraryPublication by tasks.existing(GenerateMavenPom::class)
val generatePomFileForLibraryPublication = val outputFile =
tasks.named<GenerateMavenPom>("generatePomFileForLibraryPublication") 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) }
} }
@@ -79,7 +79,7 @@ plugins.withType(MavenPublishPlugin::class).configureEach {
} }
} }
val allDependencies = tasks.register<DependencyReportTask>("allDependencies") val allDependencies by tasks.registering(DependencyReportTask::class)
tasks.withType(Test::class).configureEach { tasks.withType(Test::class).configureEach {
System.getProperty("testReportsDir")?.let { reportsDir -> System.getProperty("testReportsDir")?.let { reportsDir ->
@@ -132,8 +132,8 @@ tasks.shadowJar {
shadow { addShadowVariantIntoJavaComponent = false } shadow { addShadowVariantIntoJavaComponent = false }
val testFatJar = val testFatJar by
tasks.register<Test>("testFatJar") { tasks.registering(Test::class) {
testClassesDirs = files(tasks.test.get().testClassesDirs) testClassesDirs = files(tasks.test.get().testClassesDirs)
classpath = classpath =
// compiled test classes // compiled test classes
@@ -148,48 +148,47 @@ val testFatJar =
tasks.check { dependsOn(testFatJar) } tasks.check { dependsOn(testFatJar) }
val validateFatJar = val validateFatJar by tasks.registering {
tasks.register("validateFatJar") { val outputFile = layout.buildDirectory.file("validateFatJar/result.txt")
val outputFile = layout.buildDirectory.file("validateFatJar/result.txt") inputs.files(tasks.shadowJar)
inputs.files(tasks.shadowJar) inputs.property("nonRelocations", nonRelocations)
inputs.property("nonRelocations", nonRelocations) outputs.file(outputFile)
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) }
val resolveSourcesJars = val resolveSourcesJars by
tasks.register<ResolveSourcesJars>("resolveSourcesJars") { tasks.registering(ResolveSourcesJars::class) {
configuration.set(configurations.runtimeClasspath) configuration.set(configurations.runtimeClasspath)
outputDir.set(layout.buildDirectory.dir("resolveSourcesJars")) outputDir.set(layout.buildDirectory.dir("resolveSourcesJars"))
} }
val fatSourcesJar = val fatSourcesJar by
tasks.register<MergeSourcesJars>("fatSourcesJar") { tasks.registering(MergeSourcesJars::class) {
plugins.withId("pklJavaLibrary") { inputJars.from(tasks.named("sourcesJar")) } plugins.withId("pklJavaLibrary") { inputJars.from(tasks.named("sourcesJar")) }
inputJars.from(firstPartySourcesJarsConfiguration) inputJars.from(firstPartySourcesJarsConfiguration)
inputJars.from(resolveSourcesJars.map { fileTree(it.outputDir) }) inputJars.from(resolveSourcesJars.map { fileTree(it.outputDir) })
@@ -214,7 +213,7 @@ publishing {
artifact(fatSourcesJar.flatMap { it.outputJar.asFile }) { classifier = "sources" } artifact(fatSourcesJar.flatMap { it.outputJar.asFile }) { classifier = "sources" }
plugins.withId("pklJavaLibrary") { plugins.withId("pklJavaLibrary") {
val javadocJar = tasks.named<Jar>("javadocJar") val javadocJar by tasks.existing(Jar::class)
// Javadoc Jar is not fat (didn't invest effort) // Javadoc Jar is not fat (didn't invest effort)
artifact(javadocJar.flatMap { it.archiveFile }) { classifier = "javadoc" } artifact(javadocJar.flatMap { it.archiveFile }) { classifier = "javadoc" }
} }
@@ -21,15 +21,11 @@ plugins { id("de.undercouch.download") }
val buildInfo = project.extensions.getByType<BuildInfo>() val buildInfo = project.extensions.getByType<BuildInfo>()
// tries to minimize chance of corruption by download-to-temp-file-and-move // tries to minimize chance of corruption by download-to-temp-file-and-move
val downloadGraalVmAarch64 = val downloadGraalVmAarch64 by
tasks.register<Download>("downloadGraalVmAarch64") { tasks.registering(Download::class) { configureDownloadGraalVm(buildInfo.graalVmAarch64) }
configureDownloadGraalVm(buildInfo.graalVmAarch64)
}
val downloadGraalVmAmd64 = val downloadGraalVmAmd64 by
tasks.register<Download>("downloadGraalVmAmd64") { tasks.registering(Download::class) { configureDownloadGraalVm(buildInfo.graalVmAmd64) }
configureDownloadGraalVm(buildInfo.graalVmAmd64)
}
fun Download.configureDownloadGraalVm(graalvm: BuildInfo.GraalVm) { fun Download.configureDownloadGraalVm(graalvm: BuildInfo.GraalVm) {
onlyIf { !graalvm.installDir.exists() } onlyIf { !graalvm.installDir.exists() }
@@ -41,14 +37,14 @@ fun Download.configureDownloadGraalVm(graalvm: BuildInfo.GraalVm) {
tempAndMove(true) tempAndMove(true)
} }
val verifyGraalVmAarch64 = val verifyGraalVmAarch64 by
tasks.register<Verify>("verifyGraalVmAarch64") { tasks.registering(Verify::class) {
configureVerifyGraalVm(buildInfo.graalVmAarch64) configureVerifyGraalVm(buildInfo.graalVmAarch64)
dependsOn(downloadGraalVmAarch64) dependsOn(downloadGraalVmAarch64)
} }
val verifyGraalVmAmd64 = val verifyGraalVmAmd64 by
tasks.register<Verify>("verifyGraalVmAmd64") { tasks.registering(Verify::class) {
configureVerifyGraalVm(buildInfo.graalVmAmd64) configureVerifyGraalVm(buildInfo.graalVmAmd64)
dependsOn(downloadGraalVmAmd64) dependsOn(downloadGraalVmAmd64)
} }
@@ -64,15 +60,15 @@ fun Verify.configureVerifyGraalVm(graalvm: BuildInfo.GraalVm) {
} }
@Suppress("unused") @Suppress("unused")
val installGraalVmAarch64 = val installGraalVmAarch64 by
tasks.register<InstallGraalVm>("installGraalVmAarch64") { tasks.registering(InstallGraalVm::class) {
dependsOn(verifyGraalVmAarch64) dependsOn(verifyGraalVmAarch64)
graalVm = buildInfo.graalVmAarch64 graalVm = buildInfo.graalVmAarch64
} }
@Suppress("unused") @Suppress("unused")
val installGraalVmAmd64 = val installGraalVmAmd64 by
tasks.register<InstallGraalVm>("installGraalVmAmd64") { tasks.registering(InstallGraalVm::class) {
dependsOn(verifyGraalVmAmd64) dependsOn(verifyGraalVmAmd64)
graalVm = buildInfo.graalVmAmd64 graalVm = buildInfo.graalVmAmd64
} }
@@ -47,8 +47,8 @@ dependencies {
} }
} }
val validateHtml = val validateHtml by
tasks.register<JavaExec>("validateHtml") { tasks.registering(JavaExec::class) {
val resultFile = layout.buildDirectory.file("validateHtml/result.txt") val resultFile = layout.buildDirectory.file("validateHtml/result.txt")
inputs.files(htmlValidator.sources) inputs.files(htmlValidator.sources)
outputs.file(resultFile) outputs.file(resultFile)
@@ -13,7 +13,6 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
import net.ltgt.gradle.errorprone.CheckSeverity
import net.ltgt.gradle.errorprone.errorprone import net.ltgt.gradle.errorprone.errorprone
import net.ltgt.gradle.nullaway.nullaway import net.ltgt.gradle.nullaway.nullaway
import org.gradle.accessors.dm.LibrariesForLibs import org.gradle.accessors.dm.LibrariesForLibs
@@ -37,8 +36,6 @@ nullaway { onlyNullMarked = true }
tasks.withType<JavaCompile>().configureEach { tasks.withType<JavaCompile>().configureEach {
options.errorprone.disableAllChecks = true options.errorprone.disableAllChecks = true
options.errorprone.check("StringCaseLocaleUsage", CheckSeverity.ERROR)
options.errorprone.check("GuardedBy", CheckSeverity.ERROR)
options.errorprone.nullaway { options.errorprone.nullaway {
error() error()
onlyNullMarked = true onlyNullMarked = true
@@ -26,8 +26,8 @@ plugins {
val executableSpec = project.extensions.create("executable", ExecutableSpec::class.java) val executableSpec = project.extensions.create("executable", ExecutableSpec::class.java)
val buildInfo = project.extensions.getByType<BuildInfo>() val buildInfo = project.extensions.getByType<BuildInfo>()
val javaExecutable = val javaExecutable by
tasks.register<ExecutableJar>("javaExecutable") { tasks.registering(ExecutableJar::class) {
group = "build" group = "build"
dependsOn(tasks.jar) dependsOn(tasks.jar)
inJar = tasks.shadowJar.flatMap { it.archiveFile } inJar = tasks.shadowJar.flatMap { it.archiveFile }
@@ -77,8 +77,7 @@ fun Task.setupTestStartJavaExecutable(launcher: Provider<JavaLauncher>? = null)
} }
} }
val testStartJavaExecutable = val testStartJavaExecutable by tasks.registering { setupTestStartJavaExecutable() }
tasks.register("testStartJavaExecutable") { setupTestStartJavaExecutable() }
// Setup `testStartJavaExecutable` tasks for multi-JDK testing. // Setup `testStartJavaExecutable` tasks for multi-JDK testing.
val testStartJavaExecutableOnOtherJdks = val testStartJavaExecutableOnOtherJdks =
@@ -44,6 +44,7 @@ kotlin {
freeCompilerArgs.addAll( freeCompilerArgs.addAll(
"-jvm-default=no-compatibility", // was: -Xjvm-default=all "-jvm-default=no-compatibility", // was: -Xjvm-default=all
"-Xjdk-release=${buildInfo.jvmTarget}", "-Xjdk-release=${buildInfo.jvmTarget}",
"-Xjsr305=strict",
) )
} }
} }
@@ -30,26 +30,22 @@ plugins {
val executableSpec = project.extensions.getByType<ExecutableSpec>() val executableSpec = project.extensions.getByType<ExecutableSpec>()
val buildInfo = project.extensions.getByType<BuildInfo>() val buildInfo = project.extensions.getByType<BuildInfo>()
val stagedMacAmd64Executable: Configuration = configurations.create("stagedMacAmd64Executable") val stagedMacAmd64Executable: Configuration by configurations.creating
val stagedMacAarch64Executable: Configuration = configurations.create("stagedMacAarch64Executable") val stagedMacAarch64Executable: Configuration by configurations.creating
val stagedLinuxAmd64Executable: Configuration = configurations.create("stagedLinuxAmd64Executable") val stagedLinuxAmd64Executable: Configuration by configurations.creating
val stagedLinuxAarch64Executable: Configuration = val stagedLinuxAarch64Executable: Configuration by configurations.creating
configurations.create("stagedLinuxAarch64Executable") val stagedAlpineLinuxAmd64Executable: Configuration by configurations.creating
val stagedAlpineLinuxAmd64Executable: Configuration = val stagedWindowsAmd64Executable: Configuration by configurations.creating
configurations.create("stagedAlpineLinuxAmd64Executable")
val stagedWindowsAmd64Executable: Configuration =
configurations.create("stagedWindowsAmd64Executable")
val nativeImageClasspath = val nativeImageClasspath by configurations.creating {
configurations.create("nativeImageClasspath") { extendsFrom(configurations.runtimeClasspath.get())
extendsFrom(configurations.runtimeClasspath.get()) // Ensure native-image version uses GraalVM C SDKs instead of Java FFI or JNA
// Ensure native-image version uses GraalVM C SDKs instead of Java FFI or JNA // (comes from artifact `mordant-jvm-graal-ffi`).
// (comes from artifact `mordant-jvm-graal-ffi`). exclude("com.github.ajalt.mordant", "mordant-jvm-ffm")
exclude("com.github.ajalt.mordant", "mordant-jvm-ffm") exclude("com.github.ajalt.mordant", "mordant-jvm-ffm-jvm")
exclude("com.github.ajalt.mordant", "mordant-jvm-ffm-jvm") exclude("com.github.ajalt.mordant", "mordant-jvm-jna")
exclude("com.github.ajalt.mordant", "mordant-jvm-jna") exclude("com.github.ajalt.mordant", "mordant-jvm-jna-jvm")
exclude("com.github.ajalt.mordant", "mordant-jvm-jna-jvm") }
}
val libs = the<LibrariesForLibs>() val libs = the<LibrariesForLibs>()
@@ -89,32 +85,32 @@ private fun NativeImageBuild.setClasspath() {
classpath.from(nativeImageClasspath) classpath.from(nativeImageClasspath)
} }
val macExecutableAmd64 = val macExecutableAmd64 by
tasks.register<NativeImageBuild>("macExecutableAmd64") { tasks.registering(NativeImageBuild::class) {
imageName = executableSpec.name.map { "$it-macos-amd64" } imageName = executableSpec.name.map { "$it-macos-amd64" }
mainClass = executableSpec.mainClass mainClass = executableSpec.mainClass
amd64() amd64()
setClasspath() setClasspath()
} }
val macExecutableAarch64 = val macExecutableAarch64 by
tasks.register<NativeImageBuild>("macExecutableAarch64") { tasks.registering(NativeImageBuild::class) {
imageName = executableSpec.name.map { "$it-macos-aarch64" } imageName = executableSpec.name.map { "$it-macos-aarch64" }
mainClass = executableSpec.mainClass mainClass = executableSpec.mainClass
aarch64() aarch64()
setClasspath() setClasspath()
} }
val linuxExecutableAmd64 = val linuxExecutableAmd64 by
tasks.register<NativeImageBuild>("linuxExecutableAmd64") { tasks.registering(NativeImageBuild::class) {
imageName = executableSpec.name.map { "$it-linux-amd64" } imageName = executableSpec.name.map { "$it-linux-amd64" }
mainClass = executableSpec.mainClass mainClass = executableSpec.mainClass
amd64() amd64()
setClasspath() setClasspath()
} }
val linuxExecutableAarch64 = val linuxExecutableAarch64 by
tasks.register<NativeImageBuild>("linuxExecutableAarch64") { tasks.registering(NativeImageBuild::class) {
imageName = executableSpec.name.map { "$it-linux-aarch64" } imageName = executableSpec.name.map { "$it-linux-aarch64" }
mainClass = executableSpec.mainClass mainClass = executableSpec.mainClass
aarch64() aarch64()
@@ -124,8 +120,8 @@ val linuxExecutableAarch64 =
extraNativeImageArgs.add("-H:PageSize=65536") extraNativeImageArgs.add("-H:PageSize=65536")
} }
val alpineExecutableAmd64 = val alpineExecutableAmd64 by
tasks.register<NativeImageBuild>("alpineExecutableAmd64") { tasks.registering(NativeImageBuild::class) {
imageName = executableSpec.name.map { "$it-alpine-linux-amd64" } imageName = executableSpec.name.map { "$it-alpine-linux-amd64" }
mainClass = executableSpec.mainClass mainClass = executableSpec.mainClass
amd64() amd64()
@@ -133,75 +129,73 @@ val alpineExecutableAmd64 =
extraNativeImageArgs.addAll(listOf("--static", "--libc=musl")) extraNativeImageArgs.addAll(listOf("--static", "--libc=musl"))
} }
val windowsExecutableAmd64 = val windowsExecutableAmd64 by
tasks.register<NativeImageBuild>("windowsExecutableAmd64") { tasks.registering(NativeImageBuild::class) {
imageName = executableSpec.name.map { "$it-windows-amd64" } imageName = executableSpec.name.map { "$it-windows-amd64" }
mainClass = executableSpec.mainClass mainClass = executableSpec.mainClass
amd64() amd64()
setClasspath() setClasspath()
} }
val assembleNative = tasks.named("assembleNative") val assembleNative by tasks.existing
val testStartNativeExecutable = val testStartNativeExecutable by tasks.registering {
tasks.register("testStartNativeExecutable") { dependsOn(assembleNative)
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 = providers.exec {
commandLine(assembleNative.get().outputs.files.singleFile, "--version") commandLine(assembleNative.get().outputs.files.singleFile, "--version")
}
doLast {
val outputText = execOutput.standardOutput.asText.get()
if (!outputText.contains(buildInfo.pklVersionNonUnique)) {
throw GradleException(
"Expected version output to contain current version (${buildInfo.pklVersionNonUnique}), but got '$outputText'"
)
} }
outputFile.get().asFile.toPath().apply {
doLast { try {
val outputText = execOutput.standardOutput.asText.get() parent.createDirectories()
if (!outputText.contains(buildInfo.pklVersionNonUnique)) { } catch (_: java.nio.file.FileAlreadyExistsException) {}
throw GradleException( writeText("OK")
"Expected version output to contain current version (${buildInfo.pklVersionNonUnique}), but got '$outputText'"
)
}
outputFile.get().asFile.toPath().apply {
try {
parent.createDirectories()
} catch (_: java.nio.file.FileAlreadyExistsException) {}
writeText("OK")
}
} }
} }
}
val requiredGlibcVersion: Version = Version.parse("2.17") val requiredGlibcVersion: Version = Version.parse("2.17")
val checkGlibc = val checkGlibc by tasks.registering {
tasks.register("checkGlibc") { enabled = buildInfo.os.isLinux && !buildInfo.musl
enabled = buildInfo.os.isLinux && !buildInfo.musl dependsOn(assembleNative)
dependsOn(assembleNative) doLast {
doLast { val exec = providers.exec {
val exec = providers.exec { commandLine("objdump", "-T", assembleNative.get().outputs.files.singleFile)
commandLine("objdump", "-T", assembleNative.get().outputs.files.singleFile) }
} val output = exec.standardOutput.asText.get()
val output = exec.standardOutput.asText.get() val minimumGlibcVersion =
val minimumGlibcVersion = output
output .split("\n")
.split("\n") .mapNotNull { line ->
.mapNotNull { line -> val match = Regex("GLIBC_([.0-9]*)").find(line)
val match = Regex("GLIBC_([.0-9]*)").find(line) match?.groups[1]?.let { Version.parse(it.value) }
match?.groups[1]?.let { Version.parse(it.value) } }
} .maxOrNull()
.maxOrNull() if (minimumGlibcVersion == null) {
if (minimumGlibcVersion == null) { throw GradleException(
throw GradleException( "Could not determine glibc version from executable. objdump output: $output"
"Could not determine glibc version from executable. objdump output: $output" )
) }
} if (minimumGlibcVersion > requiredGlibcVersion) {
if (minimumGlibcVersion > requiredGlibcVersion) { throw GradleException(
throw GradleException( "Incorrect glibc version. Found: $minimumGlibcVersion, required: $requiredGlibcVersion"
"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>) {
@@ -209,24 +203,19 @@ private fun <T : Task> Task.wraps(other: TaskProvider<T>) {
outputs.files(other) outputs.files(other)
} }
val testNative = tasks.named("testNative") { dependsOn(testStartNativeExecutable, checkGlibc) } val testNative by tasks.existing { dependsOn(testStartNativeExecutable, checkGlibc) }
val assembleNativeMacOsAarch64 = val assembleNativeMacOsAarch64 by tasks.existing { wraps(macExecutableAarch64) }
tasks.named("assembleNativeMacOsAarch64") { wraps(macExecutableAarch64) }
val assembleNativeMacOsAmd64 = tasks.named("assembleNativeMacOsAmd64") { wraps(macExecutableAmd64) } val assembleNativeMacOsAmd64 by tasks.existing { wraps(macExecutableAmd64) }
val assembleNativeLinuxAarch64 = val assembleNativeLinuxAarch64 by tasks.existing { wraps(linuxExecutableAarch64) }
tasks.named("assembleNativeLinuxAarch64") { wraps(linuxExecutableAarch64) }
val assembleNativeLinuxAmd64 = val assembleNativeLinuxAmd64 by tasks.existing { wraps(linuxExecutableAmd64) }
tasks.named("assembleNativeLinuxAmd64") { wraps(linuxExecutableAmd64) }
val assembleNativeAlpineLinuxAmd64 = val assembleNativeAlpineLinuxAmd64 by tasks.existing { wraps(alpineExecutableAmd64) }
tasks.named("assembleNativeAlpineLinuxAmd64") { wraps(alpineExecutableAmd64) }
val assembleNativeWindowsAmd64 = val assembleNativeWindowsAmd64 by tasks.existing { wraps(windowsExecutableAmd64) }
tasks.named("assembleNativeWindowsAmd64") { wraps(windowsExecutableAmd64) }
publishing { publishing {
publications { publications {
@@ -13,31 +13,29 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
val assembleNativeMacOsAarch64 = tasks.register("assembleNativeMacOsAarch64") { group = "build" } val assembleNativeMacOsAarch64 by tasks.registering { group = "build" }
val assembleNativeMacOsAmd64 = tasks.register("assembleNativeMacOsAmd64") { group = "build" } val assembleNativeMacOsAmd64 by tasks.registering { group = "build" }
val assembleNativeLinuxAarch64 = tasks.register("assembleNativeLinuxAarch64") { group = "build" } val assembleNativeLinuxAarch64 by tasks.registering { group = "build" }
val assembleNativeLinuxAmd64 = tasks.register("assembleNativeLinuxAmd64") { group = "build" } val assembleNativeLinuxAmd64 by tasks.registering { group = "build" }
val assembleNativeAlpineLinuxAmd64 = val assembleNativeAlpineLinuxAmd64 by tasks.registering { group = "build" }
tasks.register("assembleNativeAlpineLinuxAmd64") { group = "build" }
val assembleNativeWindowsAmd64 = tasks.register("assembleNativeWindowsAmd64") { group = "build" } val assembleNativeWindowsAmd64 by tasks.registering { group = "build" }
val testNativeMacOsAarch64 = tasks.register("testNativeMacOsAarch64") { group = "verification" } val testNativeMacOsAarch64 by tasks.registering { group = "verification" }
val testNativeMacOsAmd64 = tasks.register("testNativeMacOsAmd64") { group = "verification" } val testNativeMacOsAmd64 by tasks.registering { group = "verification" }
val testNativeLinuxAarch64 = tasks.register("testNativeLinuxAarch64") { group = "verification" } val testNativeLinuxAarch64 by tasks.registering { group = "verification" }
val testNativeLinuxAmd64 = tasks.register("testNativeLinuxAmd64") { group = "verification" } val testNativeLinuxAmd64 by tasks.registering { group = "verification" }
val testNativeAlpineLinuxAmd64 = val testNativeAlpineLinuxAmd64 by tasks.registering { group = "verification" }
tasks.register("testNativeAlpineLinuxAmd64") { group = "verification" }
val testNativeWindowsAmd64 = tasks.register("testNativeWindowsAmd64") { group = "verification" } val testNativeWindowsAmd64 by tasks.registering { group = "verification" }
val buildInfo = project.extensions.getByType<BuildInfo>() val buildInfo = project.extensions.getByType<BuildInfo>()
@@ -46,85 +44,79 @@ private fun <T : Task> Task.wraps(other: TaskProvider<T>) {
outputs.files(other) outputs.files(other)
} }
val assembleNative = val assembleNative by tasks.registering {
tasks.register("assembleNative") { group = "build"
group = "build"
if (!buildInfo.isCrossArchSupported && buildInfo.isCrossArch) { if (!buildInfo.isCrossArchSupported && buildInfo.isCrossArch) {
throw GradleException("Cross-arch builds are not supported on ${buildInfo.os.name}") 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" -> {
when { wraps(assembleNativeMacOsAmd64)
buildInfo.os.isMacOsX && buildInfo.targetArch == "aarch64" -> { }
wraps(assembleNativeMacOsAarch64) buildInfo.os.isLinux && buildInfo.targetArch == "aarch64" -> {
} wraps(assembleNativeLinuxAarch64)
buildInfo.os.isMacOsX && buildInfo.targetArch == "amd64" -> { }
wraps(assembleNativeMacOsAmd64) buildInfo.os.isLinux && buildInfo.targetArch == "amd64" -> {
} if (buildInfo.musl) wraps(assembleNativeAlpineLinuxAmd64) else wraps(assembleNativeLinuxAmd64)
buildInfo.os.isLinux && buildInfo.targetArch == "aarch64" -> { }
wraps(assembleNativeLinuxAarch64) buildInfo.os.isWindows && buildInfo.targetArch == "amd64" -> {
} wraps(assembleNativeWindowsAmd64)
buildInfo.os.isLinux && buildInfo.targetArch == "amd64" -> { }
if (buildInfo.musl) wraps(assembleNativeAlpineLinuxAmd64) else -> {
else wraps(assembleNativeLinuxAmd64) doLast {
} throw GradleException(
buildInfo.os.isWindows && buildInfo.targetArch == "amd64" -> { "Cannot build targeting ${buildInfo.os.name}/${buildInfo.targetArch} with musl=${buildInfo.musl}"
wraps(assembleNativeWindowsAmd64) )
}
else -> {
doLast {
throw GradleException(
"Cannot build targeting ${buildInfo.os.name}/${buildInfo.targetArch} with musl=${buildInfo.musl}"
)
}
} }
} }
} }
}
val testNative = val testNative by tasks.registering {
tasks.register("testNative") { group = "verification"
group = "verification" dependsOn(assembleNative)
dependsOn(assembleNative)
if (!buildInfo.isCrossArchSupported && buildInfo.isCrossArch) { if (!buildInfo.isCrossArchSupported && buildInfo.isCrossArch) {
throw GradleException("Cross-arch builds are not supported on ${buildInfo.os.name}") 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" -> {
when { dependsOn(testNativeMacOsAmd64)
buildInfo.os.isMacOsX && buildInfo.targetArch == "aarch64" -> { }
dependsOn(testNativeMacOsAarch64) buildInfo.os.isLinux && buildInfo.targetArch == "aarch64" -> {
} dependsOn(testNativeLinuxAarch64)
buildInfo.os.isMacOsX && buildInfo.targetArch == "amd64" -> { }
dependsOn(testNativeMacOsAmd64) buildInfo.os.isLinux && buildInfo.targetArch == "amd64" -> {
} if (buildInfo.musl) dependsOn(testNativeAlpineLinuxAmd64) else dependsOn(testNativeLinuxAmd64)
buildInfo.os.isLinux && buildInfo.targetArch == "aarch64" -> { }
dependsOn(testNativeLinuxAarch64) buildInfo.os.isWindows && buildInfo.targetArch == "amd64" -> {
} dependsOn(testNativeWindowsAmd64)
buildInfo.os.isLinux && buildInfo.targetArch == "amd64" -> { }
if (buildInfo.musl) dependsOn(testNativeAlpineLinuxAmd64) else -> {
else dependsOn(testNativeLinuxAmd64) doLast {
} throw GradleException(
buildInfo.os.isWindows && buildInfo.targetArch == "amd64" -> { "Cannot build targeting ${buildInfo.os.name}/${buildInfo.targetArch} with musl=${buildInfo.musl}"
dependsOn(testNativeWindowsAmd64) )
}
else -> {
doLast {
throw GradleException(
"Cannot build targeting ${buildInfo.os.name}/${buildInfo.targetArch} with musl=${buildInfo.musl}"
)
}
} }
} }
} }
}
val checkNative = val checkNative by tasks.registering {
tasks.register("checkNative") { group = "verification"
group = "verification" dependsOn(testNative)
dependsOn(testNative) }
}
val buildNative = val buildNative by tasks.registering {
tasks.register("buildNative") { group = "build"
group = "build" dependsOn(checkNative)
dependsOn(checkNative) }
}
@@ -15,7 +15,7 @@
*/ */
plugins { id("com.diffplug.spotless") } plugins { id("com.diffplug.spotless") }
val pklFormatter = configurations.create("pklFormatter") val pklFormatter by configurations.creating
dependencies { pklFormatter(rootProject.project("pkl-formatter")) } dependencies { pklFormatter(rootProject.project("pkl-formatter")) }
+2 -7
View File
@@ -17,7 +17,6 @@
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") id("pklAllProjects")
@@ -37,9 +36,6 @@ nexusPublishing {
} }
} }
val configureLateInitAnnotation =
tasks.register<ConfigureLateInitAnnotation>("configureLateInitAnnotation")
idea { idea {
project { project {
this as ExtensionAware this as ExtensionAware
@@ -49,14 +45,13 @@ idea {
delegateBuildRunToGradle = true delegateBuildRunToGradle = true
testRunner = PLATFORM testRunner = PLATFORM
} }
taskTriggers.afterSync(configureLateInitAnnotation)
} }
} }
} }
val clean = tasks.named("clean") { delete(layout.buildDirectory) } val clean by tasks.existing { delete(layout.buildDirectory) }
val printVersion = tasks.register("printVersion") { doFirst { println(buildInfo.pklVersion) } } val printVersion by tasks.registering { doFirst { println(buildInfo.pklVersion) } }
val message = val message =
""" """
+1 -1
View File
@@ -1,6 +1,6 @@
name: main name: main
title: Main Project title: Main Project
version: 0.33.0-dev version: 0.32.0-dev
prerelease: true prerelease: true
nav: nav:
- nav.adoc - nav.adoc
@@ -3,7 +3,7 @@
// the following attributes must be updated immediately before a release // the following attributes must be updated immediately before a release
// pkl version corresponding to current git commit without -dev suffix or git hash // pkl version corresponding to current git commit without -dev suffix or git hash
:pkl-version-no-suffix: 0.33.0 :pkl-version-no-suffix: 0.32.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:
@@ -69,7 +69,6 @@ endif::[]
:uri-stdlib-baseModule: {uri-pkl-stdlib-docs}/base :uri-stdlib-baseModule: {uri-pkl-stdlib-docs}/base
:uri-stdlib-CommandModule: {uri-pkl-stdlib-docs}/Command :uri-stdlib-CommandModule: {uri-pkl-stdlib-docs}/Command
:uri-stdlib-refModule: {uri-pkl-stdlib-docs}/ref
:uri-stdlib-analyzeModule: {uri-pkl-stdlib-docs}/analyze :uri-stdlib-analyzeModule: {uri-pkl-stdlib-docs}/analyze
:uri-stdlib-jsonnetModule: {uri-pkl-stdlib-docs}/jsonnet :uri-stdlib-jsonnetModule: {uri-pkl-stdlib-docs}/jsonnet
:uri-stdlib-reflectModule: {uri-pkl-stdlib-docs}/reflect :uri-stdlib-reflectModule: {uri-pkl-stdlib-docs}/reflect
@@ -79,10 +78,8 @@ endif::[]
:uri-stdlib-pklbinaryModule: {uri-pkl-stdlib-docs}/pklbinary :uri-stdlib-pklbinaryModule: {uri-pkl-stdlib-docs}/pklbinary
:uri-stdlib-yamlModule: {uri-pkl-stdlib-docs}/yaml :uri-stdlib-yamlModule: {uri-pkl-stdlib-docs}/yaml
:uri-stdlib-YamlParser: {uri-stdlib-yamlModule}/Parser :uri-stdlib-YamlParser: {uri-stdlib-yamlModule}/Parser
:uri-stdlib-projectModule: {uri-pkl-stdlib-docs}/Project
:uri-stdlib-evaluatorSettingsModule: {uri-pkl-stdlib-docs}/EvaluatorSettings :uri-stdlib-evaluatorSettingsModule: {uri-pkl-stdlib-docs}/EvaluatorSettings
:uri-stdlib-evaluatorSettingsHttpClass: {uri-stdlib-evaluatorSettingsModule}/Http :uri-stdlib-evaluatorSettingsHttpClass: {uri-stdlib-evaluatorSettingsModule}/Http
:uri-stdlib-evaluatorSettingsExternalReaderClass: {uri-stdlib-evaluatorSettingsModule}/ExternalReader
:uri-stdlib-Boolean: {uri-stdlib-baseModule}/Boolean :uri-stdlib-Boolean: {uri-stdlib-baseModule}/Boolean
:uri-stdlib-xor: {uri-stdlib-baseModule}/Boolean#xor() :uri-stdlib-xor: {uri-stdlib-baseModule}/Boolean#xor()
:uri-stdlib-implies: {uri-stdlib-baseModule}/Boolean#implies() :uri-stdlib-implies: {uri-stdlib-baseModule}/Boolean#implies()
@@ -161,8 +158,6 @@ endif::[]
:uri-stdlib-Command-CountedFlag: {uri-stdlib-CommandModule}/CountedFlag :uri-stdlib-Command-CountedFlag: {uri-stdlib-CommandModule}/CountedFlag
:uri-stdlib-Command-Argument: {uri-stdlib-CommandModule}/Argument :uri-stdlib-Command-Argument: {uri-stdlib-CommandModule}/Argument
:uri-stdlib-Command-Import: {uri-stdlib-CommandModule}/Import :uri-stdlib-Command-Import: {uri-stdlib-CommandModule}/Import
:uri-stdlib-ref-Reference: {uri-stdlib-baseModule}/Reference
:uri-stdlib-ref-Access: {uri-stdlib-baseModule}/Access
:uri-messagepack: https://msgpack.org/index.html :uri-messagepack: https://msgpack.org/index.html
:uri-messagepack-spec: https://github.com/msgpack/msgpack/blob/master/spec.md :uri-messagepack-spec: https://github.com/msgpack/msgpack/blob/master/spec.md
@@ -187,15 +187,6 @@ The array's length is the number of slots that are filled. For example, xref:{ur
| |
| |
| |
|link:{uri-stdlib-ref-Reference}[Reference]
|`0x20`
|`<value>` (Typed)
|Domain
|`<value>`
|Data
|link:{uri-messagepack-array}[array]
|Array of link:{uri-stdlib-ref-Access}[`pkl.ref#Access`] values
|=== |===
[[type-name-encoding]] [[type-name-encoding]]
@@ -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.
+5 -5
View File
@@ -56,7 +56,7 @@ ifdef::is-release-version[]
mavenCentral() mavenCentral()
endif::[] endif::[]
ifndef::is-release-version[] ifndef::is-release-version[]
maven(url = "{uri-snapshot-repo}") maven(url = "{uri-sonatype}")
endif::[] endif::[]
} }
---- ----
@@ -75,7 +75,7 @@ ifdef::is-release-version[]
mavenCentral() mavenCentral()
endif::[] endif::[]
ifndef::is-release-version[] ifndef::is-release-version[]
maven { url "{uri-snapshot-repo}" } maven { url "{uri-sonatype}" }
endif::[] endif::[]
} }
---- ----
@@ -99,9 +99,9 @@ ifndef::is-release-version[]
<repository> <repository>
<id>sonatype-s01</id> <id>sonatype-s01</id>
<name>Sonatype S01</name> <name>Sonatype S01</name>
<url>{uri-snapshot-repo}</url> <url>{uri-sonatype}</url>
</repository> </repository>
</repositories> </repositories>
endif::[] endif::[]
</project> </project>
---- ----
@@ -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.
@@ -45,7 +45,7 @@ ifdef::is-release-version[]
mavenCentral() mavenCentral()
endif::[] endif::[]
ifndef::is-release-version[] ifndef::is-release-version[]
maven(url = "{uri-snapshot-repo}") maven(url = "{uri-sonatype}")
endif::[] endif::[]
} }
---- ----
@@ -66,7 +66,7 @@ repositories {
endif::[] endif::[]
ifndef::is-release-version[] ifndef::is-release-version[]
repositories { repositories {
maven { url "{uri-snapshot-repo}" } maven { url "{uri-sonatype}" }
} }
endif::[] endif::[]
---- ----
@@ -92,7 +92,7 @@ ifndef::is-release-version[]
<repository> <repository>
<id>sonatype-s01</id> <id>sonatype-s01</id>
<name>Sonatype S01</name> <name>Sonatype S01</name>
<url>{uri-snapshot-repo}</url> <url>{uri-sonatype}</url>
</repository> </repository>
</repositories> </repositories>
endif::[] endif::[]
@@ -46,7 +46,7 @@ ifdef::is-release-version[]
mavenCentral() mavenCentral()
endif::[] endif::[]
ifndef::is-release-version[] ifndef::is-release-version[]
maven(url = "{uri-snapshot-repo}") maven(url = "{uri-sonatype}")
endif::[] endif::[]
} }
---- ----
@@ -65,7 +65,7 @@ ifdef::is-release-version[]
mavenCentral() mavenCentral()
endif::[] endif::[]
ifndef::is-release-version[] ifndef::is-release-version[]
maven { url "{uri-snapshot-repo}" } maven { url "{uri-sonatype}" }
endif::[] endif::[]
} }
---- ----
@@ -34,7 +34,7 @@ ifdef::is-release-version[]
mavenCentral() mavenCentral()
endif::[] endif::[]
ifndef::is-release-version[] ifndef::is-release-version[]
maven(url = "{uri-snapshot-repo}") maven(url = "{uri-sonatype}")
endif::[] endif::[]
} }
---- ----
@@ -53,7 +53,7 @@ ifdef::is-release-version[]
mavenCentral() mavenCentral()
endif::[] endif::[]
ifndef::is-release-version[] ifndef::is-release-version[]
maven { url "{uri-snapshot-repo}" } maven { url "{uri-sonatype}" }
endif::[] endif::[]
} }
---- ----
@@ -77,7 +77,7 @@ ifndef::is-release-version[]
<repository> <repository>
<id>sonatype-s01</id> <id>sonatype-s01</id>
<name>Sonatype S01</name> <name>Sonatype S01</name>
<url>{uri-snapshot-repo}</url> <url>{uri-sonatype}</url>
</repository> </repository>
</repositories> </repositories>
endif::[] endif::[]
File diff suppressed because it is too large Load Diff
-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]
==== ====
+3 -3
View File
@@ -44,7 +44,7 @@ ifdef::is-release-version[]
mavenCentral() mavenCentral()
endif::[] endif::[]
ifndef::is-release-version[] ifndef::is-release-version[]
maven(url = "{uri-snapshot-repo}") maven(url = "{uri-sonatype}")
endif::[] endif::[]
} }
---- ----
@@ -63,7 +63,7 @@ ifdef::is-release-version[]
mavenCentral() mavenCentral()
endif::[] endif::[]
ifndef::is-release-version[] ifndef::is-release-version[]
maven { url "{uri-snapshot-repo}" } maven { url "{uri-sonatype}" }
endif::[] endif::[]
} }
---- ----
@@ -87,7 +87,7 @@ ifndef::is-release-version[]
<repository> <repository>
<id>sonatype-s01</id> <id>sonatype-s01</id>
<name>Sonatype S01</name> <name>Sonatype S01</name>
<url>{uri-snapshot-repo}</url> <url>{uri-sonatype}</url>
</repository> </repository>
</repositories> </repositories>
endif::[] endif::[]
+4 -4
View File
@@ -117,7 +117,7 @@ ifdef::is-release-version[]
mavenCentral() mavenCentral()
endif::[] endif::[]
ifndef::is-release-version[] ifndef::is-release-version[]
maven(url = "{uri-snapshot-repo}") maven(url = "{uri-sonatype}")
endif::[] endif::[]
} }
---- ----
@@ -136,7 +136,7 @@ ifdef::is-release-version[]
mavenCentral() mavenCentral()
endif::[] endif::[]
ifndef::is-release-version[] ifndef::is-release-version[]
maven { url "{uri-snapshot-repo}" } maven { url "{uri-sonatype}" }
endif::[] endif::[]
} }
---- ----
@@ -160,7 +160,7 @@ ifndef::is-release-version[]
<repository> <repository>
<id>sonatype-s01</id> <id>sonatype-s01</id>
<name>Sonatype S01</name> <name>Sonatype S01</name>
<url>{uri-snapshot-repo}</url> <url>{uri-sonatype}</url>
</repository> </repository>
</repositories> </repositories>
endif::[] endif::[]
@@ -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
+3 -20
View File
@@ -51,7 +51,7 @@ ifdef::is-release-version[]
mavenCentral() mavenCentral()
endif::[] endif::[]
ifndef::is-release-version[] ifndef::is-release-version[]
maven(url = "{uri-snapshot-repo}") maven(url = "{uri-sonatype}")
endif::[] endif::[]
} }
} }
@@ -76,7 +76,7 @@ ifdef::is-release-version[]
mavenCentral() mavenCentral()
endif::[] endif::[]
ifndef::is-release-version[] ifndef::is-release-version[]
maven { url "{uri-snapshot-repo}" } maven { url "{uri-sonatype}" }
endif::[] endif::[]
} }
} }
@@ -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]
==== ====
+30 -541
View File
@@ -1,571 +1,60 @@
= Pkl 0.32 Release Notes = Pkl 0.32.0 Release Notes
:version: 0.32 :version: 0.32
:version-minor: 0.32.0 :version-minor: 0.32.0
:release-date: July 8th, 2026 :release-date: TBD
:version-next: 0.33 :version-next: 0.33
:version-next-date: October 2026 :version-next-date: TBD
include::partial$intro.adoc[] include::partial$intro.adoc[]
NOTE: This is the final release that distributes binaries for macOS/amd64.
== Highlights [small]#💖# == Highlights [small]#💖#
=== New data type: `Reference` News you don't want to miss.
This release introduces a new data type called `Reference` (https://github.com/apple/pkl/pull/1354[#1354], https://github.com/apple/pkl/pull/1691[#1691], https://github.com/apple/pkl/pull/1692[#1692], https://github.com/apple/pkl/pull/1693[#1693], https://github.com/apple/pkl/pull/1695[#1695]). .XXX
[%collapsible]
WARNING: This API is experimental. We are looking for feedback, and will aim to make this ready for production use in the next release.
A reference represents something whose actual value is unknown to Pkl, but nevertheless its type is checked.
The purpose of this data type is to improve how Pkl can be used to configure systems like GitHub Actions, Pulumi, Terraform, and more.
For example, let's assume that some system accepts YAML configuration that looks like so:
[source,yaml]
----
taskA:
uses: some-task
taskB:
uses: some-other-task
input: '${ taskA.output.number }'
----
In terms of YAML, `'${ taskA.output.number }'` is just a string.
However, semantically, it is an _expression_ in this target system, where `taskA.output.number` conveys some type.
Today, the only way to treat these values in Pkl is to also describe these as strings.
This introduces many shortcomings:
1. It leaves users vulnerable to syntax errors in this system.
2. It's hard to validate these beyond that they are a string.
3. Pkl has no understanding of the relationship between `taskA` and `taskB`.
With references, the above can be modeled in Pkl also as plain lookups:
[source,pkl]
----
taskA {
uses = "some-task"
}
taskB {
name = "some-other-task"
input = taskA.output.number
}
----
Library authors describe types as `ref.Reference<D, T>`, where `D` is the _domain_, and `T` is the _referent type_.
[source,pkl]
----
import "pkl:ref"
class MyDomain extends ref.Domain { // <1>
function renderReference(ref: ref.Reference<MyDomain, Any>): String =
"${ " + ref.getData() + "." + ref.getPath().join(".") + " }"
}
typealias MyReference<T> = ref.Reference<MyDomain, T> // <2>
class MyTask {
input: MyReference<Number>
}
----
<1> References exist inside a domain. The domain defines how these references should be stringified.
<2> A typealias can be used to improve ergonomics when declaring references that share the same domain.
Pkl will check that type arguments match up:
* The referent type must line up.
+
`MyReference<Int>` is not assignable to `MyReference<String>`.
* The domain must line up.
+
`ref.Reference<MyDomain, Int>` is not assignable to `ref.Reference<OtherDomain, Int>`.
Additionally, references give you synthetic members.
[source,pkl]
----
class Bird {
name: String
}
bird: MyReference<Bird>
birdName = bird.name // <1>
----
<1> Gives a `MyReference<String>`, because `class Bird` has property `name: String`
The synthetic member contains metadata about the path that was used to access it (`.name` in this
case).
This can be used to stringify this reference in that target domain.
To read more about references, consult the xref:language-reference:index.adoc#references[language reference].
To read through the design decisions made, consult the https://github.com/apple/pkl-evolution/blob/main/spices/SPICE-0020-type-safe-deferred-references.adoc[SPICE].
=== Custom HTTP Headers
Pkl can now attach custom HTTP headers to outbound requests, making it possible to access private or authenticated resources (https://github.com/apple/pkl/pull/1196[#1196], https://github.com/apple/pkl/pull/1584[#1584]).
For example, a CLI user can add an `Authorization` header either in settings.pkl, or the PklProject file:
[tabs]
==== ====
~/.pkl/settings.pkl:: XXX
+
[source,pkl]
----
amends "pkl:settings"
http {
headers {
["https://my.private.server/**"] {
["Authorization"] = "Bearer my-secret-token"
}
}
}
----
PklProject::
+
[source,pkl]
----
amends "pkl:Project"
evaluatorSettings {
http {
headers {
["https://my.private.server/**"] {
["Authorization"] = "Bearer my-secret-token"
}
}
}
}
----
==== ====
Each key in `headers` is a glob pattern matched against the request URL.
When a request is made, every matching pattern's headers are added to the request.
Headers can also be configured in other ways:
* In the pkl-gradle plugin
* As a CLI flag
* In the Java/Swift/Go/Kotlin evaluator APIs
* In the pkl-executor API
Header names must conform to RFC 7230 token syntax.
Certain reserved names (e.g. `host`, `connection`, `content-length`) and prefixes (`proxy-`, `sec-`) are forbidden.
Thank you to https://github.com/kyokuping[@kyokuping] for their contributions to this feature!
To learn more, consult https://github.com/apple/pkl-evolution/blob/main/spices/SPICE-0022-http-headers.adoc[SPICE-0022].
== Noteworthy [small]#🎶# == Noteworthy [small]#🎶#
=== Resolved evaluator settings Ready when you need them.
PklProject files now resolve evaluator settings that are file paths (https://github.com/apple/pkl/pull/1394[#1394]). .XXX
[%collapsible]
Some of the settings within `pkl:EvaluatorSettings` represent file paths. ====
However, these paths are resolved inconsistently: XXX
====
* Pkl is inconsistent about what relative paths mean. `rootDir`, `moduleCacheDir`, and `modulePath` are relative to the project dir, while `ExternalReader.executable` is relative to the PWD.
* External readers defined in a PklProject have different behavior depending on the PWD.
* The logic for resolving these paths is dependent on the caller, rather than Pkl.
For CLI users, this means that the current working directory can affect how evaluator settings are loaded.
In Pkl 0.32, these paths are resolved entirely within Pkl, and resolved against the enclosing directory.
A new method `resolve()` is added to `pkl:EvaluatorSettings`, and a new property `resolvedEvaluatorSettings` is added to `pkl:Project`.
Language bindings are expected to use `resolvedEvaluatorSettings` when configuring the evaluator.
To read more about this change, consult https://github.com/apple/pkl-evolution/blob/main/spices/SPICE-0027-resolved-paths-in-pkl-evaluatorsettings.adoc[SPICE-0027].
=== Line continuations in multiline strings
When authoring multiline strings, it is now possible to use a _line continuation_ to break a single line's value over multiple lines (https://github.com/apple/pkl/pull/1507[#1507], https://github.com/apple/pkl/pull/1564[#1564]).
These two string snippets are logically identical:
[source,pkl]
----
str =
"""
Although the Dodo is extinct, \
the species will be remembered.
"""
----
[source%parsed,pkl]
----
str = "Although the Dodo is extinct, the species will be remembered."
----
To read more about this design, consult https://github.com/apple/pkl-evolution/blob/main/spices/SPICE-0028-multiline-string-continuation.adoc[SPICE-0028].
[[parse-time-variable-resolution]]
=== Parse-time variable resolution
Pkl now resolves variables at parse time (https://github.com/apple/pkl/pull/1429[#1429], https://github.com/apple/pkl/pull/1622[#1622], https://github.com/apple/pkl/pull/1634[#1634], https://github.com/apple/pkl/pull/1706[#1706]).
Currently, Pkl defers the resolution of variable names to when the node is executed.
In Pkl 0.32, these are resolved when the file is parsed.
This is a pre-requisite feature for many upcoming features, such as flat member syntax and method varargs.
Additionally, this enables some runtime optimizations, including let expressions.
[[let-expression-improvements]]
=== Let expression performance improvements
Performance improvements were made to the handling of xref:language-reference:index.adoc#let-expressions[let expressions] (https://github.com/apple/pkl/pull/1622[#1622], https://github.com/apple/pkl/pull/1634[#1634]).
Here is a sample benchmark:
[source,pkl]
----
amends "pkl:Benchmark"
microbenchmarks {
["let"] {
expression =
let (a = 1)
let (b = 2)
let (c = 3)
let (d = 4)
let (e = 1)
let (f = 2)
let (g = 3)
let (h = 4)
let (i = 1)
let (j = 2)
let (k = 3)
let (l = 4)
let (m = 1)
let (n = 2)
let (o = 3)
let (p = 4)
let (q = 1)
let (r = 2)
let (s = 3)
let (t = 4)
a + b + c + d + e + f + g + h + i + j + k + l + m + n + o + p + q + r + s + t
}
}
output {
renderer {
converters {
[Duration] = (it: Duration) -> super[Duration].apply(it.toUnit("ns"))
}
}
}
----
And here are the results when run on a MacBook Pro M4 Max machine: `jpkl` is about 12x faster, while native `pkl` is about 4000x faster:
|===
|Variant |Results (mean)
|jpkl
|1208.06.ns -> 97.76.ns
|pkl
|1275.96.ns -> 0.32.ns
|===
=== Test reporter
A test reporter option is added when running tests (https://github.com/apple/pkl/pull/1563[#1563], https://github.com/apple/pkl/pull/1597[#1597]).
A new CLI flag, `--test-reporter`, is now available to the `pkl test` and `pkl project package` commands.
This flag accepts the name of a test reporter to be used to format test result output.
There are two possible reporters:
* `spec` (default) - the current reporter
* `minimal` - a reporter that only emits failing tests
This option is also available to pkl-gradle users.
=== Dependency notation improvements
Pkl's evaluator now accepts https://pkl-lang.org/main/current/language-reference/index.html#dependency-notation[dependency notation URIs] as source modules (https://github.com/apple/pkl/pull/1595[#1595]).
In Pkl 0.31, we introduced xref:0.31.adoc#cli-dependency-notation[CLI support for dependency notation].
Now, this support has been extended to the evaluator itself.
This means that users of Pkl's various language bindings can also use dependency notation.
Additionally, the limitation on local dependencies has been dropped.
=== pkldoc supports single-package docsites
pkldoc has improved support for single-package documentation websites (https://github.com/apple/pkl/pull/1592[#1592]).
When a docsite has only one package name, and also no overview from a `docsite-info.pkl`, the resulting docsite does not have a top-level package index page.
Instead, it redirects to the package page, and omits the site-level element from the breadcrumb.
=== Allowed package imports in `PklProject`
PklProject files can now import xref:language-reference:index.adoc#package-asset-uri[package asset URIs] (https://github.com/apple/pkl/pull/1547[#1547]).
This means that it is now possible to centralize and share common configurations across multiple projects.
=== Java Library Changes
==== Switch to JSpecify annotations
Pkl has switched to using https://jspecify.dev[JSpecify] for annotating nullability (https://github.com/apple/pkl/pull/1515[#1515], https://github.com/apple/pkl/pull/1527[#1527], https://github.com/apple/pkl/pull/1528[#1528], https://github.com/apple/pkl/pull/1530[#1530], https://github.com/apple/pkl/pull/1544[#1544], https://github.com/apple/pkl/pull/1601[#1601], https://github.com/apple/pkl/pull/1607[#1607]).
Currently, Pkl uses annotations from the `com.google.code.findbugs:jsr305` library.
This suffers from some issues:
* The https://jcp.org/en/jsr/detail?id=305[JSR-305 proposal] itself is dormant and unlikely to be adopted.
* The `com.google.code.findbugs:jsr305` library contributes packages to `javax`, which violates the https://www.oracle.com/downloads/licenses/binary-code-license.html[Oracle Binary Code License Agreement].
In contrast, JSpecify is widely seen as the standard for nullability annotations, and is already understood by most tools.
This impacts Pkl's Java APIs; methods previously annotated using JSR-305 nullability annotations now use JSpecify.
Additionally, the Java code generator now emits JSpecify annotations by default.
==== New API: `org.pkl.config.java.ConfigDecoder`
A new API is introduced called `org.pkl.config.java.ConfigDecoder` (https://github.com/apple/pkl/pull/1533[#1533]).
Currently, the `org.pkl.config.java.Config` interface mixes configuration representation with decoding logic.
To better separate these concerns, a new API is introduced for decoding.
Example:
[source,java]
----
class Main {
Config getConfig() {
var decoder = new ConfigDecoderBuilder().preconfigured().build();
return decoder.decode(bytes);
}
}
----
==== New `asNullable` methods in `pkl.config.java`
New methods are added for decoding into nullable types (https://github.com/apple/pkl/pull/1544[#1544]).
The following methods are introduced:
* `org.pkl.config.java.Config.asNullable`
* `org.pkl.config.java.JavaType.pairOfNullableFirst`
* `org.pkl.config.java.JavaType.pairOfNullableSecond`
* `org.pkl.config.java.JavaType.pairOfNullableFirstAndSecond`
* `org.pkl.config.java.JavaType.arrayOfNullable`
* `org.pkl.config.java.JavaType.iterableOfNullable`
* `org.pkl.config.java.JavaType.collectionOfNullable`
* `org.pkl.config.java.JavaType.listOfNullable`
* `org.pkl.config.java.JavaType.setOfNullable`
* `org.pkl.config.java.JavaType.mapOfNullableKeys`
* `org.pkl.config.java.JavaType.mapOfNullableValues`
* `org.pkl.config.java.JavaType.mapOfNullableKeysAndValues`
NOTE: `org.pkl.config.java.Config.as` can also return a `null` value. In a future release, this method will have a runtime non-null assertion.
==== `pkl-formatter` migrated to Java
The `pkl-formatter` library has been migrated from Kotlin to Java (https://github.com/apple/pkl/pull/1514[#1514]).
Therefore, its Kotlin dependency is dropped.
=== Standard Library Changes
==== `pkl:EvaluatorSettings`
* New method: link:{uri-stdlib-evaluatorSettingsModule}#resolve()[`EvaluatorSettings.resolve()`]
* New method: link:{uri-stdlib-evaluatorSettingsModule}#resolveForOs()[`EvaluatorSettings.resolveForOs()`]
* New property: link:{uri-stdlib-evaluatorSettingsExternalReaderClass}#workingDir[`EvaluatorSettings#ExternalReader.workingDir`]
* New property: link:{uri-stdlib-evaluatorSettingsHttpClass}#headers[`EvaluatorSettings#Http.headers`]
* New typealias: link:{uri-stdlib-evaluatorSettingsModule}#HttpHeaders[`EvaluatorSettings.HttpHeaders`]
* New typealias: link:{uri-stdlib-evaluatorSettingsModule}#HttpHeaderName[`EvaluatorSettings.HttpHeaderName`]
* New typealias: link:{uri-stdlib-evaluatorSettingsModule}#HttpHeaderValue[`EvaluatorSettings.HttpHeaderValue`]
==== `pkl:base`
* New property: link:{uri-stdlib-baseModule}/String#isGlobPattern[`String.isGlobPattern`]
==== `pkl:Project`
* New property: link:{uri-stdlib-projectModule}#resolvedEvaluatorSettings[`Project.resolvedEvaluatorSettings`]
==== `pkl:ref`
* New module introduced.
=== pkl-gradle changes
The following changes have been made to pkl-gradle.
==== Support for external readers
External readers can now be configured when configuring evaluators (https://github.com/apple/pkl/pull/1578[#1578]).
For example:
[source,kotlin]
----
val myPklTask by pkl.evaluators.creating {
val foo by externalModuleReaders.creating {
executable = "pkl-foo-reader"
arguments = listOf("--bar", "baz")
}
}
----
==== Support for module/resource readers from SPI
Gradle users can now add module/resource readers by registering a service via the Java SPI mechanism (https://github.com/apple/pkl/pull/1581[#1581]).
==== Support for Gradle configuration cache
The plugin now supports the Gradle configuration cache feature (https://github.com/apple/pkl/issues/1425[#1425]).
Thanks to https://github.com/ffluk3[@ffluk3] for their contributions to this feature!
== Breaking Changes [small]#💔# == Breaking Changes [small]#💔#
=== Name resolution changes Things to watch out for when upgrading.
Variables are now <<parse-time-variable-resolution,resolved at parse time>>. === Removed Java APIs
As part of this change, some names are resolved differently. The following APIs have been removed without replacement.
Take the following code: * `org.pkl.config.java.Config#makeConfig` (pr:https://github.com/apple/pkl/pull/1531[])
[source,pkl] .XXX
---- [%collapsible]
qux = "outer" ====
XXX
====
foo { == Work In Progress [small]#🚆#
when (cond) {
qux = "inner"
}
res = qux
}
----
Currently, `res = qux` will eval to either `res = "outer"` or `res = "inner"` depending on whether `cond` evals to `true` or not. They missed the train but deserve a mention.
This is a lexical lookup that is either one level up, or zero levels up, depending on the result of code execution.
This type of resolution is not possible at parse time, because we do not know what `cond` executes to. .XXX
In Pkl 0.32, `res` will always resolve to the inner `qux`, and this snippet will throw if the when generator does not fire. [%collapsible]
====
=== Java API changes XXX
====
The following breaking changes have been made to the Java API.
* `org.pkl.config.java.Config#makeConfig`
+
Removed without replacement
* `org.pkl.config.java.Config.fromPklBinary`
+
Deprecated, replaced with `org.pkl.config.java.ConfigDecoder`
* `org.pkl.config.java.mapper.NonNull`
+
Deprecated, replaced with `org.jspecify.annotations.NonNull`
* `org.pkl.core.evaluatorSettings.PklEvaluatorSettings.parse`
+
No longer accepts `pathNormalizer` argument
* `org.pkl.formatter.Formatter`
** Pass `GrammarVersion` to constructor instead of each `format` method
** Replace `format(Path): String` with `format(Reader, Appendable)`
** Mark as `throws IOException`
** Deprecate methods that accept `GrammarVersion` as an argument
=== Loading rule changes in `pkl:EvaluatorSettings`
Breaking changes have been made to how evaluator settings are loaded when using `PklProject` (https://github.com/apple/pkl/pull/1394[#1394]).
==== Loading rule changes for the external reader executable
The following changes have been made for the `executable` property in an external reader:
* If the executable does not contain a slash (`/` on POSIX, `\` on Windows) character, it is always resolved against the `PATH` environment variable.
* If it does contain a slash, it is resolved relative to the enclosing PklProject directory, instead of the current working directory.
=== Changes to `--external-module-reader` and `--external-resource-reader` CLI flags
The `--external-module-reader` and `--external-resource-reader` CLI flags will _replace_ any external readers otherwise configured within a PklProject, instead of add to it (https://github.com/apple/pkl/pull/1394[#1394]).
This makes this behavior consistent with how other settings work.
== Bug Fixes [small]#🐜#
The following bugs have been fixed.
* Data race in MessagePack encoder during concurrent server sends (https://github.com/apple/pkl/issues/1486[#1486])
* pkl-doc library publishes incorrect Maven dependency scopes (https://github.com/apple/pkl/issues/1517[#1517])
* Re-using pklbinary#Renderer during rendering results in incorrect output (https://github.com/apple/pkl/pull/1525[#1525])
* Cannot glob using subpatterns inside a project dependency (https://github.com/apple/pkl/issues/1545[#1545])
* Project package command incompatible with glob imports on Windows (https://github.com/apple/pkl/issues/1556[#1556])
* Thrown PklBugException when using power assertions with unavailable source sections (https://github.com/apple/pkl/pull/1571[#1571])
* pkl-doc: DocGenerator never shuts down its thread pool (https://github.com/apple/pkl/issues/1583[#1583])
* Imports gathering Gradle task can fail with a confusing exception (https://github.com/apple/pkl/issues/1591[#1591])
* HTTP rewrite fails with PklBugException under tr-TR locale when host contains 'I' (https://github.com/apple/pkl/issues/1617[#1617])
* Formatter bug fixes (https://github.com/apple/pkl/pull/1619[#1619])
* Unrelated error message thrown when computing an error message (https://github.com/apple/pkl/pull/1629[#1629])
* pkl-binary serialization produces an incomplete msgpack value in the presence of local properties (https://github.com/apple/pkl/issues/1631[#1631]).
* Poor parser error message (https://github.com/apple/pkl/issues/1638[#1638])
* relativePathTo does not check if receiver is a module (https://github.com/apple/pkl/issues/1649[#1649])
* `Int` overflow on multiplication throws unexpected exception (https://github.com/apple/pkl/issues/1651[#1651])
* Incorrect eager check for `Map` type (https://github.com/apple/pkl/issues/1653[#1653])
* Incorrect `toRadixString()` for `math.minInt` (https://github.com/apple/pkl/issues/1655[#1655])
* `Evaluator.evaluateSchema()` throws if properties are annotated with `@ConvertProperty` (https://github.com/apple/pkl/issues/1657[#1657])
* `String.padStart` and `String.padEnd` return incorrect strings sometimes (https://github.com/apple/pkl/issues/1661[#1661])
* `String.getOrNull` crashes with certain strings (https://github.com/apple/pkl/issues/1662[#1662])
* Incorrect facts in `pkl:base` doc comments (https://github.com/apple/pkl/pull/1669[#1669])
* Index-based methods on Set aren't implemented (https://github.com/apple/pkl/issues/1682[#1682])
* pkl-gradle throws exception when a Pkl task can't create an evaluator during configuration time (https://github.com/apple/pkl/pull/1684[#1684])
* Unrelated exception gets thrown when validating elements/entries in objects (https://github.com/apple/pkl/issues/1697[#1697])
* Type argument is lost in constraint expressions within generic typealiases (https://github.com/apple/pkl/issues/1705[#1705])
* Typealiases with type var as root are broken (https://github.com/apple/pkl/issues/1711[#1711])
* Incorrect `List`/`Set`/`Map`/`Listing`/`Mapping`/union type check behavior through typealiases (https://github.com/apple/pkl/issues/1710[#1710])
* Type aliases with type var as root are broken (https://github.com/apple/pkl/issues/1711[#1711])
* Type checks through aliases are always run lazily even when they should be eager (https://github.com/apple/pkl/issues/1716[#1716])
* Improve thread safety when evaluating `pkl:base` (https://github.com/apple/pkl/pull/1719[#1719])
* Incorrect member links in doc comments (https://github.com/apple/pkl/pull/1723[#1723])
* pkl-gradle plugin does not allow `projectpackage:` reads by default (https://github.com/apple/pkl/issues/1734[#1734])
* `IntSeq` incorrectly emits on empty ``IntSeq``s (https://github.com/apple/pkl/issues/1738[#1738])
== Security Fixes [small]#🔒#
The following security vulnerabilities were fixed:
* Remote packages can read local filesystem items by escaping local dependency roots (https://github.com/apple/pkl/security/advisories/GHSA-fgvf-hh2w-cxff[GHSA-fgvf-hh2w-cxff], https://github.com/apple/pkl/pull/1737[#1737])
* Packages can be read/written outside the configured cache directory (https://github.com/apple/pkl/security/advisories/GHSA-87qh-25w9-mh34[GHSA-87qh-25w9-mh34], https://github.com/apple/pkl/pull/1683[#1683])
== Contributors [small]#🙏# == Contributors [small]#🙏#
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):
* https://github.com/04cb[@04cb] * XXX
* https://github.com/0xmrma[@0xmrma]
* https://github.com/adityabagchi24[@adityabagchi24]
* https://github.com/adityasingh2400[@adityasingh2400]
* https://github.com/bioball[@bioball]
* https://github.com/fallintoplace[@fallintoplace]
* https://github.com/ffluk3[@ffluk3]
* https://github.com/HT154[@HT154]
* https://github.com/KushalP[@KushalP]
* https://github.com/kyokuping[@kyokuping]
* https://github.com/ldaley[@ldaley]
* https://github.com/mirkoalicastro[@mirkoalicastro]
* https://github.com/netvl[@netvl]
* https://github.com/odenix[@odenix]
* https://github.com/stackoverflow[@stackoverflow]
* https://github.com/vinayakj592[@vinayakj592]
@@ -1,30 +0,0 @@
= Pkl 0.33 Release Notes
:version: 0.33
:version-minor: 0.33.0
:release-date: XXX
:version-next: 0.34
:version-next-date: February 2027
include::partial$intro.adoc[]
== Highlights [small]#💖#
=== XXX
== Noteworthy [small]#🎶#
=== XXX
== Breaking Changes [small]#💔#
=== XXX
== Bug Fixes [small]#🐜#
* XXX
== Contributors [small]#🙏#
We would like to thank the contributors to this release (in alphabetical order):
* XXX
@@ -1,15 +1,8 @@
= Changelog = Changelog
include::ROOT:partial$component-attributes.adoc[] include::ROOT:partial$component-attributes.adoc[]
[[release-0.33.0]]
== 0.33.0 (UNRELEASED)
xref:0.33.adoc[Release Notes]
[[release-0.32.0]] [[release-0.32.0]]
== 0.32.0 (2026-07-08) == 0.32.0 (UNRELEASED)
xref:0.32.adoc[Release Notes]
[[release-0.31.1]] [[release-0.31.1]]
== 0.31.1 (2026-03-26) == 0.31.1 (2026-03-26)
@@ -45,7 +38,6 @@ Thank you to all the contributors for this release!
== 0.31.0 (2026-02-26) == 0.31.0 (2026-02-26)
xref:0.31.adoc[Release Notes] xref:0.31.adoc[Release Notes]
[[release-0.30.2]] [[release-0.30.2]]
== 0.30.2 (2025-12-15) == 0.30.2 (2025-12-15)
+1 -1
View File
@@ -193,7 +193,7 @@ Too many lines separate `foo` and `baz`.
Properties that override an existing property shouldn't have doc comments nor type annotations, Properties that override an existing property shouldn't have doc comments nor type annotations,
unless the type is intentionally overridden via `extends`. unless the type is intentionally overridden via `extends`.
[source%parsed,{pkl}] [source%tested,{pkl}]
---- ----
amends "myOtherModule.pkl" amends "myOtherModule.pkl"
-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.33.adoc[0.33 Release Notes]
** xref:release-notes:0.32.adoc[0.32 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]
+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.33.0 version=0.32.0
# google-java-format requires jdk.compiler exports # google-java-format requires jdk.compiler exports
org.gradle.jvmargs= \ org.gradle.jvmargs= \
+17 -16
View File
@@ -3,11 +3,11 @@ assertj = "3.27.7"
checksumPlugin = "1.4.0" checksumPlugin = "1.4.0"
# 5.0.3 is the last version compatible with Kotlin 2.2 # 5.0.3 is the last version compatible with Kotlin 2.2
clikt = "5.0.3" clikt = "5.0.3"
commonMark = "0.29.0" commonMark = "0.28.0"
downloadTaskPlugin = "5.7.0" downloadTaskPlugin = "5.7.0"
errorProne = "2.50.0" errorProne = "2.48.0"
errorPronePlugin = "5.1.0" errorPronePlugin = "5.1.0"
geantyref = "2.0.1" geantyref = "1.3.16"
#noinspection UnusedVersionCatalogEntry #noinspection UnusedVersionCatalogEntry
googleJavaFormat = "1.35.0" googleJavaFormat = "1.35.0"
# 25.0.2 no longer supports macos-x64 # 25.0.2 no longer supports macos-x64
@@ -29,39 +29,40 @@ graalVmSha256-windows-x64 = "fde83c5ceec2c75560c747ccd9f314f90e4cf5c5287416e67c4
#noinspection UnusedVersionCatalogEntry #noinspection UnusedVersionCatalogEntry
graalVmSha256-windows-aarch64 = "unavailable" graalVmSha256-windows-aarch64 = "unavailable"
ideaExtPlugin = "1.4.1" ideaExtPlugin = "1.4.1"
javaPoet = "0.17.0" javaPoet = "0.14.0"
javaxInject = "1" javaxInject = "1"
jimfs = "1.3.1" jimfs = "1.3.1"
jline = "4.3.1" jline = "4.0.12"
jmh = "1.37" jmh = "1.37"
jmhPlugin = "0.7.3" jmhPlugin = "0.7.3"
jspecify = "1.0.0" jspecify = "1.0.0"
junit = "6.1.1" jsr305 = "3.0.2"
junit = "6.0.3"
# 1.7+ generates much more verbose code # 1.7+ generates much more verbose code
kotlinPoet = "1.6.0" kotlinPoet = "2.3.0"
kotlinStdLib = "2.2.21" kotlinStdLib = "2.2.21"
#noinspection UnusedVersionCatalogEntry #noinspection UnusedVersionCatalogEntry
kotlinTarget = "2.2" kotlinTarget = "2.2"
kotlinToolchain = "2.4.0" kotlinToolchain = "2.3.20"
kotlinxHtml = "0.12.0" kotlinxHtml = "0.12.0"
# 1.9.0 is the last version compatible with Kotlin 2.2 # 1.9.0 is the last version compatible with Kotlin 2.2
kotlinxSerialization = "1.9.0" kotlinxSerialization = "1.9.0"
kotlinxCoroutines = "1.11.0" kotlinxCoroutines = "1.10.2"
#noinspection UnusedVersionCatalogEntry #noinspection UnusedVersionCatalogEntry
ktfmt = "0.62" ktfmt = "0.62"
# replaces nuValidator's log4j dependency # replaces nuValidator's log4j dependency
# 2.17.1 is the last version compatible with nuValidator # 2.17.1 is the last version compatible with nuValidator
log4j = "2.17.1" log4j = "2.17.1"
msgpack = "0.9.12" msgpack = "0.9.11"
nexusPublishPlugin = "2.0.0" nexusPublishPlugin = "2.0.0"
nullaway = "0.13.7" nullaway = "0.13.2"
nullawayPlugin = "3.0.0" nullawayPlugin = "3.0.0"
nuValidator = "26.6.24" nuValidator = "26.4.2"
paguro = "3.10.3" paguro = "3.10.3"
shadowPlugin = "9.4.2" shadowPlugin = "9.4.1"
slf4j = "2.0.18" slf4j = "2.0.17"
snakeYaml = "3.0.1" snakeYaml = "3.0.1"
spotlessPlugin = "8.7.0" spotlessPlugin = "8.4.0"
wiremock = "3.13.2" wiremock = "3.13.2"
[libraries] # ordered alphabetically [libraries] # ordered alphabetically
@@ -73,7 +74,6 @@ commonMarkTables = { group = "org.commonmark", name = "commonmark-ext-gfm-tables
downloadTaskPlugin = { group = "de.undercouch", name = "gradle-download-task", version.ref = "downloadTaskPlugin" } downloadTaskPlugin = { group = "de.undercouch", name = "gradle-download-task", version.ref = "downloadTaskPlugin" }
#noinspection UnusedVersionCatalogEntry #noinspection UnusedVersionCatalogEntry
errorProne = { group = "com.google.errorprone", name = "error_prone_core", version.ref = "errorProne" } 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" } 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" }
@@ -87,6 +87,7 @@ jlineTerminal = { group = "org.jline", name = "jline-terminal", version.ref = "j
jlineTerminalJni = { group = "org.jline", name = "jline-terminal-jni", version.ref = "jline" } jlineTerminalJni = { group = "org.jline", name = "jline-terminal-jni", version.ref = "jline" }
#noinspection UnusedVersionCatalogEntry #noinspection UnusedVersionCatalogEntry
jspecify = { group = "org.jspecify", name = "jspecify", version.ref = "jspecify" } jspecify = { group = "org.jspecify", name = "jspecify", version.ref = "jspecify" }
jsr305 = { group = "com.google.code.findbugs", name = "jsr305", version.ref = "jsr305" }
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" }
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=bbaeb2fef8710818cf0e261201dab964c572f92b942812df0c3620d62a529a01 distributionSha256Sum=2ab2958f2a1e51120c326cad6f385153bb11ee93b3c216c5fccebfdfbb7ec6cb
distributionUrl=https\://services.gradle.org/distributions/gradle-9.6.0-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.1-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
+3 -3
View File
@@ -20,7 +20,7 @@
############################################################################## ##############################################################################
# #
# gradlew start up script for POSIX generated by Gradle. # Gradle start up script for POSIX generated by Gradle.
# #
# Important for running: # Important for running:
# #
@@ -29,7 +29,7 @@
# bash, then to run this script, type that shell name before the whole # bash, then to run this script, type that shell name before the whole
# command line, like: # command line, like:
# #
# ksh gradlew # ksh Gradle
# #
# Busybox and similar reduced shells will NOT work, because this script # Busybox and similar reduced shells will NOT work, because this script
# requires all of these POSIX shell features: # requires all of these POSIX shell features:
@@ -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/2d6327017519d23b96af35865dc997fcb544fb40/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/.
Vendored
+23 -12
View File
@@ -19,12 +19,12 @@
@if "%DEBUG%"=="" @echo off @if "%DEBUG%"=="" @echo off
@rem ########################################################################## @rem ##########################################################################
@rem @rem
@rem gradlew startup script for Windows @rem Gradle startup script for Windows
@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,29 @@ 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
@rem Execute gradlew @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%" -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.32.0", "script-ref": "org.pkl-lang:pkl-cli-java:0.31.1",
"java-agents": [] "java-agents": []
}, },
"pkl-codegen-java": { "pkl-codegen-java": {
"script-ref": "org.pkl-lang:pkl-codegen-java:0.32.0", "script-ref": "org.pkl-lang:pkl-codegen-java:0.31.1",
"java-agents": [] "java-agents": []
}, },
"pkl-codegen-kotlin": { "pkl-codegen-kotlin": {
"script-ref": "org.pkl-lang:pkl-codegen-kotlin:0.32.0", "script-ref": "org.pkl-lang:pkl-codegen-kotlin:0.31.1",
"java-agents": [] "java-agents": []
} }
}, },
+3 -3
View File
@@ -83,8 +83,8 @@ tasks.shadowJar {
exclude("module-info.*") exclude("module-info.*")
} }
val testJavaExecutable = val testJavaExecutable by
tasks.register<Test>("testJavaExecutable") { tasks.registering(Test::class) {
testClassesDirs = tasks.test.get().testClassesDirs testClassesDirs = tasks.test.get().testClassesDirs
classpath = classpath =
// compiled test classes // compiled test classes
@@ -138,7 +138,7 @@ fun Exec.useRootDirAndSuppressOutput() {
// 0.28 Preparing for JDK21 toolchains revealed that `testStartJavaExecutable` may pass, even though // 0.28 Preparing for JDK21 toolchains revealed that `testStartJavaExecutable` may pass, even though
// the evaluator fails. To catch this, we eval a simple expression using the fat jar. // the evaluator fails. To catch this, we eval a simple expression using the fat jar.
val testEvalJavaExecutable = val testEvalJavaExecutable by
setupJavaExecutableRun("testEvalJavaExecutable", evalTestFlags) { useRootDirAndSuppressOutput() } setupJavaExecutableRun("testEvalJavaExecutable", evalTestFlags) { useRootDirAndSuppressOutput() }
// Run the same evaluator tests on all configured JDK test versions. // Run the same evaluator tests on all configured JDK test versions.
@@ -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)
@@ -229,43 +229,42 @@ constructor(
private fun writeMultipleFileOutput(builder: EvaluatorBuilder) { private fun writeMultipleFileOutput(builder: EvaluatorBuilder) {
val outputDirs = directoryOutputPaths!! val outputDirs = directoryOutputPaths!!
val writtenFiles = mutableMapOf<Path, OutputFile>() val writtenFiles = mutableMapOf<Path, OutputFile>()
builder.setOutputFormat(options.outputFormat).build().use { evaluator -> for ((moduleUri, outputDir) in outputDirs) {
for ((moduleUri, outputDir) in outputDirs) { val evaluator = builder.setOutputFormat(options.outputFormat).build()
if (outputDir.exists() && !outputDir.isDirectory()) { if (outputDir.exists() && !outputDir.isDirectory()) {
throw CliException("Output path `$outputDir` exists and is not a directory.") throw CliException("Output path `$outputDir` exists and is not a directory.")
} }
val moduleSource = toModuleSource(moduleUri, inputStream) val moduleSource = toModuleSource(moduleUri, inputStream)
val output = evaluator.evaluateOutputFiles(moduleSource) val output = evaluator.evaluateOutputFiles(moduleSource)
val realOutputDir = if (outputDir.exists()) outputDir.toRealPath() else outputDir val realOutputDir = if (outputDir.exists()) outputDir.toRealPath() else outputDir
for ((pathSpec, fileOutput) in output) { for ((pathSpec, fileOutput) in output) {
checkPathSpec(pathSpec) checkPathSpec(pathSpec)
val (realPath, resolvedPath) = realOutputDir.resolveRealPath(Path.of(pathSpec)) val (realPath, resolvedPath) = realOutputDir.resolveRealPath(Path.of(pathSpec))
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`."
)
}
val previousOutput = writtenFiles[realPath]
if (previousOutput != null) {
throw CliException(
"Output file conflict: `output.files` entries `\"${previousOutput.pathSpec}\"` in module `${previousOutput.moduleUri}` and `\"$pathSpec\"` in module `$moduleUri` resolve to the same file path `$realPath`."
)
}
if (realPath.isDirectory()) {
throw CliException(
"Output file conflict: `output.files` entry `\"$pathSpec\"` in module `$moduleUri` resolves to file path `$realPath`, which is a directory."
)
}
writtenFiles[realPath] = OutputFile(pathSpec, moduleUri)
realPath.createParentDirectories()
realPath.writeBytes(fileOutput.bytes)
outputStream.writeText(
IoUtils.relativize(resolvedPath, currentWorkingDir).toString() +
IoUtils.getLineSeparator()
) )
outputStream.flush()
} }
val previousOutput = writtenFiles[realPath]
if (previousOutput != null) {
throw CliException(
"Output file conflict: `output.files` entries `\"${previousOutput.pathSpec}\"` in module `${previousOutput.moduleUri}` and `\"$pathSpec\"` in module `$moduleUri` resolve to the same file path `$realPath`."
)
}
if (realPath.isDirectory()) {
throw CliException(
"Output file conflict: `output.files` entry `\"$pathSpec\"` in module `$moduleUri` resolves to file path `$realPath`, which is a directory."
)
}
writtenFiles[realPath] = OutputFile(pathSpec, moduleUri)
realPath.createParentDirectories()
realPath.writeBytes(fileOutput.bytes)
outputStream.writeText(
IoUtils.relativize(resolvedPath, currentWorkingDir).toString() +
IoUtils.getLineSeparator()
)
outputStream.flush()
} }
} }
} }
@@ -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,15 +47,15 @@ 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(
""" """
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')
@@ -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 =
File diff suppressed because it is too large Load Diff
@@ -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()
) )
@@ -655,9 +655,9 @@ result = someLib.x
"output.pcf", "output.pcf",
""" """
x = 1 x = 1
y = 2 y = 2
z = 3 z = 3
""" """
.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,7 +918,7 @@ result = someLib.x
} }
} }
} }
""" """
.trimIndent(), .trimIndent(),
) )
val options = val options =
@@ -949,7 +949,7 @@ result = someLib.x
} }
} }
} }
""" """
.trimIndent(), .trimIndent(),
) )
val options = val options =
@@ -970,23 +970,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 +1009,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 +1045,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 +1071,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 +1096,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 +1120,10 @@ result = someLib.x
writePklFile( writePklFile(
"test.pkl", "test.pkl",
""" """
foo { foo {
bar = 1 bar = 1
} }
""" """
.trimIndent(), .trimIndent(),
) )
val options = val options =
@@ -1136,8 +1136,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 +1148,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 +1173,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,17 +1196,17 @@ result = someLib.x
writePklFile( writePklFile(
"test.pkl", "test.pkl",
""" """
res = 1 res = 1
""" """
.trimIndent(), .trimIndent(),
) )
writePklFile( writePklFile(
"PklProject", "PklProject",
""" """
amends "pkl:Project" amends "pkl:Project"
package = throw("invalid project package") package = throw("invalid project package")
""" """
.trimIndent(), .trimIndent(),
) )
val options = val options =
@@ -1225,8 +1225,8 @@ result = someLib.x
writePklFile( writePklFile(
"test.pkl", "test.pkl",
""" """
res = read*("env:**") res = read*("env:**")
""" """
.trimIndent(), .trimIndent(),
) )
writePklFile( writePklFile(
@@ -1234,14 +1234,14 @@ result = someLib.x
// language=Pkl // language=Pkl
""" """
amends "pkl:Project" amends "pkl:Project"
evaluatorSettings { evaluatorSettings {
env { env {
["foo"] = "foo" ["foo"] = "foo"
["bar"] = "bar" ["bar"] = "bar"
} }
} }
""" """
.trimIndent(), .trimIndent(),
) )
val options = val options =
@@ -1251,12 +1251,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()
) )
} }
@@ -1295,7 +1295,7 @@ result = someLib.x
CliBaseOptions( CliBaseOptions(
sourceModules = listOf(moduleUri), sourceModules = listOf(moduleUri),
workingDir = tempDir, workingDir = tempDir,
caCertificates = listOf(FileTestUtils.selfSignedCertificatePem), caCertificates = listOf(FileTestUtils.selfSignedCertificate),
) )
) )
val buffer = ByteArrayOutputStream() val buffer = ByteArrayOutputStream()
@@ -1337,7 +1337,7 @@ result = someLib.x
CliBaseOptions( CliBaseOptions(
sourceModules = listOf(moduleUri), sourceModules = listOf(moduleUri),
workingDir = tempDir, workingDir = tempDir,
caCertificates = listOf(FileTestUtils.selfSignedCertificatePem), caCertificates = listOf(FileTestUtils.selfSignedCertificate),
settings = settingsFile, settings = settingsFile,
) )
) )
@@ -1353,10 +1353,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()
@@ -1367,7 +1367,7 @@ result = someLib.x
workingDir = tempDir, workingDir = tempDir,
moduleCacheDir = tempDir, moduleCacheDir = tempDir,
noCache = true, noCache = true,
caCertificates = listOf(FileTestUtils.selfSignedCertificatePem), caCertificates = listOf(FileTestUtils.selfSignedCertificate),
testPort = packageServer.port, testPort = packageServer.port,
) )
) )
@@ -1375,14 +1375,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()
@@ -1473,7 +1473,7 @@ result = someLib.x
sourceModules = listOf(URI("package://localhost:1/birds@0.5.0#/catalog/Ostrich.pkl")), sourceModules = listOf(URI("package://localhost:1/birds@0.5.0#/catalog/Ostrich.pkl")),
noCache = true, noCache = true,
httpProxy = URI(wwRuntimeInfo.httpBaseUrl), httpProxy = URI(wwRuntimeInfo.httpBaseUrl),
caCertificates = listOf(FileTestUtils.selfSignedCertificatePem), caCertificates = listOf(FileTestUtils.selfSignedCertificate),
allowedModules = SecurityManagers.defaultAllowedModules + Pattern.compile("http:"), allowedModules = SecurityManagers.defaultAllowedModules + Pattern.compile("http:"),
) )
) )
@@ -1481,13 +1481,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 +1590,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 +1614,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 +1677,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 +1713,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 +1725,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 +1735,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 +1747,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.
@@ -69,12 +69,12 @@ class CliMainTest {
val code = val code =
""" """
x = 3 x = 3
output { output {
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.
@@ -44,7 +44,7 @@ class CliPackageDownloaderTest {
baseOptions = baseOptions =
CliBaseOptions( CliBaseOptions(
moduleCacheDir = tempDir, moduleCacheDir = tempDir,
caCertificates = listOf(FileTestUtils.selfSignedCertificatePem), caCertificates = listOf(FileTestUtils.selfSignedCertificate),
testPort = server.port, testPort = server.port,
), ),
packageUris = packageUris =
@@ -70,11 +70,11 @@ class CliPackageDownloaderTest {
"PklProject", "PklProject",
""" """
amends "pkl:Project" amends "pkl:Project"
evaluatorSettings { evaluatorSettings {
moduleCacheDir = ".my-cache" moduleCacheDir = ".my-cache"
} }
""" """
.trimIndent(), .trimIndent(),
) )
@@ -83,7 +83,7 @@ class CliPackageDownloaderTest {
baseOptions = baseOptions =
CliBaseOptions( CliBaseOptions(
workingDir = tempDir, workingDir = tempDir,
caCertificates = listOf(FileTestUtils.selfSignedCertificatePem), caCertificates = listOf(FileTestUtils.selfSignedCertificate),
testPort = server.port, testPort = server.port,
), ),
packageUris = listOf(PackageUri("package://localhost:0/birds@0.5.0")), packageUris = listOf(PackageUri("package://localhost:0/birds@0.5.0")),
@@ -103,7 +103,7 @@ class CliPackageDownloaderTest {
baseOptions = baseOptions =
CliBaseOptions( CliBaseOptions(
moduleCacheDir = tempDir, moduleCacheDir = tempDir,
caCertificates = listOf(FileTestUtils.selfSignedCertificatePem), caCertificates = listOf(FileTestUtils.selfSignedCertificate),
testPort = server.port, testPort = server.port,
), ),
packageUris = packageUris =
@@ -124,7 +124,7 @@ class CliPackageDownloaderTest {
baseOptions = baseOptions =
CliBaseOptions( CliBaseOptions(
moduleCacheDir = tempDir, moduleCacheDir = tempDir,
caCertificates = listOf(FileTestUtils.selfSignedCertificatePem), caCertificates = listOf(FileTestUtils.selfSignedCertificate),
testPort = server.port, testPort = server.port,
), ),
packageUris = packageUris =
@@ -165,7 +165,7 @@ class CliPackageDownloaderTest {
baseOptions = baseOptions =
CliBaseOptions( CliBaseOptions(
moduleCacheDir = tempDir, moduleCacheDir = tempDir,
caCertificates = listOf(FileTestUtils.selfSignedCertificatePem), caCertificates = listOf(FileTestUtils.selfSignedCertificate),
testPort = server.port, testPort = server.port,
), ),
packageUris = listOf(PackageUri("package://localhost:0/badChecksum@1.0.0")), packageUris = listOf(PackageUri("package://localhost:0/badChecksum@1.0.0")),
@@ -184,7 +184,7 @@ class CliPackageDownloaderTest {
baseOptions = baseOptions =
CliBaseOptions( CliBaseOptions(
moduleCacheDir = tempDir, moduleCacheDir = tempDir,
caCertificates = listOf(FileTestUtils.selfSignedCertificatePem), caCertificates = listOf(FileTestUtils.selfSignedCertificate),
testPort = server.port, testPort = server.port,
), ),
packageUris = packageUris =
@@ -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()
) )
} }
@@ -221,7 +221,7 @@ class CliPackageDownloaderTest {
baseOptions = baseOptions =
CliBaseOptions( CliBaseOptions(
moduleCacheDir = tempDir, moduleCacheDir = tempDir,
caCertificates = listOf(FileTestUtils.selfSignedCertificatePem), caCertificates = listOf(FileTestUtils.selfSignedCertificate),
testPort = server.port, testPort = server.port,
), ),
packageUris = listOf(PackageUri("package://localhost:0/birds@0.5.0")), packageUris = listOf(PackageUri("package://localhost:0/birds@0.5.0")),
@@ -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 =
@@ -108,20 +108,20 @@ class CliProjectPackagerTest {
"myTest.pkl", "myTest.pkl",
""" """
amends "pkl:test" amends "pkl:test"
facts { facts {
["1 == 2"] { ["1 == 2"] {
1 == 2 1 == 2
} }
} }
""" """
.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"
@@ -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()
@@ -154,13 +154,13 @@ class CliProjectPackagerTest {
.writeString( .writeString(
""" """
amends "pkl:test" amends "pkl:test"
facts { facts {
["1 == 1"] { ["1 == 1"] {
1 == 1 1 == 1
} }
} }
""" """
.trimIndent() .trimIndent()
) )
tempDir tempDir
@@ -168,7 +168,7 @@ class CliProjectPackagerTest {
.writeString( .writeString(
""" """
amends "pkl:Project" amends "pkl:Project"
package { package {
name = "mypackage" name = "mypackage"
version = "1.0.0" version = "1.0.0"
@@ -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()
@@ -203,13 +203,13 @@ class CliProjectPackagerTest {
""" """
amends "pkl:test" amends "pkl:test"
import "@birds/Bird.pkl" import "@birds/Bird.pkl"
examples { examples {
["Bird"] { ["Bird"] {
new Bird { name = "Finch"; favoriteFruit { name = "Tangerine" } } new Bird { name = "Finch"; favoriteFruit { name = "Tangerine" } }
} }
} }
""" """
.trimIndent() .trimIndent()
) )
projectDir projectDir
@@ -226,8 +226,8 @@ class CliProjectPackagerTest {
} }
} }
} }
""" """
.trimIndent() .trimIndent()
) )
projectDir projectDir
@@ -235,7 +235,7 @@ class CliProjectPackagerTest {
.writeString( .writeString(
""" """
amends "pkl:Project" amends "pkl:Project"
package { package {
name = "mypackage" name = "mypackage"
version = "1.0.0" version = "1.0.0"
@@ -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
@@ -298,9 +298,9 @@ class CliProjectPackagerTest {
"a/b/foo.pkl", "a/b/foo.pkl",
""" """
module foo module foo
name: String name: String
""" """
.trimIndent(), .trimIndent(),
) )
@@ -311,7 +311,7 @@ class CliProjectPackagerTest {
foo foo
bar bar
baz baz
""" """
.trimIndent(), .trimIndent(),
) )
@@ -320,14 +320,14 @@ class CliProjectPackagerTest {
.writeString( .writeString(
""" """
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()
) )
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(),
) )
@@ -967,7 +930,7 @@ class CliProjectPackagerTest {
CliProjectPackager( CliProjectPackager(
CliBaseOptions( CliBaseOptions(
workingDir = tempDir, workingDir = tempDir,
caCertificates = listOf(FileTestUtils.selfSignedCertificatePem), caCertificates = listOf(FileTestUtils.selfSignedCertificate),
testPort = packageServer.port, testPort = packageServer.port,
), ),
listOf(tempDir.resolve("project")), listOf(tempDir.resolve("project")),
@@ -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(),
) )
@@ -1011,7 +974,7 @@ class CliProjectPackagerTest {
CliProjectPackager( CliProjectPackager(
CliBaseOptions( CliBaseOptions(
workingDir = tempDir, workingDir = tempDir,
caCertificates = listOf(FileTestUtils.selfSignedCertificatePem), caCertificates = listOf(FileTestUtils.selfSignedCertificate),
testPort = packageServer.port, testPort = packageServer.port,
), ),
listOf(tempDir.resolve("project")), listOf(tempDir.resolve("project")),
@@ -1045,14 +1008,14 @@ class CliProjectPackagerTest {
@Deprecated { since = "0.26.1"; message = "do not use" } @Deprecated { since = "0.26.1"; message = "do not use" }
@ModuleInfo { minPklVersion = "0.26.0" } @ModuleInfo { minPklVersion = "0.26.0" }
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()
) )
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()
) )
} }
@@ -74,20 +74,20 @@ class CliProjectResolverTest {
tempDir.writeFile( tempDir.writeFile(
"PklProject", "PklProject",
""" """
amends "pkl:Project" amends "pkl:Project"
dependencies { dependencies {
["birds"] { ["birds"] {
uri = "package://localhost:0/birds@0.5.0" uri = "package://localhost:0/birds@0.5.0"
}
} }
}
""" """
.trimIndent(), .trimIndent(),
) )
CliProjectResolver( CliProjectResolver(
CliBaseOptions( CliBaseOptions(
workingDir = tempDir, workingDir = tempDir,
caCertificates = listOf(FileTestUtils.selfSignedCertificatePem), caCertificates = listOf(FileTestUtils.selfSignedCertificate),
testPort = packageServer.port, testPort = packageServer.port,
noCache = true, noCache = true,
), ),
@@ -129,20 +129,20 @@ class CliProjectResolverTest {
tempDir.writeFile( tempDir.writeFile(
"PklProject", "PklProject",
""" """
amends "pkl:Project" amends "pkl:Project"
dependencies { dependencies {
["birds"] { ["birds"] {
uri = "package://localhost:0/birds@0.5.0" uri = "package://localhost:0/birds@0.5.0"
}
} }
}
""" """
.trimIndent(), .trimIndent(),
) )
CliProjectResolver( CliProjectResolver(
CliBaseOptions( CliBaseOptions(
workingDir = tempDir, workingDir = tempDir,
caCertificates = listOf(FileTestUtils.selfSignedCertificatePem), caCertificates = listOf(FileTestUtils.selfSignedCertificate),
testPort = packageServer.port, testPort = packageServer.port,
noCache = true, noCache = true,
), ),
@@ -185,35 +185,35 @@ class CliProjectResolverTest {
projectDir.writeFile( projectDir.writeFile(
"PklProject", "PklProject",
""" """
amends "pkl:Project" amends "pkl:Project"
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(
"../project2/PklProject", "../project2/PklProject",
""" """
amends "pkl:Project" amends "pkl:Project"
package { package {
name = "project2" name = "project2"
baseUri = "package://localhost:0/package2" baseUri = "package://localhost:0/package2"
version = "5.0.0" version = "5.0.0"
packageZipUrl = "https://foo.com/package2.zip" packageZipUrl = "https://foo.com/package2.zip"
} }
dependencies { dependencies {
["fruit"] { ["fruit"] {
uri = "package://localhost:0/fruit@1.0.5" uri = "package://localhost:0/fruit@1.0.5"
}
["project3"] = import("../project3/PklProject")
} }
["project3"] = import("../project3/PklProject")
}
""" """
.trimIndent(), .trimIndent(),
) )
@@ -221,26 +221,26 @@ class CliProjectResolverTest {
projectDir.writeFile( projectDir.writeFile(
"../project3/PklProject", "../project3/PklProject",
""" """
amends "pkl:Project" amends "pkl:Project"
package { package {
name = "project3" name = "project3"
baseUri = "package://localhost:0/package3" baseUri = "package://localhost:0/package3"
version = "5.0.0" version = "5.0.0"
packageZipUrl = "https://foo.com/package3.zip" packageZipUrl = "https://foo.com/package3.zip"
} }
dependencies { dependencies {
["fruit"] { ["fruit"] {
uri = "package://localhost:0/fruit@1.1.0" uri = "package://localhost:0/fruit@1.1.0"
}
} }
}
""" """
.trimIndent(), .trimIndent(),
) )
CliProjectResolver( CliProjectResolver(
CliBaseOptions( CliBaseOptions(
caCertificates = listOf(FileTestUtils.selfSignedCertificatePem), caCertificates = listOf(FileTestUtils.selfSignedCertificate),
testPort = packageServer.port, testPort = packageServer.port,
noCache = true, noCache = true,
), ),
@@ -293,28 +293,28 @@ class CliProjectResolverTest {
projectDir.writeFile( projectDir.writeFile(
"PklProject", "PklProject",
""" """
amends "pkl:Project" amends "pkl:Project"
dependencies { dependencies {
["birds"] { ["birds"] {
uri = "package://localhost:0/birds@0.5.0" uri = "package://localhost:0/birds@0.5.0"
}
["fruit"] = import("../fruit/PklProject")
} }
["fruit"] = import("../fruit/PklProject")
}
""" """
.trimIndent(), .trimIndent(),
) )
projectDir.writeFile( projectDir.writeFile(
"../fruit/PklProject", "../fruit/PklProject",
""" """
amends "pkl:Project" amends "pkl:Project"
package { package {
name = "fruit" name = "fruit"
baseUri = "package://localhost:0/fruit" baseUri = "package://localhost:0/fruit"
version = "1.0.0" version = "1.0.0"
packageZipUrl = "https://foo.com/fruit.zip" packageZipUrl = "https://foo.com/fruit.zip"
} }
""" """
.trimIndent(), .trimIndent(),
) )
@@ -322,7 +322,7 @@ class CliProjectResolverTest {
val errOut = StringWriter() val errOut = StringWriter()
CliProjectResolver( CliProjectResolver(
CliBaseOptions( CliBaseOptions(
caCertificates = listOf(FileTestUtils.selfSignedCertificatePem), caCertificates = listOf(FileTestUtils.selfSignedCertificate),
testPort = packageServer.port, testPort = packageServer.port,
noCache = true, noCache = true,
), ),
@@ -375,7 +375,7 @@ class CliProjectResolverTest {
uri = "package://localhost:0/birds@0.5.0" uri = "package://localhost:0/birds@0.5.0"
} }
} }
""" """
.trimIndent(), .trimIndent(),
) )
@@ -389,7 +389,7 @@ class CliProjectResolverTest {
uri = "package://localhost:0/fruit@1.1.0" uri = "package://localhost:0/fruit@1.1.0"
} }
} }
""" """
.trimIndent(), .trimIndent(),
) )
@@ -397,7 +397,7 @@ class CliProjectResolverTest {
val errOut = StringWriter() val errOut = StringWriter()
CliProjectResolver( CliProjectResolver(
CliBaseOptions( CliBaseOptions(
caCertificates = listOf(FileTestUtils.selfSignedCertificatePem), caCertificates = listOf(FileTestUtils.selfSignedCertificate),
testPort = packageServer.port, testPort = packageServer.port,
noCache = true, noCache = true,
), ),
@@ -469,14 +469,14 @@ class CliProjectResolverTest {
.resolve("PklProject") .resolve("PklProject")
.writeString( .writeString(
""" """
amends "pkl:Project" amends "pkl:Project"
dependencies { dependencies {
["birds"] { ["birds"] {
uri = "package://localhost:0/birds@0.5.0" uri = "package://localhost:0/birds@0.5.0"
}
} }
""" }
"""
.trimIndent() .trimIndent()
) )
// coerce an IOException by making this a directory // coerce an IOException by making this a directory
@@ -484,7 +484,7 @@ class CliProjectResolverTest {
assertThatCode { assertThatCode {
CliProjectResolver( CliProjectResolver(
CliBaseOptions( CliBaseOptions(
caCertificates = listOf(FileTestUtils.selfSignedCertificatePem), caCertificates = listOf(FileTestUtils.selfSignedCertificate),
testPort = packageServer.port, testPort = packageServer.port,
noCache = true, noCache = true,
), ),
@@ -47,7 +47,7 @@ class CliTestRunnerTest {
3 == 3 3 == 3
} }
} }
""" """
.trimIndent() .trimIndent()
val input = tempDir.resolve("test.pkl").writeString(code).toString() val input = tempDir.resolve("test.pkl").writeString(code).toString()
val out = StringWriter() val out = StringWriter()
@@ -65,13 +65,13 @@ class CliTestRunnerTest {
assertThat(out.toString().stripFileAndLines(tempDir)) assertThat(out.toString().stripFileAndLines(tempDir))
.isEqualTo( .isEqualTo(
""" """
module test module test
facts facts
✔ succeed ✔ succeed
100.0% tests pass [1 passed], 100.0% asserts pass [2 passed]
100.0% tests pass [1 passed], 100.0% asserts pass [2 passed] """
"""
.trimIndent() .trimIndent()
) )
assertThat(err.toString()).isEqualTo("") assertThat(err.toString()).isEqualTo("")
@@ -89,7 +89,7 @@ class CliTestRunnerTest {
1 == 5 1 == 5
} }
} }
""" """
.trimIndent() .trimIndent()
val input = tempDir.resolve("test.pkl").writeString(code).toString() val input = tempDir.resolve("test.pkl").writeString(code).toString()
val out = StringWriter() val out = StringWriter()
@@ -136,7 +136,7 @@ class CliTestRunnerTest {
throw("uh oh") throw("uh oh")
} }
} }
""" """
.trimIndent() .trimIndent()
val input = tempDir.resolve("test.pkl").writeString(code).toString() val input = tempDir.resolve("test.pkl").writeString(code).toString()
val out = StringWriter() val out = StringWriter()
@@ -154,19 +154,19 @@ class CliTestRunnerTest {
assertThat(out.toString().stripFileAndLines(tempDir)) assertThat(out.toString().stripFileAndLines(tempDir))
.isEqualToNormalizingNewlines( .isEqualToNormalizingNewlines(
""" """
module test module test
facts facts
✘ fail ✘ fail
–– Pkl Error –– –– Pkl Error ––
uh oh uh oh
5 | throw("uh oh") 5 | throw("uh oh")
^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^
at test#facts["fail"][#1] (/tempDir/test.pkl, line xx) at test#facts["fail"][#1] (/tempDir/test.pkl, line xx)
0.0% tests pass [1/1 failed], 0.0% asserts pass [1/1 failed] 0.0% tests pass [1/1 failed], 0.0% asserts pass [1/1 failed]
""" """
.trimIndent() .trimIndent()
) )
assertThat(err.toString()).isEqualTo("") assertThat(err.toString()).isEqualTo("")
@@ -183,7 +183,7 @@ class CliTestRunnerTest {
throw("uh oh") throw("uh oh")
} }
} }
""" """
.trimIndent() .trimIndent()
val input = tempDir.resolve("test.pkl").writeString(code).toString() val input = tempDir.resolve("test.pkl").writeString(code).toString()
val out = StringWriter() val out = StringWriter()
@@ -201,19 +201,19 @@ class CliTestRunnerTest {
assertThat(out.toString().stripFileAndLines(tempDir)) assertThat(out.toString().stripFileAndLines(tempDir))
.isEqualTo( .isEqualTo(
""" """
module test module test
examples examples
✘ fail ✘ fail
–– Pkl Error –– –– Pkl Error ––
uh oh uh oh
5 | throw("uh oh") 5 | throw("uh oh")
^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^
at test#examples["fail"][#1] (/tempDir/test.pkl, line xx) at test#examples["fail"][#1] (/tempDir/test.pkl, line xx)
0.0% tests pass [1/1 failed], 0.0% asserts pass [1/1 failed] 0.0% tests pass [1/1 failed], 0.0% asserts pass [1/1 failed]
""" """
.trimIndent() .trimIndent()
) )
assertThat(err.toString()).isEqualTo("") assertThat(err.toString()).isEqualTo("")
@@ -232,19 +232,19 @@ class CliTestRunnerTest {
throw("uh oh") throw("uh oh")
} }
} }
""" """
.trimIndent() .trimIndent()
val input = tempDir.resolve("test.pkl").writeString(code).toString() val input = tempDir.resolve("test.pkl").writeString(code).toString()
tempDir tempDir
.resolve("test.pkl-expected.pcf") .resolve("test.pkl-expected.pcf")
.writeString( .writeString(
""" """
examples { examples {
["fail"] { ["fail"] {
"never compared to" "never compared to"
}
} }
""" }
"""
.trimIndent() .trimIndent()
) )
val out = StringWriter() val out = StringWriter()
@@ -262,19 +262,19 @@ class CliTestRunnerTest {
assertThat(out.toString().stripFileAndLines(tempDir)) assertThat(out.toString().stripFileAndLines(tempDir))
.isEqualToNormalizingNewlines( .isEqualToNormalizingNewlines(
""" """
module test module test
examples examples
✘ fail ✘ fail
–– Pkl Error –– –– Pkl Error ––
uh oh uh oh
5 | throw("uh oh")
^^^^^^^^^^^^^^
at test#examples["fail"][#1] (/tempDir/test.pkl, line xx)
5 | throw("uh oh") 0.0% tests pass [1/1 failed], 0.0% asserts pass [1/1 failed]
^^^^^^^^^^^^^^
at test#examples["fail"][#1] (/tempDir/test.pkl, line xx)
0.0% tests pass [1/1 failed], 0.0% asserts pass [1/1 failed] """
"""
.trimIndent() .trimIndent()
) )
assertThat(err.toString()).isEqualTo("") assertThat(err.toString()).isEqualTo("")
@@ -296,7 +296,7 @@ class CliTestRunnerTest {
5 == 9 5 == 9
} }
} }
""" """
.trimIndent() .trimIndent()
val input = tempDir.resolve("test.pkl").writeString(code).toString() val input = tempDir.resolve("test.pkl").writeString(code).toString()
val noopWriter = noopWriter() val noopWriter = noopWriter()
@@ -314,19 +314,19 @@ class CliTestRunnerTest {
assertThat(junitReport) assertThat(junitReport)
.isEqualTo( .isEqualTo(
""" """
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<testsuite name="test" tests="2" failures="1"> <testsuite name="test" tests="2" failures="1">
<testcase classname="test.facts" name="foo"></testcase> <testcase classname="test.facts" name="foo"></testcase>
<testcase classname="test.facts" name="bar"> <testcase classname="test.facts" name="bar">
<failure message="Fact Failure">5 == 9 (/tempDir/test.pkl, line xx) <failure message="Fact Failure">5 == 9 (/tempDir/test.pkl, line xx)
false</failure> false</failure>
</testcase> </testcase>
<system-err><![CDATA[9 = 9 <system-err><![CDATA[9 = 9
]]></system-err> ]]></system-err>
</testsuite> </testsuite>
""" """
.trimIndent() .trimIndent()
) )
} }
@@ -346,7 +346,7 @@ class CliTestRunnerTest {
throw("uh oh") throw("uh oh")
} }
} }
""" """
.trimIndent() .trimIndent()
val input = tempDir.resolve("test.pkl").writeString(code).toString() val input = tempDir.resolve("test.pkl").writeString(code).toString()
val noopWriter = noopWriter() val noopWriter = noopWriter()
@@ -364,23 +364,23 @@ class CliTestRunnerTest {
assertThat(junitReport) assertThat(junitReport)
.isEqualTo( .isEqualTo(
""" """
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<testsuite name="test" tests="2" failures="1"> <testsuite name="test" tests="2" failures="1">
<testcase classname="test.facts" name="foo"></testcase> <testcase classname="test.facts" name="foo"></testcase>
<testcase classname="test.facts" name="fail"> <testcase classname="test.facts" name="fail">
<error message="uh oh">–– Pkl Error –– <error message="uh oh">–– Pkl Error ––
uh oh uh oh
9 | throw(&quot;uh oh&quot;) 9 | throw(&quot;uh oh&quot;)
^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^
at test#facts[&quot;fail&quot;][#1] (/tempDir/test.pkl, line xx) at test#facts[&quot;fail&quot;][#1] (/tempDir/test.pkl, line xx)
</error> </error>
</testcase> </testcase>
<system-err><![CDATA[9 = 9 <system-err><![CDATA[9 = 9
]]></system-err> ]]></system-err>
</testsuite> </testsuite>
""" """
.trimIndent() .trimIndent()
) )
} }
@@ -390,7 +390,7 @@ class CliTestRunnerTest {
val foo = val foo =
""" """
module foo module foo
amends "pkl:test" amends "pkl:test"
facts { facts {
@@ -398,13 +398,13 @@ class CliTestRunnerTest {
1 == 1 1 == 1
} }
} }
""" """
.trimIndent() .trimIndent()
val bar = val bar =
""" """
module foo module foo
amends "pkl:test" amends "pkl:test"
facts { facts {
@@ -412,7 +412,7 @@ class CliTestRunnerTest {
1 == 1 1 == 1
} }
} }
""" """
.trimIndent() .trimIndent()
val input = tempDir.resolve("test.pkl").writeString(foo).toString() val input = tempDir.resolve("test.pkl").writeString(foo).toString()
val input2 = tempDir.resolve("test.pkl").writeString(bar).toString() val input2 = tempDir.resolve("test.pkl").writeString(bar).toString()
@@ -438,7 +438,7 @@ class CliTestRunnerTest {
true true
} }
} }
""" """
.trimIndent() .trimIndent()
val code2 = val code2 =
@@ -450,7 +450,7 @@ class CliTestRunnerTest {
true true
} }
} }
""" """
.trimIndent() .trimIndent()
val input1 = tempDir.resolve("test1.pkl").writeString(code1).toString() val input1 = tempDir.resolve("test1.pkl").writeString(code1).toString()
val input2 = tempDir.resolve("test2.pkl").writeString(code2).toString() val input2 = tempDir.resolve("test2.pkl").writeString(code2).toString()
@@ -482,7 +482,7 @@ class CliTestRunnerTest {
5 == 9 5 == 9
} }
} }
""" """
.trimIndent() .trimIndent()
val code2 = val code2 =
@@ -500,7 +500,7 @@ class CliTestRunnerTest {
true true
} }
} }
""" """
.trimIndent() .trimIndent()
val input1 = tempDir.resolve("test1.pkl").writeString(code1).toString() val input1 = tempDir.resolve("test1.pkl").writeString(code1).toString()
val input2 = tempDir.resolve("test2.pkl").writeString(code2).toString() val input2 = tempDir.resolve("test2.pkl").writeString(code2).toString()
@@ -547,7 +547,7 @@ class CliTestRunnerTest {
</testsuite> </testsuite>
</testsuites> </testsuites>
""" """
.trimIndent() .trimIndent()
) )
} }
@@ -563,7 +563,7 @@ class CliTestRunnerTest {
true true
} }
} }
""" """
.trimIndent() .trimIndent()
val code2 = val code2 =
@@ -575,7 +575,7 @@ class CliTestRunnerTest {
true true
} }
} }
""" """
.trimIndent() .trimIndent()
val input1 = tempDir.resolve("test1.pkl").writeString(code1).toString() val input1 = tempDir.resolve("test1.pkl").writeString(code1).toString()
val input2 = tempDir.resolve("test2.pkl").writeString(code2).toString() val input2 = tempDir.resolve("test2.pkl").writeString(code2).toString()
@@ -620,19 +620,19 @@ class CliTestRunnerTest {
2 2
} }
} }
""" """
.trimIndent() .trimIndent()
val input = tempDir.resolve("test.pkl").writeString(code).toString() val input = tempDir.resolve("test.pkl").writeString(code).toString()
tempDir tempDir
.resolve("test.pkl-expected.pcf") .resolve("test.pkl-expected.pcf")
.writeString( .writeString(
""" """
examples { examples {
["nums"] { ["nums"] {
1 1
}
} }
""" }
"""
.trimIndent() .trimIndent()
) )
val out = StringWriter() val out = StringWriter()
@@ -676,7 +676,7 @@ class CliTestRunnerTest {
2 2
} }
} }
""" """
.trimIndent() .trimIndent()
val input = tempDir.resolve("test.pkl").writeString(code).toString() val input = tempDir.resolve("test.pkl").writeString(code).toString()
val out = StringWriter() val out = StringWriter()
@@ -694,13 +694,13 @@ class CliTestRunnerTest {
assertThat(out.toString()) assertThat(out.toString())
.isEqualTo( .isEqualTo(
""" """
module test module test
examples examples
✍️ nums ✍️ nums
1 examples written 1 examples written
""" """
.trimIndent() .trimIndent()
) )
} }
@@ -738,13 +738,13 @@ class CliTestRunnerTest {
assertThat(out.toString().stripFileAndLines(tempDir)) assertThat(out.toString().stripFileAndLines(tempDir))
.isEqualTo( .isEqualTo(
""" """
module test module test
facts facts
✔ localeTest ✔ localeTest
100.0% tests pass [1 passed], 100.0% asserts pass [1 passed] 100.0% tests pass [1 passed], 100.0% asserts pass [1 passed]
""" """
.trimIndent() .trimIndent()
) )
assertThat(err.toString()).isEqualTo("") assertThat(err.toString()).isEqualTo("")
@@ -31,7 +31,7 @@ class CliJavaCodeGenerator(private val options: CliJavaCodeGeneratorOptions) :
val builder = evaluatorBuilder() val builder = evaluatorBuilder()
try { try {
builder.build().use { evaluator -> builder.build().use { evaluator ->
for (moduleUri in options.base.normalizedSourceModules) { for (moduleUri in resolvedSourceModules) {
val schema = evaluator.evaluateSchema(ModuleSource.uri(moduleUri)) val schema = evaluator.evaluateSchema(ModuleSource.uri(moduleUri))
val codeGenerator = JavaCodeGenerator(schema, options.toJavaCodeGeneratorOptions()) val codeGenerator = JavaCodeGenerator(schema, options.toJavaCodeGeneratorOptions())
try { try {
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
@file:Suppress("unused", "CanConvertToMultiDollarString") @file:Suppress("unused")
package org.pkl.codegen.java package org.pkl.codegen.java
@@ -172,7 +172,7 @@ class JavaCodeGenerator(
val annotation = codegenOptions.nonNullAnnotation val annotation = codegenOptions.nonNullAnnotation
val className = val className =
if (annotation == null) { if (annotation == null) {
ClassName.get("org.jspecify.annotations", "NonNull") ClassName.get("org.pkl.config.java.mapper", "NonNull")
} else { } else {
toClassName(annotation) toClassName(annotation)
} }
@@ -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.
@@ -102,10 +102,10 @@ class PklJavaCodegenCommand : ModulesCommand(name = "pkl-codegen-java", helpLink
names = arrayOf("--non-null-annotation"), names = arrayOf("--non-null-annotation"),
help = help =
""" """
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.
""" """
.trimIndent(), .trimIndent(),
) )
@@ -122,10 +122,10 @@ class PklJavaCodegenCommand : ModulesCommand(name = "pkl-codegen-java", helpLink
metavar = "old_name=new_name", metavar = "old_name=new_name",
help = help =
""" """
Replace a prefix in the names of the generated Java classes (repeatable). Replace a prefix in the names of the generated Java classes (repeatable).
By default, the names of generated classes are derived from the Pkl module names. By default, the names of generated classes are derived from the Pkl module names.
With this option, you can override or modify the default names, renaming entire With this option, you can override or modify the default names, renaming entire
classes or just their packages. classes or just their packages.
""" """
.trimIndent(), .trimIndent(),
) )
File diff suppressed because it is too large Load Diff
@@ -5,8 +5,8 @@ import java.lang.Override;
import java.lang.String; import java.lang.String;
import java.lang.StringBuilder; import java.lang.StringBuilder;
import java.util.Objects; import java.util.Objects;
import org.jspecify.annotations.NonNull;
import org.pkl.config.java.mapper.Named; import org.pkl.config.java.mapper.Named;
import org.pkl.config.java.mapper.NonNull;
import org.pkl.core.DataSize; import org.pkl.core.DataSize;
import org.pkl.core.Duration; import org.pkl.core.Duration;
@@ -5,8 +5,8 @@ import java.lang.Override;
import java.lang.String; import java.lang.String;
import java.lang.StringBuilder; import java.lang.StringBuilder;
import java.util.Objects; import java.util.Objects;
import org.jspecify.annotations.NonNull;
import org.pkl.config.java.mapper.Named; import org.pkl.config.java.mapper.Named;
import org.pkl.config.java.mapper.NonNull;
import org.pkl.core.Duration; import org.pkl.core.Duration;
public final class Mod { public final class Mod {
@@ -5,8 +5,8 @@ import java.lang.Override;
import java.lang.String; import java.lang.String;
import java.lang.StringBuilder; import java.lang.StringBuilder;
import java.util.Objects; import java.util.Objects;
import org.jspecify.annotations.NonNull;
import org.pkl.config.java.mapper.Named; import org.pkl.config.java.mapper.Named;
import org.pkl.config.java.mapper.NonNull;
/** /**
* module comment. * module comment.
@@ -11,8 +11,8 @@ import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.Set; import java.util.Set;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import org.jspecify.annotations.NonNull;
import org.pkl.config.java.mapper.Named; import org.pkl.config.java.mapper.Named;
import org.pkl.config.java.mapper.NonNull;
import org.pkl.core.DataSize; import org.pkl.core.DataSize;
import org.pkl.core.DataSizeUnit; import org.pkl.core.DataSizeUnit;
import org.pkl.core.Duration; import org.pkl.core.Duration;
@@ -32,7 +32,7 @@ class CliKotlinCodeGenerator(private val options: CliKotlinCodeGeneratorOptions)
try { try {
builder.build().use { evaluator -> builder.build().use { evaluator ->
for (moduleUri in options.base.normalizedSourceModules) { for (moduleUri in resolvedSourceModules) {
val schema = evaluator.evaluateSchema(ModuleSource.uri(moduleUri)) val schema = evaluator.evaluateSchema(ModuleSource.uri(moduleUri))
val codeGenerator = KotlinCodeGenerator(schema, options.toKotlinCodeGeneratorOptions()) val codeGenerator = KotlinCodeGenerator(schema, options.toKotlinCodeGeneratorOptions())
try { try {
@@ -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.
@@ -91,10 +91,10 @@ class PklKotlinCodegenCommand : ModulesCommand(name = "pkl-codegen-kotlin", help
metavar = "old_name=new_name", metavar = "old_name=new_name",
help = help =
""" """
Replace a prefix in the names of the generated Kotlin classes (repeatable). Replace a prefix in the names of the generated Kotlin classes (repeatable).
By default, the names of generated classes are derived from the Pkl module names. By default, the names of generated classes are derived from the Pkl module names.
With this option, you can override or modify the default names, renaming entire With this option, you can override or modify the default names, renaming entire
classes or just their packages. classes or just their packages.
""" """
.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.
@@ -77,7 +77,7 @@ class CliKotlinCodeGeneratorTest {
open class Mod1( open class Mod1(
open val pigeon: Person open val pigeon: Person
) { ) {
""" """
.trimIndent(), .trimIndent(),
module1KotlinFile.readString(), module1KotlinFile.readString(),
) )
@@ -88,7 +88,7 @@ class CliKotlinCodeGeneratorTest {
pigeon: Mod1.Person, pigeon: Mod1.Person,
val parrot: Mod1.Person val parrot: Mod1.Person
) : Mod1(pigeon) { ) : Mod1(pigeon) {
""" """
.trimIndent(), .trimIndent(),
module2KotlinFile.readString(), module2KotlinFile.readString(),
) )
File diff suppressed because it is too large Load Diff
+2 -3
View File
@@ -19,11 +19,10 @@ plugins {
id("pklPublishLibrary") id("pklPublishLibrary")
} }
val svmClasspath: Configuration = configurations.create("svmClasspath") val svmClasspath: Configuration by configurations.creating
// used by pklNativeExecutable.gradle.kts // used by pklNativeExecutable.gradle.kts
@Suppress("unused") @Suppress("unused") val svm: SourceSet by sourceSets.creating { compileClasspath = svmClasspath }
val svm: SourceSet = sourceSets.create("svm") { compileClasspath = svmClasspath }
dependencies { dependencies {
api(projects.pklCore) api(projects.pklCore)
@@ -144,14 +144,11 @@ data class CliBaseOptions(
/** URL prefixes to rewrite. */ /** URL prefixes to rewrite. */
val httpRewrites: Map<URI, URI>? = null, val httpRewrites: Map<URI, URI>? = null,
/** HTTP headers to add to the request. */
val httpHeaders: Map<String, Map<String, List<String>>>? = null,
/** External module reader process specs */ /** External module reader process specs */
val externalModuleReaders: Map<String, ExternalReader>? = null, val externalModuleReaders: Map<String, ExternalReader> = mapOf(),
/** External resource reader process specs */ /** External resource reader process specs */
val externalResourceReaders: Map<String, ExternalReader>? = null, val externalResourceReaders: Map<String, ExternalReader> = mapOf(),
/** Defines options for the formatting of calls to the trace() method. */ /** Defines options for the formatting of calls to the trace() method. */
val traceMode: TraceMode? = null, val traceMode: TraceMode? = null,
@@ -189,15 +186,16 @@ data class CliBaseOptions(
sourceModules sourceModules
.map { uri -> .map { uri ->
if (uri.isAbsolute) uri if (uri.isAbsolute) uri
else if (uri.path.startsWith("@")) uri else if (uri.path.startsWith("@") && !noProject && normalizedProjectFile != null) uri
else IoUtils.resolve(normalizedWorkingDir.toUri(), uri) else IoUtils.resolve(normalizedWorkingDir.toUri(), uri)
} }
// sort modules to make cli output independent of source module order // sort modules to make cli output independent of source module order
.sorted() .sorted()
val normalizedSettingsModule: URI? = settings?.let { uri -> val normalizedSettingsModule: URI? =
if (uri.isAbsolute) uri else IoUtils.resolve(normalizedWorkingDir.toUri(), uri) settings?.let { uri ->
} if (uri.isAbsolute) uri else IoUtils.resolve(normalizedWorkingDir.toUri(), uri)
}
/** [modulePath] after normalization. */ /** [modulePath] after normalization. */
val normalizedModulePath: List<Path>? = modulePath?.map(normalizedWorkingDir::resolve) val normalizedModulePath: List<Path>? = modulePath?.map(normalizedWorkingDir::resolve)
@@ -86,6 +86,36 @@ abstract class CliCommand(protected val cliOptions: CliBaseOptions) {
} }
} }
protected fun resolveModuleUri(uri: URI): URI =
if (uri.isAbsolute) uri
else { // must be @dep/mod.pkl notation!!
if (!uri.path.startsWith('@'))
throw CliBugException(
RuntimeException("tried to resolve project URI `$uri` with no @ prefix")
)
if (project == null)
throw CliBugException(
RuntimeException("tried to resolve project URI `$uri` with no project present")
)
val dep = uri.path.substringBefore('/').drop(1)
val path = uri.path.dropWhile { it != '/' }
if (path.isEmpty()) throw CliException("Invalid project dependency URI `$uri`.")
val remoteDep =
project!!.dependencies.remoteDependencies()[dep]
?: if (project!!.dependencies.localDependencies().containsKey(dep))
throw CliException(
"Only remote project dependencies may be referenced using @-notation. Dependency `@$dep` is a local dependency."
)
else throw CliException("Project does not contain dependency `@$dep`.")
remoteDep.packageUri.toPackageAssetUri(path).uri
}
protected val resolvedSourceModules: List<URI> by lazy {
if (project == null) cliOptions.normalizedSourceModules
else cliOptions.normalizedSourceModules.map(::resolveModuleUri)
}
protected fun loadProject(projectFile: Path): Project { protected fun loadProject(projectFile: Path): Project {
val securityManager = val securityManager =
SecurityManagers.standard( SecurityManagers.standard(
@@ -110,7 +140,7 @@ abstract class CliCommand(protected val cliOptions: CliBaseOptions) {
private val evaluatorSettings: PklEvaluatorSettings? by lazy { private val evaluatorSettings: PklEvaluatorSettings? by lazy {
@Suppress("PklCliDirectProjectEvaluatorSettingsAccess") @Suppress("PklCliDirectProjectEvaluatorSettingsAccess")
if (cliOptions.omitProjectSettings) null else project?.resolvedEvaluatorSettings if (cliOptions.omitProjectSettings) null else project?.evaluatorSettings
} }
protected val allowedModules: List<Pattern> by lazy { protected val allowedModules: List<Pattern> by lazy {
@@ -185,19 +215,15 @@ abstract class CliCommand(protected val cliOptions: CliBaseOptions) {
} }
protected val httpRewrites: Map<URI, URI>? by lazy { protected val httpRewrites: Map<URI, URI>? by lazy {
cliOptions.httpRewrites ?: evaluatorSettings?.http?.rewrites ?: settings.http?.rewrites cliOptions.httpRewrites ?: evaluatorSettings?.http?.rewrites ?: settings.http?.rewrites()
}
private val httpHeaders: Map<String, Map<String, List<String>>>? by lazy {
cliOptions.httpHeaders ?: evaluatorSettings?.http?.headers ?: settings.http?.headers
} }
protected val externalModuleReaders: Map<String, PklEvaluatorSettings.ExternalReader> by lazy { protected val externalModuleReaders: Map<String, PklEvaluatorSettings.ExternalReader> by lazy {
cliOptions.externalModuleReaders ?: evaluatorSettings?.externalModuleReaders ?: mapOf() (evaluatorSettings?.externalModuleReaders ?: emptyMap()) + cliOptions.externalModuleReaders
} }
protected val externalResourceReaders: Map<String, PklEvaluatorSettings.ExternalReader> by lazy { protected val externalResourceReaders: Map<String, PklEvaluatorSettings.ExternalReader> by lazy {
cliOptions.externalResourceReaders ?: evaluatorSettings?.externalResourceReaders ?: mapOf() (evaluatorSettings?.externalResourceReaders ?: emptyMap()) + cliOptions.externalResourceReaders
} }
private val externalProcesses: private val externalProcesses:
@@ -251,7 +277,6 @@ abstract class CliCommand(protected val cliOptions: CliBaseOptions) {
setProxy(proxyAddress, noProxy ?: listOf()) setProxy(proxyAddress, noProxy ?: listOf())
} }
httpRewrites?.let(::setRewrites) httpRewrites?.let(::setRewrites)
httpHeaders?.let(::setHeaders)
// Lazy building significantly reduces execution time of commands that do minimal work. // Lazy building significantly reduces execution time of commands that do minimal work.
// However, it means that HTTP client initialization errors won't surface until an HTTP // However, it means that HTTP client initialization errors won't surface until an HTTP
// request is made. // request is made.
@@ -282,7 +307,6 @@ abstract class CliCommand(protected val cliOptions: CliBaseOptions) {
add(ResourceReaders.modulePath(modulePathResolver)) add(ResourceReaders.modulePath(modulePathResolver))
add(ResourceReaders.pkg()) add(ResourceReaders.pkg())
add(ResourceReaders.projectpackage()) add(ResourceReaders.projectpackage())
addAll(ResourceReaders.fromServiceProviders())
add(ResourceReaders.file()) add(ResourceReaders.file())
add(ResourceReaders.http()) add(ResourceReaders.http())
add(ResourceReaders.https()) add(ResourceReaders.https())
@@ -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.
@@ -22,5 +22,4 @@ class CliTestOptions(
val overwrite: Boolean = false, val overwrite: Boolean = false,
val junitAggregateReports: Boolean = false, val junitAggregateReports: Boolean = false,
val junitAggregateSuiteName: String = "pkl-tests", val junitAggregateSuiteName: String = "pkl-tests",
val reporter: TestReporter = TestReporter.default,
) )
@@ -35,7 +35,6 @@ import org.pkl.core.evaluatorSettings.Color
import org.pkl.core.evaluatorSettings.PklEvaluatorSettings.ExternalReader import org.pkl.core.evaluatorSettings.PklEvaluatorSettings.ExternalReader
import org.pkl.core.evaluatorSettings.TraceMode import org.pkl.core.evaluatorSettings.TraceMode
import org.pkl.core.runtime.VmUtils import org.pkl.core.runtime.VmUtils
import org.pkl.core.util.GlobResolver
import org.pkl.core.util.IoUtils import org.pkl.core.util.IoUtils
@Suppress("MemberVisibilityCanBePrivate") @Suppress("MemberVisibilityCanBePrivate")
@@ -55,8 +54,7 @@ class BaseOptions : OptionGroup() {
if (IoUtils.isUriLike(moduleName)) URI(moduleName) if (IoUtils.isUriLike(moduleName)) URI(moduleName)
// Can't just use URI constructor, because URI(null, null, "C:/foo/bar", null) turns // Can't just use URI constructor, because URI(null, null, "C:/foo/bar", null) turns
// into `URI("C", null, "/foo/bar", null)`. // into `URI("C", null, "/foo/bar", null)`.
else if (IoUtils.isWindows() && IoUtils.isWindowsAbsolutePath(moduleName)) else if (IoUtils.isWindowsAbsolutePath(moduleName)) Path.of(moduleName).toUri()
Path.of(moduleName).toUri()
else URI(null, null, IoUtils.toNormalizedPathString(Path.of(moduleName)), null) else URI(null, null, IoUtils.toNormalizedPathString(Path.of(moduleName)), null)
} catch (e: URISyntaxException) { } catch (e: URISyntaxException) {
val message = buildString { val message = buildString {
@@ -92,11 +90,9 @@ class BaseOptions : OptionGroup() {
> { > {
return splitPair(delimiter).convert { return splitPair(delimiter).convert {
val cmd = shlex(it.second) val cmd = shlex(it.second)
Pair(it.first, ExternalReader(cmd.first(), cmd.drop(1), null)) Pair(it.first, ExternalReader(cmd.first(), cmd.drop(1)))
} }
} }
private val headerRegex = Regex("""^(.+?):[ \t]*(.*)$""")
} }
private val defaults = CliBaseOptions() private val defaults = CliBaseOptions()
@@ -289,37 +285,6 @@ class BaseOptions : OptionGroup() {
.multiple() .multiple()
.toMap() .toMap()
val httpHeaders: Map<String, Map<String, List<String>>> by
option(
names = arrayOf("--http-header"),
metavar = "<url-pattern>=<header name>:<header value>",
help = "HTTP header to add to the request.",
)
.splitPair()
.transformAll { pairs ->
buildMap<String, MutableMap<String, MutableList<String>>> {
for ((pattern, headerNameAndValue) in pairs) {
try {
GlobResolver.toRegexPattern(pattern)
} catch (e: GlobResolver.InvalidGlobPatternException) {
fail(e.message!!)
}
val (headerName, headerValue) =
headerRegex.find(headerNameAndValue)?.destructured
?: fail("Header '$headerNameAndValue' is not in 'name:value' format.")
try {
IoUtils.validateHeaderName(headerName)
IoUtils.validateHeaderValue(headerValue)
} catch (e: IllegalArgumentException) {
fail(e.message!!)
}
getOrPut(pattern) { mutableMapOf() }
.getOrPut(headerName) { mutableListOf() }
.add(headerValue)
}
}
}
val externalModuleReaders: Map<String, ExternalReader> by val externalModuleReaders: Map<String, ExternalReader> by
option( option(
names = arrayOf("--external-module-reader"), names = arrayOf("--external-module-reader"),
@@ -386,9 +351,8 @@ class BaseOptions : OptionGroup() {
httpProxy = proxy, httpProxy = proxy,
httpNoProxy = noProxy, httpNoProxy = noProxy,
httpRewrites = httpRewrites.ifEmpty { null }, httpRewrites = httpRewrites.ifEmpty { null },
httpHeaders = httpHeaders.ifEmpty { null }, externalModuleReaders = externalModuleReaders,
externalModuleReaders = externalModuleReaders.ifEmpty { null }, externalResourceReaders = externalResourceReaders,
externalResourceReaders = externalResourceReaders.ifEmpty { null },
traceMode = traceMode, traceMode = traceMode,
powerAssertionsEnabled = powerAssertionsEnabled, powerAssertionsEnabled = powerAssertionsEnabled,
) )
@@ -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,11 +19,9 @@ import com.github.ajalt.clikt.parameters.groups.OptionGroup
import com.github.ajalt.clikt.parameters.options.default import com.github.ajalt.clikt.parameters.options.default
import com.github.ajalt.clikt.parameters.options.flag import com.github.ajalt.clikt.parameters.options.flag
import com.github.ajalt.clikt.parameters.options.option import com.github.ajalt.clikt.parameters.options.option
import com.github.ajalt.clikt.parameters.types.enum
import com.github.ajalt.clikt.parameters.types.path import com.github.ajalt.clikt.parameters.types.path
import java.nio.file.Path import java.nio.file.Path
import org.pkl.commons.cli.CliTestOptions import org.pkl.commons.cli.CliTestOptions
import org.pkl.commons.cli.TestReporter
class TestOptions : OptionGroup() { class TestOptions : OptionGroup() {
private val junitReportDir: Path? by private val junitReportDir: Path? by
@@ -53,19 +51,7 @@ class TestOptions : OptionGroup() {
private val overwrite: Boolean by private val overwrite: Boolean by
option(names = arrayOf("--overwrite"), help = "Force generation of expected examples.").flag() option(names = arrayOf("--overwrite"), help = "Force generation of expected examples.").flag()
private val reporter: TestReporter by
option(names = arrayOf("--test-reporter"), help = "Which test reporter to use for CLI output.")
.enum<TestReporter> { it.name.lowercase() }
.single()
.default(TestReporter.default)
val cliTestOptions: CliTestOptions by lazy { val cliTestOptions: CliTestOptions by lazy {
CliTestOptions( CliTestOptions(junitReportDir, overwrite, junitAggregateReports, junitAggregateSuiteName)
junitReportDir,
overwrite,
junitAggregateReports,
junitAggregateSuiteName,
reporter,
)
} }
} }
@@ -1,5 +0,0 @@
amends "pkl:Project"
dependencies {
["fruit"] { uri = "package://localhost:0/fruit@1.1.0" }
}
@@ -1,12 +0,0 @@
{
"schemaVersion": 1,
"resolvedDependencies": {
"package://localhost:0/fruit@1": {
"type": "remote",
"uri": "projectpackage://localhost:0/fruit@1.1.0",
"checksums": {
"sha256": "$skipChecksumVerification"
}
}
}
}
@@ -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.
@@ -98,17 +98,17 @@ class BaseCommandTest {
assertThat(cmd.baseOptions.externalModuleReaders) assertThat(cmd.baseOptions.externalModuleReaders)
.isEqualTo( .isEqualTo(
mapOf( mapOf(
"scheme3" to ExternalReader("reader3", emptyList(), null), "scheme3" to ExternalReader("reader3", emptyList()),
"scheme4" to ExternalReader("reader4", listOf("with", "args"), null), "scheme4" to ExternalReader("reader4", listOf("with", "args")),
"scheme+ext" to ExternalReader("reader5", listOf("with", "args"), null), "scheme+ext" to ExternalReader("reader5", listOf("with", "args")),
) )
) )
assertThat(cmd.baseOptions.externalResourceReaders) assertThat(cmd.baseOptions.externalResourceReaders)
.isEqualTo( .isEqualTo(
mapOf( mapOf(
"scheme1" to ExternalReader("reader1", emptyList(), null), "scheme1" to ExternalReader("reader1", emptyList()),
"scheme2" to ExternalReader("reader2", listOf("with", "args"), null), "scheme2" to ExternalReader("reader2", listOf("with", "args")),
"scheme+ext" to ExternalReader("reader5", listOf("with", "args"), null), "scheme+ext" to ExternalReader("reader5", listOf("with", "args")),
) )
) )
} }
@@ -17,10 +17,13 @@ package org.pkl.commons.cli
import com.github.ajalt.clikt.core.parse import com.github.ajalt.clikt.core.parse
import com.github.ajalt.clikt.parameters.groups.provideDelegate import com.github.ajalt.clikt.parameters.groups.provideDelegate
import java.net.URI
import java.nio.file.Path import java.nio.file.Path
import kotlin.io.path.ExperimentalPathApi import kotlin.io.path.ExperimentalPathApi
import kotlin.io.path.writeText
import org.assertj.core.api.Assertions.assertThat import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.Test import org.junit.jupiter.api.Test
import org.junit.jupiter.api.assertThrows
import org.junit.jupiter.api.condition.DisabledOnJre import org.junit.jupiter.api.condition.DisabledOnJre
import org.junit.jupiter.api.condition.JRE import org.junit.jupiter.api.condition.JRE
import org.junit.jupiter.api.io.TempDir import org.junit.jupiter.api.io.TempDir
@@ -28,12 +31,12 @@ import org.pkl.commons.cli.commands.BaseCommand
import org.pkl.commons.cli.commands.ProjectOptions import org.pkl.commons.cli.commands.ProjectOptions
import org.pkl.commons.writeString import org.pkl.commons.writeString
import org.pkl.core.SecurityManagers import org.pkl.core.SecurityManagers
import org.pkl.core.evaluatorSettings.PklEvaluatorSettings
import org.pkl.core.evaluatorSettings.TraceMode import org.pkl.core.evaluatorSettings.TraceMode
import org.pkl.core.util.IoUtils import org.pkl.core.util.IoUtils
@OptIn(ExperimentalPathApi::class) @OptIn(ExperimentalPathApi::class)
class CliCommandTest { class CliCommandTest {
private val cmd = private val cmd =
object : BaseCommand("test", "") { object : BaseCommand("test", "") {
val projectOptions: ProjectOptions by ProjectOptions() val projectOptions: ProjectOptions by ProjectOptions()
@@ -46,6 +49,7 @@ class CliCommandTest {
class CliTest(options: CliBaseOptions) : CliCommand(options) { class CliTest(options: CliBaseOptions) : CliCommand(options) {
override fun doRun() = Unit override fun doRun() = Unit
val myResolvedSourceModules = resolvedSourceModules
val myAllowedModules = allowedModules val myAllowedModules = allowedModules
val myAllowedResources = allowedResources val myAllowedResources = allowedResources
val myRootDir = rootDir val myRootDir = rootDir
@@ -94,6 +98,114 @@ class CliCommandTest {
) )
} }
@Test
fun `@-notation package URIs - treated as relative paths when no project present`(
@TempDir tempDir: Path
) {
cmd.parse(arrayOf("--working-dir=$tempDir"))
val opts = cmd.baseOptions.baseOptions(listOf(URI("@foo/bar.pkl")), testMode = true)
val cliTest = CliTest(opts)
assertThat(cliTest.myResolvedSourceModules)
.isEqualTo(listOf(tempDir.toUri().resolve("@foo/bar.pkl")))
}
@Test
fun `@-notation package URIs - empty paths are rejected`(@TempDir tempDir: Path) {
tempDir
.resolve("PklProject")
.writeText(
"""
amends "pkl:Project"
"""
.trimIndent()
)
cmd.parse(arrayOf("--working-dir=$tempDir"))
val opts = cmd.baseOptions.baseOptions(listOf(URI("@no.slash")), testMode = true)
val exc = assertThrows<CliException> { CliTest(opts) }
assertThat(exc.message).isEqualTo("Invalid project dependency URI `@no.slash`.")
}
@Test
fun `@-notation package URIs - missing dependencies are rejected`(@TempDir tempDir: Path) {
tempDir
.resolve("PklProject")
.writeText(
"""
amends "pkl:Project"
"""
.trimIndent()
)
cmd.parse(arrayOf("--working-dir=$tempDir"))
val opts = cmd.baseOptions.baseOptions(listOf(URI("@foo/bar.pkl")), testMode = true)
val exc = assertThrows<CliException> { CliTest(opts) }
assertThat(exc.message).isEqualTo("Project does not contain dependency `@foo`.")
}
@Test
fun `@-notation package URIs - local dependencies are rejected`(
@TempDir tempDir: Path,
@TempDir depDir: Path,
) {
depDir
.resolve("PklProject")
.writeText(
"""
amends "pkl:Project"
package {
name = "foo"
baseUri = "package://example.com/foo"
version = "0.0.1"
packageZipUrl = "https://example.com/foo@\(version).zip"
}
"""
.trimIndent()
)
tempDir
.resolve("PklProject")
.writeText(
"""
amends "pkl:Project"
dependencies {
["foo"] = import("${depDir.toUri().resolve("PklProject")}")
}
"""
.trimIndent()
)
cmd.parse(arrayOf("--working-dir=$tempDir"))
val opts = cmd.baseOptions.baseOptions(listOf(URI("@foo/bar.pkl")), testMode = true)
val exc = assertThrows<CliException> { CliTest(opts) }
assertThat(exc.message)
.isEqualTo(
"Only remote project dependencies may be referenced using @-notation. Dependency `@foo` is a local dependency."
)
}
@Test
fun `@-notation package URIs - remote dependencies are resolved`(@TempDir tempDir: Path) {
tempDir
.resolve("PklProject")
.writeText(
"""
amends "pkl:Project"
dependencies {
["foo"] {
uri = "package://example.com/foo@1.2.3"
}
}
"""
.trimIndent()
)
cmd.parse(arrayOf("--working-dir=$tempDir"))
val opts = cmd.baseOptions.baseOptions(listOf(URI("@foo/bar.pkl")), testMode = true)
val cliTest = CliTest(opts)
assertThat(cliTest.myResolvedSourceModules)
.isEqualTo(listOf(tempDir.toUri().resolve("package://example.com/foo@1.2.3#/bar.pkl")))
}
val projectWithAllEvaluatorSettings = val projectWithAllEvaluatorSettings =
""" """
amends "pkl:Project" amends "pkl:Project"
@@ -172,32 +284,4 @@ class CliCommandTest {
.isNotNull .isNotNull
} }
} }
@Test
fun `--external-module-reader blows away PklProject externalModuleReaders`(
@TempDir tempDir: Path
) {
tempDir
.resolve("PklProject")
.writeString(
// language=pkl
"""
amends "pkl:Project"
evaluatorSettings {
externalModuleReaders {
["foo"] {
executable = "foo"
}
}
}
"""
.trimIndent()
)
cmd.parse(arrayOf("--external-module-reader", "bar=bar"))
val opts = cmd.baseOptions.baseOptions(emptyList(), null, true)
val cliTest = CliTest(opts)
assertThat(cliTest.myExternalModuleReaders)
.isEqualTo(mapOf("bar" to PklEvaluatorSettings.ExternalReader("bar", listOf(), null)))
}
} }
+5 -5
View File
@@ -37,7 +37,7 @@ dependencies {
* These packages are used by PackageServer to serve assets when running LanguageSnippetTests and * These packages are used by PackageServer to serve assets when running LanguageSnippetTests and
* PackageResolversTest. * PackageResolversTest.
*/ */
val createTestPackages = tasks.register("createTestPackages") val createTestPackages by tasks.registering
// make sure that declaring a dependency on this project suffices to have test fixtures generated // make sure that declaring a dependency on this project suffices to have test fixtures generated
tasks.processResources { tasks.processResources {
@@ -92,8 +92,8 @@ val keystoreName = "localhost.p12"
val keystoreFile = keystoreDir.map { it.file(keystoreName) } val keystoreFile = keystoreDir.map { it.file(keystoreName) }
val certsFileName = "localhost.pem" val certsFileName = "localhost.pem"
val generateKeys = val generateKeys by
tasks.register<JavaExec>("generateKeys") { tasks.registering(JavaExec::class) {
outputs.file(keystoreFile) outputs.file(keystoreFile)
mainClass.set("sun.security.tools.keytool.Main") mainClass.set("sun.security.tools.keytool.Main")
args = args =
@@ -117,8 +117,8 @@ val generateKeys =
} }
} }
val exportCerts = val exportCerts by
tasks.register<JavaExec>("exportCerts") { tasks.registering(JavaExec::class) {
val outputFile = keystoreDir.map { it.file(certsFileName) } val outputFile = keystoreDir.map { it.file(certsFileName) }
dependsOn(generateKeys) dependsOn(generateKeys)
inputs.file(keystoreFile) inputs.file(keystoreFile)
@@ -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,19 +31,12 @@ object FileTestUtils {
?: workingDir.parent.parent.takeIf { it.resolve("settings.gradle.kts").exists() } ?: workingDir.parent.parent.takeIf { it.resolve("settings.gradle.kts").exists() }
?: throw AssertionError("Failed to locate root project directory.") ?: throw AssertionError("Failed to locate root project directory.")
} }
val selfSignedCertificate: Path by lazy {
val selfSignedCertificateP12: Path by lazy {
rootProjectDir.resolve("pkl-commons-test/build/keystore/localhost.p12")
}
val selfSignedCertificatePem: Path by lazy {
rootProjectDir.resolve("pkl-commons-test/build/keystore/localhost.pem") rootProjectDir.resolve("pkl-commons-test/build/keystore/localhost.pem")
} }
val selfSignedCertificatePassword = "password"
fun writeCertificateWithMissingLines(dir: Path): Path { fun writeCertificateWithMissingLines(dir: Path): Path {
val lines = selfSignedCertificatePem.readLines() val lines = selfSignedCertificate.readLines()
// drop some lines in the middle // drop some lines in the middle
return dir.resolve("invalidCerts.pem").writeLines(lines.take(5) + lines.takeLast(5)) return dir.resolve("invalidCerts.pem").writeLines(lines.take(5) + lines.takeLast(5))
} }
@@ -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.
@@ -17,7 +17,6 @@ package org.pkl.config.java;
import java.lang.reflect.Type; import java.lang.reflect.Type;
import java.util.Map; import java.util.Map;
import org.jspecify.annotations.Nullable;
import org.pkl.config.java.mapper.ValueMapper; import org.pkl.config.java.mapper.ValueMapper;
import org.pkl.core.Composite; import org.pkl.core.Composite;
@@ -50,37 +49,17 @@ abstract class AbstractConfig implements Config {
@Override @Override
public <T> T as(Class<T> type) { public <T> T as(Class<T> type) {
return trustNonNull(asNullable(type)); return as((Type) type);
}
@Override
public <T> T as(JavaType<T> type) {
return trustNonNull(asNullable(type));
} }
@Override @Override
public <T> T as(Type type) { public <T> T as(Type type) {
return trustNonNull(asNullable(type));
}
@Override
public <T> @Nullable T asNullable(Class<T> type) {
return mapper.map(getRawValue(), type); return mapper.map(getRawValue(), type);
} }
@Override @Override
public <T> @Nullable T asNullable(JavaType<T> type) { public <T> T as(JavaType<T> javaType) {
return mapper.map(getRawValue(), type.getType()); return as(javaType.getType());
}
@Override
public <T extends @Nullable Object> T asNullable(Type type) {
return mapper.map(getRawValue(), type);
}
@SuppressWarnings({"unchecked", "DataFlowIssue", "NullAway"})
private static <T> T trustNonNull(@Nullable Object value) {
return (T) value;
} }
protected abstract Object getRawChildValue(String property); protected abstract Object getRawChildValue(String property);
@@ -17,130 +17,60 @@ package org.pkl.config.java;
import java.io.InputStream; import java.io.InputStream;
import java.lang.reflect.Type; import java.lang.reflect.Type;
import org.jspecify.annotations.NullUnmarked;
import org.jspecify.annotations.Nullable; import org.jspecify.annotations.Nullable;
import org.pkl.config.java.mapper.ConversionException; import org.pkl.config.java.mapper.ConversionException;
import org.pkl.config.java.mapper.ValueMapper; import org.pkl.config.java.mapper.ValueMapper;
import org.pkl.core.Evaluator;
/** /**
* A root, intermediate, or leaf node in a configuration tree. * A root, intermediate, or leaf node in a configuration tree. Child nodes can be obtained by name
* * using {@link #get(String)}. To consume the node's composite or scalar value, convert the value to
* <p>To navigate to a child node, use {@link #get(String)} with the child's unqualified name. * the desired Java type, using one of the provided {@link #as} methods.
*
* <p>To retrieve this node's value, use:
*
* <ul>
* <li>{@link #as(Class)} for non-null types.
* <li>{@link #asNullable(Class)} for nullable types.
* <li>{@link #as(JavaType)} for parameterized types, such as {@code List<@Nullable String>}.
* </ul>
*
* <p>Whether a method can return null depends on the method and target type used. For example,
* {@code asNullable(String.class)} can return {@code null}, while {@code
* as(JavaType.listOfNullable(String.class))} can return a {@code List<String>} with nullable
* elements. These nullness rules are for static analysis tools such as IntelliJ IDEA and NullAway
* and are not enforced at runtime.
*/ */
@SuppressWarnings({"DeprecatedIsStillUsed"}) @SuppressWarnings({"DeprecatedIsStillUsed"})
public interface Config { public interface Config {
/** /**
* Returns the qualified name of this node, or the empty string if this is the root node. * The dot-separated name of this node. For example, the node reached using {@code
* * rootNode.get("foo").get("bar")} has qualified name {@code foo.bar}. Returns the empty String
* <p>The qualified name is formed by joining child names using {@code '.'}. For example, {@code * for the root node itself.
* rootNode.get("foo").get("bar").getQualifiedName()} returns {@code "foo.bar"}.
*/ */
String getQualifiedName(); String getQualifiedName();
/** /**
* Returns the underlying value of this node. * The raw value of this node, as provided by {@link Evaluator}. Typically, a node's value is not
* * consumed directly, but converted to the desired Java type using {@link #as}.
* <p>This value is typically accessed indirectly via {@link #as(Class)}, {@link
* #asNullable(Class)}, or {@link #as(JavaType)}.
*/ */
Object getRawValue(); Object getRawValue();
/** /**
* Returns the child node with the given unqualified name. * Returns the child node with the given unqualified name.
* *
* <p>For example, {@code get("foo").get("bar")} returns the child named {@code "bar"} of the
* child named {@code "foo"}. Passing a qualified name to this method, as in {@code
* get("foo.bar")}, is not supported.
*
* @throws NoSuchChildException if a child with the given name does not exist * @throws NoSuchChildException if a child with the given name does not exist
*/ */
Config get(String childName); Config get(String childName);
/** /**
* Returns this node's value as a non-null value of the given {@link Class}. * Converts this node's value to the given {@link Class}.
*
* <p>If this node's value may be {@code null}, use {@link #asNullable(Class)} instead. In a
* future version, this method will perform a non-null check.
* *
* @throws ConversionException if the value cannot be converted to the given type * @throws ConversionException if the value cannot be converted to the given type
*/ */
@NullUnmarked <T extends @Nullable Object> T as(Class<T> type);
<T> T as(Class<T> type);
/** /**
* Returns this node's value as a non-null value of the given {@link JavaType}. * Converts this node's value to the given {@link Type}.
* *
* <p>If this node's value may be {@code null}, use {@link #asNullable(JavaType)} instead. In a * <p>Note that usages of this method are not type safe.
* future version, this method will perform a non-null check.
*
* <p>Use this method when converting to a parameterized type, such as {@code List<@Nullable
* String>}.
* *
* @throws ConversionException if the value cannot be converted to the given type * @throws ConversionException if the value cannot be converted to the given type
*/ */
@NullUnmarked <T extends @Nullable Object> T as(Type type);
<T> T as(JavaType<T> type);
/** /**
* Returns this node's value as a non-null value of the given {@link Type}. * Converts this node's value to the given {@link JavaType}.
*
* <p>If this node's value may be {@code null}, use {@link #asNullable(Type)} instead. In a future
* version, this method will perform a non-null check.
*
* <p>Use this method when the target type is already available as a {@link Type}; otherwise,
* prefer {@link #as(Class)} or {@link #as(JavaType)}.
* *
* @throws ConversionException if the value cannot be converted to the given type * @throws ConversionException if the value cannot be converted to the given type
*/ */
@NullUnmarked <T extends @Nullable Object> T as(JavaType<T> type);
<T> T as(Type type);
/**
* Returns this node's value as a nullable value of the given {@link Class}.
*
* <p>If this node's value cannot be {@code null}, use {@link #as(Class)} instead.
*
* @throws ConversionException if the value cannot be converted to the given type
*/
<T> @Nullable T asNullable(Class<T> type);
/**
* Returns this node's value as a nullable value of the given {@link Class}.
*
* <p>If this node's value cannot be {@code null}, use {@link #as(JavaType)} instead.
*
* <p>Use this method when converting to a parameterized type, such as {@code List<@Nullable
* String>}.
*
* @throws ConversionException if the value cannot be converted to the given type
*/
<T> @Nullable T asNullable(JavaType<T> type);
/**
* Returns this node's value as a nullable value of the given {@link Type}.
*
* <p>If this node's value cannot be {@code null}, use {@link #as(Type)} instead.
*
* <p>Use this method when the target type is already available as a {@link Type}; otherwise,
* prefer {@link #asNullable(Class)} or {@link #as(JavaType)}.
*
* @throws ConversionException if the value cannot be converted to the given type
*/
<T extends @Nullable Object> T asNullable(Type type);
/** /**
* Decodes a config from the supplied byte array. * Decodes a config from the supplied byte array.
@@ -23,77 +23,30 @@ import org.pkl.config.java.mapper.Types;
import org.pkl.core.Pair; import org.pkl.core.Pair;
/** /**
* Represents a Java type, including fully parameterized types. * Runtime representation of a possibly parameterized Java type. Factory methods are provided to
* ease construction of commonly used Java standard library types. For example, a {@code JavaType}
* for {@code List<String>} can be constructed using {@code JavaType.listOf(String.class)}.
* *
* <p>This class captures complete type information that cannot be expressed with {@link Class}, for * <p>Parameterizations of other types can be constructed using the <em>super type token</em> idiom:
* example {@code List<String>} or {@code Result<String, @Nullable Integer>}. It is often used with
* {@link Config#as(JavaType)}.
* *
* <p>A {@code JavaType} always represents a non-null top-level type, but its type arguments may be * <p>
* nullable. For example, {@code listOfNullable(String.class)} represents {@code List<@Nullable
* String>}.
*
* <p>To construct a non-parameterized type, use {@link #of(Class)}.
*
* <p>To construct common parameterized types, use one of:
*
* <ul>
* <li>{@link #optionalOf(Class)}
* <li>{@link #arrayOf(Class)}
* <li>{@link #collectionOf(Class)}
* <li>{@link #iterableOf(Class)}
* <li>{@link #listOf(Class)}
* <li>{@link #setOf(Class)}
* <li>{@link #mapOf(Class, Class)}
* <li>{@link #pairOf(Class, Class)}
* </ul>
*
* <p>Apart from {@code optionalOf()}, the above methods have nullable variants:
*
* <ul>
* <li>{@link #arrayOfNullable(Class)}
* <li>{@link #collectionOfNullable(Class)}
* <li>{@link #iterableOfNullable(Class)}
* <li>{@link #listOfNullable(Class)}
* <li>{@link #setOfNullable(Class)}
* <li>{@link #mapOfNullableKeys(Class, Class)}
* <li>{@link #mapOfNullableValues(Class, Class)}
* <li>{@link #mapOfNullableKeysAndValues(Class, Class)}
* <li>{@link #pairOfNullableFirst(Class, Class)}
* <li>{@link #pairOfNullableSecond(Class, Class)}
* <li>{@link #pairOfNullableFirstAndSecond(Class, Class)}
* </ul>
*
* <p>These methods can be nested. For example, {@code optionalOf(listOfNullable(String.class))}
* represents {@code Optional<List<@Nullable String>>}.
*
* <p>To construct arbitrary parameterized types, use the <em>super-type token</em> idiom:
* *
* <pre>{@code * <pre>{@code
* class Result<T, U> {} // library or user-defined type * class Mapping<T> {} // some user-defined type
*
* Config config = ... * Config config = ...
* *
* Result<String, @Nullable Integer> result = * Mapping<String> container = config.as(
* config.as(new JavaType<Result<String, @Nullable Integer>>() {}); * // construct super type token for Mapping<String>
* new JavaType<Mapping<String>>() {}
* );
* }</pre> * }</pre>
* *
* @param <T> the non-null type represented by this {@code JavaType} * @param <T> the type reified by this {@code JavaType} instance
*/ */
@SuppressWarnings("unused")
public class JavaType<T> { public class JavaType<T> {
private final Type type; private final Type type;
/**
* Constructs a {@code JavaType} using the super-type token idiom.
*
* <p>Subclasses must be parameterized with the desired type, for example:
*
* <pre>{@code
* new JavaType<List<@Nullable String>>() {}
* }</pre>
*
* @throws IllegalStateException if this instance is not parameterized
*/
protected JavaType() { protected JavaType() {
var superclass = getClass().getGenericSuperclass(); var superclass = getClass().getGenericSuperclass();
if (!(superclass instanceof ParameterizedType parameterizedType)) { if (!(superclass instanceof ParameterizedType parameterizedType)) {
@@ -106,382 +59,100 @@ public class JavaType<T> {
this.type = type; this.type = type;
} }
/** Creates a {@code JavaType} for the given type. */ /** Creates a {@code JavaType} for the given {@code Class}. */
public static <T> JavaType<T> of(Class<T> type) { public static <T> JavaType<T> of(Class<T> type) {
return new JavaType<>(type); return new JavaType<>(type);
} }
/** /**
* Creates a {@code JavaType} for the given {@link Type}. * Creates a {@code JavaType} for the given {@code Type}.
* *
* <p>Use this method when the target type is already available as a {@link Type}; otherwise, * <p>Note: This method is not type safe, and should be used with care.
* prefer {@link #of(Class)}.
*/ */
public static <T> JavaType<T> of(Type type) { public static <T> JavaType<T> of(Type type) {
return new JavaType<>(type); return new JavaType<>(type);
} }
/** /** Creates an {@link Optional} type with the given element type. */
* Creates an {@link Optional} type with the given non-null element type.
*
* <p>For a parameterized element type, use {@link #optionalOf(JavaType)}.
*/
public static <E> JavaType<Optional<E>> optionalOf(Class<E> elementType) { public static <E> JavaType<Optional<E>> optionalOf(Class<E> elementType) {
return JavaType.of(Types.optionalOf(elementType)); return JavaType.of(Types.optionalOf(elementType));
} }
/** Creates an {@link Optional} type with the given non-null element type. */ /** Creates an {@link Optional} type with the given element type. */
public static <E> JavaType<Optional<E>> optionalOf(JavaType<E> elementType) { public static <E> JavaType<Optional<E>> optionalOf(JavaType<E> elementType) {
return JavaType.of(Types.optionalOf(elementType.type)); return JavaType.of(Types.optionalOf(elementType.type));
} }
/** /** Creates a {@link Pair} type with the given first and second element types. */
* Creates a {@link Pair} type with the given non-null first and non-null second element types.
*
* <p>For nullable first and/or second element types, use one of the {@code pairOfNullable*}
* methods.
*
* <p>For parameterized element types, use {@link #pairOf(JavaType, JavaType)}.
*/
public static <F, S> JavaType<Pair<F, S>> pairOf(Class<F> firstType, Class<S> secondType) { public static <F, S> JavaType<Pair<F, S>> pairOf(Class<F> firstType, Class<S> secondType) {
return JavaType.of(Types.pairOf(firstType, secondType)); return JavaType.of(Types.pairOf(firstType, secondType));
} }
/** /** Creates a {@link Pair} type with the given first and second element types. */
* Creates a {@link Pair} type with the given non-null first and non-null second element types.
*
* <p>For nullable first and/or second element types, use one of the {@code pairOfNullable*}
* methods.
*/
public static <F, S> JavaType<Pair<F, S>> pairOf(JavaType<F> firstType, JavaType<S> secondType) { public static <F, S> JavaType<Pair<F, S>> pairOf(JavaType<F> firstType, JavaType<S> secondType) {
return JavaType.of(Types.pairOf(firstType.type, secondType.type)); return JavaType.of(Types.pairOf(firstType.type, secondType.type));
} }
/** /** Creates an array type with the given element type. */
* Creates a {@link Pair} type with the given nullable first and non-null second element types.
*
* <p>For parameterized element types, use {@link #pairOfNullableFirst(JavaType, JavaType)}.
*/
public static <F, S> JavaType<Pair<@Nullable F, S>> pairOfNullableFirst(
Class<F> firstType, Class<S> secondType) {
return JavaType.of(Types.pairOf(firstType, secondType));
}
/**
* Creates a {@link Pair} type with the given nullable first and non-null second element types.
*/
public static <F, S> JavaType<Pair<@Nullable F, S>> pairOfNullableFirst(
JavaType<F> firstType, JavaType<S> secondType) {
return JavaType.of(Types.pairOf(firstType.type, secondType.type));
}
/**
* Creates a {@link Pair} type with the given non-null first and nullable second element types.
*
* <p>For parameterized element types, use {@link #pairOfNullableSecond(JavaType, JavaType)}.
*/
public static <F, S> JavaType<Pair<F, @Nullable S>> pairOfNullableSecond(
Class<F> firstType, Class<S> secondType) {
return JavaType.of(Types.pairOf(firstType, secondType));
}
/**
* Creates a {@link Pair} type with the given non-null first and nullable second element types.
*/
public static <F, S> JavaType<Pair<F, @Nullable S>> pairOfNullableSecond(
JavaType<F> firstType, JavaType<S> secondType) {
return JavaType.of(Types.pairOf(firstType.type, secondType.type));
}
/**
* Creates a {@link Pair} type with the given nullable first and nullable second element types.
*
* <p>For parameterized element types, use {@link #pairOfNullableFirstAndSecond(JavaType,
* JavaType)}.
*/
public static <F, S> JavaType<Pair<@Nullable F, @Nullable S>> pairOfNullableFirstAndSecond(
Class<F> firstType, Class<S> secondType) {
return JavaType.of(Types.pairOf(firstType, secondType));
}
/**
* Creates a {@link Pair} type with the given nullable first and nullable second element types.
*/
public static <F, S> JavaType<Pair<@Nullable F, @Nullable S>> pairOfNullableFirstAndSecond(
JavaType<F> firstType, JavaType<S> secondType) {
return JavaType.of(Types.pairOf(firstType.type, secondType.type));
}
/**
* Creates an array type with the given non-null element type.
*
* <p>For a nullable element type, use {@link #arrayOfNullable(Class)}.
*
* <p>For a parameterized element type, use {@link #arrayOf(JavaType)}.
*/
public static <E> JavaType<E[]> arrayOf(Class<E> elementType) { public static <E> JavaType<E[]> arrayOf(Class<E> elementType) {
return JavaType.of(Types.arrayOf(elementType)); return JavaType.of(Types.arrayOf(elementType));
} }
/** /** Creates an array type with the given element type. */
* Creates an array type with the given non-null element type.
*
* <p>For a nullable element type, use {@link #arrayOfNullable(JavaType)}.
*/
public static <E> JavaType<E[]> arrayOf(JavaType<E> elementType) { public static <E> JavaType<E[]> arrayOf(JavaType<E> elementType) {
return JavaType.of(Types.arrayOf(elementType.type)); return JavaType.of(Types.arrayOf(elementType.type));
} }
/** /** Creates an {@link Iterable} type with the given element type. */
* Creates an array type whose element type is nullable.
*
* <p>For a non-null element type, use {@link #arrayOf(Class)}.
*
* <p>For a parameterized element type, use {@link #arrayOfNullable(JavaType)}.
*/
public static <E> JavaType<@Nullable E[]> arrayOfNullable(Class<E> elementType) {
return JavaType.of(Types.arrayOf(elementType));
}
/**
* Creates an array type whose element type is nullable.
*
* <p>For a non-null element type, use {@link #arrayOf(JavaType)}.
*/
public static <E> JavaType<@Nullable E[]> arrayOfNullable(JavaType<E> elementType) {
return JavaType.of(Types.arrayOf(elementType.type));
}
/**
* Creates an {@link Iterable} type with the given non-null element type.
*
* <p>For a nullable element type, use {@link #iterableOfNullable(Class)}.
*
* <p>For a parameterized element type, use {@link #iterableOf(JavaType)}.
*/
public static <E> JavaType<Iterable<E>> iterableOf(Class<E> elementType) { public static <E> JavaType<Iterable<E>> iterableOf(Class<E> elementType) {
return JavaType.of(Types.iterableOf(elementType)); return JavaType.of(Types.iterableOf(elementType));
} }
/** /** Creates an {@link Iterable} type with the given element type. */
* Creates an {@link Iterable} type with the given non-null element type.
*
* <p>For a nullable element type, use {@link #iterableOfNullable(JavaType)}.
*/
public static <E> JavaType<Iterable<E>> iterableOf(JavaType<E> elementType) { public static <E> JavaType<Iterable<E>> iterableOf(JavaType<E> elementType) {
return JavaType.of(Types.iterableOf(elementType.type)); return JavaType.of(Types.iterableOf(elementType.type));
} }
/** /** Creates a {@link Collection} type with the given element type. */
* Creates an {@link Iterable} type whose element type is nullable.
*
* <p>For a non-null element type, use {@link #iterableOf(Class)}.
*
* <p>For a parameterized element type, use {@link #iterableOfNullable(JavaType)}.
*/
public static <E> JavaType<Iterable<@Nullable E>> iterableOfNullable(Class<E> elementType) {
return JavaType.of(Types.iterableOf(elementType));
}
/**
* Creates an {@link Iterable} type whose element type is nullable.
*
* <p>For a non-null element type, use {@link #iterableOf(JavaType)}.
*/
public static <E> JavaType<Iterable<@Nullable E>> iterableOfNullable(JavaType<E> elementType) {
return JavaType.of(Types.iterableOf(elementType.type));
}
/**
* Creates a {@link Collection} type with the given non-null element type.
*
* <p>For a nullable element type, use {@link #collectionOfNullable(Class)}.
*
* <p>For a parameterized element type, use {@link #collectionOf(JavaType)}.
*/
public static <E> JavaType<Collection<E>> collectionOf(Class<E> elementType) { public static <E> JavaType<Collection<E>> collectionOf(Class<E> elementType) {
return JavaType.of(Types.collectionOf(elementType)); return JavaType.of(Types.collectionOf(elementType));
} }
/** /** Creates a {@link Collection} type with the given element type. */
* Creates a {@link Collection} type with the given non-null element type.
*
* <p>For a nullable element type, use {@link #collectionOfNullable(JavaType)}.
*/
public static <E> JavaType<Collection<E>> collectionOf(JavaType<E> elementType) { public static <E> JavaType<Collection<E>> collectionOf(JavaType<E> elementType) {
return JavaType.of(Types.collectionOf(elementType.type)); return JavaType.of(Types.collectionOf(elementType.type));
} }
/** /** Creates a {@link List} type with the given element type. */
* Creates a {@link Collection} type whose element type is nullable.
*
* <p>For a non-null element type, use {@link #collectionOf(Class)}.
*
* <p>For a parameterized element type, use {@link #collectionOfNullable(JavaType)}.
*/
public static <E> JavaType<Collection<@Nullable E>> collectionOfNullable(Class<E> elementType) {
return JavaType.of(Types.collectionOf(elementType));
}
/**
* Creates a {@link Collection} type whose element type is nullable.
*
* <p>For a non-null element type, use {@link #collectionOf(JavaType)}.
*/
public static <E> JavaType<Collection<@Nullable E>> collectionOfNullable(
JavaType<E> elementType) {
return JavaType.of(Types.collectionOf(elementType.type));
}
/**
* Creates a {@link List} type with the given non-null element type.
*
* <p>For a nullable element type, use {@link #listOfNullable(Class)}.
*
* <p>For a parameterized element type, use {@link #listOf(JavaType)}.
*/
public static <E> JavaType<List<E>> listOf(Class<E> elementType) { public static <E> JavaType<List<E>> listOf(Class<E> elementType) {
return JavaType.of(Types.listOf(elementType)); return JavaType.of(Types.listOf(elementType));
} }
/** /** Creates a {@link List} type with the given element type. */
* Creates a {@link List} type with the given non-null element type.
*
* <p>For a nullable element type, use {@link #listOfNullable(JavaType)}.
*/
public static <E> JavaType<List<E>> listOf(JavaType<E> elementType) { public static <E> JavaType<List<E>> listOf(JavaType<E> elementType) {
return JavaType.of(Types.listOf(elementType.type)); return JavaType.of(Types.listOf(elementType.type));
} }
/** /** Creates a {@link Set} type with the given element type. */
* Creates a {@link List} type whose element type is nullable.
*
* <p>For a non-null element type, use {@link #listOf(Class)}.
*
* <p>For a parameterized element type, use {@link #listOfNullable(JavaType)}.
*/
public static <E> JavaType<List<@Nullable E>> listOfNullable(Class<E> elementType) {
return JavaType.of(Types.listOf(elementType));
}
/**
* Creates a {@link List} type whose element type is nullable.
*
* <p>For a non-null element type, use {@link #listOf(JavaType)}.
*/
public static <E> JavaType<List<@Nullable E>> listOfNullable(JavaType<E> elementType) {
return JavaType.of(Types.listOf(elementType.type));
}
/**
* Creates a {@link Set} type with the given non-null element type.
*
* <p>For a nullable element type, use {@link #setOfNullable(Class)}.
*
* <p>For a parameterized element type, use {@link #setOf(JavaType)}.
*/
public static <E> JavaType<Set<E>> setOf(Class<E> elementType) { public static <E> JavaType<Set<E>> setOf(Class<E> elementType) {
return JavaType.of(Types.setOf(elementType)); return JavaType.of(Types.setOf(elementType));
} }
/** /** Creates a {@link Set} type with the given element type. */
* Creates a {@link Set} type with the given non-null element type.
*
* <p>For a nullable element type, use {@link #setOfNullable(JavaType)}.
*/
public static <E> JavaType<Set<E>> setOf(JavaType<E> elementType) { public static <E> JavaType<Set<E>> setOf(JavaType<E> elementType) {
return JavaType.of(Types.setOf(elementType.type)); return JavaType.of(Types.setOf(elementType.type));
} }
/** /** Creates a {@link Map} type with the given key and value types. */
* Creates a {@link Set} type whose element type is nullable.
*
* <p>For a non-null element type, use {@link #setOf(Class)}.
*
* <p>For a parameterized element type, use {@link #setOfNullable(JavaType)}.
*/
public static <E> JavaType<Set<@Nullable E>> setOfNullable(Class<E> elementType) {
return JavaType.of(Types.setOf(elementType));
}
/**
* Creates a {@link Set} type whose element type is nullable.
*
* <p>For a non-null element type, use {@link #setOf(JavaType)}.
*/
public static <E> JavaType<Set<@Nullable E>> setOfNullable(JavaType<E> elementType) {
return JavaType.of(Types.setOf(elementType.type));
}
/**
* Creates a {@link Map} type with the given non-null key and non-null value types.
*
* <p>For nullable keys and/or values, use one of the {@code mapOfNullable*} methods.
*
* <p>For parameterized key and value types, use {@link #mapOf(JavaType, JavaType)}.
*/
public static <K, V> JavaType<Map<K, V>> mapOf(Class<K> keyType, Class<V> valueType) { public static <K, V> JavaType<Map<K, V>> mapOf(Class<K> keyType, Class<V> valueType) {
return JavaType.of(Types.mapOf(keyType, valueType)); return JavaType.of(Types.mapOf(keyType, valueType));
} }
/** /** Creates a {@link Map} type with the given key and value types. */
* Creates a {@link Map} type with the given non-null key and non-null value types.
*
* <p>For nullable keys and/or values, use one of the {@code mapOfNullable*} methods.
*/
public static <K, V> JavaType<Map<K, V>> mapOf(JavaType<K> keyType, JavaType<V> valueType) { public static <K, V> JavaType<Map<K, V>> mapOf(JavaType<K> keyType, JavaType<V> valueType) {
return JavaType.of(Types.mapOf(keyType.type, valueType.type)); return JavaType.of(Types.mapOf(keyType.type, valueType.type));
} }
/**
* Creates a {@link Map} type with the given nullable key and non-null value types.
*
* <p>For parameterized key and value types, use {@link #mapOfNullableKeys(JavaType, JavaType)}.
*/
public static <K, V> JavaType<Map<@Nullable K, V>> mapOfNullableKeys(
Class<K> keyType, Class<V> valueType) {
return JavaType.of(Types.mapOf(keyType, valueType));
}
/** Creates a {@link Map} type with the given nullable key and non-null value types. */
public static <K, V> JavaType<Map<@Nullable K, V>> mapOfNullableKeys(
JavaType<K> keyType, JavaType<V> valueType) {
return JavaType.of(Types.mapOf(keyType.type, valueType.type));
}
/**
* Creates a {@link Map} type with the given non-null key and nullable value types.
*
* <p>For parameterized key and value types, use {@link #mapOfNullableValues(JavaType, JavaType)}.
*/
public static <K, V> JavaType<Map<K, @Nullable V>> mapOfNullableValues(
Class<K> keyType, Class<V> valueType) {
return JavaType.of(Types.mapOf(keyType, valueType));
}
/** Creates a {@link Map} type with the given non-null key and nullable value types. */
public static <K, V> JavaType<Map<K, @Nullable V>> mapOfNullableValues(
JavaType<K> keyType, JavaType<V> valueType) {
return JavaType.of(Types.mapOf(keyType.type, valueType.type));
}
/**
* Creates a {@link Map} type with the given nullable key and nullable value types.
*
* <p>For parameterized key and value types, use {@link #mapOfNullableKeysAndValues(JavaType,
* JavaType)}.
*/
public static <K, V> JavaType<Map<@Nullable K, @Nullable V>> mapOfNullableKeysAndValues(
Class<K> keyType, Class<V> valueType) {
return JavaType.of(Types.mapOf(keyType, valueType));
}
/** Creates a {@link Map} type with the given nullable key and nullable value types. */
public static <K, V> JavaType<Map<@Nullable K, @Nullable V>> mapOfNullableKeysAndValues(
JavaType<K> keyType, JavaType<V> valueType) {
return JavaType.of(Types.mapOf(keyType.type, valueType.type));
}
/** Returns the underlying {@link Type}. */ /** Returns the underlying {@link Type}. */
public Type getType() { public Type getType() {
return type; return type;

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