ExtractExpressions finds all ${{ ... }} expression spans in the given value.
It returns the spans and any extraction-level errors (e.g. unterminated expressions).
Parse parses a GitHub Actions expression (the content between ${{ and }}).
It returns any syntax errors found. A nil return means the expression is valid.