actions / runner

The Runner for GitHub Actions :rocket:
https://github.com/features/actions
MIT License
4.9k stars 962 forks source link

Wrong environment passed to node post when called by composite called by composite action #3514

Open jsoref opened 3 weeks ago

jsoref commented 3 weeks ago

Describe the bug

The inputs from a composite action are used by a called node action in the post phase instead of the inputs passed to the called node action.

To Reproduce

  1. workflow has a job with steps: https://github.com/check-spelling-sandbox/symmetrical-guide/blob/da624a50ec50529dfe6653d037b992fa07723b14/.github/workflows/test.yml#L9-L14
  2. workflow has a step which calls an action: https://github.com/check-spelling-sandbox/symmetrical-guide/blob/da624a50ec50529dfe6653d037b992fa07723b14/.github/workflows/test.yml#L9-L11
  3. which calls an action: https://github.com/check-spelling-sandbox/symmetrical-guide/blob/da624a50ec50529dfe6653d037b992fa07723b14/composite/action.yml#L18-L20
  4. which has inputs: https://github.com/check-spelling-sandbox/symmetrical-guide/blob/da624a50ec50529dfe6653d037b992fa07723b14/call-node/action.yml#L1-L4
  5. and calls an action: https://github.com/check-spelling-sandbox/symmetrical-guide/blob/da624a50ec50529dfe6653d037b992fa07723b14/call-node/action.yml#L8-L10
  6. which has a required input: https://github.com/check-spelling-sandbox/symmetrical-guide/blob/da624a50ec50529dfe6653d037b992fa07723b14/node/action.yml#L2-L4
  7. and has a main and a post: https://github.com/check-spelling-sandbox/symmetrical-guide/blob/da624a50ec50529dfe6653d037b992fa07723b14/node/action.yml#L7-L8
  8. the main reports the input it was given: https://github.com/check-spelling-sandbox/symmetrical-guide/blob/da624a50ec50529dfe6653d037b992fa07723b14/node/main.js#L9
  9. which logs that value: https://github.com/check-spelling-sandbox/symmetrical-guide/actions/runs/11422876413/job/31781374640#step:3:31

    node (main) 4

  10. the post run dies: https://github.com/check-spelling-sandbox/symmetrical-guide/actions/runs/11422876413/job/31781374640#step:7:4

    Post job cleanup.
    Post job cleanup.
    /home/runner/work/symmetrical-guide/symmetrical-guide/node/main-post.js:4
        throw new Error(`Input required and not supplied: ${name}`);
        ^
    
    Error: Input required and not supplied: test
        at getInput (/home/runner/work/symmetrical-guide/symmetrical-guide/node/main-post.js:4:11)
        at Object.<anonymous> (/home/runner/work/symmetrical-guide/symmetrical-guide/node/main-post.js:9:30)
        at Module._compile (node:internal/modules/cjs/loader:1358:14)
        at Module._extensions..js (node:internal/modules/cjs/loader:1416:10)
        at Module.load (node:internal/modules/cjs/loader:1[2](https://github.com/check-spelling-sandbox/symmetrical-guide/actions/runs/11422876413/job/31781374640#step:7:2)08:32)
        at Module._load (node:internal/modules/cjs/loader:1024:12)
        at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:174:12)
        at node:internal/main/run_main_module:28:49
    
    Node.js v20.1[3](https://github.com/check-spelling-sandbox/symmetrical-guide/actions/runs/11422876413/job/31781374640#step:7:3).1
    Post job cleanup.
    node (post) 3

You can see a previous run where the code was slightly different https://github.com/check-spelling-sandbox/symmetrical-guide/actions/runs/11422865129/job/31781351496

Prepare all required actions
Getting action download info
Run ./composite
Run : composite
composite (1)
Run ./node
node (main) 3
Prepare all required actions
Getting action download info
Run ./call-node
Run ./node
node (main) 4
Run ./node
node (main) 2
Post job cleanup.
node (post) 2
Post job cleanup.
Post job cleanup.
node (post) 1 <-- note that this matches the value seen for `composite (1)` but should have matched the value for `node (main) 4`
Post job cleanup.
node (post) 3

Expected behavior The input provided to the action should be present in the environment for the post action as well. And not the inputs provided to some other action (the caller of the action).

Runner Version and Platform

Version of your runner? 2.320.0 OS of the machine running the runner? Ubuntu 22.04.5 LTS

What's not working?

Job Log Output

Runner and Worker's Diagnostic Logs


This is the reason I filed #3510

jsoref commented 3 weeks ago

It is possible to work around this broken behavior by using https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/workflow-commands-for-github-actions#sending-values-to-the-pre-and-post-actions as in https://github.com/check-spelling-sandbox/symmetrical-guide/commit/1516f0a2bdd0d9ac8f03ad1d93ee42819fa9c9ac, but each and every github node action shouldn't be expected to do this (including first party actions, such as github/codeql-action).