feat(psmux): add native-Windows tmux multiplexer module #29
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: CI | |
| on: | |
| push: | |
| branches: [main] | |
| pull_request: | |
| branches: [main] | |
| permissions: | |
| contents: read | |
| concurrency: | |
| group: ci-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| powershell: | |
| name: PSScriptAnalyzer + Pester (Windows) | |
| runs-on: windows-latest | |
| defaults: | |
| run: | |
| shell: pwsh | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - name: Install PSScriptAnalyzer and Pester | |
| run: | | |
| Set-PSRepository -Name PSGallery -InstallationPolicy Trusted | |
| Install-Module -Name PSScriptAnalyzer -Force -Scope CurrentUser | |
| Install-Module -Name Pester -MinimumVersion 5.5.0 -Force -Scope CurrentUser -SkipPublisherCheck | |
| Get-Module -ListAvailable PSScriptAnalyzer, Pester | Select-Object Name, Version | |
| - name: PSScriptAnalyzer (whole tree, repo settings) | |
| run: | | |
| $results = Invoke-ScriptAnalyzer -Path . -Recurse -Settings ./PSScriptAnalyzerSettings.psd1 | |
| # Legacy snapshot files and vendored third-party plugins are out of scope per CLAUDE.md | |
| # (psmux/plugins/ is upstream code pinned by SHA, not ours to lint) - do not gate on them. | |
| $legacy = '(^|[\\/])pwsh_profile\.ps1$|[\\/]psmux[\\/]plugins[\\/]' | |
| $gated = $results | Where-Object { $_.ScriptPath -notmatch $legacy } | |
| if ($gated) { | |
| $gated | Format-Table RuleName, Severity, ScriptName, Line, Message -AutoSize | Out-String -Width 200 | Write-Host | |
| throw "PSScriptAnalyzer found $($gated.Count) issue(s)." | |
| } | |
| Write-Host "PSScriptAnalyzer: clean." | |
| - name: Pester (tests/) | |
| run: | | |
| $config = New-PesterConfiguration | |
| $config.Run.Path = 'tests' | |
| $config.Run.Exit = $true | |
| $config.Output.Verbosity = 'Detailed' | |
| Invoke-Pester -Configuration $config | |
| stylua: | |
| name: stylua --check (nvim) | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - uses: JohnnyMorganz/stylua-action@v5 | |
| with: | |
| token: ${{ secrets.GITHUB_TOKEN }} | |
| # Pinned (not "latest") so a future stylua release can't reformat and | |
| # red this now-required check without a deliberate bump + reformat. | |
| version: 2.5.2 | |
| args: --check nvim/ | |
| shellcheck: | |
| name: shellcheck (setup.sh) | |
| runs-on: ubuntu-latest | |
| continue-on-error: true | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - run: shellcheck setup.sh | |
| gitleaks: | |
| name: gitleaks (secret scan) | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v7 | |
| with: | |
| fetch-depth: 0 # full history so the scan covers every commit, not just the tip | |
| - uses: gitleaks/gitleaks-action@v3 | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| # No GITLEAKS_LICENSE needed: free for personal-account repositories. |