Class: Mamiya::Agent::Tasks::Clean

Inherits:
Abstract
  • Object
show all
Defined in:
lib/mamiya/agent/tasks/clean.rb

Instance Attribute Summary

Attributes inherited from Abstract

#agent, #error, #logger, #task, #task_queue

Instance Method Summary collapse

Methods inherited from Abstract

#after, #before, #errored, #execute, identifier, #initialize, #raise_error?, #task_id

Constructor Details

This class inherits a constructor from Mamiya::Agent::Tasks::Abstract

Instance Method Details

#clean_packagesObject



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/mamiya/agent/tasks/clean.rb', line 17

def clean_packages
  package_victims.each do |app, victim|
    @logger.info "Cleaning package: remove #{victim}"
    File.unlink(victim) if File.exist?(victim)

    meta_victim = victim.sub(/\.tar\.gz\z/, '.json')
    if File.exist?(meta_victim)
      @logger.info "Cleaning up: remove #{meta_victim}"
      File.unlink(meta_victim)
    end

    # XXX: depends on FS structure
    package_name = File.basename(victim, '.tar.gz')

    # XXX: TODO: application->app, package->pkg
    agent.trigger('pkg', action: 'remove',
      application: app,
      package: package_name,
      coalesce: false,
    )
  end
end

#clean_prereleasesObject



53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/mamiya/agent/tasks/clean.rb', line 53

def clean_prereleases
  prerelease_victims.each do |app, victim|
    @logger.info "Cleaning prerelease: remove #{victim}"
    package_name = File.basename(victim)
    FileUtils.remove_entry_secure victim

    agent.trigger('prerelease', action: 'remove',
      app: app,
      pkg: package_name,
      coalesce: false,
    )
  end
end

#clean_releasesObject



80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/mamiya/agent/tasks/clean.rb', line 80

def clean_releases
  release_victims.each do |app, victim|
    @logger.info "Cleaning release: remove #{victim}"
    package_name = File.basename(victim)
    FileUtils.remove_entry_secure victim

    agent.trigger('release', action: 'remove',
      app: app,
      pkg: package_name,
      coalesce: false,
    )
  end
end

#package_victimsObject



40
41
42
43
44
45
46
47
48
49
# File 'lib/mamiya/agent/tasks/clean.rb', line 40

def package_victims
  Dir[File.join(config[:packages_dir], '*')].flat_map do |app|
    packages = Dir[File.join(app, "*.tar.gz")].
      sort_by { |_| [File.mtime(_), _] }

    packages[0...-(config[:keep_packages])].map do |victim|
      [File.basename(app), victim]
    end
  end
end

#prerelease_victimsObject



67
68
69
70
71
72
73
74
75
76
# File 'lib/mamiya/agent/tasks/clean.rb', line 67

def prerelease_victims
  Dir[File.join(config[:prereleases_dir], '*')].flat_map do |app|
    prereleases = Dir[File.join(app, "*")].
      sort_by { |_| [File.mtime(_), _] }

    prereleases[0...-(config[:keep_prereleases])].map do |victim|
      [File.basename(app), victim]
    end
  end
end

#release_victimsObject



94
95
96
97
98
99
100
101
102
103
104
105
106
107
# File 'lib/mamiya/agent/tasks/clean.rb', line 94

def release_victims
  config.applications.flat_map  do |name, app|
    next unless app[:deploy_to]
    releases = Dir[File.join(app[:deploy_to], 'releases', '*')].sort_by { |_| [File.mtime(_), _] }
    current = File.join(app[:deploy_to], 'current')
    current_realpath = File.exist?(current) ? File.realpath(current) : nil

    releases.reject!{ |rel| File.realpath(rel) == current_realpath }

    releases[0...-(config[:keep_releases])].map do |victim|
      [name, victim]
    end
  end
end

#runObject



8
9
10
11
12
13
# File 'lib/mamiya/agent/tasks/clean.rb', line 8

def run
  # XXX:
  clean_packages
  clean_prereleases
  clean_releases
end