chef/cookbooks/ruby_build/resources/homebrew_update.rb
Greg Karékinian b9cf396d42 Deploy akkounts without the application_git cookbook
Use the built-in git resource from Chef instead. poise/application does
not work on modern Chef.
2023-06-28 16:35:56 +02:00

78 lines
1.8 KiB
Ruby

unified_mode true if respond_to? :unified_mode
provides :homebrew_update
description 'Use the **homebrew_update** resource to manage Homebrew repository updates on MacOS.'
introduced '16.2'
examples <<~DOC
**Update the hombrew repository data at a specified interval**:
```ruby
homebrew_update 'all platforms' do
frequency 86400
action :periodic
end
```
**Update the Homebrew repository at the start of a Chef Infra Client run**:
```ruby
homebrew_update 'update'
```
DOC
# allow bare homebrew_update with no name
property :name, String, default: ''
property :frequency, Integer,
description: 'Determines how frequently (in seconds) Homebrew updates are made. Use this property when the `:periodic` action is specified.',
default: 86_400
default_action :periodic
action_class do
BREW_STAMP_DIR = '/var/lib/homebrew/periodic'.freeze
BREW_STAMP = "#{BREW_STAMP_DIR}/update-success-stamp".freeze
# Determines whether we need to run `homebrew update`
#
# @return [Boolean]
def brew_up_to_date?
::File.exist?(BREW_STAMP) &&
::File.mtime(BREW_STAMP) > Time.now - new_resource.frequency
end
def do_update
directory BREW_STAMP_DIR do
recursive true
end
file BREW_STAMP do
content "BREW::Update::Post-Invoke-Success\n"
action :create_if_missing
end
execute 'brew update' do
command %w(brew update)
default_env true
user Homebrew.owner
notifies :touch, "file[#{BREW_STAMP}]", :immediately
end
end
end
action :periodic do
return unless mac_os_x?
unless brew_up_to_date?
converge_by 'update new lists of packages' do
do_update
end
end
end
action :update do
return unless mac_os_x?
converge_by 'force update new lists of packages' do
do_update
end
end