Opening this for discussion (thinking about it while working on #113).
Because core_version lets callers pick the internal core version at run time, the action has to stay a composite action that installs from npm on every invocation.
Most actions instead let their own ref be the version (uses: org/action@v2, a SHA) and ship the code bundled, with ncc compiling into a committed dist/index.js, using: node24, and a check-dist job as a guard.
There's also a coupling argument: index.js expects specific core exports and a { content, status } result, so a core_version outside that range breaks the action's own code rather than the caller's configuration. latest would do exactly that the day a v3 renames an export.
fail_on_error is the quieter version of the problem, since it reads result.status, which older cores don't return, so an older core_version silently makes the flag a no-op.
If we wanted to move that way:
- Remove the
core_version input; pin core in package.json only.
- Bundle and switch to
using: node24, dropping the install steps from action.yml.
- Ship core updates through automation, since dependabot already opens the bump PR: a release on merge plus
update-tags.yml would carry it to users on @v1.
Against that: it's breaking for anyone setting core_version, whose replacement would be an exact tag or SHA, and a committed dist/ adds review noise and a stale-bundle failure mode.
If people rely on the input, leaving things as they are seems reasonable.
Opening this for discussion (thinking about it while working on #113).
Because
core_versionlets callers pick the internal core version at run time, the action has to stay a composite action that installs from npm on every invocation.Most actions instead let their own ref be the version (
uses: org/action@v2, a SHA) and ship the code bundled, withncccompiling into a committeddist/index.js,using: node24, and acheck-distjob as a guard.There's also a coupling argument:
index.jsexpects specific core exports and a{ content, status }result, so acore_versionoutside that range breaks the action's own code rather than the caller's configuration.latestwould do exactly that the day a v3 renames an export.fail_on_erroris the quieter version of the problem, since it readsresult.status, which older cores don't return, so an oldercore_versionsilently makes the flag a no-op.If we wanted to move that way:
core_versioninput; pin core inpackage.jsononly.using: node24, dropping the install steps fromaction.yml.update-tags.ymlwould carry it to users on@v1.Against that: it's breaking for anyone setting
core_version, whose replacement would be an exact tag or SHA, and a committeddist/adds review noise and a stale-bundle failure mode.If people rely on the input, leaving things as they are seems reasonable.