class GithubSnapshot::Snapshot

Attributes

backup_folder[R]
git_clone_cmd[R]
github[R]
logger[R]
organizations[R]
password[R]
releases_to_keep[R]
s3_bucket[R]
time_now[R]
username[R]

Public Class Methods

new(config_file="config.yml") click to toggle source
# File lib/github_snapshot/snapshot.rb, line 39
def initialize(config_file="config.yml")
  config = YAML.load(File.read(config_file))

  @username      = config['username']
  @password      = config['password']
  @organizations = config['organizations']
  @s3_bucket     = config['s3bucket']
  @backup_folder = config['backup_folder']
  GithubSnapshot.releases_to_keep  = config['releases_to_keep']
  GithubSnapshot.git_clone_timeout = config['git_clone_timeout']

  @github = Github.new do |config|
    config.login           = username
    config.password        = password
    config.auto_pagination = true
  end
end

Public Instance Methods

backup() click to toggle source
# File lib/github_snapshot/snapshot.rb, line 57
def backup
  create_backup_folder
  download_from_s3
  backup_orgs
  upload_to_s3

  total_size = %x[ du -sh #{backup_folder} | cut -f1 ]
  GithubSnapshot.logger.info "backup finished, total size is #{total_size}"
end

Private Instance Methods

backup_orgs() click to toggle source
# File lib/github_snapshot/snapshot.rb, line 82
def backup_orgs
  Dir.chdir "#{backup_folder}"
  organizations.each do |org|
    GithubSnapshot.logger.info "#{org} - initializing"
    repos        = github.repos.list org: org
    organization = Organization.new org, repos
    organization.backup
    GithubSnapshot.logger.info "#{org} - ending"
  end
  Dir.chdir ".."
end
create_backup_folder() click to toggle source
# File lib/github_snapshot/snapshot.rb, line 68
def create_backup_folder
  GithubSnapshot.exec "mkdir -p #{backup_folder}"
end
download_from_s3() click to toggle source
# File lib/github_snapshot/snapshot.rb, line 72
def download_from_s3
  GithubSnapshot.logger.info "downloading fom s3"
  begin
    GithubSnapshot.exec "s3cmd sync --delete-removed --skip-existing s3://#{s3_bucket}/ #{backup_folder}/"
  rescue Utilities::ExecError
    GithubSnapshot.logger.info "s3cmd doesn't respect exit status\n"\
                               "there is a good chance that the sync was successful"
  end
end
upload_to_s3() click to toggle source
# File lib/github_snapshot/snapshot.rb, line 94
def upload_to_s3
  GithubSnapshot.logger.info "uploading to s3"
  GithubSnapshot.exec "s3cmd sync --delete-removed --skip-existing #{backup_folder}/ s3://#{s3_bucket}/"
end