-
Notifications
You must be signed in to change notification settings - Fork 345
Description
[bioball] When using an absolute package import in place of a project import, Pkl eval will fail (expected). However, the error message thrown by Pkl is quite poor.
Original issue:
Given
PklProject:
amends "pkl:Project"
dependencies {
["pkl.impl.ghactions"] { uri = "package://pkg.pkl-lang.org/pkl-project-commons/pkl.impl.ghactions@0.4.2" }
["gha"] { uri = "package://pkg.pkl-lang.org/github.com/stefma/pkl-gha/com.github.action@0.0.6" }
}index.pkl:
amends "@gha/Workflow.pkl"
import "ver/test.pkl"
name = "PKL IntelliJ CI"
on {
public {}
}
jobs {
["a"] {
name = "Placeholder"
`runs-on` = "ubuntu-latest"
steps {
new {
name = "Do nothing"
run = "echo 'This is a placeholder job.'"
}
new test.Action {
with {
`java-version` = ""
}
}
}
}
}ver/test.pkl:
import "package://pkg.pkl-lang.org/github.com/stefma/pkl-gha/com.github.action@0.0.6#/Workflow.pkl"
class Action extends Workflow.TypedStep {
fixed uses = "actions/setup-java@v3"
with: ActionInputs?
}
class ActionInputs {
`java-version`: (String|Number|Boolean)?
}Caution
Note the different imports. ver/test.pkl doesn't use @gha but the full package import.
When-Then
If I run pkl eval index.pkl then I get the following error
–– Pkl Error ––
Expected value of type `*Step|TypedStep`, but got type `test#Action`.
Value: new Action { name = ?; id = ?; `if` = ?; `timeout-minutes` = ?; env = ?; `wor...
1019 | steps: Listing<*Step|TypedStep>
^^^^^^^^^^^^^^^
at com.github.action.Workflow#DefaultJob.steps (projectpackage://pkg.pkl-lang.org/github.com/stefma/pkl-gha/com.github.action@0.0.6#/Workflow.pkl)
21 | new test.Action {
^^^^^^^^^^^^^^^^^
at index#jobs["a"].steps[#2] (file:///Users/stefan/Developer/pkl/pkl-intellij/.github/index.pkl, line 21)
128 | renderer.renderDocument(value)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
at pkl.base#Module.output.text (https://github.com/apple/pkl/blob/0.30.0/stdlib/base.pkl#L128)
1318 | text = "# Do not modify!\n# This file was generated from a template using https://github.com/StefMa/pkl-gha\n\n\(super.text)"
^^^^^^^^^^
at com.github.action.Workflow#output.text (projectpackage://pkg.pkl-lang.org/github.com/stefma/pkl-gha/com.github.action@0.0.6#/Workflow.pkl)
132 | if (renderer is BytesRenderer) renderer.renderDocument(value) else text.encodeToBytes("UTF-8")
^^^^
at pkl.base#Module.output.bytes (https://github.com/apple/pkl/blob/0.30.0/stdlib/base.pkl#L132)
Possible solution
Use the same import statement in both files!
Either use @gha/ or package:// in index.pkl and ver/test.pkl
Observation
Even though the import is the same, pkl doesn't know that it is "valid".
One pkl file uses the dependency notion (defined in PklProject), while the other uses the package import.
Expectation
I would expect that pkl can detect that using the @gha import is equal to the package:// import (for the same package obviously) and therefore don't error in such a import mix case.
Feel free to change the title of this issue.
I've no idea how to call this 🫣