Skip to content

chore: sync *.ps1 EOL fix from canonical#55

Closed
Chris-Wolfgang wants to merge 3 commits into
mainfrom
chore/sync-ps1-eol-from-canonical
Closed

chore: sync *.ps1 EOL fix from canonical#55
Chris-Wolfgang wants to merge 3 commits into
mainfrom
chore/sync-ps1-eol-from-canonical

Conversation

@Chris-Wolfgang

@Chris-Wolfgang Chris-Wolfgang commented May 10, 2026

Copy link
Copy Markdown
Owner

Summary

Syncs the canonical *.ps1 EOL fix from repo-template#347 + #348. Removes the CRLF + UTF-8-BOM overrides for *.ps1 files in .gitattributes and .editorconfig.

Why

The #!/usr/bin/env pwsh shebang at the top of every script in scripts/ doesn't work as an executable on Linux/macOS when files are stored with CRLF + BOM:

  1. CRLF: kernel parses #!/usr/bin/env pwsh\r and tries to find an interpreter named pwsh\r — fails.
  2. BOM: bytes EF BB BF appear before #!, so the kernel doesn't recognize the file as a shebang script at all.

The original "PowerShell uses CRLF for Windows compatibility" rationale predates PowerShell 7+ (cross-platform). The PowerShell team's own canonical repos (PowerShell/PowerShell, PSScriptAnalyzer) all use LF + no BOM.

Changes

File Before After
.gitattributes *.ps1 text eol=crlf *.ps1 text eol=lf
.editorconfig [*.ps1] end_of_line = crlf, charset = utf-8-bom (both removed; LF + utf-8 from [*] defaults)

Comments rewritten to explain the shebang rationale.

What does NOT change

  • Files in the index: already LF. The CRLF rule was aspirational policy that never matched reality. No file content rewrites in this PR.
  • Windows users: working tree gets LF on checkout — the global * text=auto eol=lf rule in .gitattributes overrides core.autocrlf. Intentional so the shebang works for any contributor regardless of platform.
  • Indent: still 4 spaces for *.ps1.

Note about the protected-files guard

This PR touches .gitattributes (in canonical the rule is in .editorconfig's domain too) and .editorconfig (protected). The Detect .NET Projects guard will fail it. Maintainer override required — same path as the canonical PRs.

Test plan

  • Maintainer override + merge
  • After merge, git ls-files --eol scripts/*.ps1 shows i/lf w/* attr/text eol=lf everywhere

Removes the CRLF + UTF-8-BOM overrides for *.ps1 files in
.gitattributes and .editorconfig. Required for the
'#!/usr/bin/env pwsh' shebang at the top of every script in scripts/
to work as an executable on Linux/macOS.

No file content rewrites — index has been LF the whole time. Only
attr declarations align with reality now.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings May 10, 2026 00:20

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Syncs the template’s canonical PowerShell EOL policy so scripts/*.ps1 can be executed via #!/usr/bin/env pwsh on Unix-like systems (avoiding CRLF and BOM shebang breakage), by updating repository-level text/EOL configuration.

Changes:

  • Switch .gitattributes PowerShell rule to *.ps1 text eol=lf and update rationale comments.
  • Remove end_of_line = crlf and charset = utf-8-bom overrides from .editorconfig’s [*.ps1] section and update rationale comments.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.

File Description
.gitattributes Updates *.ps1 to enforce LF and rewrites comments explaining shebang compatibility.
.editorconfig Removes PowerShell CRLF/BOM overrides and updates comments to rely on global defaults.

Comment thread .gitattributes Outdated
Comment thread .editorconfig Outdated
Chris-Wolfgang and others added 2 commits May 13, 2026 16:51
- .editorconfig: drop the [*.ps1] section entirely. Its only rule
  (indent_size = 4) was a no-op since the global [*] section already
  sets indent_size = 4. The shebang-rationale comment now sits as a
  top-level note explaining why no override is needed, and is honest
  that the shebang is only present 'where present' rather than in
  'every script in scripts/'.
- .gitattributes: tighten the *.ps1 comment so it doesn't imply that
  `eol=lf` prevents a BOM. Git attributes can only normalize line
  endings; BOM avoidance is enforced via .editorconfig's charset
  setting. Also clarify that `* text=auto eol=lf` (top of file)
  takes precedence over core.autocrlf, so the previous claim about
  Windows users getting CRLF in their working tree was inaccurate.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings May 14, 2026 02:17

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 2 out of 2 changed files in this pull request and generated 3 comments.

Comment thread .gitattributes
Comment thread .gitattributes
Comment thread .editorconfig
@Chris-Wolfgang

Copy link
Copy Markdown
Owner Author

Superseded by the C1 template-drift re-sync — the canonical repo-template already carries this fix, delivered wholesale by the new C1 PRs. Closing as superseded; deleting the branch.

@Chris-Wolfgang Chris-Wolfgang deleted the chore/sync-ps1-eol-from-canonical branch May 22, 2026 15:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants