Revision history for App-GHGen
0.07 Mon Jul 27 15:32:43 EDT 2026
[ Bug Fixes ]
- Added matrix exclusion for windows-latest + perl 5.40. The
shogo82148/build-perl perl-5.40.4-thr-win32-x64.zip ships a perl.exe
and a libperl540.a from two different builds: any XS module compiled
against that libperl540.a (handshake key 0x12c00080) mismatches the
running perl.exe (needs 0x12d00080). Even Win32::Process — a core
Windows XS module bundled in the zip and loaded by IPC::System::Simple
— fails to load, so no XS-using test can pass on this combination.
The previous workaround (cpanm --reinstall YAML::XS) cannot help
because the compilation itself uses the broken libperl540.a.
Exclusion is emitted only when both 'windows-latest' and '5.40' are
in the matrix; custom OS or Perl lists that omit either are unaffected.
See https://github.com/shogo82148/actions-setup-perl/issues/2310 for further information.
- Added defensive Windows step "Reinstall YAML::XS against current Perl"
(`cpanm --notest --reinstall YAML::XS`) to ensure a freshly compiled
YAML::XS.dll lands in site/lib (which precedes the bundled lib in @INC)
for cases where the shogo82148 Perl zip bundles a stale XS DLL and the
toolchain (perl.exe + libperl.a) is internally consistent.
- Removed .github/workflows/perl-ci.yml from the cache key. Including the workflow file
hash caused unnecessary full cache invalidation on every comment or whitespace edit to
the workflow; it provided no meaningful safety guarantee beyond the cpanfile hash.
- Strengthened the cache key further: a dedicated cross-platform step (shell: perl {0})
fingerprints the actual Perl binary files using unpack('%32C*',...) + read() so no
extra CPAN modules are needed. On Windows the Perl runtime DLL (e.g. perl540.dll) is
also read alongside perl.exe. The checksum combined with $Config{archname} is appended
to $Config{version} to form the final cache key.
Rationale: Strawberry Perl occasionally re-releases the same Perl version (e.g. 5.40.0)
with a recompiled DLL that changes the XS handshake key but leaves $Config{version}
unchanged. Reading the binary detects any such change without requiring Digest::MD5.
(An earlier Digest::MD5->addfile approach failed on some runners with "Can't use an
undefined value as filehandle reference"; read + unpack avoids that entirely.)
0.06 Fri Jul 17 11:39:03 EDT 2026
[ Bug Fixes ]
- Approved https://github.com/nigelhorne/App-GHGen/pull/6
Missing unescaped $ failed to interpolate variable into double-quoted string
Thanks to https://github.com/chromatic
- Fixed enable_linter_unused having no effect when set to 1 via the non-interactive code
path. The POD Params::Validate block (default => 0) is documentation only; the actual
runtime default was the // 0 on the assignment line (line 286). Changed to // 1.
[ New Features ]
- Added Perl syntax linting step to generated workflows (enable_linter, default: on)
Uses shell: perl {0} so it runs cross-platform without OS-specific branching.
Searches lib/ and bin/, uses do $file with a stub @INC handler for every .pm file,
and covers every matrix cell (all OS × Perl version combinations).
No extra CPAN dependencies required.
- Added unused-variable check (enable_linter_unused, default: on). The check is embedded
inside the lint step and runs PERL5OPT=-Mwarnings::unused prove -lr t/ so variable
lifetimes are exercised at runtime (perl -c is compile-only and cannot detect unused
vars). Gated on RUNNER_OS == Linux and continue-on-error: true.
- Added import-hygiene check (enable_perlimports, default: on). Installs App::perlimports
and runs perlimports --lint across all .pm files under lib/. Scoped to latest Perl +
ubuntu-latest; continue-on-error: true so it is advisory rather than blocking.
- Both enable_linter_unused and enable_perlimports are exposed in the interactive
--customize prompt for Perl workflows under the "Code Quality Tools" heading.
- Regression test added in t/pull_6.t for the PR #6 cost-display bug fix.
- Tests added/extended in t/linter.t covering presence/absence, ordering, and
platform-gating of all lint-stage steps.
- Added t/extended_tests.t: 99 branch-coverage tests targeting uncovered paths across all
8 modules (Analyzer, CostEstimator, Detector, Fixer, Generator, Interactive,
PerlCustomizer, Reporter). Flags Analyzer::has_deployment_steps as dead code (defined
but not exported and not called from analyze_workflow).
[ CI Matrix ]
- Default Perl matrix is now 5.36, 5.38, 5.40, 5.42 (max_perl_version bumped from
5.40 to 5.42). Perl::Critic, perlimports, and coverage steps are now gated on
5.42 (always the latest version in the matrix).
- Perl 5.44 added to the known-versions table as an opt-in. Projects wanting to test
against 5.44 before it becomes the default can pass max_perl_version => '5.44' to
generate_custom_perl_workflow, or set perl_versions explicitly. No code change
needed on the caller's side.
- POD for generate_custom_perl_workflow updated: max_perl_version default corrected to
5.42, opt-in examples for 5.44 added under the max_perl_version item.
0.05 Thu Mar 19 10:36:44 EDT 2026
- Fix tabs that had crept in
0.04 Wed Mar 18 11:44:12 EDT 2026
- Bump maximum Perl version
- Show debug on fail
- Understand C.
- Fail better if the project type can't be determined automatically.
- Added analyzer and auto-fix support for missing timeout-minutes in workflow jobs.
0.03 Wed Jan 28 20:07:05 EST 2026
Action.yml was broken, 'shell' isn't recognised
0.02 Wed Jan 28 08:07:19 EST 2026
Updated paths
Added comment of what created the CI
Added test dashboard
0.01 Thu Jan 1 16:28:43 EST 2026
First draft