u/CarveAndCode

Built a configuration as code tool for Intune app packaging - NAPT (Not A Pkg Tool)
▲ 31 r/Intune

Built a configuration as code tool for Intune app packaging - NAPT (Not A Pkg Tool)

Hey all. Just wanted to share a packaging tool I've been working on for a few months. Still a WIP but the core workflow is there.

To preface: I made NAPT (Not A Pkg Tool) to solve a couple of gaps I've noticed with packaging:

  1. There aren't many configuration as code tools for Intune, let alone for app packaging specifically.
  2. Packaging apps for Intune is one of the most repetitive and time consuming parts of Intune management.

At a high level, NAPT treats app packaging as configuration as code. You write a recipe once and reuse it to check if a new version is available and upload it to Intune automatically.

After you write the recipe, the workflow looks like this:

# finds latest version, downloads installer
napt discover recipes/Google/chrome.yaml   

# generates PSADT package + detection scripts
napt build recipes/Google/chrome.yaml    

# creates the .intunewin
napt package recipes/Google/chrome.yaml

# uploads the .intunewin
napt upload recipes/Google/chrome.yaml

Recipes define how to find the latest version (supports a static URL, GitHub API, JSON API, or web scrape), generate a PSADT-based package with detection and requirements scripts and upload straight to Intune via Graph API. State tracking between runs means it skips re-downloads if the version hasn't changed, which makes it pipeline-friendly.

Still actively working on it so there are rough edges, but the core workflow is solid. It's on PyPI at v0.5.0 if you want to try it out. The recipes aren't included in the PyPI distribution but the example ones in the repo all work if you drop them in your working directory. 🙂

🔗 GitHub: https://github.com/RogerCibrian/notapkgtool

📚 Docs: https://rogercibrian.github.io/notapkgtool/

Would really appreciate any thoughts on the approach and ideas for improvements are welcome. Happy to answer questions 🤘🏽

u/CarveAndCode — 1 day ago