github-script icon indicating copy to clipboard operation
github-script copied to clipboard

How to use this in a composite action?

Open PaulRBerg opened this issue 3 years ago • 4 comments

I’m looking to create a composite action, and the task that I’m working on would be easiest to implement by doing some work in JavaScript and some other work in a Bash script. Can I use this action (github-script) to achieve this?

I added this to my action:

uses: "actions/github-script@v6"
with:
  script: |
    const script = require("./dist/index.js")
    script({core})

But then I got this error when I ran it:

Error: Cannot find module '/home/runner/work/v2-core/v2-core/dist/index.js'
Require stack:
- /home/runner/work/_actions/actions/github-script/v6/dist/index.js
    at Function.Module._resolveFilename (node:internal/modules/cjs/loader:933:15)
    at Function.Module._load (node:internal/modules/cjs/loader:778:27)
    at Module.require (node:internal/modules/cjs/loader:1005:19)
    at require (node:internal/modules/cjs/helpers:102:18)
    at Object.apply (/home/runner/work/_actions/actions/github-script/v6/dist/index.js:13400:27)
    at eval (eval at callAsyncFunction (/home/runner/work/_actions/actions/github-script/v6/dist/index.js:13356:16), <anonymous>:3:16)
    at callAsyncFunction (/home/runner/work/_actions/actions/github-script/v6/dist/index.js:13357:12)
    at main (/home/runner/work/_actions/actions/github-script/v6/dist/index.js:13452:26)
    at Module.858 (/home/runner/work/_actions/actions/github-script/v6/dist/index.js:13429:1)
    at __webpack_require__ (/home/runner/work/_actions/actions/github-script/v6/dist/index.js:[24](https://github.com/sablierhq/v2-core/actions/runs/3861794209/jobs/6583130559#step:3:26):[31](https://github.com/sablierhq/v2-core/actions/runs/3861794209/jobs/6583130559#step:3:33)) {
  code: 'MODULE_NOT_FOUND',
  requireStack: [
    '/home/runner/work/_actions/actions/github-script/v6/dist/index.js'
  ]
}

What am I doing wrong?

Side note - why not enable discussions in this repository?

PaulRBerg avatar Jan 07 '23 11:01 PaulRBerg

The path is relative to the current working directory, which isn't the same as the directory where the composite action was checked out.

I don't know the right path at the top of my head, but it might be inside runner.temp - https://docs.github.com/en/actions/learn-github-actions/contexts#runner-context

why not enable discussions in this repository?

👍 Good idea, I've enabled discussions.

joshmgross avatar Jan 10 '23 20:01 joshmgross

@PaulRBerg github.action_path might be what you're looking for:

The path where an action is located. This property is only supported in composite actions. You can use this path to access files located in the same repository as the action. https://docs.github.com/actions/learn-github-actions/contexts

So maybe something like this will work:

uses: "actions/github-script@v6"
with:
  script: |
    const script = require("${{github.action_path}}/dist/index.js")
    script({core})

joshmgross avatar Jan 11 '23 16:01 joshmgross

Oh, yes. This was exactly what I needed. Thanks for digging this up, Josh!

PaulRBerg avatar Jan 11 '23 16:01 PaulRBerg

@PaulRBerg github.action_path might be what you're looking for:

The path where an action is located. This property is only supported in composite actions. You can use this path to access files located in the same repository as the action. https://docs.github.com/actions/learn-github-actions/contexts

So maybe something like this will work:

uses: "actions/github-script@v6"
with:
  script: |
    const script = require("${{github.action_path}}/dist/index.js")
    script({core})

Perfect answer, just what I was looking for, thanks @joshmgross!

igorbrites avatar Apr 05 '24 15:04 igorbrites