@contino/tally-windows-x64 0.1.5 → 0.3.0

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.
Files changed (3) hide show
  1. package/README.md +70 -33
  2. package/bin/tally.exe +0 -0
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -1,16 +1,52 @@
1
1
  # tally
2
2
 
3
- A fast, configurable linter for Dockerfiles and Containerfiles.
3
+ [![codecov](https://codecov.io/gh/tinovyatkin/tally/graph/badge.svg?token=J3vK0hyLkf)](https://codecov.io/gh/tinovyatkin/tally)
4
+
5
+ tally keeps Dockerfiles and Containerfiles clean, modern, and consistent — using BuildKit's own parser and checks (the same foundation behind
6
+ `docker buildx`) plus safe auto-fixes. It runs fast, doesn't require Docker Desktop or a daemon, and fits neatly into CI. If that sounds like your
7
+ workflow, try `tally check .`.
8
+
9
+ ```bash
10
+ # Lint everything in the repo (recursive)
11
+ tally check .
12
+
13
+ # Apply all safe fixes automatically
14
+ tally check --fix Dockerfile
15
+ ```
16
+
17
+ ## Why tally?
18
+
19
+ Dockerfile linting usually means picking a compromise:
20
+
21
+ - **Hadolint** is popular and battle-tested, but it uses its own Dockerfile parser, so support for newer BuildKit features can lag behind. It also
22
+ is commonly consumed as a prebuilt binary, and it focuses on reporting — not fixing.
23
+ - **`docker buildx --check`** runs Docker's official BuildKit checks, but it requires the Docker/buildx toolchain and can be heavier than a pure
24
+ static linter (and not always available if you're using Podman/Finch/other runtimes).
25
+
26
+ tally exists to bring modern linter ergonomics to container builds:
27
+
28
+ - **BuildKit-native parsing**: understands modern syntax like heredocs, `RUN --mount=...`, and `ADD --checksum=...`.
29
+ - **Fixes, not just findings**: applies safe, mechanical fixes automatically (`--fix`), with per-rule control when you need it.
30
+ - **Easy to install anywhere**: available via Homebrew, Go, npm, pip, and RubyGems — so it can flow through your existing artifact mirrors.
31
+ - **Container ecosystem friendly**: supports Dockerfile/Containerfile conventions and `.dockerignore`/`.containerignore`.
32
+ - **A growing ruleset**: combines official BuildKit checks, Hadolint-compatible rules, and tally-specific rules.
33
+
34
+ Roadmap: editor integrations (VS Code, Zed), more auto-fixes, and higher-level rules (cache & tmpfs mount recommendations, tooling-aware checks for
35
+ uv/bun, line-length and layer optimizations).
4
36
 
5
37
  ## Supported Rules
6
38
 
7
39
  tally integrates rules from multiple sources:
8
40
 
9
- | Source | Rules | Description |
10
- |--------|-------|-------------|
11
- | **[BuildKit](https://docs.docker.com/reference/build-checks/)** | 15+ rules | Docker's official Dockerfile checks (automatically captured) |
12
- | **tally** | 3 rules | Custom rules including secret detection with [gitleaks](https://github.com/gitleaks/gitleaks) |
13
- | **[Hadolint](https://github.com/hadolint/hadolint)** | 2 rules | Shell best practices (expanding) |
41
+ <!-- BEGIN RULES_TABLE -->
42
+
43
+ | Source | Rules | Description |
44
+ | --------------------------------------------------------------- | -------- | --------------------------------------------------------------------------------------------- |
45
+ | **[BuildKit](https://docs.docker.com/reference/build-checks/)** | 22 rules | Docker's official Dockerfile checks (automatically captured) |
46
+ | **tally** | 3 rules | Custom rules including secret detection with [gitleaks](https://github.com/gitleaks/gitleaks) |
47
+ | **[Hadolint](https://github.com/hadolint/hadolint)** | 22 rules | Hadolint-compatible Dockerfile rules (expanding) |
48
+
49
+ <!-- END RULES_TABLE -->
14
50
 
15
51
  **See [RULES.md](RULES.md) for the complete rules reference.**
16
52
 
@@ -25,7 +61,7 @@ brew install tinovyatkin/tap/tally
25
61
  ### NPM
26
62
 
27
63
  ```bash
28
- npm install -g @contino/tally
64
+ npm install -g tally-cli
29
65
  ```
30
66
 
31
67
  ### PyPI
@@ -286,21 +322,21 @@ Configuration sources are applied in this order (highest priority first):
286
322
 
287
323
  ### Environment Variables
288
324
 
289
- | Variable | Description |
290
- | ---------------------------------------- | --------------------------------------------------------- |
325
+ | Variable | Description |
326
+ | ---------------------------------------- | --------------------------------------------------------------------- |
291
327
  | `TALLY_OUTPUT_FORMAT` | Output format (`text`, `json`, `sarif`, `github-actions`, `markdown`) |
292
- | `TALLY_OUTPUT_PATH` | Output destination (`stdout`, `stderr`, or file path) |
293
- | `TALLY_OUTPUT_SHOW_SOURCE` | Show source snippets (`true`/`false`) |
294
- | `TALLY_OUTPUT_FAIL_LEVEL` | Minimum severity for non-zero exit |
295
- | `NO_COLOR` | Disable colored output (standard env var) |
296
- | `TALLY_EXCLUDE` | Glob pattern(s) to exclude files (comma-separated) |
297
- | `TALLY_CONTEXT` | Build context directory for context-aware rules |
298
- | `TALLY_RULES_MAX_LINES_MAX` | Maximum lines allowed |
299
- | `TALLY_RULES_MAX_LINES_SKIP_BLANK_LINES` | Exclude blank lines (`true`/`false`) |
300
- | `TALLY_RULES_MAX_LINES_SKIP_COMMENTS` | Exclude comments (`true`/`false`) |
301
- | `TALLY_NO_INLINE_DIRECTIVES` | Disable inline directive processing (`true`/`false`) |
302
- | `TALLY_INLINE_DIRECTIVES_WARN_UNUSED` | Warn about unused directives (`true`/`false`) |
303
- | `TALLY_INLINE_DIRECTIVES_REQUIRE_REASON` | Require reason= on ignore directives (`true`/`false`) |
328
+ | `TALLY_OUTPUT_PATH` | Output destination (`stdout`, `stderr`, or file path) |
329
+ | `TALLY_OUTPUT_SHOW_SOURCE` | Show source snippets (`true`/`false`) |
330
+ | `TALLY_OUTPUT_FAIL_LEVEL` | Minimum severity for non-zero exit |
331
+ | `NO_COLOR` | Disable colored output (standard env var) |
332
+ | `TALLY_EXCLUDE` | Glob pattern(s) to exclude files (comma-separated) |
333
+ | `TALLY_CONTEXT` | Build context directory for context-aware rules |
334
+ | `TALLY_RULES_MAX_LINES_MAX` | Maximum lines allowed |
335
+ | `TALLY_RULES_MAX_LINES_SKIP_BLANK_LINES` | Exclude blank lines (`true`/`false`) |
336
+ | `TALLY_RULES_MAX_LINES_SKIP_COMMENTS` | Exclude comments (`true`/`false`) |
337
+ | `TALLY_NO_INLINE_DIRECTIVES` | Disable inline directive processing (`true`/`false`) |
338
+ | `TALLY_INLINE_DIRECTIVES_WARN_UNUSED` | Warn about unused directives (`true`/`false`) |
339
+ | `TALLY_INLINE_DIRECTIVES_REQUIRE_REASON` | Require reason= on ignore directives (`true`/`false`) |
304
340
 
305
341
  ### CLI Flags
306
342
 
@@ -348,6 +384,7 @@ tally check --format json Dockerfile
348
384
  ```
349
385
 
350
386
  The JSON output includes:
387
+
351
388
  - `files`: Array of files with their violations
352
389
  - `summary`: Aggregate statistics (total, errors, warnings, etc.)
353
390
  - `files_scanned`: Total number of files scanned
@@ -364,7 +401,7 @@ The JSON output includes:
364
401
  "file": "Dockerfile",
365
402
  "start": { "line": 2, "column": 0 }
366
403
  },
367
- "rule": "StageNameCasing",
404
+ "rule": "buildkit/StageNameCasing",
368
405
  "message": "Stage name 'Builder' should be lowercase",
369
406
  "severity": "warning",
370
407
  "docUrl": "https://docs.docker.com/go/dockerfile/rule/stage-name-casing/"
@@ -381,7 +418,7 @@ The JSON output includes:
381
418
  "files": 1
382
419
  },
383
420
  "files_scanned": 1,
384
- "rules_enabled": 7
421
+ "rules_enabled": 35
385
422
  }
386
423
  ```
387
424
 
@@ -416,10 +453,10 @@ tally check --format markdown Dockerfile
416
453
  ```markdown
417
454
  **2 issues** in `Dockerfile`
418
455
 
419
- | Line | Issue |
420
- |------|-------|
421
- | 10 | ❌ Use absolute WORKDIR |
422
- | 2 | ⚠️ Stage name 'Builder' should be lowercase |
456
+ | Line | Issue |
457
+ | ---- | ------------------------------------------- |
458
+ | 10 | ❌ Use absolute WORKDIR |
459
+ | 2 | ⚠️ Stage name 'Builder' should be lowercase |
423
460
  ```
424
461
 
425
462
  Features:
@@ -432,13 +469,13 @@ Features:
432
469
 
433
470
  ### Output Options
434
471
 
435
- | Flag | Description |
436
- | --------------- | ------------------------------------------------------------------ |
472
+ | Flag | Description |
473
+ | --------------- | -------------------------------------------------------------------- |
437
474
  | `--format, -f` | Output format: `text`, `json`, `sarif`, `github-actions`, `markdown` |
438
- | `--output, -o` | Output destination: `stdout`, `stderr`, or file path |
439
- | `--no-color` | Disable colored output (also respects `NO_COLOR` env var) |
440
- | `--show-source` | Show source code snippets (default: true) |
441
- | `--hide-source` | Hide source code snippets |
475
+ | `--output, -o` | Output destination: `stdout`, `stderr`, or file path |
476
+ | `--no-color` | Disable colored output (also respects `NO_COLOR` env var) |
477
+ | `--show-source` | Show source code snippets (default: true) |
478
+ | `--hide-source` | Hide source code snippets |
442
479
 
443
480
  ### Exit Codes
444
481
 
package/bin/tally.exe CHANGED
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@contino/tally-windows-x64",
3
- "version": "0.1.5",
3
+ "version": "0.3.0",
4
4
  "description": "The Windows 64-bit binary for tally",
5
5
  "repository": {
6
6
  "type": "git",