Skip to content

feat: describe conditional values #31252

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

Merged
merged 5 commits into from
Mar 5, 2024
Merged

feat: describe conditional values #31252

merged 5 commits into from
Mar 5, 2024

Conversation

deemp
Copy link
Contributor

@deemp deemp commented Jan 24, 2024

Why:

Closes: #23795

I used this hidden knowledge in freckle/stack-action#35 and decided to document it.

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

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 Jan 24, 2024
Copy link
Contributor

github-actions bot commented Jan 24, 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/learn-github-actions/expressions.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

@deemp Thanks so much for opening a PR! I'll get this triaged for review ✨

@nguyenalex836 nguyenalex836 added content This issue or pull request belongs to the Docs Content team actions This issue or pull request should be reviewed by the docs actions team waiting for review Issue/PR is waiting for a writer's review and removed triage Do not begin working on this issue until triaged by the team labels Jan 24, 2024
Comment on lines 18 to 19
Expressions are commonly used with the conditional `if` keyword in a workflow file to determine whether a step should run. When an `if` conditional is `truthy` (in [JavaScript sense](https://developer.mozilla.org/en-US/docs/Glossary/Truthy)), the step will run. All values are `truthy` except for `false`, `0`, `-0`, `0n`, `""`, `''`, `null`, `undefined`, `NaN`. You can evaluate an `!!<expression>` (e.g., in your browser console) to check whether the `<expression>` is `truthy`. For example, `!!"false"` produces `true`, so `"false"` is `truthy`.

Copy link
Contributor

@ferdnyc ferdnyc Jan 26, 2024

Choose a reason for hiding this comment

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

This... isn't correct at all.

The workflow is parsed in a string context (except for numerals and booleans), so JavaScript truthiness is irrelevant. There's no way to define a true JavaScript NaN or undefined in YML, you end up with the strings 'NaN' or 'undefined'. Nearly any string will evaluate true.

In this workflow:

    strategy:
      matrix:
        runme:
          - NaN
          - undefined
          - yes
          - no
          - false
          - 0
          - 1
          - -0

    steps:
      - name: true-path
        if: matrix.runme
        run: echo "${{ matrix.runme }} evaluates true"
      - name: false-path
        if: '! matrix.runme'
        run: echo "${{ matrix.runme }} evaluates false"

...The only matrix.runme values for which false-path will be executed are false and 0. (And -0, technically, but that's only because it's interpreted as 0. There's no distinction in YAML.) All of the others will evaluate true.

Copy link
Contributor

Choose a reason for hiding this comment

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

Oh, sorry, null is also a valid YAML primitive, and it will also evaluate false.

Honestly, I think this is pretty well explained in the Literals section of the Expressions docs.

Copy link
Contributor Author

@deemp deemp Jan 26, 2024

Choose a reason for hiding this comment

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

  1. I ran the suggested job (link). I can confirm that the falsy values are false, 0, -0, "", '', null. I can't see where these values are listed in the Literals section. What do you think about just extending the boolean docs?

    Data type Literal value
    boolean falsy (false, 0, -0, "", '', null) or truthy (true and other non-falsy values)
  2. I believe it's necessary to mention in the if docs that it expects a boolean and will run a step if the boolean is truthy. BTW, the docs already mention a truthy value (link), but don't explain it.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Updated the PR

@deemp deemp changed the title refactor: describe an acceptable if value refactor: describe conditional values Jan 26, 2024
@deemp deemp changed the title refactor: describe conditional values feat: describe conditional values Jan 26, 2024
@deemp deemp requested a review from ferdnyc February 3, 2024 13:44
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.

Thank you so much for updating the docs, @deemp! I'll go ahead and get this pull request merged. ✨

@SiaraMist SiaraMist enabled auto-merge March 5, 2024 22:27
@SiaraMist SiaraMist added this pull request to the merge queue Mar 5, 2024
Merged via the queue into github:main with commit 79e2cd3 Mar 5, 2024
Copy link
Contributor

github-actions bot commented Mar 5, 2024

Thanks very much for contributing! Your pull request has been merged 🎉 You should see your changes appear on the site in approximately 24 hours. If you're looking for your next contribution, check out our help wanted issues

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 waiting for review Issue/PR is waiting for a writer's review
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Document truthiness handling for expressions
4 participants