Avantgarde: get notified of updates to packages

Avantgarde checks your projects’ dependencies for outdated packages and informs you by e-mail or on the console. It works with Homebrew, Rubygems, and NPM. Both the package management systems as well as the notification methods are easily extendable.

It is a fork of CheckZilla by Michael Bensoussan, which is no longer maintained.

Github

For issue tracking and more see the github repository.

Quickstart

$> gem install avantgarde
$> avantgarde -i
$> <edit config file at ~/.avantgarde/config.rb>
$> avantgarde

The annotated sample configuration with all available checkers, notifiers and option:


Avantgarde::Model.new('%<new_updates> updates available for %<hostname>') do

  ## Checkers find updated packages for your system or projects
  # Check for updates to a project's Rubygem dependencies

   check_updates :rubygem do |my_project|
     my_project.path = "/Users/me/projects/my_project"
   end

  # Checkers can be used multiple times to cover multiple projects

  check_updates :rubygem do |my_other_project|
    my_other_project.path = "/Users/me/projects/my_other_project"
  end

 # Checking for updated npm packages

  check_updates :npm do |hipster_project|
     hipster_project.path = "/Users/me/Desktop/playground/my_node_project"
   end

  # Checks for HomeBrew updates. No options

  check_updates :homebrew

  ## Notifiers define how you will be informed of changes

  # Send notification by email

  notify_by :email do |email|
    email.pony_settings = {
      to: 'me@test.com',

      # Available named references are
      # %{new_updates} The number of newly found updates to defined dependencies
      # %{old_updates} The number of available updates that were already included in previous notifications
      # %{hostname}
      # Default is the model's name as specified at the beginning of this file

      subject: '%<new_updates> updates available',
      from: 'theMachine@test.com',
      via: :smtp,
      via_options: {
        address:              'smtp.gmail.com',
        port:                 '587',
        enable_starttls_auto: true,
        user_name:            'me_me_me',
        password:             '********',
        authentication:       :plain,
        domain:               "localhost.localdomain"
      }
    }
  end

  # A notfier that prints the report to STDOUT

  notify_by :console do |console|
    # default: console.template = 'console.ansi.erb'
  end
end

Checkers

Checkers are defined by extending Avantgarde::Checker::BaseChecker. They are required to implement two methods:

# Override this method and implement the specific
      # command to get outdated package information
      # @example return `cd #{@path}; npm outdated --silent`
      # @return [String] usually the output of a command like npm outdated, to be processed via regex in the next step
      def native_outdated_command_results
        fail "get_outdated needs to be overridden for a specific checker"
      end

      # extracts information about outdated packages from the raw results
      # @param [String] raw_results usually produced by ::native_outdated_command_results
      # @return [Hash] {'package_name_1': {versions: {installed: '1.0.0', latested: '1.1.0', wanted: '1.0.5'}}}
      def extract_package_information(raw_results)
        fail "extract_package_information needs to be overridden for a specific checker and do something with #{raw_results}"
      end

Notifiers

Notifiers are defined by inheriting from Avantgarde::Notifier::Console.

TODO

Helping out

Avantgarde: Get Notified of Updates to Packages - mw