melange icon indicating copy to clipboard operation
melange copied to clipboard

RFE: support substitution in environment.environment in nested pipelines or actions

Open smoser opened this issue 1 year ago • 1 comments

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.

smoser avatar Jul 23 '24 15:07 smoser

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"

smoser avatar Nov 17 '24 02:11 smoser

as I said in comment above, i think this was hittin https://github.com/chainguard-dev/melange/issues/1548 in some way. closing now.

smoser avatar Sep 03 '25 17:09 smoser