act icon indicating copy to clipboard operation
act copied to clipboard

Job getting composite action's output variable with wrong key

Open ErnestoArtigas opened this issue 9 months ago • 0 comments

Bug report info

act version:            0.2.75
GOOS:                   windows
GOARCH:                 amd64
NumCPU:                 16
Docker host:            DOCKER_HOST environment variable is not set
Sockets found:
        \\.\pipe\docker_engine(broken)
Config files:
        C:\Users\MyUser\AppData\Local\act\actrc:
                -P ubuntu-latest=catthehacker/ubuntu:act-latest
                -P ubuntu-22.04=catthehacker/ubuntu:act-22.04
                -P ubuntu-20.04=catthehacker/ubuntu:act-20.04
                -P ubuntu-18.04=catthehacker/ubuntu:act-18.04
Build info:
        Go version:            go1.23.6
        Module path:           github.com/nektos/act
        Main version:          (devel)
        Main path:             github.com/nektos/act
        Main checksum:
        Build settings:
                -buildmode:           exe
                -compiler:            gc
                -ldflags:             -s -w -X main.version=0.2.75 -X main.commit=bd97dc8d9422a8b04e6193c6c86afa8a7a693fdf -X main.date=2025-03-01T02:31:09Z -X main.builtBy=goreleaser
                CGO_ENABLED:          0
                GOARCH:               amd64
                GOOS:                 windows
                GOAMD64:              v1
                vcs:                  git
                vcs.revision:         bd97dc8d9422a8b04e6193c6c86afa8a7a693fdf
                vcs.time:             2025-03-01T02:30:53Z
                vcs.modified:         false
Docker Engine:
        Engine version:        28.0.1
        Engine runtime:        runc
        Cgroup version:        1
        Cgroup driver:         cgroupfs
        Storage driver:        overlay2
        Registry URI:          https://index.docker.io/v1/
        OS:                    Docker Desktop
        OS type:               linux
        OS version:
        OS arch:               x86_64
        OS kernel:             5.15.153.1-microsoft-standard-WSL2
        OS CPU:                16
        OS memory:             15946 MB
        Security options:
                name=seccomp,profile=unconfined

Command used with act

act -W .\.github\workflows\test-workflow.yaml

Describe issue

I've found a bug, where you can use a composite action's output variable with the wrong name in act, whereas on github actions' runner it won't be picked up.

In this stripped down code, I have a workflow, called test-workflow, that calls the composite action composite-action.

The composite action outputs a value, dummy_variable, from the step dummy_step own outputted variable that is called value.

The workflow calls the composite action in composite_step, then outputs the dumy_variable with the path steps.composite_step.outputs.value:

[Test workflow/test] ⭐ Run Main Launch composite action
[Test workflow/test]   ⚙  ::set-output:: dummy_variable=dummy_variable
[Test workflow/test]   ✅  Success - Main Launch composite action
[Test workflow/test]   ⚙  ::set-output:: value=dummy_variable
[Test workflow/test] ⭐ Run Main echo output dummy_variable
[Test workflow/test]   🐳  docker exec cmd=[bash -e /var/run/act/workflow/2] user= workdir=
| output dummy_variable
[Test workflow/test]   ✅  Success - Main echo output dummy_variable

Because the path is wrong, on github actions' runner, the variable isn't picked up and outputs output, without dummy_variable:

2025-03-17T18:07:29.2844255Z ##[group]Run ./.github/actions/composite-action
2025-03-17T18:07:29.2845519Z ##[endgroup]
2025-03-17T18:07:29.2958551Z ##[group]Run echo "value=dummy_variable" >> $GITHUB_OUTPUT
2025-03-17T18:07:29.2960196Z [36;1mecho "value=dummy_variable" >> $GITHUB_OUTPUT[0m
2025-03-17T18:07:29.3015023Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0}
2025-03-17T18:07:29.3016468Z ##[endgroup]
2025-03-17T18:07:29.3265871Z ##[group]Run echo output 
2025-03-17T18:07:29.3266858Z [36;1mecho output [0m
2025-03-17T18:07:29.3318319Z shell: /usr/bin/bash -e {0}
2025-03-17T18:07:29.3319284Z ##[endgroup]
2025-03-17T18:07:29.3400444Z output

Fixing the path from outputs.value to outputst.dummy_variable, such as:

      - run: echo output ${{ steps.composite_step.outputs.dummy_variable }}

Doesn't change anything in act:

[Test workflow/test] ⭐ Run Main Launch composite action
[Test workflow/test] ⭐ Run Main echo "value=dummy_variable" >> $GITHUB_OUTPUT
[Test workflow/test]   🐳  docker exec cmd=[bash --noprofile --norc -e -o pipefail /var/run/act/workflow/composite_step-composite-dummy_step.sh] user= workdir=
[Test workflow/test]   ✅  Success - Main echo "value=dummy_variable" >> $GITHUB_OUTPUT
[Test workflow/test]   ⚙  ::set-output:: value=dummy_variable
[Test workflow/test]   ⚙  ::set-output:: dummy_variable=dummy_variable
[Test workflow/test]   ✅  Success - Main Launch composite action
[Test workflow/test]   ⚙  ::set-output:: value=dummy_variable
[Test workflow/test] ⭐ Run Main echo output dummy_variable
[Test workflow/test]   🐳  docker exec cmd=[bash -e /var/run/act/workflow/2] user= workdir=
| output dummy_variable
[Test workflow/test]   ✅  Success - Main echo output dummy_variable

And fixes it on github actions' runner

2025-03-17T18:15:00.7710134Z ##[group]Run ./.github/actions/composite-action
2025-03-17T18:15:00.7710702Z ##[endgroup]
2025-03-17T18:15:00.7809083Z ##[group]Run echo "value=dummy_variable" >> $GITHUB_OUTPUT
2025-03-17T18:15:00.7809926Z [36;1mecho "value=dummy_variable" >> $GITHUB_OUTPUT[0m
2025-03-17T18:15:00.7863255Z shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0}
2025-03-17T18:15:00.7863966Z ##[endgroup]
2025-03-17T18:15:00.8084564Z ##[group]Run echo output dummy_variable
2025-03-17T18:15:00.8085187Z [36;1mecho output dummy_variable[0m
2025-03-17T18:15:00.8134300Z shell: /usr/bin/bash -e {0}
2025-03-17T18:15:00.8134790Z ##[endgroup]
2025-03-17T18:15:00.8208227Z output dummy_variable

Link to GitHub repository

No response

Workflow content

# Test workflow
name: Test workflow

on:
  push:
    branches:
      - "main"

jobs:
  test:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4

      - name: Launch composite action
        id: composite_step
        uses: ./.github/actions/composite-action

      - run: echo output ${{ steps.composite_step.outputs.value }}

# Composite action
name: Composite action
description: Composite action

outputs:
  dummy_variable:
    description: Dummy variable
    value: ${{ steps.dummy_step.outputs.value }}

runs:
  using: composite

  steps:
    - id: dummy_step
      shell: bash
      run: echo "value=dummy_variable" >> $GITHUB_OUTPUT

Relevant log output

Because there were multiple logs, they are included in the Describe issue paragraph

Additional information

No response

ErnestoArtigas avatar Mar 17 '25 18:03 ErnestoArtigas