ENH: selectors for non-list items; missing `build_platform` for evaluation of `context:`?
I have a v0 recipe that got translated from
```yaml
sources:
- fn: bazel
url: {{ bz_base_url }}/{{ bz_version }}/bazel_nojdk-{{ bz_version }}-linux-x86_64 # [build_platform == "linux-64"]
sha256: 218ce0aed544d29084f4d9ff98f01bc784b90fe4c79dab63fa990dc68e66eaa9 # [build_platform == "linux-64"]
url: {{ bz_base_url }}/{{ bz_version }}/bazel_nojdk-{{ bz_version }}-darwin-x86_64 # [build_platform == "osx-64"]
sha256: ccc67fa48a6444818a5b85e8174c89ca2630df60c1e2327714d944035a240fc9 # [build_platform == "osx-64"]
```
to
```yaml
context:
version: "1.82.1"
bz_version: "8.6.0"
bz_base_url: https://github.com/bazelbuild/bazel/releases/download
[...]
source:
- if: build_platform == "linux-64"
then:
url: ${{ bz_base_url }}/${{ bz_version }}/bazel_nojdk-${{ bz_version }}-linux-x86_64
sha256: 02c355741012603b703e2a8d07ded1212f92ec6eacdabdd552695f8083e7a594
file_name: bazel
- if: build_platform == "osx-64"
then:
url: ${{ bz_base_url }}/${{ bz_version }}/bazel_nojdk-${{ bz_version }}-darwin-x86_64
sha256: 6a6d0a42d62fc3a4a391d0b9976f750191ccb9afa7b084e78d0daa0422b202d0
file_name: bazel
- if: build_platform == "linux-aarch64"
then:
url: ${{ bz_base_url }}/${{ bz_version }}/bazel_nojdk-${{ bz_version }}-linux-arm64
sha256: 19b9c2f6dbb87d9d9c64a951e01b9e62abe8b8ea07550206609c62b7f0f12ae9
file_name: bazel
- if: build_platform == "osx-arm64"
then:
url: ${{ bz_base_url }}/${{ bz_version }}/bazel_nojdk-${{ bz_version }}-darwin-arm64
sha256: 61776a387f2ea2a515eb92bc1c520b6af6451148216244058f6ee2b4c012cd89
file_name: bazel
```
There's several pieces of duplication that I don't like with this, but I can't simply break out `file_name: bazel`, and then leave the other keys for that section behind v1-selectors, because they're on the level of keys (i.e. `url:` and not list-items `- foo`). So
```yaml
source:
- file_name: bazel
if: build_platform == "linux-64"
then:
url: ${{ bz_base_url }}/${{ bz_version }}/bazel_nojdk-${{ bz_version }}-linux-x86_64
sha256: 02c355741012603b703e2a8d07ded1212f92ec6eacdabdd552695f8083e7a594
if: build_platform == "linux-aarch64"
then:
url: ${{ bz_base_url }}/${{ bz_version }}/bazel_nojdk-${{ bz_version }}-linux-arm64
sha256: 19b9c2f6dbb87d9d9c64a951e01b9e62abe8b8ea07550206609c62b7f0f12ae9
if: build_platform == "osx-64"
then:
url: ${{ bz_base_url }}/${{ bz_version }}/bazel_nojdk-${{ bz_version }}-darwin-x86_64
sha256: 6a6d0a42d62fc3a4a391d0b9976f750191ccb9afa7b084e78d0daa0422b202d0
if: build_platform == "osx-arm64"
then:
url: ${{ bz_base_url }}/${{ bz_version }}/bazel_nojdk-${{ bz_version }}-darwin-arm64
sha256: 61776a387f2ea2a515eb92bc1c520b6af6451148216244058f6ee2b4c012cd89
```
does not work, for example. I got it to pass the linter with
```yaml
context:
version: "1.82.1"
bz_version: "8.6.0"
bz_base_url: https://github.com/bazelbuild/bazel/releases/download
bz_os: ${{ "linux" if linux else "darwin" }}
bz_arch: ${{ "x86_64" if x86_64 else "arm64" }}
[...]
source:
- url: ${{ bz_base_url }}/${{ bz_version }}/bazel_nojdk-${{ bz_version }}-${{ bz_os }}-${{ bz_arch }}
file_name: bazel
sha256:
- if: build_platform == "linux-64"
then: 02c355741012603b703e2a8d07ded1212f92ec6eacdabdd552695f8083e7a594
- if: build_platform == "linux-aarch64"
then: 19b9c2f6dbb87d9d9c64a951e01b9e62abe8b8ea07550206609c62b7f0f12ae9
- if: build_platform == "osx-64"
then: 6a6d0a42d62fc3a4a391d0b9976f750191ccb9afa7b084e78d0daa0422b202d0
- if: build_platform == "osx-arm64"
then: 61776a387f2ea2a515eb92bc1c520b6af6451148216244058f6ee2b4c012cd89
```
but that fails with
```
╭─[/home/conda/recipe_root/recipe.yaml:23:7]
22 │ sha256:
23 │ ╭─▶ - if: build_platform == "linux-64"
24 │ │ then: 02c355741012603b703e2a8d07ded1212f92ec6eacdabdd552695f8083e7a594
25 │ │ - if: build_platform == "linux-aarch64"
26 │ │ then: 19b9c2f6dbb87d9d9c64a951e01b9e62abe8b8ea07550206609c62b7f0f12ae9
27 │ │ - if: build_platform == "osx-64"
28 │ │ then: 6a6d0a42d62fc3a4a391d0b9976f750191ccb9afa7b084e78d0daa0422b202d0
29 │ │ - if: build_platform == "osx-arm64"
30 │ │ then: 61776a387f2ea2a515eb92bc1c520b6af6451148216244058f6ee2b4c012cd89
31 │ ├─▶
· ╰──── expected scalar but got non-scalar
32 │ build:
33 │ number: 1
╰────
```
Interestingly, it _also_ fails when I pack everything into a single `${{ }}`, or even into `context:`
```yaml
context:
version: "1.82.1"
bz_version: "8.6.0"
bz_base_url: https://github.com/bazelbuild/bazel/releases/download
bz_os: ${{ "linux" if linux else "darwin" }}
bz_arch: ${{ "x86_64" if x86_64 else "arm64" }}
bz_sha: ${{ "02c355741012603b703e2a8d07ded1212f92ec6eacdabdd552695f8083e7a594" if build_platform == "linux-64"
else "19b9c2f6dbb87d9d9c64a951e01b9e62abe8b8ea07550206609c62b7f0f12ae9" if build_platform == "linux-aarch64"
else "6a6d0a42d62fc3a4a391d0b9976f750191ccb9afa7b084e78d0daa0422b202d0" if build_platform == "osx-64"
else "61776a387f2ea2a515eb92bc1c520b6af6451148216244058f6ee2b4c012cd89" if build_platform == "osx-arm64" else "0" }}
[...]
source:
- url: ${{ bz_base_url }}/${{ bz_version }}/bazel_nojdk-${{ bz_version }}-${{ bz_os }}-${{ bz_arch }}
sha256: ${{ bz_sha }}
file_name: bazel
```
It seems that `build_platform` is not actually available (or correctly populated) during `context:` evaluation, because it falls into the final `else "0"` branch, which should be impossible
```
24 | - url: ${{ bz_base_url }}/${{ bz_version }}/bazel_nojdk-${{ bz_version }}-${{ bz_os }}-${{ bz_arch }}
25 | sha256: ${{ bz_sha }}
: ^|^
: `-- invalid value for 'SHA256 checksum': Invalid SHA256 checksum: 0
26 | file_name: bazel
`----
```
0 条评论