task icon indicating copy to clipboard operation
task copied to clipboard

Variables are initialized at start of taskfile and not when I actually need them to be initialized

Open berlinguyinca opened this issue 10 months ago • 0 comments

  • Task version: 3
  • Operating system: Linux
  • Experiments enabled: false

I'm having a very simple issue. I'm trying to build a couple of go lambda functions like

version: '4'
env:
  GOARCH: arm64
  GOOS: linux
  CGO_ENABLED: 0
  OUTPUT_DIR: ./bin/


tasks:

  build:
    vars:
      SOURCES:
        sh: find -type f -name '*.go'
    cmds:
      - for: { var: SOURCES }
        cmd: GOARCH=$GOARCH GOOS=$GOOS CGO_ENABLED=$CGO_ENABLED go build -ldflags="-s -w" -tags lambda.norpc -o $OUTPUT_DIR {{.ITEM}}

  zip:
    vars:
      OBJECTS:
        sh: find {{.OUTPUT_DIR}} -type f
    deps:
      - build
    cmds:
      - for: { var: OBJECTS }
        cmd:
          zip {{.ITEM}}.zip {{.ITEM}}

I would assume this task file would

  1. execute 'build' which compiles my go files and stores them in 'bin'
  2. iterate now over all files in 'bin' and zip each of them

sadly this is not what happens, instead what seems to happen is

  1. evaluate all variable definitions (SOURCES and OBJECTS)
  2. sources are populated correctly, since there are file. Objects does not get populate right, since no files exist yet so it's empy
  3. this now causes the zip task to fail, since the array OBJECTS is empty.

how can I force 'tasks' to not populate 'OBJCETCS' until the task is actually execute.

Or if this is not possible, how can I instead compile 50 go files, to 50 zip files, each containing 1 go file, fir the zip file name go-file.zip. Where go-file is the name of the file.

thanks!

berlinguyinca avatar Apr 18 '24 20:04 berlinguyinca