GitHub Actions Expression Evaluator (Free)
Paste an expression and a context, get the exact evaluated value and type. No guessing whether your if: condition will fire.
GitHub Actions expressions have their own rules: == is case-insensitive, && and || return the operand (not a boolean), and operator precedence trips up almost everyone. This evaluator runs a real recursive-descent parser over the expression and computes the result against your context, so you can verify an if: condition before you push.
What it evaluates correctly
- Operator precedence:
!(tightest), then comparisons, then&&, then||. - Case-insensitive
==/!=with loose number/string coercion, exactly like GitHub. &&and||return the operand value, not a boolean - so${{ env.X || 'default' }}works.- Built-in functions:
contains,startsWith,endsWith,format,join,toJSON,fromJSON,success()/failure()/always()/cancelled(), andhashFiles. - Property access (
github.event.ref), index access (matrix[0]), and grouped sub-expressions.
Why a tool beats asking an AI
Ask an AI to evaluate ${{ 1 < 2 && 3 > 4 }} or ${{ 'A' == 'a' }} and it frequently gets it wrong: it forgets that == is case-insensitive in GitHub Actions, mis-ranks operator precedence (binding && tighter than a comparison, or || looser than it should be), and assumes &&/|| return booleans instead of the operand value. This tool runs a deterministic parser and evaluator, so the answer is the answer GitHub computes - not a plausible-sounding guess.
Common uses
- Verify a job/step
if:condition before pushing a workflow. - Check that
fromJSON+containsdoes what you expect on a matrix value. - Confirm a
format()template renders the string you want.