Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Document exit code handling for composite actions #31974

Closed
wants to merge 5 commits into from

Conversation

jsoref
Copy link
Contributor

@jsoref jsoref commented Mar 6, 2024

Why:

Closes: #31356

What's being changed (if available, include any code snippets, screenshots, or gifs):

https://docs-31974-b67b7f.preview.ghdocs.com/en/actions/creating-actions/setting-exit-codes-for-actions#about-exit-codes

image

https://docs-31974-b67b7f.preview.ghdocs.com/en/actions/creating-actions/setting-exit-codes-for-actions#handling-exit-codes-in-composite-actions

Check off the following:

  • I have reviewed my changes in staging, available via the View deployment link in this PR's timeline (this link will be available after opening the PR).

    • For content changes, you will also see an automatically generated comment with links directly to pages you've modified. The comment won't appear if your PR only edits files in the data directory.
  • For content changes, I have completed the self-review checklist.

@github-actions github-actions bot added the triage Do not begin working on this issue until triaged by the team label Mar 6, 2024
Copy link
Contributor

github-actions bot commented Mar 6, 2024

Automatically generated comment ℹ️

This comment is automatically generated and will be overwritten every time changes are committed to this branch.

The table contains an overview of files in the content directory that have been changed in this pull request. It's provided to make it easy to review your changes on the staging site. Please note that changes to the data directory will not show up in this table.


Content directory changes

You may find it useful to copy this table into the pull request summary. There you can edit it to share links to important articles or changes and to give a high-level overview of how the changes in your pull request support the overall goals of the pull request.

Source Preview Production What Changed
actions/creating-actions/setting-exit-codes-for-actions.md fpt
ghec
ghes@ 3.12 3.11 3.10 3.9 3.8
fpt
ghec
ghes@ 3.12 3.11 3.10 3.9 3.8

fpt: Free, Pro, Team
ghec: GitHub Enterprise Cloud
ghes: GitHub Enterprise Server

@nguyenalex836
Copy link
Contributor

@jsoref Hello! 👋 Let us know once this PR is ready for review

@nguyenalex836 nguyenalex836 added content This issue or pull request belongs to the Docs Content team site policy Content related to site policy more-information-needed More information is needed to complete review actions This issue or pull request should be reviewed by the docs actions team and removed triage Do not begin working on this issue until triaged by the team site policy Content related to site policy labels Mar 7, 2024
@jsoref
Copy link
Contributor Author

jsoref commented Mar 7, 2024

I'm still fighting the linter (quite likely not this week)

@jsoref jsoref marked this pull request as ready for review March 8, 2024 13:51
@jsoref
Copy link
Contributor Author

jsoref commented Mar 8, 2024

@nguyenalex836: this is ready for review -- I spent a nontrivial amount of time fighting liquid -- I don't understand it and really don't like the output it reports -- it'd be much better if it included a link to a page explaining when & how to use {% raw %} & {% endraw %}.

@nguyenalex836 nguyenalex836 added waiting for review Issue/PR is waiting for a writer's review and removed more-information-needed More information is needed to complete review labels Mar 8, 2024
@nguyenalex836
Copy link
Contributor

nguyenalex836 commented Mar 8, 2024

@jsoref Thanks for letting me know!

it'd be much better if it included a link to a page explaining when & how to use {% raw %} & {% endraw %}

Understood - will flag this internally when I triage for review shortly 👍

Rishoooz

This comment was marked as spam.

Copy link
Contributor

@SiaraMist SiaraMist left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey @jsoref, thanks for opening this pull request to add a composite action example to this article. 💛

I left a couple of asks to edit some things before we can approve this PR and add it to the docs. Let me know if you have any questions!

@@ -17,10 +17,10 @@ type: how_to

{% data variables.product.prodname_dotcom %} uses the exit code to set the action's check run status, which can be `success` or `failure`.

Exit status | Check run status | Description
------------|------------------|------------
Exit status | Step conclusion | Description
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Exit status | Step conclusion | Description
Exit status | Check run status | Description

Just updating this to match the language in the prior sentence and other language used throughout GitHub.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is wrong.

GitHub Actions Runtime maps GitHub Jobs to Check Runs. Beneath jobs are a number of other layers.

We aren't directly in a check run (GitHub Job), we're in an action inside another thing which might or might not surface that outcome. It's a fundamental problem with this documentation, it's absolutely ignorant of the fact that composite actions can nest (and have been able to for a very long time). I believe you can in fact have 10 levels of nesting in composite actions.

In some ways, check-spelling is boring, it doesn't generally nest composite actions by more than two layers, although it definitely envisions people calling it in their own composite action (and thus adding at least one more layer). Most of the actions that check-spelling calls don't have many steps in them (if they're composite actions), but that's an implementation detail of the individual actions and not a constraint by the actions subsystem. The actions we're starting to use internally will probably have multiple steps in second layer nested actions. And it's quite likely that they'll include continue-on-error.

A very incomplete diagram of check-spelling
graph TB
    Workflow{ Spelling Workflow } -- Job --> JobCheckSpelling(( check-spelling ))
    Workflow -- Job --> JobComment(( comment))
    JobCheckSpelling -- job step1 --> CheckSpellingAction[ uses: check-spelling/check-spelling ]
    CheckSpellingAction -- action step 1 --> CheckSpellingActionStep1( act-broken - run bash )
    CheckSpellingActionStep1 -- action step 2 --> CheckSpellingActionStep2( act-windows-shim )
    CheckSpellingActionStep2 -- action step 3 --> CheckSpellingActionStep3( parse-alternate-engine )
    CheckSpellingActionStep3 -- action step 4 --> CheckSpellingActionStep4[ alternate-engine uses: actions/checkout ]
    CheckSpellingActionStep4 -- potential steps in nested action --> ActionsCheckoutStep1(( implementation details... ))
    ActionsCheckoutStep1 --> CheckSpellingActionStep5
    CheckSpellingActionStep4 -- action step 5 --> CheckSpellingActionStep5( shim-path )
    CheckSpellingActionStep5 -- action step 6 --> CheckSpellingActionStep6( check-actions )
    CheckSpellingActionStep6 -- action step 7 --> CheckSpellingActionStep7[ checkout-replacement uses: check-spelling/actions-checkout ]
    CheckSpellingActionStep7  -- potential steps in nested action --> CheckSpellingActionsCheckoutStep11(( implementation details... ))
    CheckSpellingActionsCheckoutStep11 --> CheckSpellingActionStep8
    CheckSpellingActionStep7 -- action step 8 --> CheckSpellingActionStep8[ checkout uses: check-actions/checkout ]
    CheckSpellingActionStep8 -- action step 9 --> CheckSpellingActionStep9( report if checkout failed )
    CheckSpellingActionStep9 -- action step 10 --> CheckSpellingActionStep10[ checkout-merge uses: check-spelling/checkout-merge ]
    CheckSpellingActionStep10 -- action step 11 --> CheckSpellingActionStep11( raise-merge-failure )
    CheckSpellingActionStep11 -- action step 12 --> CheckSpellingActionStep12( save sha )
    CheckSpellingActionStep12 -- action step 13 --> CheckSpellingActionStep13( prepare )
    CheckSpellingActionStep13 -- action step 14 --> CheckSpellingActionStep14[ retrieve-comment-matrix-replacement uses: check-spelling/actions-download-artifact ]
    CheckSpellingActionStep14 -- action step 15 --> CheckSpellingActionStep15[ retrieve-comment-replacement uses: check-spelling/actions-download-artifact ]
    CheckSpellingActionStep14 -- potential steps in nested action --> CheckSpellingActionsDownloadArtifact(( implementation details... ))
    CheckSpellingActionStep15 -- action step 16 --> CheckSpellingActionStep16( retrieve-comment )
    CheckSpellingActionStep15 -- potential steps in nested action --> CheckSpellingActionsDownloadArtifact(( implementation details... ))
    CheckSpellingActionsDownloadArtifact --> CheckSpellingActionStep15
    CheckSpellingActionStep16 -- action step 17 --> CheckSpellingActionStep17( hash-dictionaries )
    CheckSpellingActionStep17 -- action step 18 --> CheckSpellingActionStep18[ retrieve-dictionaries uses: actions/cache/restore ]
    CheckSpellingActionStep18 -- action step 19 --> CheckSpellingActionStep19( perl-config )
    CheckSpellingActionStep19 -- action step 20 --> CheckSpellingActionStep20[ retrieve-perl-libraries-arch uses: actions/cache/restore ]
    CheckSpellingActionStep20 -- potential steps in nested action --> ActionsCacheRestore(( implementation details... ))
    ActionsCacheRestore --> CheckSpellingActionStep21[ retrieve-perl-libraries-lib uses: actions/cache/restore ]
    CheckSpellingActionStep20 -- action step 21 --> CheckSpellingActionStep21
    CheckSpellingActionStep21 -- potential steps in nested action --> ActionsCacheRestore
    CheckSpellingActionStep21 --> CheckSpellingActionStep22( install perl modules )
    CheckSpellingActionStep22 -- action step 23 --> CheckSpellingActionStep23( spelling)
    CheckSpellingActionStep23 -- action step 24 --> CheckSpellingActionStep24[ ‎save-dictionaries‎ uses: actions/cache/save ]
    CheckSpellingActionStep24 -- action step 25 --> CheckSpellingActionStep25[ ‎save-perl-libraries-lib uses: actions/cache/save ]
    CheckSpellingActionStep24 -- potential steps in nested action --> ActionsCacheSave(( implementation details... ))
    CheckSpellingActionStep25 -- potential steps in nested action --> ActionsCacheSave
    ActionsCacheSave --> CheckSpellingActionStep26
    CheckSpellingActionStep25 -- action step 26 --> CheckSpellingActionStep26[ store comment replacement uses: check-spelling/actions-upload-artifact ]
    CheckSpellingActionStep26 -- potential steps in nested action --> CheckSpellingUploadArtifact(( implementation details... ))
    JobComment --> CheckSpellingAction
    Workflow -- Job --> JobUpdate(( update))
    JobUpdate --> CheckSpellingAction

    CheckSpellingActionStep10 -- checkout-merge step 1 --> CheckoutMergeStep1( merge )
    CheckoutMergeStep1 --> CheckoutMergeStep2( there could be more steps here... )
    CheckoutMergeStep2 --> CheckSpellingActionStep11

    Key{ Key } --> KeyWorkflow{ Workflow }
    Key --> Job(( Job ))
    Key --> RunStep( run step )
    Key --> UsesAction[ uses action ]
    UsesAction --> ImplementationDetails(( implementation details ))
    KeyWorkflow --> Job
    Job --> RunStep
    Job --> UsesAction
    Job -- up to 3 levels of nesting --> Job
    Job -- Set check run status --> CheckRunStatus{ ... }
    UsesAction --> RunStep
    UsesAction -- up to 9 levels of nesting --> UsesAction

`0` | `success` | The action completed successfully and other tasks that depend on it can begin.
Nonzero value (any integer but 0)| `failure` | Any other exit code indicates the action failed. When an action fails, all concurrent actions are canceled and future actions are skipped. The check run and check suite both get a `failure` status.
Nonzero value (any integer but 0)| `failure` | Any other exit code indicates the action failed. When an action fails unless the step has `continue-on-error: true` the job will be set to `failed` and future steps in the job will be skipped unless they use `if:` with either `always()` or `failed()`. Concurrent jobs will be canceled unless `jobs.<job_id>.strategy.fail-fast` is `false`.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Nonzero value (any integer but 0)| `failure` | Any other exit code indicates the action failed. When an action fails unless the step has `continue-on-error: true` the job will be set to `failed` and future steps in the job will be skipped unless they use `if:` with either `always()` or `failed()`. Concurrent jobs will be canceled unless `jobs.<job_id>.strategy.fail-fast` is `false`.
Nonzero value (any integer but 0)| `failure` | Any other exit code indicates the action failed. When an action fails, all concurrent actions are canceled and future actions are skipped. The check run and check suite both get a `failure` status.

Since this article is aimed at people who are creating actions, I think the original text here makes more sense. If someone is writing a workflow and they don't want dependent jobs to be skipped because of a failed action, they can find that information in the Workflow syntax article.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nope, you might think that, but that's because the action syntax documentation is out of date. See #31356 (comment).

I just spent a nontrivial amount of effort over the last two days w/ a coworker on a private action that uses continue-on-error: true. Yes, it isn't mentioned in https://docs.github.com/en/actions/creating-actions/metadata-syntax-for-github-actions but I can assure you that it does work and we relied on it heavily.

check-spelling has been using it publicly for a while too:
https://github.com/check-spelling/check-spelling/blob/e0d8a1df4f07a2afade0882ac903ebfaba4f0bc8/action.yml#L398

The article is aimed at people like me, and I'm trying to fix it based on my experience as an action author.

I don't use continue-on-error in workflows, but I do use it in my actions.

Beyond that, the current text is totally wrong.

The only things concurrent to an action are Jobs, not actions. Within a job you can have actions or run statements, and a run statement in another job will be killed just as much as another action in another job would be killed -- but details about which is killed would be a layering violation -- at most the death of an action leads to a cascade -- its parent action dies until eventually its ancestor action kills its job, and then the death of the job results in the death of the job's siblings, which in turn would result in the death of job steps which may include other actions or run-shell steps. -- But it isn't that the death of the current action triggers any of those things directly, they're at most casualties of other things.

@@ -48,3 +48,187 @@ fi
```

For more information, see "[AUTOTITLE](/actions/creating-actions/creating-a-docker-container-action)."

## Handling exit codes in composite actions
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would you be able to shorten this whole section to a relevant example that explains how a non-zero exit in the middle of a composite action will cause the remaining composite action to behave? So that it is structured more similarly to the previous two sections about Docker and JavaScript actions?

The audience for this article is people who are creating actions. Because of that, any content that is directed towards people who are writing workflows should be removed from this article. If you think the documentation in the Using workflows section of the docs is missing any of this information, you can definitely open an issue to propose adding it there. 👍

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't have the energy to do that at this time. Between dealing w/ a dozen other problems (including runners repeatably dying with my workflows), this was as good as I could manage while still providing something where someone could actually see an outcome.

Copy link
Contributor Author

@jsoref jsoref left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I hope this clarifies. Sadly, none of your suggestions in this round were correct -- they all appear to be due to failures by the GitHub Actions team to arrange for proper documentation update/review over the span of a number of years.

@@ -17,10 +17,10 @@ type: how_to

{% data variables.product.prodname_dotcom %} uses the exit code to set the action's check run status, which can be `success` or `failure`.

Exit status | Check run status | Description
------------|------------------|------------
Exit status | Step conclusion | Description
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is wrong.

GitHub Actions Runtime maps GitHub Jobs to Check Runs. Beneath jobs are a number of other layers.

We aren't directly in a check run (GitHub Job), we're in an action inside another thing which might or might not surface that outcome. It's a fundamental problem with this documentation, it's absolutely ignorant of the fact that composite actions can nest (and have been able to for a very long time). I believe you can in fact have 10 levels of nesting in composite actions.

In some ways, check-spelling is boring, it doesn't generally nest composite actions by more than two layers, although it definitely envisions people calling it in their own composite action (and thus adding at least one more layer). Most of the actions that check-spelling calls don't have many steps in them (if they're composite actions), but that's an implementation detail of the individual actions and not a constraint by the actions subsystem. The actions we're starting to use internally will probably have multiple steps in second layer nested actions. And it's quite likely that they'll include continue-on-error.

A very incomplete diagram of check-spelling
graph TB
    Workflow{ Spelling Workflow } -- Job --> JobCheckSpelling(( check-spelling ))
    Workflow -- Job --> JobComment(( comment))
    JobCheckSpelling -- job step1 --> CheckSpellingAction[ uses: check-spelling/check-spelling ]
    CheckSpellingAction -- action step 1 --> CheckSpellingActionStep1( act-broken - run bash )
    CheckSpellingActionStep1 -- action step 2 --> CheckSpellingActionStep2( act-windows-shim )
    CheckSpellingActionStep2 -- action step 3 --> CheckSpellingActionStep3( parse-alternate-engine )
    CheckSpellingActionStep3 -- action step 4 --> CheckSpellingActionStep4[ alternate-engine uses: actions/checkout ]
    CheckSpellingActionStep4 -- potential steps in nested action --> ActionsCheckoutStep1(( implementation details... ))
    ActionsCheckoutStep1 --> CheckSpellingActionStep5
    CheckSpellingActionStep4 -- action step 5 --> CheckSpellingActionStep5( shim-path )
    CheckSpellingActionStep5 -- action step 6 --> CheckSpellingActionStep6( check-actions )
    CheckSpellingActionStep6 -- action step 7 --> CheckSpellingActionStep7[ checkout-replacement uses: check-spelling/actions-checkout ]
    CheckSpellingActionStep7  -- potential steps in nested action --> CheckSpellingActionsCheckoutStep11(( implementation details... ))
    CheckSpellingActionsCheckoutStep11 --> CheckSpellingActionStep8
    CheckSpellingActionStep7 -- action step 8 --> CheckSpellingActionStep8[ checkout uses: check-actions/checkout ]
    CheckSpellingActionStep8 -- action step 9 --> CheckSpellingActionStep9( report if checkout failed )
    CheckSpellingActionStep9 -- action step 10 --> CheckSpellingActionStep10[ checkout-merge uses: check-spelling/checkout-merge ]
    CheckSpellingActionStep10 -- action step 11 --> CheckSpellingActionStep11( raise-merge-failure )
    CheckSpellingActionStep11 -- action step 12 --> CheckSpellingActionStep12( save sha )
    CheckSpellingActionStep12 -- action step 13 --> CheckSpellingActionStep13( prepare )
    CheckSpellingActionStep13 -- action step 14 --> CheckSpellingActionStep14[ retrieve-comment-matrix-replacement uses: check-spelling/actions-download-artifact ]
    CheckSpellingActionStep14 -- action step 15 --> CheckSpellingActionStep15[ retrieve-comment-replacement uses: check-spelling/actions-download-artifact ]
    CheckSpellingActionStep14 -- potential steps in nested action --> CheckSpellingActionsDownloadArtifact(( implementation details... ))
    CheckSpellingActionStep15 -- action step 16 --> CheckSpellingActionStep16( retrieve-comment )
    CheckSpellingActionStep15 -- potential steps in nested action --> CheckSpellingActionsDownloadArtifact(( implementation details... ))
    CheckSpellingActionsDownloadArtifact --> CheckSpellingActionStep15
    CheckSpellingActionStep16 -- action step 17 --> CheckSpellingActionStep17( hash-dictionaries )
    CheckSpellingActionStep17 -- action step 18 --> CheckSpellingActionStep18[ retrieve-dictionaries uses: actions/cache/restore ]
    CheckSpellingActionStep18 -- action step 19 --> CheckSpellingActionStep19( perl-config )
    CheckSpellingActionStep19 -- action step 20 --> CheckSpellingActionStep20[ retrieve-perl-libraries-arch uses: actions/cache/restore ]
    CheckSpellingActionStep20 -- potential steps in nested action --> ActionsCacheRestore(( implementation details... ))
    ActionsCacheRestore --> CheckSpellingActionStep21[ retrieve-perl-libraries-lib uses: actions/cache/restore ]
    CheckSpellingActionStep20 -- action step 21 --> CheckSpellingActionStep21
    CheckSpellingActionStep21 -- potential steps in nested action --> ActionsCacheRestore
    CheckSpellingActionStep21 --> CheckSpellingActionStep22( install perl modules )
    CheckSpellingActionStep22 -- action step 23 --> CheckSpellingActionStep23( spelling)
    CheckSpellingActionStep23 -- action step 24 --> CheckSpellingActionStep24[ ‎save-dictionaries‎ uses: actions/cache/save ]
    CheckSpellingActionStep24 -- action step 25 --> CheckSpellingActionStep25[ ‎save-perl-libraries-lib uses: actions/cache/save ]
    CheckSpellingActionStep24 -- potential steps in nested action --> ActionsCacheSave(( implementation details... ))
    CheckSpellingActionStep25 -- potential steps in nested action --> ActionsCacheSave
    ActionsCacheSave --> CheckSpellingActionStep26
    CheckSpellingActionStep25 -- action step 26 --> CheckSpellingActionStep26[ store comment replacement uses: check-spelling/actions-upload-artifact ]
    CheckSpellingActionStep26 -- potential steps in nested action --> CheckSpellingUploadArtifact(( implementation details... ))
    JobComment --> CheckSpellingAction
    Workflow -- Job --> JobUpdate(( update))
    JobUpdate --> CheckSpellingAction

    CheckSpellingActionStep10 -- checkout-merge step 1 --> CheckoutMergeStep1( merge )
    CheckoutMergeStep1 --> CheckoutMergeStep2( there could be more steps here... )
    CheckoutMergeStep2 --> CheckSpellingActionStep11

    Key{ Key } --> KeyWorkflow{ Workflow }
    Key --> Job(( Job ))
    Key --> RunStep( run step )
    Key --> UsesAction[ uses action ]
    UsesAction --> ImplementationDetails(( implementation details ))
    KeyWorkflow --> Job
    Job --> RunStep
    Job --> UsesAction
    Job -- up to 3 levels of nesting --> Job
    Job -- Set check run status --> CheckRunStatus{ ... }
    UsesAction --> RunStep
    UsesAction -- up to 9 levels of nesting --> UsesAction

`0` | `success` | The action completed successfully and other tasks that depend on it can begin.
Nonzero value (any integer but 0)| `failure` | Any other exit code indicates the action failed. When an action fails, all concurrent actions are canceled and future actions are skipped. The check run and check suite both get a `failure` status.
Nonzero value (any integer but 0)| `failure` | Any other exit code indicates the action failed. When an action fails unless the step has `continue-on-error: true` the job will be set to `failed` and future steps in the job will be skipped unless they use `if:` with either `always()` or `failed()`. Concurrent jobs will be canceled unless `jobs.<job_id>.strategy.fail-fast` is `false`.
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nope, you might think that, but that's because the action syntax documentation is out of date. See #31356 (comment).

I just spent a nontrivial amount of effort over the last two days w/ a coworker on a private action that uses continue-on-error: true. Yes, it isn't mentioned in https://docs.github.com/en/actions/creating-actions/metadata-syntax-for-github-actions but I can assure you that it does work and we relied on it heavily.

check-spelling has been using it publicly for a while too:
https://github.com/check-spelling/check-spelling/blob/e0d8a1df4f07a2afade0882ac903ebfaba4f0bc8/action.yml#L398

The article is aimed at people like me, and I'm trying to fix it based on my experience as an action author.

I don't use continue-on-error in workflows, but I do use it in my actions.

Beyond that, the current text is totally wrong.

The only things concurrent to an action are Jobs, not actions. Within a job you can have actions or run statements, and a run statement in another job will be killed just as much as another action in another job would be killed -- but details about which is killed would be a layering violation -- at most the death of an action leads to a cascade -- its parent action dies until eventually its ancestor action kills its job, and then the death of the job results in the death of the job's siblings, which in turn would result in the death of job steps which may include other actions or run-shell steps. -- But it isn't that the death of the current action triggers any of those things directly, they're at most casualties of other things.

@@ -48,3 +48,187 @@ fi
```

For more information, see "[AUTOTITLE](/actions/creating-actions/creating-a-docker-container-action)."

## Handling exit codes in composite actions
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't have the energy to do that at this time. Between dealing w/ a dozen other problems (including runners repeatably dying with my workflows), this was as good as I could manage while still providing something where someone could actually see an outcome.

@nguyenalex836
Copy link
Contributor

@jsoref Hello 👋 Given the direction and tone of this current discussion regarding the feedback we provided, I'm going to put this PR on hold. It would be beneficial for us all to take a few days and clear our heads with respect to this work.

After a few days, please feel free to ping us in this PR and we can continue working together through these updates 💛

@nguyenalex836 nguyenalex836 removed the waiting for review Issue/PR is waiting for a writer's review label Mar 15, 2024
@nguyenalex836
Copy link
Contributor

@jsoref Hi 👋 Regarding the last few messages on this PR, we wanted to clarify @SiaraMist was only reiterating feedback she had received from a senior engineer while tirelessly seeking assistance on how to best support you in this work.

If you would like to discuss this feedback, and continue working on this PR, we welcome respectful discourse.

We appreciate all of the work you've done for the community in the past, and hope that we can continue working together in the thoughtful and courteous manner our partnership deserves. Please let us know if you would like to continue working on this PR.

@nguyenalex836 nguyenalex836 added the more-information-needed More information is needed to complete review label Mar 19, 2024
@jsoref
Copy link
Contributor Author

jsoref commented Mar 19, 2024

I don't feel I was treated respectfully. My PR wasn't reviewed in good faith.

I do not make changes gratuitously.

I'll wait for an apology from Siara before continuing. She did not advocate on behalf of the changes to that engineer.

@jsoref
Copy link
Contributor Author

jsoref commented Mar 19, 2024

Notably she did not "[Demonstrate] empathy" -- by asking why I needed to make the change to the category just insisted that it be reverted.

@nguyenalex836
Copy link
Contributor

@jsoref I'm sorry to hear that. As our goal is to grow an open source community of engagement and respect, we review all contributions in good faith. However, the responses you've submitted recently on this PR are not aligned with this goal. Respect, especially of differing opinions, is taken seriously within our community. For this reason, we will be closing this PR.

If in the future, similar disrespectful behavior is demonstrated, you will be temporarily banned from this community. If after a temporary ban you continue to exhibit disrespectful behavior, you will be permanently banned.

As previously mentioned, we are appreciative of the contributions you've provided to GitHub Docs. We hope this is an opportunity to grow from this experience, and strengthen our partnership.

@setharnold
Copy link

For full disclosure, I'm one of @jsoref's friends, I'm primarily a rubber-duck that quacks in his pursuit of ridding the world's software of spelling mistakes. As such he often asks me for my impression or understanding of the GitHub documentation before filing issues or pull requests.

I'd like to suggest that bouncing all the conversation through an intermediary isn't very helpful. Playing a game of telephone is well-known to introduce misunderstandings and increase the confusion. This isn't a fair position to put either Siara nor Josh in, and I'll wager the unknown senior engineer behind the curtain wasn't enjoying it much either.

If you go through @jsoref's contributions history you'll see dozens of examples of friendly and respectful attempts to improve the documentation and ecosystem: https://github.com/issues?q=is%3Aissue+author%3Ajsoref+archived%3Afalse+org%3Agithub

Many of these are met with silence, or auto-close-bots, and sometimes misunderstandings from people who are relying on the documentation rather than experimental results or code inspection. It's easy to get the impression that the docs teams are stretched well beyond their capacities.

It's also easy to get the impression that a significant amount of effort is spent trying to synchronize issues, pull requests, and contents, between a public facade and private sources of truth. Are the GitHub teams getting enough value from the separation to justify the costs of maintaining it?

I suggest considering embracing the open-source way and engaging directly with the community, at face value.

Thanks

@nguyenalex836
Copy link
Contributor

@setharnold We appreciate your perspective and transparency. We are reviewing the feedback you've provided above, and will discuss these points internally. Thank you for your desire to improve our OS community 💛

@setharnold
Copy link

@nguyenalex836 thanks :) <3

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
actions This issue or pull request should be reviewed by the docs actions team content This issue or pull request belongs to the Docs Content team more-information-needed More information is needed to complete review
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Explain how to unset failure code in composite actions
5 participants