github_snapshot 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- OGI2N2ZkYjNkY2I0MTZkNjFjYzcxYjMyOWU1NjE1NjU5ZjI3NGEwYQ==
4
+ YjA2YjVjZjU1YTFmNWNiNTdiMjg5OTVhM2ZlNjRiNTk1ZjczYjkwZQ==
5
5
  data.tar.gz: !binary |-
6
- YTFlNTIzZDBmNTVmOTUyYTQ1NmFiZjdjNjk0YzdjZDBiMmIxMjlkZA==
6
+ Yjc0MTg5ZDFiNzcyYTg3MWFlYWFiZjA1ZTRkMzg0ZjU5Yjk4NzU1ZA==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- YjMyMzIxOTg4MTI0MDkwYmU3YTUyY2E5MGFiNjI5YTMxZDM0YTcxN2RjNTVh
10
- MTczZjZlMzkxOGJhNmExNTVmNTU0YWU2MTk1MmQxOTliYTYyZmQ0MDAyMGNm
11
- MzRmMDM3NWFiOTNhMDcyOTVlOWFhM2JlNWQ0MjkxMWZhMDI0NjA=
9
+ OGIxYTA0MTJiZTkxMWJkNzJmMmVjNjg4Y2ZiMGMxNTA1MmI5NDE0NTc4YWQ4
10
+ YWYyNGFiNGNhOWQyNjAyMTcxMjk1YWQ3NTg0N2IxNzIwNTU0NTEyNGRiNTcy
11
+ NDczOWZiOTg0OTYyMTY0MmVjM2QxZGZjNzExYTM1N2E4M2ZlN2U=
12
12
  data.tar.gz: !binary |-
13
- ODZjYWZjY2IzM2I1NDcxOTMyY2RiZjQyYjUxMzE1ODg3YTAyMzViY2Q3ZjEx
14
- NGY5N2YwNmEwYTc0Mzg0NTJjOTZmMTU0MjEzNTViMDY0MzAxMWQyYmMzOGQ3
15
- NWFkNjg3Y2QxYzZkMGE4ZGVkYmViOGEwZjgzMjdmZTY5OGQ1ZjY=
13
+ OGRiMjViOTZiZmQ4ZTk3N2QxYWI1YjZjYWQ2YjNhNWQ4YWJjYzUzM2ViMTIw
14
+ OTEwNmIxMTJmMGE0ZjI4YmIwOGYzMmVjOTQwNTIzMzZjZTIxYzM4YTQxOTNl
15
+ Y2U5OWE0M2NjOWRlNmFiMGI5OWNhNTU0ZDk4YWJhYjRiZDlhZDg=
data/Gemfile CHANGED
@@ -1,4 +1,3 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- # Specify your gem's dependencies in github_snapshot.gemspec
4
3
  gemspec
data/README.md CHANGED
@@ -1,12 +1,36 @@
1
1
  # GithubSnapshot
2
2
 
3
- Snapshoting organization's repositories, including wikis
3
+ Snapshots multiple organizations GitHub repositories, including wikis, and syncs them to Amazon's S3. The gem also prunes old backups, keeping only the N most recent snapshots for each repository.
4
+
5
+ Please do keep in mind that we are not setting up an additional remote that is kept in sync. We do a `git clone --mirror` on each repository and then gzip it with a timestamp. Here is a typical (and reduced for clarity) tree structure of the backup folder/S3 bucket:
6
+
7
+ ```
8
+ github-backups/
9
+ ├── mozilla
10
+ │   ├── brick-201308260300.git.tar.gz
11
+ │   ├── brick-201308260300.wiki.git.tar.gz
12
+ │   ├── brick-201308270300.git.tar.gz
13
+ │   ├── brick-201308270300.wiki.git.tar.gz
14
+ │   ├── shumway-201308260300.git.tar.gz
15
+ │   ├── shumway-201308260300.wiki.git.tar.gz
16
+ │   ├── shumway-201308270300.git.tar.gz
17
+ │   ├── shumway-201308270300.wiki.git.tar.gz
18
+ └── innvent
19
+ ├── github_snapshot-201308260300.git.tar.gz
20
+ ├── github_snapshot-201308270300.git.tar.gz
21
+ ├── matross-201308260300.git.tar.gz
22
+ ├── matross-201308270300.git.tar.gz
23
+ └── jobs-201308260300.git.tar.gz
24
+ └── jobs-201308270300.git.tar.gz
25
+ ```
4
26
 
5
27
  ## Installation
6
28
 
7
29
  `github_snapshot` should be run as a command line tool, so it makes sense installing it globally
8
30
 
9
- $ gem install github_snapshot
31
+ ```bash
32
+ $ gem install github_snapshot
33
+ ```
10
34
 
11
35
  [`s3cmd`](https://github.com/s3tools/s3cmd) should also be installed on the system and properly configured.
12
36
 
@@ -37,6 +61,16 @@ $ github_snapshot
37
61
  $ echo -e "Host github.com\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config
38
62
  ```
39
63
 
64
+ ## To-Do
65
+
66
+ Although this gem was created to serve a very specific purpose at Innvent, here is the roadmap we have in mind:
67
+
68
+ - Tests;
69
+ - Backup GitHub issues;
70
+ - Flag based configuration, in addition to the YAML config file;
71
+ - Turn off S3 synchronization;
72
+ - Restore backups to GitHub;
73
+
40
74
  ## Contributing
41
75
 
42
76
  1. Fork it
@@ -8,9 +8,9 @@ Gem::Specification.new do |spec|
8
8
  spec.version = GithubSnapshot::VERSION
9
9
  spec.authors = ["Artur Rodrigues" , "Joao Sa"]
10
10
  spec.email = ["arturhoo@gmail.com"]
11
- spec.description = %q{Snapshoting organization's repositories, including wikis}
12
- spec.summary = %q{Snapshoting organization's repositories}
13
- spec.homepage = ""
11
+ spec.description = %q{Snapshots multiple organizations GitHub repositories, including wikis, and syncs them to Amazon's S3}
12
+ spec.summary = %q{Snapshots Github repositories}
13
+ spec.homepage = "https://github.com/innvent/github_snapshot"
14
14
  spec.license = "MIT"
15
15
 
16
16
  spec.files = `git ls-files`.split($/)
@@ -19,10 +19,8 @@ Gem::Specification.new do |spec|
19
19
  spec.require_paths = ["lib"]
20
20
 
21
21
  spec.add_development_dependency "bundler", "~> 1.3"
22
- spec.add_development_dependency "rake"
23
22
  spec.add_development_dependency "pry"
24
23
  spec.add_development_dependency "awesome_print"
25
24
 
26
25
  spec.add_dependency "github_api", "~> 0.10.2"
27
- spec.add_dependency "rake"
28
26
  end
@@ -4,11 +4,10 @@ module GithubSnapshot
4
4
 
5
5
  class Organization
6
6
 
7
- attr_reader :name, :folder, :repos
7
+ attr_reader :name, :repos
8
8
 
9
- def initialize(name, folder, repos)
9
+ def initialize(name, repos)
10
10
  @name = name
11
- @folder = folder
12
11
  @repos = repos
13
12
  end
14
13
 
@@ -12,7 +12,7 @@ module GithubSnapshot
12
12
 
13
13
  def initialize(repo, organization)
14
14
  @name = repo['name']
15
- @folder = "#{organization.folder}/#{@name}-#{GithubSnapshot.time_now}.git"
15
+ @folder = "#{@name}-#{GithubSnapshot.time_now}.git"
16
16
  @wiki_folder = @folder.gsub('.git', '.wiki.git')
17
17
  @ssh_url = repo['ssh_url']
18
18
  @wiki_ssh_url = @ssh_url.gsub('.git', '.wiki.git')
@@ -35,9 +35,11 @@ module GithubSnapshot
35
35
  return nil
36
36
  end
37
37
 
38
+ Dir.chdir "#{organization.name}"
38
39
  clone
39
40
  clone_wiki if self.has_wiki?
40
41
  prune_old_backups
42
+ Dir.chdir ".."
41
43
 
42
44
  GithubSnapshot.logger.info "#{canonical_name} - success"
43
45
  end
@@ -66,13 +68,13 @@ module GithubSnapshot
66
68
 
67
69
  def prune_old_backups
68
70
  GithubSnapshot.logger.info "#{canonical_name} - pruning old backups"
69
- file_regex = "#{organization.folder}/#{name}*"
71
+ file_regex = "#{name}*"
70
72
  zipped_bkps = FileList[file_regex].exclude(/wiki/)
71
73
  zipped_bkps.sort[0..-(GithubSnapshot.releases_to_keep + 1)].each do |file|
72
74
  File.delete file
73
75
  end if zipped_bkps.length > GithubSnapshot.releases_to_keep
74
76
 
75
- wiki_regex = "#{organization.name}/#{name}*wiki*"
77
+ wiki_regex = "#{name}*wiki*"
76
78
  zipped_wikis = FileList[wiki_regex]
77
79
  zipped_wikis.sort[0..-(GithubSnapshot.releases_to_keep + 1)].each do |file|
78
80
  File.delete file
@@ -79,13 +79,15 @@ module GithubSnapshot
79
79
  end
80
80
 
81
81
  def backup_orgs
82
+ Dir.chdir "#{backup_folder}"
82
83
  organizations.each do |org|
83
84
  GithubSnapshot.logger.info "#{org} - initializing"
84
85
  repos = github.repos.list org: org
85
- organization = Organization.new org, "#{backup_folder}/#{org}", repos
86
+ organization = Organization.new org, repos
86
87
  organization.backup
87
88
  GithubSnapshot.logger.info "#{org} - ending"
88
89
  end
90
+ Dir.chdir ".."
89
91
  end
90
92
 
91
93
  def upload_to_s3
@@ -1,3 +1,3 @@
1
1
  module GithubSnapshot
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: github_snapshot
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Artur Rodrigues
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-08-27 00:00:00.000000000 Z
12
+ date: 2013-08-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -25,20 +25,6 @@ dependencies:
25
25
  - - ~>
26
26
  - !ruby/object:Gem::Version
27
27
  version: '1.3'
28
- - !ruby/object:Gem::Dependency
29
- name: rake
30
- requirement: !ruby/object:Gem::Requirement
31
- requirements:
32
- - - ! '>='
33
- - !ruby/object:Gem::Version
34
- version: '0'
35
- type: :development
36
- prerelease: false
37
- version_requirements: !ruby/object:Gem::Requirement
38
- requirements:
39
- - - ! '>='
40
- - !ruby/object:Gem::Version
41
- version: '0'
42
28
  - !ruby/object:Gem::Dependency
43
29
  name: pry
44
30
  requirement: !ruby/object:Gem::Requirement
@@ -81,21 +67,8 @@ dependencies:
81
67
  - - ~>
82
68
  - !ruby/object:Gem::Version
83
69
  version: 0.10.2
84
- - !ruby/object:Gem::Dependency
85
- name: rake
86
- requirement: !ruby/object:Gem::Requirement
87
- requirements:
88
- - - ! '>='
89
- - !ruby/object:Gem::Version
90
- version: '0'
91
- type: :runtime
92
- prerelease: false
93
- version_requirements: !ruby/object:Gem::Requirement
94
- requirements:
95
- - - ! '>='
96
- - !ruby/object:Gem::Version
97
- version: '0'
98
- description: Snapshoting organization's repositories, including wikis
70
+ description: Snapshots multiple organizations GitHub repositories, including wikis,
71
+ and syncs them to Amazon's S3
99
72
  email:
100
73
  - arturhoo@gmail.com
101
74
  executables:
@@ -116,7 +89,7 @@ files:
116
89
  - lib/github_snapshot/snapshot.rb
117
90
  - lib/github_snapshot/utilities.rb
118
91
  - lib/github_snapshot/version.rb
119
- homepage: ''
92
+ homepage: https://github.com/innvent/github_snapshot
120
93
  licenses:
121
94
  - MIT
122
95
  metadata: {}
@@ -139,5 +112,5 @@ rubyforge_project:
139
112
  rubygems_version: 2.0.7
140
113
  signing_key:
141
114
  specification_version: 4
142
- summary: Snapshoting organization's repositories
115
+ summary: Snapshots Github repositories
143
116
  test_files: []