cchinmoy/os-portabilityv0.3.0Public
Os portability
Reads a repository's tracked files out of the git index and reports what breaks when a teammate checks it out on a different operating system.
Read the full description
7 independent probes cover paths that differ only by case or by unicode normalisation, Windows reserved names and illegal characters, CRLF and mixed line endings, a UTF-8 BOM in front of a shebang or a .json file, shebang scripts missing the executable bit - git hooks git silently skips included - tracked symlinks, absolute host paths such as /Users/you or C:\ left in source, non-NFC and zero-width filenames, and whether .gitattributes covers the extensions in use or mandates CRLF repository-wide. Every finding is classed breaks-checkout, breaks-run or cosmetic for linux, macos and windows separately. It reports UNKNOWN rather than a pass when the target is not a git work tree, has no commits and nothing staged, when a probe cannot report, and when no file was examined - a pass over zero coverage is never printed. It never flags .bat files, binaries, emoji joiners or P
Before you run it2 local tools
Everything here is checked on your machine when rote inspects the play. This page never learns what you have installed or which credentials you hold.
- ○gitlocal tool
Requires >=2.20.0. Run rote play inspect to check your host; unverified versions remain unknown.
- ○python3local tool
Requires >=3.8.0. Run rote play inspect to check your host; unverified versions remain unknown.
Inputs11, all optional
rote asks for these before running and shows the defaults it will use.
- Path
pathWork tree to inspect. The default '.' resolves to the directory the run started in, so a zero-argument run checks the repository you are standing in; pass an absolute path to check a checkout somewhere else. Only the git index is read, never the working tree, because a Windows checkout with core.autocrlf=true shows CRLF on disk for files that are pure LF in the index.
optionalstringdefault.custom value allowed - Target os
target_osWhich operating systems the findings are judged against: all, or any comma-separated subset of linux, macos and windows. The default all is what makes a zero-argument run useful, since the whole point is the OS you do not have; narrow it to linux when only CI has to survive the repository and a Windows reserved name is nobody's problem.
optionalstringdefaultallcustom value allowed - Severity
severityWhich findings reach the report: all, or critical. The default all keeps the warnings, because a tracked symlink or a long path is exactly the kind of thing that wastes an afternoon without ever producing an error message; use critical for the list that hard-stops a checkout or a run.
optionalstringdefaultallcustom value allowed - Max path len
max_path_lenLength above which a tracked path is reported as too long for Windows. The default 260 is the classic Win32 limit, and it is measured against the repository-relative path only, so the checkout directory in front of it makes the real number larger and this direction cannot produce a false positive. Lower it to about 180 to leave room for a deep checkout directory.
optionalintegerdefault260custom value allowed - Max files
max_filesUpper bound on how many blobs are read for content. The default 6000 covers most repositories in a few seconds, and when the bound is hit the report says the scan was truncated instead of quietly under-reporting. Path-only checks - case, reserved names, length, unicode - always cover every tracked path regardless of this number.
optionalintegerdefault6000custom value allowed - Check imports
check_importsWhether relative import and include targets are compared against the case of the file they name. The default true catches the defect that only Linux sees: an import that resolves on macOS and Windows and fails on CI. A target that resolves to nothing at all is never reported, because it is far more often a package name or a build alias; set false to skip reading source entirely.
optionalbooleandefaulttruecustom value allowed - Ignore
ignoreComma-separated directory names skipped at any depth. The default names the trees people vendor or generate and nobody hand-edits, so a bundled dependency's CRLF never becomes your finding - redis returned 108 criticals from deps/jemalloc and deps/hiredis, code redis does not author; lockfiles, minified bundles and generated protobuf output are always skipped on top of this. Pass an empty value to audit everything the index holds, which is honoured literally: the default list is not silently restored.
optionalstringdefaultnode_modules,dist,build,vendor,.venv,deps,third_party,thirdparty,3rdparty,external,extern,subprojects,Godeps,.yarn,.pnpcustom value allowed - Binary extensions
binary_extensionsExtensions skipped before any content is read. The default is a fast pre-filter, not the safety net: every remaining blob is still classified by looking for a NUL byte in its first 8 KiB, so an unlisted binary format is caught anyway and never reported for line endings. Extend it when a large text-like format in your repository is not worth reading.
optionalstringdefaultpng,jpg,jpeg,gif,ico,webp,bmp,tiff,pdf,zip,gz,tar,tgz,bz2,xz,7z,jar,class,so,dylib,dll,exe,bin,wasm,woff,woff2,ttf,otf,mp3,mp4,mov,wav,webm,psd,sqlite,db,pyc,o,a,lib,p12,pfx,parquet,npy,h5,onnx,xlsx,docx,pptxcustom value allowed - Respect gitattributes
respect_gitattributesWhether .gitattributes suppresses line-ending findings it already accounts for. The default true drops every file the repository declares as eol=crlf, binary or -text, which is the difference between a report you can trust and one that flags the .bat files you deliberately keep as CRLF; set false to see the raw byte-level picture. One exception survives either way - a declaration cannot make a carriage return harmless in a shell script or a Makefile, so those are reported even when eol=crlf covers them.
optionalbooleandefaulttruecustom value allowed - Check invocations
check_invocationsWhether tracked build definitions and CI files are read for an explicit interpreter invocation of a script that is missing its exec bit. The default true is what stops the report calling pandoc's tools/validate-docx.sh a break: its Makefile runs it as `sh ./tools/validate-docx.sh`, and that form ignores the mode bit entirely, so CI passes today on a fresh 644 clone. Only Makefiles, .mk, .sh and CI YAML are read, only for this one pattern, and never for host paths; a match re-tiers the finding to a note and cites the caller, it never hides it. Set false to judge every shebang on its location alone.
optionalbooleandefaulttruecustom value allowed - Report bom
report_bomWhether a UTF-8 byte order mark is reported. The default true covers exactly two shapes, because those are the two that actually break: a BOM in front of a shebang, which the kernel will not read past, and a BOM in a .json file, which neither python's json nor node's JSON.parse will accept. Every other BOM is silent by construction - .ps1, .cs, .csproj and .props need one for PowerShell 5.1 and MSBuild, and YAML, make and markdown all read one without complaint. Set false when a repository deliberately ships BOMs everywhere.
optionalbooleandefaulttruecustom value allowed
What it changes
No write operations are declared in this version's manifest.
Credentials remain in the recipient's local rote vault; this page and the publisher never receive them.
Runtime details
- rote CLIversion 0.62.0 or newer
- Servicesnone declared
- Digest
sha256:baf103c494789877004ad25da33d790c1dce9acaad13ae48c9627aaa2b53b163 - Archive size87646 bytes
- Published2026-09-04T11:59:27.227537+00:00
- Published withrote 0.78.0
Credential values and current readiness remain local. Opening this page never prompts for a credential, opens an authorization browser, or calls a service this play uses.
A play is a published, versioned automation package that runs on your own machine through rote, a free command-line tool. Opening this page installs nothing and runs nothing.