Don't treat Skipped/Canceled steps/workflows as Failures

I have an action that wants to mark its own step as skipped (Suppress check-spelling for push event if pull_request_target will ha… · check-spelling/check-spelling@9441e2c · GitHub).

It’s possible for an action (or workflow) to kill the entire workflow by calling a cancel API. But while that shows up in some places as Canceled, in others, it appears as Failed which is scary:

Canceled: Canceled

Failed: Failed

Not OK: image

Effectively, what I’d like is a way for an action to mark its step as skipped.

Or, a way for canceled to not be treated as a failure.

It might be ok if I have to add an additional step before the main step:

steps:
 - name: pre-check
   uses: my-action/action@prerelease
   with:
     check_and_suppress_push_for_open_pull_request: 1
 - name: check
   if: {{ always() && ... }}
   uses: my-action/action@prerelease

But, I’d really like to be able to offer a simple and easy to copy/consume workflow. As is, here’s my sample (note: it’s truncated below, which shows it’s clearly not “simple”):


Is there a way for me to cause canceled workflows to not be presented as failures (:x:)? Or is there a way for an action (or workflow) to from code in the running part (not the if) to cause its own step to be marked as skipped. (Or, does someone happen to have an example of a pre step connected to an if to skip a main step?)