RFE: support substitution in environment.environment in nested pipelines or actions
I have a situation where I would like to put SETUPTOOLS_SCM_PRETEND_VERSION=${{package.version}} into the build environment.
I want to do:
environment:
environment:
SETUPTOOLS_SCM_PRETEND_VERSION: ${{package.version}}
OTHER: "other is ${{vars.VARS}}"
The second 'OTHER' there i just put there. I think it is reasonable to support substitution within a string rather than only supporting the entire string. but I do not want to request shell-like behavior or expansion.
I also would lke to request that work within a 'range' section like seen here.
I think that generally it does work. I'm not sure what I was seeing when I opened this, but I suspect that it was related to nested pipelines.
Here is an example to play with: test-me.yaml
package:
name: test-me
version: 1.0
epoch: 0
vars:
WARK: abc
FOO: boo
environment:
contents:
packages:
- busybox
environment:
BAR: "the other day I saw a BAR"
WARK: ${{vars.WARK}}
FOOFOO: "${{vars.FOO}} this should work too"
pipeline:
- environment:
XX: SuperX
runs: |
echo "did it work here? XX=$XX"
- environment:
XX: SuperX
uses: test/dump-env
with:
non-empty: BAR WARK FOOFOO XX
- environment:
MYVAR: "WINNER WINNER"
pipeline:
- runs: |
echo "==== FOO=$FOO ==="
echo "==== FOOFOO=$FOOFOO ==="
echo "==== BAR=$BAR ==="
echo "==== WARK=$WARK ==="
echo "==== MYVAR=$MYVAR ==="
- uses: test/dump-env
environment:
XX: SuperX
with:
non-empty: BAR WARK FOOFOO XX MYVAR
pipelines/test/dump-env.yaml:
name: dump your environment
inputs:
non-empty:
required: true
pipeline:
- name: "test-non-empty"
runs: |
_fails=0
for n in ${{inputs.non-empty}} ; do
eval v='$'"${n}"
[ -n "$v" ] && echo "PASS: non-empty $n=$v" && continue
echo "FAIL: empty $n"
_fails=$((_fails+1))
done
exit $_fails
- name: "show env"
runs: |
env
here is the relevant output of make debug/test-me
2024/11/16 21:20:07 INFO built image layer tarball as /tmp/apko-temp-615903904/apko-x86_64.tar.gz
2024/11/16 21:20:07 INFO using /tmp/apko-temp-615903904/apko-x86_64.tar.gz for image layer
2024/11/16 21:20:07 INFO ImgRef = /tmp/melange-guest-3447417309
2024/11/16 21:20:07 INFO did it work here? XX=SuperX
2024/11/16 21:20:07 INFO running step "test/dump-env"
2024/11/16 21:20:07 INFO running step "test-non-empty" uses=test/dump-env
2024/11/16 21:20:07 INFO PASS: non-empty BAR=the other day I saw a BAR uses=test/dump-env name=test-non-empty
2024/11/16 21:20:07 INFO PASS: non-empty WARK=abc uses=test/dump-env name=test-non-empty
2024/11/16 21:20:07 INFO PASS: non-empty FOOFOO=boo this should work too uses=test/dump-env name=test-non-empty
2024/11/16 21:20:07 INFO FAIL: empty XX uses=test/dump-env name=test-non-empty
2024/11/16 21:20:07 INFO running step "show env" uses=test/dump-env
2024/11/16 21:20:07 INFO SHLVL=1 uses=test/dump-env name="show env"
2024/11/16 21:20:07 INFO HOME=/home/build uses=test/dump-env name="show env"
2024/11/16 21:20:07 INFO OLDPWD=/home/build uses=test/dump-env name="show env"
2024/11/16 21:20:07 INFO GOTOOLCHAIN=local uses=test/dump-env name="show env"
2024/11/16 21:20:07 INFO GOFLAGS= uses=test/dump-env name="show env"
2024/11/16 21:20:07 INFO FOOFOO=boo this should work too uses=test/dump-env name="show env"
2024/11/16 21:20:07 INFO GOMODCACHE=/var/cache/melange/gomodcache uses=test/dump-env name="show env"
2024/11/16 21:20:07 INFO PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin uses=test/dump-env name="show env"
2024/11/16 21:20:07 INFO BAR=the other day I saw a BAR uses=test/dump-env name="show env"
2024/11/16 21:20:07 INFO SOURCE_DATE_EPOCH=0 uses=test/dump-env name="show env"
2024/11/16 21:20:07 INFO WARK=abc uses=test/dump-env name="show env"
2024/11/16 21:20:07 INFO GOPATH=/home/build/.cache/go uses=test/dump-env name="show env"
2024/11/16 21:20:07 INFO PWD=/home/build uses=test/dump-env name="show env"
2024/11/16 21:20:07 INFO ==== FOO= ===
2024/11/16 21:20:07 INFO ==== FOOFOO=boo this should work too ===
2024/11/16 21:20:07 INFO ==== BAR=the other day I saw a BAR ===
2024/11/16 21:20:07 INFO ==== WARK=abc ===
2024/11/16 21:20:07 INFO ==== MYVAR=WINNER WINNER ===
2024/11/16 21:20:07 INFO running step "test/dump-env"
2024/11/16 21:20:07 INFO running step "test-non-empty" uses=test/dump-env
2024/11/16 21:20:07 INFO PASS: non-empty BAR=the other day I saw a BAR uses=test/dump-env name=test-non-empty
2024/11/16 21:20:07 INFO PASS: non-empty WARK=abc uses=test/dump-env name=test-non-empty
2024/11/16 21:20:07 INFO PASS: non-empty FOOFOO=boo this should work too uses=test/dump-env name=test-non-empty
2024/11/16 21:20:07 INFO FAIL: empty XX uses=test/dump-env name=test-non-empty
2024/11/16 21:20:07 INFO FAIL: empty MYVAR uses=test/dump-env name=test-non-empty
2024/11/16 21:20:07 INFO running step "show env" uses=test/dump-env
2024/11/16 21:20:07 INFO SHLVL=1 uses=test/dump-env name="show env"
2024/11/16 21:20:07 INFO HOME=/home/build uses=test/dump-env name="show env"
2024/11/16 21:20:07 INFO OLDPWD=/home/build uses=test/dump-env name="show env"
2024/11/16 21:20:07 INFO GOTOOLCHAIN=local uses=test/dump-env name="show env"
2024/11/16 21:20:07 INFO GOFLAGS= uses=test/dump-env name="show env"
2024/11/16 21:20:07 INFO FOOFOO=boo this should work too uses=test/dump-env name="show env"
2024/11/16 21:20:07 INFO GOMODCACHE=/var/cache/melange/gomodcache uses=test/dump-env name="show env"
2024/11/16 21:20:07 INFO PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin uses=test/dump-env name="show env"
2024/11/16 21:20:07 INFO BAR=the other day I saw a BAR uses=test/dump-env name="show env"
2024/11/16 21:20:07 INFO SOURCE_DATE_EPOCH=0 uses=test/dump-env name="show env"
2024/11/16 21:20:07 INFO WARK=abc uses=test/dump-env name="show env"
2024/11/16 21:20:07 INFO GOPATH=/home/build/.cache/go uses=test/dump-env name="show env"
2024/11/16 21:20:07 INFO PWD=/home/build uses=test/dump-env name="show env"
as I said in comment above, i think this was hittin https://github.com/chainguard-dev/melange/issues/1548 in some way. closing now.