@sebastienrousseau/dotfiles 0.2.502 → 0.2.504
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +109 -9
- package/LICENSE +21 -1283
- package/README.md +6 -4
- package/docs/CONFIG_STRATEGY.md +124 -0
- package/docs/COPYRIGHT +1 -1
- package/docs/GOVERNANCE.md +98 -0
- package/docs/MAINTAINERS.md +41 -0
- package/docs/OPENCODE.md +127 -0
- package/docs/README.md +2 -0
- package/docs/STRUCTURE.md +102 -0
- package/docs/adr/ADR-011-nushell-tier3-keep.md +2 -2
- package/docs/architecture/AI_COST_OPTIMIZATION.md +143 -0
- package/docs/architecture/REPO_LAYOUT.md +8 -8
- package/docs/archive/MILESTONE_v0.2.493.md +1 -1
- package/docs/index.md +2 -2
- package/docs/interop/POWERSHELL.md +1 -1
- package/docs/manual/00-introduction.md +1 -1
- package/docs/manual/01-concepts/02-trust-model.md +1 -1
- package/docs/manual/03-reference/02-config-files.md +2 -2
- package/docs/manual/_toc.yml +1 -1
- package/docs/manual/command-index.md +72 -59
- package/docs/operations/CI_COMPOSITES.md +2 -2
- package/docs/operations/COMPLETIONS.md +2 -2
- package/docs/operations/COVERAGE.md +5 -5
- package/docs/operations/HARD_AUDIT_2026.md +11 -11
- package/docs/operations/MAINTENANCE.md +3 -3
- package/docs/operations/MANIFEST.md +127 -0
- package/docs/operations/RELEASE_PIPELINE.md +130 -0
- package/docs/operations/RFC_v0_2_503_reorganization.md +280 -0
- package/docs/operations/ROADMAP_2026.md +6 -6
- package/docs/operations/ROADMAP_V0_2_503.md +134 -0
- package/docs/operations/TESTING.md +17 -0
- package/docs/operations/TRACEABILITY.md +6 -3
- package/docs/operations/VERSION_SYNC.md +4 -4
- package/docs/reference/POWERSHELL_PARITY.md +8 -7
- package/docs/schema/dot-env-v1.json +110 -0
- package/docs/security/CI_EGRESS_ALLOWLIST.md +1 -1
- package/docs/security/CI_PINNING.md +17 -9
- package/docs/security/DEPS_DEV_EXCEPTIONS.md +2 -2
- package/docs/security/FUZZING.md +114 -0
- package/docs/security/INSTALL_VERIFICATION.md +2 -2
- package/docs/security/POLICY_RELEASES.md +2 -2
- package/docs/security/SCORECARD.md +58 -3
- package/docs/security/SHELL_EXEMPTIONS.md +4 -4
- package/docs/security/VERIFY_RELEASE.md +201 -0
- package/install.sh +118 -5
- package/package.json +1 -1
- package/scripts/README.md +123 -0
- package/scripts/ci/check-copyright-headers.sh +4 -93
- package/scripts/ci/check-shell-preamble.sh +4 -103
- package/scripts/ci/guard-gitleaks-checkout.sh +4 -54
- package/scripts/diagnostics/a2a-conformance.sh +4 -4
- package/scripts/diagnostics/alias-governance.sh +1 -1
- package/scripts/diagnostics/aliases-cheatsheet.sh +2 -2
- package/scripts/diagnostics/benchmark.sh +5 -5
- package/scripts/diagnostics/conflicts.sh +2 -2
- package/scripts/diagnostics/doctor-unified.sh +3 -3
- package/scripts/diagnostics/doctor.sh +10 -10
- package/scripts/diagnostics/drift-dashboard.sh +2 -2
- package/scripts/diagnostics/health.sh +4 -4
- package/scripts/diagnostics/history-analysis.sh +2 -2
- package/scripts/diagnostics/mcp-doctor.sh +10 -7
- package/scripts/diagnostics/perf.sh +5 -5
- package/scripts/diagnostics/scorecard.sh +4 -4
- package/scripts/diagnostics/security-score.sh +25 -6
- package/scripts/diagnostics/smoke-test.sh +2 -2
- package/scripts/diagnostics/snapshot.sh +2 -2
- package/scripts/diagnostics/verify.sh +4 -4
- package/scripts/diagnostics/version-locks.sh +13 -3
- package/scripts/diagnostics/workstation-attestation.sh +14 -14
- package/scripts/dot/commands/agent.sh +8 -0
- package/scripts/dot/commands/agents.sh +14 -4
- package/scripts/dot/commands/ai.sh +156 -37
- package/scripts/dot/commands/appearance.sh +2 -2
- package/scripts/dot/commands/core.sh +2 -2
- package/scripts/dot/commands/diagnostics.sh +5 -5
- package/scripts/dot/commands/env-emit.sh +202 -0
- package/scripts/dot/commands/fleet.sh +22 -16
- package/scripts/dot/commands/init.sh +4 -4
- package/scripts/dot/commands/lint.sh +9 -4
- package/scripts/dot/commands/manual.sh +3 -3
- package/scripts/dot/commands/meta.sh +12 -6
- package/scripts/dot/commands/patterns.sh +2 -2
- package/scripts/dot/commands/registry.sh +4 -4
- package/scripts/dot/commands/restore.sh +4 -4
- package/scripts/dot/commands/secrets.sh +4 -3
- package/scripts/dot/commands/security.sh +2 -2
- package/scripts/dot/commands/tools.sh +13 -3
- package/scripts/dot/powershell/Dot.psm1 +199 -0
- package/scripts/fonts/install-nerd-fonts.sh +2 -2
- package/scripts/git-hooks/pre-commit-audit.sh +3 -3
- package/scripts/git-hooks/pre-push +13 -0
- package/scripts/ops/ai-setup.sh +1 -1
- package/scripts/ops/bundle.sh +3 -3
- package/scripts/ops/chaos.sh +2 -2
- package/scripts/ops/chezmoi-apply.sh +12 -6
- package/scripts/ops/heal.sh +4 -4
- package/scripts/ops/post-apply-repair.sh +2 -2
- package/scripts/ops/prewarm.sh +2 -2
- package/scripts/ops/release.sh +4 -4
- package/scripts/ops/rollback.sh +4 -4
- package/scripts/ops/setup.sh +2 -2
- package/scripts/qa/check-version-consistency.sh +123 -0
- package/scripts/qa/coverage-baseline.sh +1 -1
- package/scripts/qa/docs-coverage.sh +2 -2
- package/scripts/qa/powershell-contract.ps1 +1 -1
- package/scripts/qa/scorecard-snapshot.sh +127 -0
- package/scripts/security/backup.sh +2 -2
- package/scripts/security/dns-doh.sh +4 -4
- package/scripts/security/encryption-check.sh +4 -4
- package/scripts/security/enforce-policies.sh +2 -2
- package/scripts/security/firewall.sh +4 -4
- package/scripts/security/lock-screen.sh +4 -4
- package/scripts/security/manage-secrets.sh +2 -2
- package/scripts/security/ssh-cert.sh +2 -2
- package/scripts/security/telemetry-kill.sh +4 -4
- package/scripts/security/usb-safety.sh +4 -4
- package/scripts/theme/extract-heic-frames.sh +114 -0
- package/scripts/theme/rebuild-themes.sh +31 -2
- package/scripts/theme/switch.sh +13 -6
- package/scripts/theme/wallpaper-sync.sh +297 -93
- package/scripts/tuning/linux.sh +2 -2
- package/scripts/tuning/macos.sh +2 -2
- package/scripts/version-sync.sh +74 -10
- package/dot_config/.module-manifest.json +0 -69
- package/dot_config/ai/identity.md +0 -23
- package/dot_config/ai/patterns/architect.md +0 -16
- package/dot_config/ai/patterns/hardener.md +0 -15
- package/dot_config/ai/patterns/refactor.md +0 -15
- package/dot_config/aider/aider.conf.yml +0 -32
- package/dot_config/alacritty/alacritty.toml.tmpl +0 -55
- package/dot_config/ansible/ansible.cfg +0 -11
- package/dot_config/atuin/config.toml.tmpl +0 -47
- package/dot_config/bat/config +0 -23
- package/dot_config/brave-flags.conf.tmpl +0 -7
- package/dot_config/btop/btop.conf +0 -16
- package/dot_config/btop/themes/tokyonight.theme +0 -34
- package/dot_config/bun/bunfig.toml.tmpl +0 -33
- package/dot_config/claude/mcp_servers.json +0 -20
- package/dot_config/containers/containers.conf +0 -14
- package/dot_config/curl/dot_curlrc +0 -18
- package/dot_config/dlv/config.yml +0 -39
- package/dot_config/docker/config.json +0 -15
- package/dot_config/dotfiles/agent-card.json +0 -29
- package/dot_config/dotfiles/agent-profiles.json +0 -92
- package/dot_config/dotfiles/boot/README.md +0 -13
- package/dot_config/dotfiles/grub/README.md +0 -13
- package/dot_config/dotfiles/lock/README.md +0 -13
- package/dot_config/dotfiles/mcp-lock.json +0 -33
- package/dot_config/dotfiles/mcp-policy.json +0 -52
- package/dot_config/dotfiles/mcp-registry.json +0 -47
- package/dot_config/dotfiles/model-registry.json +0 -20
- package/dot_config/dotfiles/policy-bundles.json +0 -38
- package/dot_config/dotfiles/prompt-registry.json +0 -16
- package/dot_config/dotfiles/versions.env +0 -18
- package/dot_config/duf/duf.conf +0 -6
- package/dot_config/duti/defaults.duti +0 -5
- package/dot_config/emoji/emoji.txt +0 -34
- package/dot_config/environment.d/50-ssh-agent.conf +0 -2
- package/dot_config/environment.d/90-wayland.conf +0 -19
- package/dot_config/fastfetch/config.jsonc +0 -28
- package/dot_config/firefox/user.js.tmpl +0 -58
- package/dot_config/fish/completions/dot-theme-sync.fish.tmpl +0 -9
- package/dot_config/fish/completions/dot.fish.tmpl +0 -115
- package/dot_config/fish/conf.d/000-perf-cache.fish +0 -56
- package/dot_config/fish/conf.d/aliases.fish.tmpl +0 -77
- package/dot_config/fish/conf.d/direnv.fish +0 -4
- package/dot_config/fish/conf.d/env.fish.tmpl +0 -48
- package/dot_config/fish/conf.d/functions.fish.tmpl +0 -22
- package/dot_config/fish/conf.d/init.fish.tmpl +0 -172
- package/dot_config/fish/conf.d/mise-activate.fish +0 -5
- package/dot_config/fish/config.fish.tmpl +0 -44
- package/dot_config/fish/fish_plugins +0 -1
- package/dot_config/fish/functions/_.fish +0 -3
- package/dot_config/fish/functions/_cached_eval.fish +0 -131
- package/dot_config/fish/functions/_cached_eval_clear.fish +0 -17
- package/dot_config/fish/functions/als.fish +0 -46
- package/dot_config/fish/functions/bg-upgrade.fish +0 -7
- package/dot_config/fish/functions/c.fish +0 -3
- package/dot_config/fish/functions/cat.fish +0 -9
- package/dot_config/fish/functions/d.fish +0 -7
- package/dot_config/fish/functions/dot.fish +0 -34
- package/dot_config/fish/functions/h.fish +0 -3
- package/dot_config/fish/functions/l.fish +0 -7
- package/dot_config/fish/functions/la.fish +0 -7
- package/dot_config/fish/functions/ll.fish +0 -7
- package/dot_config/fish/functions/log_error.fish +0 -13
- package/dot_config/fish/functions/log_info.fish +0 -13
- package/dot_config/fish/functions/lr.fish +0 -7
- package/dot_config/fish/functions/lra.fish +0 -7
- package/dot_config/fish/functions/ls.fish +0 -7
- package/dot_config/fish/functions/lt.fish +0 -7
- package/dot_config/fish/functions/lta.fish +0 -7
- package/dot_config/fish/functions/notify-run.fish +0 -11
- package/dot_config/fish/functions/q.fish +0 -3
- package/dot_config/fish/functions/silent-run.fish +0 -7
- package/dot_config/fish/functions/yy.fish +0 -8
- package/dot_config/flatpak/flatpak.list +0 -4
- package/dot_config/fontconfig/fonts.conf.tmpl +0 -57
- package/dot_config/foot/foot.ini.tmpl +0 -33
- package/dot_config/fuzzel/fuzzel.ini.tmpl +0 -18
- package/dot_config/fzf/fzf.zsh +0 -48
- package/dot_config/gem/gemrc +0 -9
- package/dot_config/gh/config.yml +0 -12
- package/dot_config/ghostty/config.tmpl +0 -165
- package/dot_config/git/allowed_signers.tmpl +0 -18
- package/dot_config/git/attributes +0 -12
- package/dot_config/git/commit-template +0 -10
- package/dot_config/git/hooks/executable_commit-msg +0 -146
- package/dot_config/git/ignore +0 -27
- package/dot_config/gnupg/gpg-agent.conf +0 -11
- package/dot_config/go/golangci.yml +0 -118
- package/dot_config/go/gopls.json +0 -30
- package/dot_config/goose/config.yaml +0 -29
- package/dot_config/gtk-3.0/gtk.css.tmpl +0 -184
- package/dot_config/gtk-3.0/settings.ini.tmpl +0 -27
- package/dot_config/gtk-4.0/gtk.css.tmpl +0 -252
- package/dot_config/gtk-4.0/settings.ini.tmpl +0 -18
- package/dot_config/htop/htoprc +0 -20
- package/dot_config/inputrc +0 -2
- package/dot_config/ipython/profile_default/ipython_config.py +0 -19
- package/dot_config/just/justfile +0 -122
- package/dot_config/k9s/config.yaml +0 -65
- package/dot_config/k9s/skins/catppuccin-mocha.yaml +0 -116
- package/dot_config/kanshi/config.tmpl +0 -22
- package/dot_config/karabiner/karabiner.json +0 -14
- package/dot_config/kitty/kitty.conf.tmpl +0 -53
- package/dot_config/lazydocker/config.yml +0 -186
- package/dot_config/lazygit/config.yml +0 -35
- package/dot_config/mako/config +0 -47
- package/dot_config/mas/masapps.txt +0 -5
- package/dot_config/micro/settings.json +0 -3
- package/dot_config/mimeapps.list +0 -77
- package/dot_config/minikube/config.json +0 -13
- package/dot_config/mise/config.toml +0 -99
- package/dot_config/mongosh/mongoshrc.js +0 -68
- package/dot_config/mpv/input.conf +0 -47
- package/dot_config/mpv/mpv.conf +0 -47
- package/dot_config/mycli/myclirc +0 -67
- package/dot_config/nano/nanorc +0 -28
- package/dot_config/ncdu/config +0 -12
- package/dot_config/niri/config.kdl.tmpl +0 -327
- package/dot_config/nushell/aliases.nu +0 -18
- package/dot_config/nushell/cached_eval.nu +0 -80
- package/dot_config/nushell/completions.nu.tmpl +0 -52
- package/dot_config/nushell/config.nu.tmpl +0 -86
- package/dot_config/nushell/env.nu.tmpl +0 -102
- package/dot_config/nushell/functions.nu.tmpl +0 -17
- package/dot_config/nvim/init.lua +0 -18
- package/dot_config/nvim/lazy-lock.json +0 -58
- package/dot_config/nvim/lua/config/autocmds.lua +0 -107
- package/dot_config/nvim/lua/config/keymaps.lua +0 -92
- package/dot_config/nvim/lua/config/lazy.lua +0 -44
- package/dot_config/nvim/lua/config/options.lua +0 -49
- package/dot_config/nvim/lua/plugins/ai.lua +0 -75
- package/dot_config/nvim/lua/plugins/coding.lua +0 -216
- package/dot_config/nvim/lua/plugins/completion.lua +0 -60
- package/dot_config/nvim/lua/plugins/dap.lua +0 -412
- package/dot_config/nvim/lua/plugins/editor.lua +0 -55
- package/dot_config/nvim/lua/plugins/git.lua +0 -10
- package/dot_config/nvim/lua/plugins/lsp.lua +0 -156
- package/dot_config/nvim/lua/plugins/markdown.lua +0 -18
- package/dot_config/nvim/lua/plugins/rust.lua +0 -34
- package/dot_config/nvim/lua/plugins/sessions.lua +0 -33
- package/dot_config/nvim/lua/plugins/ui.lua +0 -509
- package/dot_config/paru/paru.conf +0 -10
- package/dot_config/pip/pip.conf.tmpl +0 -32
- package/dot_config/powershell/Microsoft.PowerShell_profile.ps1.tmpl +0 -81
- package/dot_config/pueue/pueue.yml +0 -34
- package/dot_config/pypoetry/config.toml +0 -6
- package/dot_config/pyrightconfig.json +0 -5
- package/dot_config/raycast/README.md +0 -13
- package/dot_config/redis/redisclirc +0 -41
- package/dot_config/ripgrep/ripgreprc +0 -21
- package/dot_config/shell/00-core-paths.sh.tmpl +0 -141
- package/dot_config/shell/05-core-safety.sh +0 -48
- package/dot_config/shell/10-secrets.sh +0 -41
- package/dot_config/shell/40-fzf-defaults.sh.tmpl +0 -17
- package/dot_config/shell/40-ls-colors.sh +0 -49
- package/dot_config/shell/50-logic-functions-core.sh.tmpl +0 -11
- package/dot_config/shell/50-logic-functions.sh.tmpl +0 -11
- package/dot_config/shell/51-logic-functions-extra.sh.tmpl +0 -65
- package/dot_config/shell/90-ux-aliases.sh.tmpl +0 -121
- package/dot_config/shell/91-ux-aliases-lazy.sh.tmpl +0 -55
- package/dot_config/shell/Brewfile +0 -207
- package/dot_config/shell/Brewfile.cask +0 -92
- package/dot_config/shell/Brewfile.cli +0 -127
- package/dot_config/shell/README.md +0 -284
- package/dot_config/shell/als_data.txt.tmpl +0 -65
- package/dot_config/shell/custom/auto_ls.zsh +0 -20
- package/dot_config/shell/custom/context_suggest.zsh +0 -68
- package/dot_config/shell/custom/error_analysis.zsh +0 -45
- package/dot_config/sops/dot_sops.yaml +0 -23
- package/dot_config/starship.toml.tmpl +0 -202
- package/dot_config/swaylock/config +0 -43
- package/dot_config/systemd/user/dotfiles-maintenance.service +0 -8
- package/dot_config/systemd/user/dotfiles-maintenance.timer +0 -11
- package/dot_config/systemd/user/pueued.service +0 -12
- package/dot_config/systemd/user/ssh-agent.service +0 -12
- package/dot_config/task/Taskfile.yml +0 -86
- package/dot_config/tflint/tflint.hcl +0 -9
- package/dot_config/tmux/tmux.conf.tmpl +0 -223
- package/dot_config/topgrade.toml.tmpl +0 -54
- package/dot_config/user-dirs.dirs +0 -10
- package/dot_config/vscode/extensions.txt +0 -11
- package/dot_config/vscode/settings.json.tmpl +0 -82
- package/dot_config/waybar/config.jsonc.tmpl +0 -90
- package/dot_config/waybar/style.css.tmpl +0 -211
- package/dot_config/wezterm/wezterm.lua.tmpl +0 -64
- package/dot_config/wget/wgetrc +0 -12
- package/dot_config/xdg-desktop-portal/niri-portals.conf +0 -5
- package/dot_config/yarn/yarnrc.yml +0 -36
- package/dot_config/yazi/keymap.toml +0 -67
- package/dot_config/yazi/theme.toml +0 -102
- package/dot_config/yazi/yazi.toml +0 -40
- package/dot_config/zathura/zathurarc +0 -52
- package/dot_config/zellij/config.kdl.tmpl +0 -79
- package/dot_config/zsh/dot_zprofile +0 -7
- package/dot_config/zsh/dot_zshenv +0 -5
- package/dot_config/zsh/dot_zshrc.tmpl +0 -688
- package/dot_config/zsh/rc.d/00-alias-shims.zsh +0 -99
- package/dot_config/zsh/rc.d/05-ssh-agent.zsh +0 -18
- package/dot_config/zsh/rc.d/10-env.zsh.tmpl +0 -28
- package/dot_config/zsh/rc.d/20-zinit.zsh +0 -65
- package/dot_config/zsh/rc.d/30-options.zsh.tmpl +0 -214
- package/dot_config/zsh/rc.d/40-bell.zsh +0 -20
- package/dot_config/zsh/rc.d/50-login-fortune.zsh +0 -9
- package/dot_config/zsh/rc.d/99-alias-wrapper.zsh +0 -32
- package/dot_local/bin/executable_ai-update +0 -195
- package/dot_local/bin/executable_ai_core +0 -152
- package/dot_local/bin/executable_antigravity +0 -11
- package/dot_local/bin/executable_b64 +0 -84
- package/dot_local/bin/executable_bm +0 -79
- package/dot_local/bin/executable_cb +0 -39
- package/dot_local/bin/executable_dot +0 -636
- package/dot_local/bin/executable_dot-ai +0 -36
- package/dot_local/bin/executable_dot-bootstrap +0 -76
- package/dot_local/bin/executable_dot-launch-or-focus +0 -52
- package/dot_local/bin/executable_dot-load-benchmark +0 -31
- package/dot_local/bin/executable_dot-load-benchmark-pty +0 -77
- package/dot_local/bin/executable_dot-theme-sync +0 -952
- package/dot_local/bin/executable_dot_completion +0 -57
- package/dot_local/bin/executable_dtags +0 -28
- package/dot_local/bin/executable_epoch +0 -67
- package/dot_local/bin/executable_extract +0 -41
- package/dot_local/bin/executable_gbd +0 -52
- package/dot_local/bin/executable_gd +0 -42
- package/dot_local/bin/executable_git-ai-commit +0 -175
- package/dot_local/bin/executable_git-ai-diff +0 -169
- package/dot_local/bin/executable_gl +0 -101
- package/dot_local/bin/executable_hash +0 -161
- package/dot_local/bin/executable_hashsum +0 -160
- package/dot_local/bin/executable_hex +0 -115
- package/dot_local/bin/executable_jsonv +0 -78
- package/dot_local/bin/executable_jwt +0 -94
- package/dot_local/bin/executable_kill-port +0 -75
- package/dot_local/bin/executable_lorem +0 -118
- package/dot_local/bin/executable_mkscript +0 -35
- package/dot_local/bin/executable_monitor +0 -56
- package/dot_local/bin/executable_myip +0 -51
- package/dot_local/bin/executable_notify +0 -24
- package/dot_local/bin/executable_open +0 -38
- package/dot_local/bin/executable_pw +0 -27
- package/dot_local/bin/executable_rec-start +0 -46
- package/dot_local/bin/executable_rec-stop +0 -35
- package/dot_local/bin/executable_regex +0 -132
- package/dot_local/bin/executable_start-niri +0 -8
- package/dot_local/bin/executable_tmux-sessionizer +0 -314
- package/dot_local/bin/executable_tour +0 -177
- package/dot_local/bin/executable_up +0 -23
- package/dot_local/bin/executable_update +0 -142
- package/dot_local/bin/executable_uuid +0 -87
- package/dot_local/bin/executable_win +0 -32
- package/dot_local/bin/executable_yamlv +0 -57
- package/dot_local/share/bash-completion/completions/dot +0 -72
- package/dot_local/share/icons/hicolor/128x128/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/16x16/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/24x24/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/256x256/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/32x32/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/48x48/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/512x512/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/64x64/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/96x96/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/scalable/apps/rousseau.png +0 -0
- package/dot_local/share/man/man1/dot.1 +0 -149
- package/dot_local/share/mise/plugins/kiro-cli/bin/executable_download +0 -64
- package/dot_local/share/mise/plugins/kiro-cli/bin/executable_install +0 -18
- package/dot_local/share/mise/plugins/kiro-cli/bin/executable_list-all +0 -13
- package/dot_local/share/wayland-sessions/niri.desktop.tmpl +0 -6
- package/dot_local/share/zsh/completions/.keep +0 -0
- package/dot_local/share/zsh/completions/_dot +0 -287
- package/scripts/ci/check-dangerous-chmod.sh +0 -19
- package/scripts/ci/check-deps-dev.sh +0 -236
- package/scripts/ci/check-insecure-tls.sh +0 -61
- package/scripts/ci/check-regression-traceability.sh +0 -67
- package/scripts/ci/dot-cli-startup-bench.sh +0 -126
- package/scripts/ci/install-chezmoi-verified.sh +0 -67
- package/scripts/ci/lint-reusable-pins.sh +0 -78
- package/scripts/ci/run-coverage.sh +0 -451
- package/scripts/ci/validate-chezmoidata.sh +0 -25
- package/scripts/ci/validate-ci-config.sh +0 -224
- package/scripts/ci/windows-smoke-test.ps1 +0 -136
- package/scripts/docs/build-manual.sh +0 -883
- package/scripts/docs/check-manual.sh +0 -213
- package/scripts/dot/lib/bento.sh +0 -50
- package/scripts/dot/lib/log.sh +0 -200
- package/scripts/dot/lib/platform.sh +0 -112
- package/scripts/dot/lib/ui.sh +0 -650
- package/scripts/dot/lib/utils.sh +0 -377
- package/scripts/maintenance/check-updates.sh +0 -131
- package/scripts/release/package-policy-bundles.sh +0 -125
|
@@ -1,224 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# Copyright (c) 2015-2026 Dotfiles. All rights reserved.
|
|
3
|
-
# CI Configuration Validation Script
|
|
4
|
-
# Verifies that all zero-warning policy components are properly configured
|
|
5
|
-
|
|
6
|
-
set -euo pipefail
|
|
7
|
-
|
|
8
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
9
|
-
REPO_ROOT="$(dirname "$(dirname "$SCRIPT_DIR")")"
|
|
10
|
-
|
|
11
|
-
# Colors for output (respect NO_COLOR: https://no-color.org)
|
|
12
|
-
if [[ -z "${NO_COLOR:-}" ]] && [[ -t 1 ]]; then
|
|
13
|
-
RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[0;33m'
|
|
14
|
-
BLUE='\033[0;34m' NC='\033[0m'
|
|
15
|
-
else
|
|
16
|
-
RED='' GREEN='' YELLOW='' BLUE='' NC=''
|
|
17
|
-
fi
|
|
18
|
-
|
|
19
|
-
printf '%b\n' "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
20
|
-
printf '%b\n' "${BLUE} CI CONFIGURATION VALIDATOR ${NC}"
|
|
21
|
-
printf '%b\n' "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
22
|
-
echo ""
|
|
23
|
-
|
|
24
|
-
ERRORS=0
|
|
25
|
-
WARNINGS=0
|
|
26
|
-
|
|
27
|
-
# Helper functions
|
|
28
|
-
check_file_exists() {
|
|
29
|
-
local file="$1"
|
|
30
|
-
local description="$2"
|
|
31
|
-
|
|
32
|
-
if [[ -f "$file" ]]; then
|
|
33
|
-
printf '%b\n' " ${GREEN}✓${NC} $description"
|
|
34
|
-
return 0
|
|
35
|
-
else
|
|
36
|
-
printf '%b\n' " ${RED}✗${NC} $description"
|
|
37
|
-
((ERRORS++))
|
|
38
|
-
return 1
|
|
39
|
-
fi
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
check_pattern_in_file() {
|
|
43
|
-
local file="$1"
|
|
44
|
-
local pattern="$2"
|
|
45
|
-
local description="$3"
|
|
46
|
-
|
|
47
|
-
if [[ -f "$file" ]] && grep -q "$pattern" "$file"; then
|
|
48
|
-
printf '%b\n' " ${GREEN}✓${NC} $description"
|
|
49
|
-
return 0
|
|
50
|
-
else
|
|
51
|
-
printf '%b\n' " ${RED}✗${NC} $description"
|
|
52
|
-
((ERRORS++))
|
|
53
|
-
return 1
|
|
54
|
-
fi
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
warn_if_pattern() {
|
|
58
|
-
local file="$1"
|
|
59
|
-
local pattern="$2"
|
|
60
|
-
local description="$3"
|
|
61
|
-
|
|
62
|
-
if [[ -f "$file" ]] && grep -q "$pattern" "$file"; then
|
|
63
|
-
printf '%b\n' " ${YELLOW}⚠${NC} $description"
|
|
64
|
-
((WARNINGS++))
|
|
65
|
-
return 1
|
|
66
|
-
else
|
|
67
|
-
printf '%b\n' " ${GREEN}✓${NC} $description"
|
|
68
|
-
return 0
|
|
69
|
-
fi
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
# Check 1: Core CI files exist
|
|
73
|
-
printf '%b\n' "${BLUE}1. Core CI Files${NC}"
|
|
74
|
-
check_file_exists "$REPO_ROOT/.github/workflows/ci.yml" "Main CI workflow exists"
|
|
75
|
-
check_file_exists "$REPO_ROOT/.github/workflows/nightly.yml" "Nightly workflow exists"
|
|
76
|
-
check_file_exists "$REPO_ROOT/.github/workflows/security-enhanced.yml" "Security workflow exists"
|
|
77
|
-
check_file_exists "$REPO_ROOT/config/pre-commit-config.yaml" "Pre-commit configuration exists"
|
|
78
|
-
echo ""
|
|
79
|
-
|
|
80
|
-
# Check 2: Zero-warning enforcement
|
|
81
|
-
printf '%b\n' "${BLUE}2. Zero-Warning Policy Enforcement${NC}"
|
|
82
|
-
check_pattern_in_file "$REPO_ROOT/.github/workflows/ci.yml" "zero-warning" "Zero-warning policy documented"
|
|
83
|
-
check_pattern_in_file "$REPO_ROOT/.github/workflows/ci.yml" "fail on unformatted code" "Formatter failure enforced"
|
|
84
|
-
check_pattern_in_file "$REPO_ROOT/.github/workflows/ci.yml" "warnings-as-errors" "Warnings treated as errors"
|
|
85
|
-
|
|
86
|
-
# Verify no || true patterns in security steps
|
|
87
|
-
warn_if_pattern "$REPO_ROOT/.github/workflows/ci.yml" "gitleaks.*||.*true" "Gitleaks bypass detected"
|
|
88
|
-
warn_if_pattern "$REPO_ROOT/.github/workflows/ci.yml" "shellcheck.*||.*true" "Shellcheck bypass detected"
|
|
89
|
-
echo ""
|
|
90
|
-
|
|
91
|
-
# Check 3: Test coverage requirements
|
|
92
|
-
printf '%b\n' "${BLUE}3. Test Coverage Requirements${NC}"
|
|
93
|
-
check_pattern_in_file "$REPO_ROOT/.github/workflows/ci.yml" "100%" "100% coverage requirement"
|
|
94
|
-
check_pattern_in_file "$REPO_ROOT/.github/workflows/ci.yml" "fail-under" "Coverage threshold enforcement"
|
|
95
|
-
|
|
96
|
-
if [[ -f "$REPO_ROOT/tests/framework/test_runner.sh" ]]; then
|
|
97
|
-
printf '%b\n' " ${GREEN}✓${NC} Test framework exists"
|
|
98
|
-
else
|
|
99
|
-
printf '%b\n' " ${RED}✗${NC} Test framework missing"
|
|
100
|
-
((ERRORS++))
|
|
101
|
-
fi
|
|
102
|
-
echo ""
|
|
103
|
-
|
|
104
|
-
# Check 4: Security scanning
|
|
105
|
-
printf '%b\n' "${BLUE}4. Security Scanning Configuration${NC}"
|
|
106
|
-
check_pattern_in_file "$REPO_ROOT/.github/workflows/ci.yml" "security-secrets" "Secret scanning enabled"
|
|
107
|
-
check_pattern_in_file "$REPO_ROOT/.github/workflows/ci.yml" "security-dependencies" "Dependency audit enabled"
|
|
108
|
-
check_pattern_in_file "$REPO_ROOT/config/pre-commit-config.yaml" "gitleaks" "Pre-commit secret scanning"
|
|
109
|
-
check_pattern_in_file "$REPO_ROOT/config/pre-commit-config.yaml" "detect-secrets" "Advanced secret detection"
|
|
110
|
-
|
|
111
|
-
# Verify no piped execution patterns
|
|
112
|
-
warn_if_pattern "$REPO_ROOT/.github/workflows/ci.yml" "curl.*|.*sh" "Dangerous piped execution"
|
|
113
|
-
warn_if_pattern "$REPO_ROOT/.github/workflows/ci.yml" "wget.*|.*bash" "Dangerous piped execution"
|
|
114
|
-
echo ""
|
|
115
|
-
|
|
116
|
-
# Check 5: Performance monitoring
|
|
117
|
-
printf '%b\n' "${BLUE}5. Performance Monitoring${NC}"
|
|
118
|
-
check_pattern_in_file "$REPO_ROOT/.github/workflows/ci.yml" "benchmark" "Performance benchmarking enabled"
|
|
119
|
-
check_pattern_in_file "$REPO_ROOT/.github/workflows/ci.yml" "500ms" "Shell startup threshold defined"
|
|
120
|
-
check_pattern_in_file "$REPO_ROOT/.github/workflows/nightly.yml" "performance-tracking" "Nightly performance tracking"
|
|
121
|
-
echo ""
|
|
122
|
-
|
|
123
|
-
# Check 6: Multi-OS support
|
|
124
|
-
printf '%b\n' "${BLUE}6. Multi-OS Testing${NC}"
|
|
125
|
-
check_pattern_in_file "$REPO_ROOT/.github/workflows/ci.yml" "ubuntu-latest" "Linux testing enabled"
|
|
126
|
-
check_pattern_in_file "$REPO_ROOT/.github/workflows/ci.yml" "macos-latest" "macOS testing enabled"
|
|
127
|
-
check_pattern_in_file "$REPO_ROOT/.github/workflows/nightly.yml" "matrix:" "OS matrix testing configured"
|
|
128
|
-
echo ""
|
|
129
|
-
|
|
130
|
-
# Check 7: Timeouts and efficiency
|
|
131
|
-
printf '%b\n' "${BLUE}7. Timeout and Efficiency Settings${NC}"
|
|
132
|
-
if grep -q "timeout-minutes: [0-9]" "$REPO_ROOT/.github/workflows/ci.yml"; then
|
|
133
|
-
MAX_TIMEOUT=$(grep "timeout-minutes:" "$REPO_ROOT/.github/workflows/ci.yml" |
|
|
134
|
-
awk '{print $2}' | sort -n | tail -1)
|
|
135
|
-
if [[ $MAX_TIMEOUT -le 15 ]]; then
|
|
136
|
-
printf '%b\n' " ${GREEN}✓${NC} Job timeouts properly configured (max: ${MAX_TIMEOUT}min)"
|
|
137
|
-
else
|
|
138
|
-
printf '%b\n' " ${YELLOW}⚠${NC} Some jobs have long timeouts (max: ${MAX_TIMEOUT}min)"
|
|
139
|
-
((WARNINGS++))
|
|
140
|
-
fi
|
|
141
|
-
else
|
|
142
|
-
printf '%b\n' " ${RED}✗${NC} No timeout configuration found"
|
|
143
|
-
((ERRORS++))
|
|
144
|
-
fi
|
|
145
|
-
|
|
146
|
-
check_pattern_in_file "$REPO_ROOT/.github/workflows/ci.yml" "cache" "Dependency caching enabled"
|
|
147
|
-
echo ""
|
|
148
|
-
|
|
149
|
-
# Check 8: Branch protection readiness
|
|
150
|
-
printf '%b\n' "${BLUE}8. Branch Protection Readiness${NC}"
|
|
151
|
-
check_file_exists "$REPO_ROOT/.github/BRANCH_PROTECTION.md" "Branch protection documentation"
|
|
152
|
-
check_pattern_in_file "$REPO_ROOT/.github/workflows/ci.yml" "quality-gate" "Quality gate job defined"
|
|
153
|
-
|
|
154
|
-
# Check for required status check names
|
|
155
|
-
REQUIRED_CHECKS=(
|
|
156
|
-
"lint-shell"
|
|
157
|
-
"security-secrets"
|
|
158
|
-
"security-dependencies"
|
|
159
|
-
"test-unit"
|
|
160
|
-
"quality-gate"
|
|
161
|
-
)
|
|
162
|
-
|
|
163
|
-
for check in "${REQUIRED_CHECKS[@]}"; do
|
|
164
|
-
if grep -q "name:.*$check" "$REPO_ROOT/.github/workflows/ci.yml"; then
|
|
165
|
-
printf '%b\n' " ${GREEN}✓${NC} Required check '$check' defined"
|
|
166
|
-
else
|
|
167
|
-
printf '%b\n' " ${RED}✗${NC} Required check '$check' missing"
|
|
168
|
-
((ERRORS++))
|
|
169
|
-
fi
|
|
170
|
-
done
|
|
171
|
-
echo ""
|
|
172
|
-
|
|
173
|
-
# Check 9: Nightly extended testing
|
|
174
|
-
printf '%b\n' "${BLUE}9. Nightly Extended Testing${NC}"
|
|
175
|
-
if [[ -f "$REPO_ROOT/.github/workflows/nightly.yml" ]]; then
|
|
176
|
-
check_pattern_in_file "$REPO_ROOT/.github/workflows/nightly.yml" "dependency-updates" "Dependency monitoring"
|
|
177
|
-
check_pattern_in_file "$REPO_ROOT/.github/workflows/nightly.yml" "beta-tools-test" "Beta tool testing"
|
|
178
|
-
check_pattern_in_file "$REPO_ROOT/.github/workflows/nightly.yml" "security-extended" "Extended security scanning"
|
|
179
|
-
check_pattern_in_file "$REPO_ROOT/.github/workflows/nightly.yml" "cron:" "Scheduled execution"
|
|
180
|
-
else
|
|
181
|
-
printf '%b\n' " ${RED}✗${NC} Nightly workflow missing"
|
|
182
|
-
((ERRORS++))
|
|
183
|
-
fi
|
|
184
|
-
echo ""
|
|
185
|
-
|
|
186
|
-
# Final summary
|
|
187
|
-
printf '%b\n' "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
188
|
-
printf '%b\n' "${BLUE} VALIDATION SUMMARY ${NC}"
|
|
189
|
-
printf '%b\n' "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
190
|
-
|
|
191
|
-
if [[ $ERRORS -eq 0 ]] && [[ $WARNINGS -eq 0 ]]; then
|
|
192
|
-
printf '%b\n' "${GREEN}✅ PERFECT: CI configuration fully compliant${NC}"
|
|
193
|
-
echo " - Zero-warning policy properly enforced"
|
|
194
|
-
echo " - All security gates configured"
|
|
195
|
-
echo " - Performance monitoring active"
|
|
196
|
-
echo " - Ready for branch protection"
|
|
197
|
-
elif [[ $ERRORS -eq 0 ]]; then
|
|
198
|
-
printf '%b\n' "${YELLOW}⚠️ GOOD: CI mostly compliant with $WARNINGS warning(s)${NC}"
|
|
199
|
-
echo " - Core functionality working"
|
|
200
|
-
echo " - Minor improvements recommended"
|
|
201
|
-
else
|
|
202
|
-
printf '%b\n' "${RED}❌ ISSUES: CI configuration has $ERRORS error(s) and $WARNINGS warning(s)${NC}"
|
|
203
|
-
echo " - Critical fixes required before deployment"
|
|
204
|
-
fi
|
|
205
|
-
|
|
206
|
-
echo ""
|
|
207
|
-
echo "Configuration Details:"
|
|
208
|
-
echo " - Repository: $REPO_ROOT"
|
|
209
|
-
echo " - Main CI: .github/workflows/ci.yml"
|
|
210
|
-
echo " - Nightly: .github/workflows/nightly.yml"
|
|
211
|
-
echo " - Pre-commit: config/pre-commit-config.yaml"
|
|
212
|
-
echo ""
|
|
213
|
-
echo "Next Steps:"
|
|
214
|
-
if [[ $ERRORS -gt 0 ]]; then
|
|
215
|
-
echo " 1. Fix critical errors listed above"
|
|
216
|
-
echo " 2. Re-run validation: $0"
|
|
217
|
-
fi
|
|
218
|
-
if [[ $WARNINGS -gt 0 ]]; then
|
|
219
|
-
echo " 3. Address warnings for optimal configuration"
|
|
220
|
-
fi
|
|
221
|
-
echo " 4. Configure branch protection rules per BRANCH_PROTECTION.md"
|
|
222
|
-
echo " 5. Test CI pipeline with a small PR"
|
|
223
|
-
|
|
224
|
-
exit $ERRORS
|
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
<#
|
|
2
|
-
.SYNOPSIS
|
|
3
|
-
Windows smoke test for the dotfiles framework.
|
|
4
|
-
|
|
5
|
-
.DESCRIPTION
|
|
6
|
-
Ships under PowerShell 7.5+; verifies that the `dot` dispatcher
|
|
7
|
-
starts, that key read-only commands work, and that chezmoi can be
|
|
8
|
-
invoked from PowerShell. Designed to run inside `windows-latest`
|
|
9
|
-
GitHub Actions runners (B1 of ROADMAP_2026).
|
|
10
|
-
|
|
11
|
-
Closes the audit gap "PowerShell 7.5+ claim unverified."
|
|
12
|
-
|
|
13
|
-
.NOTES
|
|
14
|
-
Exit codes:
|
|
15
|
-
0 all checks passed
|
|
16
|
-
1 one or more checks failed
|
|
17
|
-
2 environment misconfigured (chezmoi/dot missing)
|
|
18
|
-
#>
|
|
19
|
-
|
|
20
|
-
[CmdletBinding()]
|
|
21
|
-
param(
|
|
22
|
-
[string] $RepoRoot = (Get-Location).Path,
|
|
23
|
-
[switch] $Strict
|
|
24
|
-
)
|
|
25
|
-
|
|
26
|
-
$ErrorActionPreference = 'Stop'
|
|
27
|
-
Set-StrictMode -Version Latest
|
|
28
|
-
|
|
29
|
-
$script:Failures = @()
|
|
30
|
-
|
|
31
|
-
function Assert-Step {
|
|
32
|
-
param(
|
|
33
|
-
[Parameter(Mandatory)] [string] $Name,
|
|
34
|
-
[Parameter(Mandatory)] [scriptblock] $Test
|
|
35
|
-
)
|
|
36
|
-
Write-Host "→ $Name " -NoNewline
|
|
37
|
-
try {
|
|
38
|
-
& $Test | Out-Null
|
|
39
|
-
Write-Host 'ok' -ForegroundColor Green
|
|
40
|
-
}
|
|
41
|
-
catch {
|
|
42
|
-
Write-Host 'FAIL' -ForegroundColor Red
|
|
43
|
-
Write-Host " $($_.Exception.Message)" -ForegroundColor DarkRed
|
|
44
|
-
$script:Failures += $Name
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
# ─── PowerShell version contract ─────────────────────────────────────────────
|
|
49
|
-
# 7.4 is current LTS (EOL 2026-11-10); 7.5 is current stable. README claims
|
|
50
|
-
# "PowerShell 7.5+" forward-looking; the 7.4 LTS window keeps this gate
|
|
51
|
-
# at 7.4+ until the bundled runner version rolls forward.
|
|
52
|
-
Assert-Step 'PowerShell >= 7.4 (LTS or current)' {
|
|
53
|
-
if ($PSVersionTable.PSVersion.Major -lt 7 -or
|
|
54
|
-
($PSVersionTable.PSVersion.Major -eq 7 -and $PSVersionTable.PSVersion.Minor -lt 4)) {
|
|
55
|
-
throw "PowerShell $($PSVersionTable.PSVersion) — need 7.4+ (LTS) or 7.5+ (current)"
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
# ─── Repo layout sanity ──────────────────────────────────────────────────────
|
|
60
|
-
Assert-Step 'dot dispatcher present' {
|
|
61
|
-
$dot = Join-Path $RepoRoot 'dot_local/bin/executable_dot'
|
|
62
|
-
if (-not (Test-Path $dot)) { throw "missing $dot" }
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
Assert-Step '.chezmoidata.toml present' {
|
|
66
|
-
$data = Join-Path $RepoRoot '.chezmoidata.toml'
|
|
67
|
-
if (-not (Test-Path $data)) { throw "missing $data" }
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
# ─── chezmoi callable from pwsh ──────────────────────────────────────────────
|
|
71
|
-
Assert-Step 'chezmoi on PATH' {
|
|
72
|
-
$cmd = Get-Command chezmoi -ErrorAction SilentlyContinue
|
|
73
|
-
if (-not $cmd) { throw 'chezmoi not on PATH (install via scoop install chezmoi or winget)' }
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
Assert-Step 'chezmoi --version succeeds' {
|
|
77
|
-
$out = & chezmoi --version 2>&1
|
|
78
|
-
if ($LASTEXITCODE -ne 0) { throw "rc=$LASTEXITCODE :: $out" }
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
# ─── dot CLI cold-start (only when bash is on PATH) ──────────────────────────
|
|
82
|
-
$bash = Get-Command bash -ErrorAction SilentlyContinue
|
|
83
|
-
if ($bash) {
|
|
84
|
-
Assert-Step 'dot version' {
|
|
85
|
-
$dot = Join-Path $RepoRoot 'dot_local/bin/executable_dot'
|
|
86
|
-
$out = & bash $dot 'version' 2>&1
|
|
87
|
-
if ($LASTEXITCODE -ne 0) { throw "rc=$LASTEXITCODE :: $out" }
|
|
88
|
-
}
|
|
89
|
-
Assert-Step 'dot help' {
|
|
90
|
-
$dot = Join-Path $RepoRoot 'dot_local/bin/executable_dot'
|
|
91
|
-
$out = & bash $dot 'help' 2>&1
|
|
92
|
-
if ($LASTEXITCODE -ne 0) { throw "rc=$LASTEXITCODE :: $out" }
|
|
93
|
-
}
|
|
94
|
-
Assert-Step 'dot agents check (AGENTS.md ↔ CLAUDE.md sync)' {
|
|
95
|
-
# `Push-Location` so the bash subprocess's $PWD points at the
|
|
96
|
-
# repo root — the bash dispatcher uses `git rev-parse` against
|
|
97
|
-
# $PWD when no usable chezmoi source-path is on disk.
|
|
98
|
-
Push-Location $RepoRoot
|
|
99
|
-
try {
|
|
100
|
-
$dot = Join-Path $RepoRoot 'dot_local/bin/executable_dot'
|
|
101
|
-
$out = & bash $dot 'agents' 'check' 2>&1
|
|
102
|
-
if ($LASTEXITCODE -ne 0) { throw "rc=$LASTEXITCODE :: $out" }
|
|
103
|
-
}
|
|
104
|
-
finally {
|
|
105
|
-
Pop-Location
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
else {
|
|
110
|
-
Write-Host '→ skipping bash-dependent checks (no bash on PATH)' -ForegroundColor DarkYellow
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
# ─── PSScriptAnalyzer over the smoke-test itself ────────────────────────────
|
|
114
|
-
Assert-Step 'PSScriptAnalyzer over scripts/ci/*.ps1' {
|
|
115
|
-
if (-not (Get-Module -ListAvailable -Name PSScriptAnalyzer)) {
|
|
116
|
-
Install-Module PSScriptAnalyzer -Force -Scope CurrentUser -ErrorAction Stop
|
|
117
|
-
}
|
|
118
|
-
# `@(...)` so a single-result return value is still an array, otherwise
|
|
119
|
-
# `.Count` on a $null / scalar trips the strict-mode property check.
|
|
120
|
-
$issues = @(Invoke-ScriptAnalyzer -Path (Join-Path $RepoRoot 'scripts/ci') -Severity Error -ErrorAction Stop)
|
|
121
|
-
if ($issues.Count -gt 0) {
|
|
122
|
-
$msg = ($issues | ForEach-Object { "$($_.RuleName) at $($_.ScriptPath):$($_.Line)" }) -join '; '
|
|
123
|
-
throw "PSScriptAnalyzer found $($issues.Count) error(s): $msg"
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
# ─── Summary ─────────────────────────────────────────────────────────────────
|
|
128
|
-
if ($script:Failures.Count -gt 0) {
|
|
129
|
-
Write-Host ''
|
|
130
|
-
Write-Host "FAILED: $($script:Failures -join ', ')" -ForegroundColor Red
|
|
131
|
-
exit 1
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
Write-Host ''
|
|
135
|
-
Write-Host 'All Windows smoke checks passed.' -ForegroundColor Green
|
|
136
|
-
exit 0
|