Recipe Robot Versions Save

A kick ass tool for creating AutoPkg recipes.

v2.3.1

6 months ago

Fixed

  • Fixed an issue with Recipe Robot's Sparkle update feed that caused "you're up to date" to appear even when the app wasn't the newest version. (Although this is listed as a fix for 2.3.1, it should actually resolve the issue for all previous versions of Recipe Robot.)
  • Jamf pkg upload recipes that use a parent download recipe that retrieves a package file won't fail (related to the behavior change below, #193).
  • Fixed a very rare issue in which Recipe Robot is not able to remove its cache folder after a pkg is unpacked that contains files that aren't user-writeable.
  • Adjusted SourceForge download URL search process and updated SF RSS parsing logic. Added support for detection of SourceForge /project/ URLs, which apparently coexist with /projects/ URLs.
  • Made adjustments to functional tests for upcoming AutoPkg 3 recipe map compatibility.

Changed

  • Recipe Robot no longer skips creating 'pkg' type recipes if the download is already in pkg format. Instead, it creates a recipe with a PkgCopier process (and potentially other processes if necessary for versioning). (#193)

v2.3.0

6 months ago

Added

  • Recipe Robot is now able to create yaml recipes. To use this feature, run --configure and select yaml as the recipe format. (Or run defaults write com.elliotjordan.recipe-robot RecipeFormat "yaml"). The app does not yet have a method for selecting this preference.
  • Now "jamf" recipes that leverage Graham Pugh's JamfPackageUploader processor can be created. This feature is currently limited to package-upload-only type recipes. (No creation of groups, policies, scripts, or other objects.) (#187)
  • Redeveloped existing recipe detection using the automated AutoPkg recipe index. Recipe Robot will use this method until the autopkg search results become reliable again.
  • Local file:// URLs are now supported input paths (but be aware that these may not be desirable for providing ongoing updates via AutoPkg, unless you have automation updating the local file).
  • New dedicated handler for Bare Bones update feeds, which are similar to Sparkle feeds but not the same. (#194)
  • Added three more app description sources, increasing the chance that Recipe Robot will pre-fill your Munki or Jamf recipes with useful descriptions for you to customize.
  • Added more post-recipe-creation affirmations, because why not.

Fixed

  • Better handling of disk images that contain packages. (#188)
  • Recipe Robot better handles downloaded payloads that contain the contents of an app bundle, but lack the enclosing bundle itself. (Thanks to @andrewzierkel for #195)
  • Prevented app window from expanding too much horizontally when processing extremely long filename or URL inputs.
  • Fixed incorrect [0m that terminated script output in app.
  • Fixed MacUpdate description pattern matching.
  • Better handling of URLs with unquoted spaces. (#197)
  • Improved detection of less obvious Sparkle feeds that might at first glance appear to be download URLs.
  • More gracefully handle Sparkle and Bare Bones feeds with no usable items or enclosure URLs.

Changed

  • Recipe Robot app finally supports dark mode in script output box!
  • Updated Sparkle framework to 2.5.1.
  • If existing recipes are found, output a hint that using --ignore-existing can create new recipes anyway.
  • Use zero-width space for script output contents placeholder, which ensures that "Processing" on the first line aligns with the left side.

Removed

Known issues

  • The old Sparkle feed automation needs some adjustment, so users of Recipe Robot 2.2.0 may see an incorrect "you're up to date" message when checking for updates. Current workaround is to manually download and install version 2.3.0.

v2.2.0

3 years ago

Added

  • Recipe Robot now incorporates Sparkle for keeping itself up to date. (#143)
  • The app is now built as a universal binary (however no testing on Macs with Apple Silicon has been done yet).
  • Verbose output now includes HTTP content-type and copying from disk images.

Fixed

  • Improved code signing authorities parsing, which should allow Recipe Robot to capture developer names and team identifiers in some situations where it would not previously.
  • Fixed a bug that would prevent using Sparkle URLs hosted on updates.devmate.com as input.
  • Gracefully handle missing file errors during installer payload inspection.
  • Slightly more resilient processing of downloaded files when the file format is unknown.

Removed

  • Removed FoundationPlist since Recipe Robot no longer depends on it.

v2.1.0

3 years ago

Added

  • Recipe Robot is now codesigned with a shiny new developer certificate and notarized!
  • Unit tests for curl related functions that will help detect and prevent release of bugs.

Fixed

  • Fixed a bug that would fail recipe generation if a expected_authority_names list is used for CodeSignatureVerifier.
  • Resolved an uncaught exception resulting from the RecipeIdentifierPrefix or RecipeCreateLocation preferences being unset. (#179)
  • Corrected minimum system version back to 10.13. (#180)

v2.0.0

3 years ago

Added

  • Full Python 3 support, which makes Recipe Robot compatible with (and require) AutoPkg 2. Big thanks to @sheagcraig for fixing a particularly sticky bug involving string encoding. (#156, #160, #163)
  • As part of Python 3 transition, rewrote significant portions of Recipe Robot to use curl instead of Python's urllib. This adds flexibility and mimics AutoPkg's behavior, but may result in changes in behavior from Recipe Robot 1.x.
  • New disk image build tool and layout.
  • The recipe-robot script now supports the creation of "jss-upload" type recipes, which imports a package into Jamf Pro but does not create any policies or groups. (#153)
  • Now able to build recipes for macOS screen saver (.saver) bundles.
  • Recipe Robot now does more thorough pre-checking of URLs: attempts to use HTTPS instead of HTTP when possible, and tries to add a widely used user-agent if a 403 error is encountered.
  • Added CodeQL scanning to GitHub repo.
  • Added Sparkle shortVersionString to verbose output. (#173)
  • Added code signature team identifier verbose output. (#174)

Changed

  • Recipe Robot no longer assigns AutoPkg input variables for DOWNLOAD_URL, SPARKLE_FEED_URL, GITHUB_REPO, and BUNDLE_ID. Instead, it hard-codes these values into the appropriate processor arguments. @jazzace nicely summarizes the benefit of this change here.
  • Added detail to the --configure option that clarifies that following the official "jss-recipes" style format is unnecessary unless you're contributing to jss-recipes.
  • Recipe Robot script --configure option now treats pressing Return the same as pressing "S" to save the list of preferred recipe types, to align with the behavior of other configuration options.
  • Various minor adjustments to continue preparing for Python 3 compatibility.
  • Cleaned up Swift codebase using swiftlint.
  • More robust Sparkle feed processing. (#150, #173)

Fixed

  • Resolved an issue that resulted in preferences unrelated to Recipe Robot being saved into the Recipe Robot preference file.
  • Updated regular expression used to grab app descriptions from MacUpdate.
  • Fixed an issue that would cause certain GitHub URLs to be parsed incorrectly.
  • Fixed a bug that occurred when checking for existing recipes using AutoPkg 2. (#171)
  • Resolved a first-run issue with reading empty preference values.
  • Fixed an issue that could cause a disk to fill up with recursive links. (#158)
  • Caught an error that resulted from neglecting to cast certain lists before writing to recipe plist.
  • Better handle download file inputs that are lacking kMDItemWhereFroms extended attributes.
  • Worked around an issue preventing real-time script output from being displayed in the app by shelling out to echo while running in app mode. (#169, #170)

Removed

  • Removed internal support for piped subprocess commands, previously deprecated in v1.2.0.
  • Temporarily removed 403 error detection (usually due to rate-limiting) for BitBucket, GitHub, and SourceForge API calls.
  • Removed all calls to FoundationPlist in support of Python 3 transition. (Left FoundationPlist itself included in source, but will remove in a future release.)

Known Issues

  • On macOS 10.14 (and possibly earlier) an incorrect "certificate has expired" warning may appear in the output. (#165)
  • The "jss-upload" type is not addressable yet in the Recipe Robot app, only in the script.
  • Because Recipe Robot is now using plistlib instead of FoundationPlist, it's likely that some non-standard developer plist files may not successfully parse. This is because plistlib is stricter than FoundationPlist, and the same issue applies to AutoPkg itself (see autopkg#618 for an example).

v2.0.0-rc3

3 years ago

Changes since RC2:

Added

  • Added Sparkle shortVersionString to verbose output. (#173)
  • Added code signature team identifier verbose output. (#174)
  • Re-added file download progress to command line output (using curl's --progress-bar feature).

Changed

  • More robust Sparkle feed processing. (#173)

Fixed

  • Possibly fixed issue that was preventing app from displaying realtime output.
  • Fixed an issue that could cause a disk to fill up with recursive links. (#158)
  • Caught an error that resulted from neglecting to cast certain lists before writing to recipe plist.
  • Better handle download file inputs that are lacking kMDItemWhereFroms extended attributes.

v2.0.0-rc2

3 years ago

Changes since RC1:

Added

  • New disk image build tool and layout.

Fixed

  • Fixed a bug that occurred when checking for existing recipes using AutoPkg 2. (#171)
  • Resolved a first-run issue with reading empty preference values.

v2.0.0-rc1

3 years ago

Added

  • Full Python 3 support, which makes Recipe Robot compatible with (and require) AutoPkg 2. Big thanks to @sheagcraig for fixing a particularly sticky bug involving string encoding. (#156, #160, #163)
  • As part of Python 3 transition, rewrote significant portions of Recipe Robot to use curl instead of Python's urllib. This adds flexibility and mimics AutoPkg's behavior, but may result in changes in behavior from Recipe Robot 1.x.
  • The recipe-robot script now supports the creation of "jss-upload" type recipes, which imports a package into Jamf Pro but does not create any policies or groups. (#153)
  • Recipe Robot now does more thorough pre-checking of URLs: attempts to use HTTPS instead of HTTP when possible, and tries to add a widely used user-agent if a 403 error is encountered.
  • Added CodeQL scanning to GitHub repo.

Changed

  • Recipe Robot no longer assigns AutoPkg input variables for DOWNLOAD_URL, SPARKLE_FEED_URL, GITHUB_REPO, and BUNDLE_ID. Instead, it hard-codes these values into the appropriate processor arguments. @jazzace nicely summarizes the benefit of this change here.
  • Added detail to the --configure option that clarifies that following the official "jss-recipes" style format is unnecessary unless you're contributing to jss-recipes.
  • Recipe Robot script --configure option now treats pressing Return the same as pressing "S" to save the list of preferred recipe types, to align with the behavior of other configuration options.
  • Various minor adjustments to continue preparing for Python 3 compatibility.
  • Cleaned up Swift codebase using swiftlint.

Fixed

  • Resolved an issue that resulted in preferences unrelated to Recipe Robot being saved into the Recipe Robot preference file.
  • Updated regular expression used to grab app descriptions from MacUpdate.
  • Fixed an issue that would cause certain GitHub URLs to be parsed incorrectly.

Removed

  • Removed internal support for piped subprocess commands, previously deprecated in v1.2.0.
  • Temporarily removed 403 error detection (usually due to rate-limiting) for BitBucket, GitHub, and SourceForge API calls.
  • Removed all calls to FoundationPlist in support of Python 3 transition. (Left FoundationPlist itself included in source, but will remove in a future release.)

Known Issues

  • On macOS 10.14 (and possibly earlier) an incorrect "certificate has expired" warning may appear in the output. (#165)
  • Progress indication during file download is no longer shown. I hope to restore this feature in a later version.
  • Script output does not appear in the app until the script is completely done processing. I hope to restore realtime output in a later version.
  • The "jss-upload" type is not addressable yet in the Recipe Robot app, only in the script.
  • Because Recipe Robot is now using plistlib instead of FoundationPlist, it's likely that some non-standard developer plist files may not successfully parse. This is because plistlib is stricter than FoundationPlist, and the same issue applies to AutoPkg itself (see autopkg#618 for an example).

v1.2.1

4 years ago

(The list below includes changes from current release 1.2.1 and skipped release 1.2.0.)

Added

  • Recipe Robot can now create recipes for basic non-app bundles (e.g. prefpane, plugin) contained in zip or dmg downloads.
  • A warning will be displayed if the "content-type" header of downloaded files seems unusual.
  • A warning will be displayed if a reliable version could not be determined (specifically from unsigned apps hosted by SourceForge). (#144)
  • A warning will be displayed if an installer app is detected (e.g. "Install Hazel.app").
  • Issue templates, Apache 2.0 license, and code of conduct added to GitHub project.
  • Recipe Robot warns if a code signing requirements is unnecessarily loose (e.g. anchor trusted).

Changed

  • Only download and pkg recipe types are enabled by default on first run.
  • Display recipe types in specified order when displaying configuration options. (#67)
  • Made Recipe Robot less likely to give "user-agent" related warnings unnecessarily.
  • Various automatic syntax updates to align with Swift 5.

Fixed

  • Resolved Xcode signing issue that resulted in "damaged" warning upon launching Recipe Robot 1.2.0. (#154)
  • Resolved a minor bug in which Recipe Robot would incorrectly treat a zip file as a tgz file.
  • Resolved an issue with SourceForge file regex. (#144)
  • Fixed rounding download progress to nearest 10% in app output.

Removed

  • Removed internal support for piped commands, in order to simplify shell-out process. Should have no effect on functionality.

v1.1.2

5 years ago

Changed

  • Recipe Robot will not add generically-named "Installer" or "Uninstaller" apps to the list of blocking applications in Munki recipes.
  • Sparkle download URLs are now collected even if there is no version provided in the Sparkle feed. (#134)
  • Recipe Robot now exits with an error if the /usr/local/bin/autopkg symlink is not present. (#134)
  • A few Python formatting changes to prepare for eventual adoption of an autoformatter.

Fixed

  • Resolved a bug that would cause certain URL types not to be recognized properly. (#136)
  • Fixed a bug that prevented expansion of tgz files. (#134)
  • Squashed a meta-error caused by failed AutoPkg searches for existing recipes.
  • Used better math to ensure first-time users will see their congratulations message.

Removed

  • The --github-token flag is now deprecated. Recipe Robot will automatically use the AutoPkg GitHub token file at ~/.autopkg_gh_token, if it exists.