All notable changes to this project will be documented in this file. This project adheres to Semantic Versioning.
Nothing yet.
1.24.1 - 2026-04-12
- Skipped AutoPkg recipe type convention checks when type is unknown. (#55)
- Updated release documentation to reflect new automated workflow.
- Built error handling into release automation workflow.
1.24.0 - 2026-04-12
- Automated GitHub Actions workflow for creating releases and bumping versions.
- Updated CodeQL workflow to run on
mainbranch instead ofmaster.
1.23.0 - 2026-03-19
- Added support for minimum AutoPkg version validation for new VariableSetter processor.
check-munkiadmin-scriptsandcheck-outset-scriptsnow support the--valid-shebangsargument for specifying additional valid interpreter paths.
check-munki-pkgsinfonow skips warning about missing packages if aPackageCompleteURLkey is set in the pkginfo.
1.22.0 - 2025-11-25
format-xml-plisthook now uses Python's plistlib instead of macOS's plutil. This enables compatibility with a wider selection of CI/CD runners, including pre-commit.ci.
- Fixed bug in
check-autopkg-recipesthat would flag processors as "not conventional" for recipe types that have multiple filename hints. Realistically, this only affected.jamfor.jamf-uploadrecipe types.
1.21.0 - 2025-09-21
check-munki-pkgsinfonow detects the incorrect keyconditionand suggests usinginstallable_conditioninstead.
- Renamed internal package from
pre_commit_hookstopre_commit_macadmin_hooksto resolve namespace collision with the officialpre_commit_hookspackage. (#78)
1.20.0 - 2025-08-09
check-autopkg-recipesandcheck-munki-pkgsinfonow validates thatsupported_architecturesvalues are set appropriately.- In anticipation of Munki 7,
check-munki-pkgsinfovalidates thatversion_scriptis a string starting with a script shebang. check-munki-pkgsinfonow checks for specific deprecatedinstaller_typeanduninstall_methodvalues, most of which are detailed here.- Added new FindAndReplace core processor version requirements for AutoPkg recipes.
- Improvements to
check-preference-manifestshook. (#91, thanks to @relgit) check-autopkg-recipesignoressupported_architecturesvalues within Munki pkginfo dictionaries that appear to be AutoPkg recipe substitution variables (e.g.%ARCH%).
1.19.0 - 2025-01-16
- Added
--warn-on-missing-installer-itemsflag that makes missing Munki install/uninstall items a warning instead of a failure. (#86, thanks to @haircut) - Apply the same checks to
uninstaller_item_locationthat were previously applied toinstaller_item_location. check-autopkg-recipesrequires Munki recipepkginfodicts to contain at leastnameanddescription.check-autopkg-recipesnow validates thatuninstall_methodanduninstall_scriptare set appropriately in Munki recipes.
check-autopkg-recipesincludes jamf-upload as an AutoPkg recipe type, and updated processors included in jamf/jamf-upload recipe convention.check-munki-pkgsinforequires aversionkey in addition tonameanddescription.
- Bug fix in
check-munkiadmin-scriptsthat prevented script names from processing correctly. - Bug fix in
check-munki-pkgsinfothat prevented--warn-on-duplicate-importsflag from working correctly.
1.18.0 - 2025-01-04
check-munki-pkgsinfonow produces an error ifuninstall_methodis set touninstall_scriptbut no uninstall script is present in the pkginfo.check-munki-pkgsinfonow checks for deprecated pkginfo keys.check-munki-pkgsinfonow includes checks for many possible pkginfo key typos, not justminimum_os_versionandmaximum_os_version. Suggestions welcome if you think of more.check-munkiadmin-scriptsnow checks whether scripts are named correctly, not just executable.
1.17.0 - 2024-12-22
-
New
--warn-on-duplicate-importsflag for use with Munki pkginfo checks, for Munki administrators who don't care about multiple potential versions of the same pkginfo/pkg in the repository (perhaps because of differingsupported_architecturesor other keys).When this is specified, the pre-commit hook will warn when files with
__1(and similar) suffixes are seen in the pkgsinfo/pkgs folders. This will enbale pre-commit hooks to pass, as long as there are no other errors. Omitting the--warn-on-duplicate-importsflag will continue generating an error and failing the hooks, as was the previous behavior. -
Include
SignToolVerifierandURLDownloaderPythonAutoPkg processors when suggesting minimum versions. -
Updated AutoPkg recipe type convention checking to include new
JamfUploadprocessors as well asURLDownloaderPythonandMunkiInfoCreator. -
Added a suggestion to use Rich Trouton's VariablePlaceholder processor for setting arbitrary environment variables instead of supplying unexpected arguments to existing processors.
- Fixed FileWaveImporter processor detection.
1.16.2 - 2024-06-10
- Fixed two bugs in shebang validation that would result in ModuleNotFoundError when running check-munki-pkgsinfo hook.
- Dropped Python 2 string instance validation. No further support will be provided for Python 2.
- Added PyUpgrade hook to this repo's own pre-commit linting, in order to ensure modern Python syntax.
- Don't specify
"r"mode when usingopen(), as this is the default behavior.
1.16.1 - 2024-06-08
- New
format-xml-plisthook to auto-format XML property list (plist) files to use tabs instead of spaces, and will alphabetically sort keys. (#79, thanks to n8felton) - New
--valid-shebangsparameter to specify additional custom shebangs in use for your environment. Works with thecheck-munki-pkgsinfo,check-jamf-scripts,check-jamf-extension-attributes,check-outset-scripts, andcheck-munkiadmin-scriptshooks. (#75, thanks to @kbrewersq) - Checks to ensure the MinimumVersion key in AutoPkg recipes is a string. (If quotes are omitted in yaml-formatted recipes, this key could be interpreted as a float.)
- No longer warn when using AutoPkg MinimumVersion greater than 2.0.
- Python 2 support deprecated and will be removed in the future.
- Hook output rewritten to use f-strings instead of
.format().
1.15.0 - 2024-02-11
- Now validates that all XML
<result>tags are closed in Jamf extension attributes. (#76, thanks to @WardsParadox)
- Fixed a bug in the
munki-makecatalogshook (#72, thanks to @kbrewersq). - Added optional
--munki-repoparameter tocheck-munki-pkgsinfoandmunki-makecatalogshooks, in order to specify a path to your Munki repo. Useful for situations where the Munki repo is a subdirectory of the Git repo itself. (#73 and #74, thanks to @kbrewersq)
1.14.1 - 2023-11-20
- Fixed a bug that would cause a Python traceback when checking Munki repos that use
nopkgtype items.
1.14.0 - 2023-11-19
check-preference-manifestshook now outputs more specific error message ifpfm_documentation_urlis empty. (#67, thanks to @relgit)check-munki-pkgsinfohook now detects path mismatches on case-sensitive filesystems. (#66, thanks to @AaronBurchfield)
1.13.0 - 2023-11-18
- Now uses
packaging.version.Versioninstead ofdistutils.version.LooseVersionfor AutoPkg version comparisons. This may cause unexpected behavior if unusual versions are used inMinimumVersionkeys. - Updated
yaml.safe_load()toYAML(typ='safe').
1.12.4 - 2023-02-26
- Added compatibility checks for MunkiOptionalReceiptEditor processor, included in AutoPkg 2.7+.
- Added a
--require-pkg-blocking-appsargument for thecheck-munki-pkgsinfohook. If specified, tests will fail for any pkg installer that does not have ablocking_applicationsarray (even an empty one). This change maintains the alignment with Munki's design established in 1.12.3 while allowing Munki repo admins flexibility to be stricter in their own environments.
- Improved compatibility with Munki repos where the pkgsinfo folder is not at the root level. (#63, thanks to @kbrewersq)
1.12.3 - 2022-04-09
- Changed check-munki-pkgsinfo to WARN on the absence of the
blocking_applicationsarray for installers in pkg format, rather than to fail the pre-commit test. This better aligns with Munki's own design, which does not requireblocking_applications.
- Resolved an uncaught exception if the git config email is unset. (#58)
1.12.2 - 2022-02-27
- Adjusted preference manifest checks to require
pfm_namefor every preference key except immediate descendants of keys whosepfm_typeisarray(#54). - Improved preference manifest output to more accurately specify which key or subkey is failing
pfm_nameorpfm_typechecks. - Continued development work on a hook that checks Jamf JSON schema manifests.
1.12.1 - 2021-12-22
- Minor adjustments to
check-preference-manifestshook.
1.12.0 - 2021-12-19
- New
check-preference-manifestshook for checking Apple preference manifests like those used by ProfileCreator and iMazing Profile Editor manifests. - Check for the recommended order of JamfUploader processors.
1.11.0 - 2021-11-20
- Added processor type conventions for JamfUploader (
.jamf), PkgSigner (.sign), and GPGSignatureVerifier (.verify) families of recipes. BrewCaskInfoProviderhas been added to the list of deprecated AutoPkg processors.- More output when
check-git-config-emailfails.
1.10.1 - 2021-02-21
- In anticipation of AutoPkg 2.3, now supports checking YAML recipes (must have extension
.recipe.yaml). - In anticipation of AutoPkg 2.3, supports additional AutoPkg plist extension
.recipe.plist. - Supports JSON AutoPkg recipes (must have extension
.recipe.json). NOTE: AutoPkg itself does not yet support JSON recipes. - Built placeholder for checking for unused AutoPkg recipe input variables in the future. Check is disabled for now.
- Fixed a bug preventing display of AutoPkg recipe path and identifier if duplicate identifier is found in the repo.
1.9.0 - 2021-01-18
- Added check for any unexpected processor arguments in any AutoPkg processor.
- CodeSignatureVerifier processor argument verification (added in v1.8.2) has been replaced by the above.
1.8.2 - 2021-01-18
- Added check for unexpected processor arguments in CodeSignatureVerifier.
- Renamed default branch to
main.
1.8.1 - 2020-12-08
- Removed warning about setting MinimumVersion of AutoPkg recipes to 2.0+.
- Reverted 1.4 minimum version requirement for processors that use URLGetter (introduced in 1.7.0).
1.8.0 - 2020-10-08
- Replaced
plistlib.readPlist()withplistlib.load()
1.7.0 - 2020-10-06
- Added pre-commit-macadmin change log (this file)
- Ensure no superclass processors (e.g. URLGetter) are used, as these are intended to be referred to by other processors rather than directly used in recipes
- Warn if setting a MinimumVersion greater than or equal to 2 in AutoPkg recipes, because some administrators may be running 1.4.1 and waiting for processor authors to add Python 3 compatibility
- Validate
minimum_os_versionandmaximum_os_versionkeys in Munki pkginfo files
- Set MinimumVersion needed for [C]URL* processors to 1.4, to ensure utilization of URLGetter
- Updated valid Munki script shebangs to include Munki embedded Python symlink and path
1.6.2 - 2020-01-20
- Added missing sys module for Python version determination
1.6.1 - 2019-12-26
- Convert subprocess output to string
1.6.0 - 2019-12-26
- Validate possible values of RestartAction key in Munki pkginfo
- New hook to check Git user email configuration (
git config user.email)
1.5.2 - 2019-11-26
- Removed redundant EndOfCheckPhase check
- Added URLGetter minimum version (although we should never need this since URLGetter is not meant to be called directly)
1.5.1 - 2019-09-21
- Checking for downloader processors without EndOfCheckPhase
1.5.0 - 2019-09-17
- Warn if using deprecated AutoPkg processors (only one exists now: CURLDownloader)
- Allow specifying multiple acceptable recipe prefixes
- Updated minimum AutoPkg versions required for processors to only include significant digits for LooseVersion comparison
1.4.0 - 2019-08-22
- Detect and warn on AutoPkg recipe identifier duplication
- Warn if any Munki pkginfo script is missing a shebang
1.3.0 - 2019-07-03
--strictmode for check-autopkg-recipes hook, along with numerous conventions that it can validate- Catch identifier loops, where recipe and its parent have the same identifier
- Better handling of unicode
- Fixed warning output when recipe list is invalid
- Fixed shared FileWaveImporter processor identifier
- Handle recipe lists that have prefixes
- Allow pkg recipes with no process (stubs for software already in pkg format at time of download)
1.2.1 - 2019-06-28
- Better parsing of MunkiPkg build-info files, and validation of keys
- Better handle processors with missing Processor keys
- Warn if MunkiPkg project target disk is not the startup disk
- Validate required keys in MunkiPkg build-info files
- Validate bundle identifier in MunkiPkg build-info files
1.2.0 - 2019-06-27
- Checking AutoPkg recipe processors for missing Processor key
- Validation of EndOfCheckPhase placement within download recipes
- Created shared function for checking required keys for pkginfo files and AutoPkg recipes
- No longer requiring an Input key for AutoPkg recipes
1.1.4 - 2019-06-24
- Skip processor checks for AutoPkg recipes without a Process
1.1.3 - 2019-06-24
- Added
--ignore-min-vers-beforeargument to check-autopkg-recipes hook - Added checking for
%NAME%.appin check-autopkg-recipes hook
1.1.2 - 2019-06-22
- Added validation of AutoPkg recipe MinimumVersion in check-autopkg-recipes hook
- Fail early and stop processing files that don't parse
1.1.1 - 2019-06-13
- Fixed issue that returned wrong pass/fail result for check-munki-pkgsinfo and check-autopkg-recipes hooks
1.1.0 - 2019-06-13
- Added a note about combining list arguments in yaml config
- Added note about multi-line list args
- Ensure no trailing slashes on items_to_copy in check-munki-pkgsinfo
- Specified which yaml loader to use
- Removed zip as an package extension
- Fixed issue that caused incorrect pass/fail for check-munki-pkgsinfo and check-autopkg-recipes hooks
1.0.5 - 2019-03-15
- Added args documentation to read me
1.0.4 - 2019-03-14
- Added check for approved catalogs
1.0.3 - 2019-03-13
- Fixed variable capitalization
1.0.2 - 2019-03-13
- Enabled basic type checking for pkginfo dicts
- Adjusted required keys in check-munki-pkgsinfo to include name and description by default
- Temporarily skipping top level plist type (dict) checking
1.0.1 - 2019-03-03
- Added forbid-autopkg-trust-info hook
- Added check for recipe prefix enforcement
- Fixed bug in check-autopkg-recipes hook
- Initial release