Skip to content

fix: Add fail_level to reviewdog actions#1638

Open
michelabboud wants to merge 34 commits intodockur:masterfrom
michelabboud:fix/reviewdog-fail-level
Open

fix: Add fail_level to reviewdog actions#1638
michelabboud wants to merge 34 commits intodockur:masterfrom
michelabboud:fix/reviewdog-fail-level

Conversation

@michelabboud
Copy link

@michelabboud michelabboud commented Jan 29, 2026

Summary

  • Add fail_level: error to the 5 reviewdog actions that support it (misspell, hadolint, yamllint, actionlint, shellcheck)
  • Use fail_on_error: "true" for action-shfmt which hasn't added fail_level support yet
  • Ensures CI fails when linting errors are found

Context

The fail_on_error input was never explicitly set in this workflow — the deprecation warnings (Input 'fail_on_error' has been deprecated) come from the actions' internal action.yml definitions, which resolve the deprecated input to its default value during every run.

5 of the 6 reviewdog actions have migrated to support fail_level as the replacement. The exception is action-shfmt, which still only has fail_on_error (not yet deprecated in that action). Passing fail_level to shfmt causes a GitHub warning about an unexpected input, so fail_on_error: "true" is used there instead.

Affected steps

Step Action Parameter
Spelling reviewdog/action-misspell@v1 fail_level: error
Hadolint reviewdog/action-hadolint@v1 fail_level: error
YamlLint reviewdog/action-yamllint@v1 fail_level: error
ActionLint reviewdog/action-actionlint@v1 fail_level: error
Shellformat reviewdog/action-shfmt@v1 fail_on_error: "true"
Shellcheck reviewdog/action-shellcheck@v1 fail_level: error

Test plan

  • actionlint passes locally
  • CI runs without Unexpected input warnings

🤖 Generated with Claude Code

michelabboud and others added 19 commits January 28, 2026 22:29
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add compose/ folder with modular compose files for all Windows versions
- Organize by category: desktop, legacy, server, tiny
- Create data/ subfolders for each version's storage
- Update .gitignore to track folder structure via .gitkeep files

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add winctl.sh with 12 commands for managing Windows Docker containers:
- start, stop, restart, status, logs, shell, stats
- build, rebuild, list, inspect, monitor, check
- Interactive menus, prerequisites checking, color output
- Support for 22 Windows versions across 4 categories

Multi-version compose structure:
- Split base.yml into base-modern.yml (8G) and base-legacy.yml (2G)
- Add .env.example for configuration
- Update all compose files to use env_file
- Add unique port mappings per version
- Update README with winctl.sh documentation

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Use printf '%b' instead of cat heredoc to properly interpret
ANSI escape sequences in the show_usage function.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Send menu prompts to stderr so they display in terminal
- Read user input from /dev/tty for proper interactive mode
- Add status cache to fetch all container states in one Docker call
- Handle interactive_select errors properly in all callers

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Cache container statuses in ~/.cache/winctl/status.json
- Auto-refresh if cache older than 7 days or data is stale
- Add 'refresh' command to force cache refresh
- Dramatically faster menus (single Docker call vs 44 calls)
- Bump version to 1.1.0

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Replace echo with printf '%b' in select_category and select_versions
to properly interpret ANSI escape sequences.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Remove base-legacy.yml and base-modern.yml (YAML anchors don't work with include)
- Make all compose files self-contained
- Add .env.modern (8G RAM, 4 CPU) for Win 10/11, Server 2016+
- Add .env.legacy (2G RAM, 2 CPU) for older systems
- Update README and .env.example documentation

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Changed USERNAME example from Docker to docker (lowercase)
- Added link to WINCTL_GUIDE.md for complete documentation

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Changed post-increment to pre-increment in cmd_monitor
  ((total_count++)) → ((++total_count)) to avoid set -e exit on ((0))
- Added invalidate_cache for accurate real-time status updates

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Changed restart policy from unless-stopped to on-failure
  so Windows shutdown stops the container instead of restarting
- Added RESTART_POLICY env variable to .env.modern and .env.legacy
- Compose files use ${RESTART_POLICY:-on-failure} for flexibility
- Updated WINCTL_GUIDE.md with restart policy documentation
- Updated readme.md with RESTART_POLICY setting

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- ./winctl.sh stop all finds and stops all running containers
- Updated help, WINCTL_GUIDE.md, and readme.md

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Changed color definitions from '\033[...]' to $'\033[...]'
  (actual escape bytes instead of literal strings)
- Replaced all display echo -e/echo -n/echo with printf
- Kept echo only for function return values and JSON output
- Fixes ANSI escape codes showing as raw text in list/inspect/monitor

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Auto-detect machine architecture via uname and use the correct Docker
image (dockurr/windows for x86, dockurr/windows-arm for ARM64). Block
unsupported versions on ARM with a clear error message, and show
[x86 only] tags in the list command. Compose files now use a
configurable WINDOWS_IMAGE variable with a default fallback.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…tions

All reviewdog actions in review.yml now use fail_level: error instead
of the deprecated fail_on_error parameter.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
michelabboud and others added 9 commits January 29, 2026 13:37
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Adds missing `---` document start to satisfy yamllint.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Cache downloaded ISOs so new instances of the same Windows version skip
the 3-6 GB download. Adds `winctl cache` subcommands (save/list/rm/flush)
and auto-restores cached ISOs when creating new instances with --new.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The container marks processed ISOs with byte 0x16 at offset 0. Restoring
a cached ISO with this byte into an empty data directory caused the
container to skip installation and try to boot a nonexistent disk,
dropping into a UEFI shell. Now resets byte 0 to 0x00 after copying so
the container re-processes the ISO (driver injection, answer file, etc.)
without re-downloading it. Also adds cache auto-restore to cmd_start()
for base versions, not just cmd_new() instances.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@kroese
Copy link
Contributor

kroese commented Jan 30, 2026

Thanks! I see fail_level added, but no fail_on_error removed?

michelabboud and others added 6 commits January 30, 2026 10:42
The data directories contain .gitkeep files, so the empty-directory
check (ls -A) always returned non-empty and cache restore never
triggered. Now checks for *.iso files specifically, which is the
actual condition that determines whether a download is needed.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add AUTO_CACHE=Y/N setting in .env to auto-cache ISOs on stop
- Fix cache restore to copy metadata files (windows.base, windows.ver,
  windows.mode, windows.type, windows.args) alongside ISOs so the
  container recognizes them as already processed and skips re-download
- Refactor show_usage() into topic-based help with interactive menu
  (commands, instances, cache, examples, config) and aligned columns
- Fix clean --data to unregister instances and remove compose files
- Update WINCTL_GUIDE.md and readme.md with all changes

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The container's genisoimage rebuilds ISOs with a duplicate boot catalog
entry that 7z cannot re-extract ("Break signaled"). This caused cache
restore to fail for new instances.

- Add `cache download <version>` command to download original ISOs
  directly using the container's download logic
- Add `_is_rebuilt_iso()` helper to detect rebuilt ISOs (magic byte 0x16)
- Skip rebuilt ISOs in `cache save` and `auto_cache_save` with warning
- Remove magic byte manipulation from restore paths (originals work as-is)
- Update WINCTL_GUIDE.md and readme.md with new cache workflow

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add fail_level: error to the 5 reviewdog actions that support it
(misspell, hadolint, yamllint, actionlint, shellcheck). For shfmt,
which hasn't added fail_level support yet, use fail_on_error: true.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@michelabboud michelabboud force-pushed the fix/reviewdog-fail-level branch from 292c723 to a691818 Compare January 31, 2026 19:41
@michelabboud michelabboud changed the title fix: Replace deprecated fail_on_error with fail_level in reviewdog actions fix: Add fail_level to reviewdog actions Jan 31, 2026
@michelabboud
Copy link
Author

Good catch — fail_on_error was never explicitly set in the workflow. The deprecation warnings come from the actions' internal action.yml definitions, which resolve the deprecated input to its default value on every run (even when the workflow doesn't set it).

I've updated the PR:

  • 5 actions (misspell, hadolint, yamllint, actionlint, shellcheck) now use fail_level: error — the recommended replacement parameter
  • action-shfmt uses fail_on_error: "true" instead, because that action hasn't added fail_level support yet (passing fail_level to it caused a GitHub warning: Unexpected input(s) 'fail_level')

The fail_on_error deprecation warning from GitHub will persist for the other 5 actions until the reviewdog maintainers remove the deprecated input from their action.yml files — that's outside the scope of this workflow.

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