Skip to content

v0.27.0

Choose a tag to compare

@github-actions github-actions released this 30 Mar 05:42
· 56 commits to main since this release

Security

  • Fix expression injection via matrix values in if conditions — matrix values are now quoted as string literals to prevent injection like 'true' || always() from bypassing conditionals
  • Add path traversal protection for local action references (uses: ./path) — reject paths that escape the workspace via .. segments
  • Clean up script files after step execution to avoid leaving interpolated secrets on disk

Bug Fixes

  • Composite action outputs not propagated — steps.<composite-id>.outputs.* now works correctly for composite actions (#18, reported by @bmthd)
  • Composite action outcome/conclusion not set — steps.<composite-id>.outcome and steps.<composite-id>.conclusion are now propagated from inner steps
  • JS SyntaxError on startup — fix ${} in MoonBit-generated JS template literals causing SyntaxError: Missing } in template expression (#17, reported by @bmthd)
  • Matrix substitution in complex expressions — ${{ matrix.key != 'true' }} no longer replaces the entire expression with empty string; matrix refs within larger expressions are now substituted inline while preserving the ${{ }} wrapper
  • Job-level if not matrix-substituted — if: ${{ matrix.skip != 'true' }} at the job level now works correctly

Tests

  • 13 new matrix strategy test fixtures: three axes, job/step if/env/name, continue-on-error, include extra keys, matrix chain, working-directory, unquoted YAML values
  • 5 composite action test fixtures: single output, multiple outputs, outcome/conclusion, output in if condition, GITHUB_ENV propagation
  • 28 unit tests for substitute_matrix_text edge cases (special characters, complex expressions, injection attempts)
  • 3 executor tests for output/env with special characters and heredoc format

Documentation

  • Add performance benchmark (docs/perf.md) covering startup overhead, workspace modes, Node.js CPU, and file I/O across local, nix-packages, and apple-container