travis-backup 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +7 -0
  3. data/.travis.yml +33 -0
  4. data/Gemfile +6 -0
  5. data/Gemfile.lock +212 -0
  6. data/README.md +109 -0
  7. data/Rakefile +18 -0
  8. data/bin/bundle +114 -0
  9. data/bin/console +8 -0
  10. data/bin/rails +5 -0
  11. data/bin/rake +7 -0
  12. data/bin/setup +36 -0
  13. data/bin/spring +14 -0
  14. data/bin/travis_backup +7 -0
  15. data/bin/yarn +17 -0
  16. data/config/application.rb +22 -0
  17. data/config/boot.rb +4 -0
  18. data/config/cable.yml +10 -0
  19. data/config/credentials.yml.enc +1 -0
  20. data/config/database.yml +20 -0
  21. data/config/environment.rb +5 -0
  22. data/config/environments/development.rb +76 -0
  23. data/config/environments/production.rb +120 -0
  24. data/config/environments/test.rb +60 -0
  25. data/config/initializers/application_controller_renderer.rb +8 -0
  26. data/config/initializers/assets.rb +14 -0
  27. data/config/initializers/backtrace_silencers.rb +8 -0
  28. data/config/initializers/content_security_policy.rb +30 -0
  29. data/config/initializers/cookies_serializer.rb +5 -0
  30. data/config/initializers/filter_parameter_logging.rb +6 -0
  31. data/config/initializers/inflections.rb +16 -0
  32. data/config/initializers/mime_types.rb +4 -0
  33. data/config/initializers/permissions_policy.rb +11 -0
  34. data/config/initializers/wrap_parameters.rb +14 -0
  35. data/config/locales/en.yml +33 -0
  36. data/config/puma.rb +43 -0
  37. data/config/routes.rb +3 -0
  38. data/config/settings.yml +7 -0
  39. data/config/spring.rb +6 -0
  40. data/config.ru +5 -0
  41. data/db/schema.sql +3502 -0
  42. data/dump/.keep +0 -0
  43. data/lib/config.rb +127 -0
  44. data/lib/models/build.rb +13 -0
  45. data/lib/models/job.rb +13 -0
  46. data/lib/models/model.rb +8 -0
  47. data/lib/models/organization.rb +7 -0
  48. data/lib/models/repository.rb +11 -0
  49. data/lib/models/user.rb +7 -0
  50. data/lib/travis-backup.rb +134 -0
  51. data/log/.keep +0 -0
  52. data/package.json +11 -0
  53. data/tmp/.keep +0 -0
  54. data/travis-backup.gemspec +29 -0
  55. data/vendor/.keep +0 -0
  56. metadata +286 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 7b88fafbc38de9343ca5ead6600c182858c39b14210a60f05081543bf74c8964
4
+ data.tar.gz: d45a8734295f8dfb01675e333d99c6e19b441fd2290be042ced8b0e2d3e161c8
5
+ SHA512:
6
+ metadata.gz: 879009e7cbffc3be645bc12746ce25598b9d013ca81e0aa18370644c6c5bfba3d300d67fcd297e36fc0f941c41a0250cbd50fb3426211ae655e16c0f006b2a56
7
+ data.tar.gz: 316429ee0dd693f3ba737abbc341f0afef919c4ff85d677fc2652dc71f42b6ba6a76580526f0f42f8bff8ed9fc28fbd0743f3157f559209f19844899ee13b421
data/.gitignore ADDED
@@ -0,0 +1,7 @@
1
+ tmp/*
2
+ log/*
3
+ dump/*
4
+ !tmp/.keep
5
+ !log/.keep
6
+ !dump/.keep
7
+ *.gem
data/.travis.yml ADDED
@@ -0,0 +1,33 @@
1
+ rvm: 2.7.2
2
+ cache: bundler
3
+
4
+ services:
5
+ - redis
6
+
7
+ env:
8
+ global:
9
+ - PATH=/snap/bin:$PATH
10
+
11
+ jobs:
12
+ include:
13
+ - stage: "testing time"
14
+ script: bundle exec rspec
15
+
16
+ dist: xenial
17
+
18
+ before_install:
19
+ - gem install bundler
20
+ - sudo apt-get install -yq --no-install-suggests --no-install-recommends postgresql-common
21
+ - sudo service postgresql stop
22
+ - sudo apt install -yq --no-install-suggests --no-install-recommends postgresql-11 postgresql-client-11
23
+ - sed -e 's/^port.*/port = 5432/' /etc/postgresql/11/main/postgresql.conf > postgresql.conf
24
+ - sudo chown postgres postgresql.conf
25
+ - sudo mv postgresql.conf /etc/postgresql/11/main
26
+ - sudo cp /etc/postgresql/{10,11}/main/pg_hba.conf
27
+ - sudo service postgresql start 11
28
+
29
+ before_script:
30
+ - psql --version
31
+ - psql -c 'CREATE DATABASE travis_test;' -U postgres
32
+ - psql -t -c "SELECT 1 FROM pg_roles WHERE rolname='travis'" -U postgres | grep 1 || psql -c 'CREATE ROLE travis SUPERUSER LOGIN CREATEDB;' -U postgres
33
+ - psql -f db/schema.sql -v ON_ERROR_STOP=1 travis_test
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+ git_source(:github) { |repo| "https://github.com/#{repo}.git" }
5
+
6
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,212 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ travis-backup (0.0.1)
5
+ activerecord
6
+ bootsnap
7
+ pg
8
+ pry
9
+ rails
10
+ tzinfo-data
11
+
12
+ GEM
13
+ remote: https://rubygems.org/
14
+ specs:
15
+ actioncable (6.1.4.1)
16
+ actionpack (= 6.1.4.1)
17
+ activesupport (= 6.1.4.1)
18
+ nio4r (~> 2.0)
19
+ websocket-driver (>= 0.6.1)
20
+ actionmailbox (6.1.4.1)
21
+ actionpack (= 6.1.4.1)
22
+ activejob (= 6.1.4.1)
23
+ activerecord (= 6.1.4.1)
24
+ activestorage (= 6.1.4.1)
25
+ activesupport (= 6.1.4.1)
26
+ mail (>= 2.7.1)
27
+ actionmailer (6.1.4.1)
28
+ actionpack (= 6.1.4.1)
29
+ actionview (= 6.1.4.1)
30
+ activejob (= 6.1.4.1)
31
+ activesupport (= 6.1.4.1)
32
+ mail (~> 2.5, >= 2.5.4)
33
+ rails-dom-testing (~> 2.0)
34
+ actionpack (6.1.4.1)
35
+ actionview (= 6.1.4.1)
36
+ activesupport (= 6.1.4.1)
37
+ rack (~> 2.0, >= 2.0.9)
38
+ rack-test (>= 0.6.3)
39
+ rails-dom-testing (~> 2.0)
40
+ rails-html-sanitizer (~> 1.0, >= 1.2.0)
41
+ actiontext (6.1.4.1)
42
+ actionpack (= 6.1.4.1)
43
+ activerecord (= 6.1.4.1)
44
+ activestorage (= 6.1.4.1)
45
+ activesupport (= 6.1.4.1)
46
+ nokogiri (>= 1.8.5)
47
+ actionview (6.1.4.1)
48
+ activesupport (= 6.1.4.1)
49
+ builder (~> 3.1)
50
+ erubi (~> 1.4)
51
+ rails-dom-testing (~> 2.0)
52
+ rails-html-sanitizer (~> 1.1, >= 1.2.0)
53
+ activejob (6.1.4.1)
54
+ activesupport (= 6.1.4.1)
55
+ globalid (>= 0.3.6)
56
+ activemodel (6.1.4.1)
57
+ activesupport (= 6.1.4.1)
58
+ activerecord (6.1.4.1)
59
+ activemodel (= 6.1.4.1)
60
+ activesupport (= 6.1.4.1)
61
+ activestorage (6.1.4.1)
62
+ actionpack (= 6.1.4.1)
63
+ activejob (= 6.1.4.1)
64
+ activerecord (= 6.1.4.1)
65
+ activesupport (= 6.1.4.1)
66
+ marcel (~> 1.0.0)
67
+ mini_mime (>= 1.1.0)
68
+ activesupport (6.1.4.1)
69
+ concurrent-ruby (~> 1.0, >= 1.0.2)
70
+ i18n (>= 1.6, < 2)
71
+ minitest (>= 5.1)
72
+ tzinfo (~> 2.0)
73
+ zeitwerk (~> 2.3)
74
+ ast (2.4.2)
75
+ bootsnap (1.7.7)
76
+ msgpack (~> 1.0)
77
+ brakeman (5.1.1)
78
+ builder (3.2.4)
79
+ byebug (11.1.3)
80
+ coderay (1.1.3)
81
+ concurrent-ruby (1.1.9)
82
+ crass (1.0.6)
83
+ diff-lcs (1.4.4)
84
+ erubi (1.10.0)
85
+ factory_bot (6.2.0)
86
+ activesupport (>= 5.0.0)
87
+ ffi (1.15.3)
88
+ globalid (0.5.2)
89
+ activesupport (>= 5.0)
90
+ i18n (1.8.10)
91
+ concurrent-ruby (~> 1.0)
92
+ jaro_winkler (1.5.4)
93
+ listen (3.7.0)
94
+ rb-fsevent (~> 0.10, >= 0.10.3)
95
+ rb-inotify (~> 0.9, >= 0.9.10)
96
+ loofah (2.12.0)
97
+ crass (~> 1.0.2)
98
+ nokogiri (>= 1.5.9)
99
+ mail (2.7.1)
100
+ mini_mime (>= 0.1.1)
101
+ marcel (1.0.1)
102
+ method_source (1.0.0)
103
+ mini_mime (1.1.1)
104
+ mini_portile2 (2.6.1)
105
+ minitest (5.14.4)
106
+ msgpack (1.4.2)
107
+ nio4r (2.5.8)
108
+ nokogiri (1.12.3)
109
+ mini_portile2 (~> 2.6.1)
110
+ racc (~> 1.4)
111
+ parallel (1.20.1)
112
+ parser (3.0.2.0)
113
+ ast (~> 2.4.1)
114
+ pg (1.2.3)
115
+ pry (0.14.1)
116
+ coderay (~> 1.1)
117
+ method_source (~> 1.0)
118
+ racc (1.5.2)
119
+ rack (2.2.3)
120
+ rack-test (1.1.0)
121
+ rack (>= 1.0, < 3)
122
+ rails (6.1.4.1)
123
+ actioncable (= 6.1.4.1)
124
+ actionmailbox (= 6.1.4.1)
125
+ actionmailer (= 6.1.4.1)
126
+ actionpack (= 6.1.4.1)
127
+ actiontext (= 6.1.4.1)
128
+ actionview (= 6.1.4.1)
129
+ activejob (= 6.1.4.1)
130
+ activemodel (= 6.1.4.1)
131
+ activerecord (= 6.1.4.1)
132
+ activestorage (= 6.1.4.1)
133
+ activesupport (= 6.1.4.1)
134
+ bundler (>= 1.15.0)
135
+ railties (= 6.1.4.1)
136
+ sprockets-rails (>= 2.0.0)
137
+ rails-dom-testing (2.0.3)
138
+ activesupport (>= 4.2.0)
139
+ nokogiri (>= 1.6)
140
+ rails-html-sanitizer (1.4.1)
141
+ loofah (~> 2.3)
142
+ railties (6.1.4.1)
143
+ actionpack (= 6.1.4.1)
144
+ activesupport (= 6.1.4.1)
145
+ method_source
146
+ rake (>= 0.13)
147
+ thor (~> 1.0)
148
+ rainbow (3.0.0)
149
+ rake (13.0.6)
150
+ rb-fsevent (0.11.0)
151
+ rb-inotify (0.10.1)
152
+ ffi (~> 1.0)
153
+ rspec-core (3.10.1)
154
+ rspec-support (~> 3.10.0)
155
+ rspec-expectations (3.10.1)
156
+ diff-lcs (>= 1.2.0, < 2.0)
157
+ rspec-support (~> 3.10.0)
158
+ rspec-mocks (3.10.2)
159
+ diff-lcs (>= 1.2.0, < 2.0)
160
+ rspec-support (~> 3.10.0)
161
+ rspec-rails (5.0.2)
162
+ actionpack (>= 5.2)
163
+ activesupport (>= 5.2)
164
+ railties (>= 5.2)
165
+ rspec-core (~> 3.10)
166
+ rspec-expectations (~> 3.10)
167
+ rspec-mocks (~> 3.10)
168
+ rspec-support (~> 3.10)
169
+ rspec-support (3.10.2)
170
+ rubocop (0.75.1)
171
+ jaro_winkler (~> 1.5.1)
172
+ parallel (~> 1.10)
173
+ parser (>= 2.6)
174
+ rainbow (>= 2.2.2, < 4.0)
175
+ ruby-progressbar (~> 1.7)
176
+ unicode-display_width (>= 1.4.0, < 1.7)
177
+ rubocop-rspec (1.41.0)
178
+ rubocop (>= 0.68.1)
179
+ ruby-progressbar (1.11.0)
180
+ sprockets (4.0.2)
181
+ concurrent-ruby (~> 1.0)
182
+ rack (> 1, < 3)
183
+ sprockets-rails (3.2.2)
184
+ actionpack (>= 4.0)
185
+ activesupport (>= 4.0)
186
+ sprockets (>= 3.0.0)
187
+ thor (1.1.0)
188
+ tzinfo (2.0.4)
189
+ concurrent-ruby (~> 1.0)
190
+ tzinfo-data (1.2021.1)
191
+ tzinfo (>= 1.0.0)
192
+ unicode-display_width (1.6.1)
193
+ websocket-driver (0.7.5)
194
+ websocket-extensions (>= 0.1.0)
195
+ websocket-extensions (0.1.5)
196
+ zeitwerk (2.4.2)
197
+
198
+ PLATFORMS
199
+ ruby
200
+
201
+ DEPENDENCIES
202
+ brakeman
203
+ byebug
204
+ factory_bot
205
+ listen
206
+ rspec-rails
207
+ rubocop (~> 0.75.1)
208
+ rubocop-rspec
209
+ travis-backup!
210
+
211
+ BUNDLED WITH
212
+ 2.1.4
data/README.md ADDED
@@ -0,0 +1,109 @@
1
+ # README
2
+
3
+ *travis-backup* is an application that removes builds and their corresponding jobs
4
+ and exports them (optionally) to json files.
5
+
6
+ ### Installation and run
7
+
8
+ You can install the gem using
9
+
10
+ `gem install travis-backup`
11
+
12
+ Next you can run it in your app like
13
+
14
+ ```
15
+ require 'travis-backup'
16
+
17
+ backup = Backup.new
18
+ backup.run
19
+
20
+ # or with configs:
21
+
22
+ backup = Backup.new(
23
+ if_backup: true,
24
+ limit: 500,
25
+ threshold: 12,
26
+ files_location: './my_folder/dump',
27
+ database_url: 'postgresql://postgres:pass@localhost:5432/my_db'
28
+ )
29
+ backup.run
30
+ ```
31
+
32
+ You can also run backup only for given user, organisation or repository:
33
+
34
+ ```
35
+ backup = Backup.new
36
+ backup.run(user_id: 1)
37
+ # or
38
+ backup.run(org_id: 1)
39
+ # or
40
+ backup.run(repo_id: 1)
41
+ ```
42
+
43
+ ### Configuration
44
+
45
+ One of the ways you can configure your export is a file `config/settinigs.yml` that you should place in your app's main directory. The gem uses the properties in following format:
46
+
47
+ ```
48
+ backup:
49
+ if_backup: true # when false, removes data without saving it to file
50
+ dry_run: false # when true, only prints in console what data should be backuped and deleted
51
+ limit: 1000 # builds limit for one backup file
52
+ threshold: 6 # number of months from now - data younger than this time won't be backuped
53
+ files_location: './dump' # path of the folder in which backup files will be placed
54
+ user_id # run only for given user
55
+ org_id # run only for given organization
56
+ repo_id # run only for given repository
57
+ ```
58
+
59
+ You can also set these properties as hash arguments while creating `Backup` instance or use env vars corresponding to them: `IF_BACKUP`, `BACKUP_DRY_RUN`, `BACKUP_LIMIT`, `BACKUP_THRESHOLD`, `BACKUP_FILES_LOCATION`, `USER_ID`, `ORG_ID`, `REPO_ID`.
60
+
61
+ You should also specify your database url. You can do this the standard way in `config/database.yml` file, setting the `database_url` hash argument while creating `Backup` instance or using the `DATABASE_URL` env var. Your database should be consistent with the Travis 2.2 database schema.
62
+
63
+ ### How to run the test suite
64
+
65
+ You can run the test after cloning this repository. Next you should call
66
+
67
+ ```
68
+ bundle install
69
+ ```
70
+
71
+ and
72
+
73
+ ```
74
+ bundle exec rspec
75
+ ```
76
+
77
+ To make tests working properly you should also ensure the database connection string for an empty test database. You can set it as `DATABASE_URL` environment variable or in `config/database.yml`.
78
+
79
+ **Warning: this database will be cleaned during tests, so ensure that it includes no important data.**
80
+
81
+ #### Using as standalone application
82
+
83
+ After cloning this repo you can also run it as a standalone app using
84
+
85
+ ```
86
+ bundle exec bin/travis_backup
87
+ ```
88
+
89
+ You can also pass arguments:
90
+
91
+ ```
92
+ first argument, no flag # database url
93
+ -b, --backup # when not present, removes data without saving it to file
94
+ -d, --dry_run # only prints in console what data will be backuped and deleted
95
+ -l, --limit LIMIT # builds limit for one backup file
96
+ -t, --threshold MONTHS # number of months from now - data younger than this time won't be backuped
97
+ -f, --files_location PATH # path of the folder in which backup files will be placed
98
+ -u, --user_id ID # run only for given user
99
+ -o, --org_id ID # run only for given organization
100
+ -r, --repo_id ID # run only for given repository
101
+
102
+ # example:
103
+
104
+ bundle exec bin/travis_backup 'postgres://user:pass@localhost:5432/my_db' -b
105
+ ```
106
+
107
+ ### Ruby version
108
+
109
+ 2.7.2
data/Rakefile ADDED
@@ -0,0 +1,18 @@
1
+ namespace :backup do
2
+ desc 'Backup all daily outdated build/job'
3
+ task :cron do
4
+ $: << 'lib'
5
+ require 'travis-backup'
6
+
7
+ Backup.new.run
8
+ end
9
+ end
10
+
11
+ namespace :spec do
12
+ desc 'Run all specs'
13
+ task :all do
14
+ sh 'bundle exec rspec spec'
15
+ end
16
+ end
17
+
18
+ task :default => :'backup:cron'
data/bin/bundle ADDED
@@ -0,0 +1,114 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ #
5
+ # This file was generated by Bundler.
6
+ #
7
+ # The application 'bundle' is installed as part of a gem, and
8
+ # this file is here to facilitate running it.
9
+ #
10
+
11
+ require "rubygems"
12
+
13
+ m = Module.new do
14
+ module_function
15
+
16
+ def invoked_as_script?
17
+ File.expand_path($0) == File.expand_path(__FILE__)
18
+ end
19
+
20
+ def env_var_version
21
+ ENV["BUNDLER_VERSION"]
22
+ end
23
+
24
+ def cli_arg_version
25
+ return unless invoked_as_script? # don't want to hijack other binstubs
26
+ return unless "update".start_with?(ARGV.first || " ") # must be running `bundle update`
27
+ bundler_version = nil
28
+ update_index = nil
29
+ ARGV.each_with_index do |a, i|
30
+ if update_index && update_index.succ == i && a =~ Gem::Version::ANCHORED_VERSION_PATTERN
31
+ bundler_version = a
32
+ end
33
+ next unless a =~ /\A--bundler(?:[= ](#{Gem::Version::VERSION_PATTERN}))?\z/
34
+ bundler_version = $1
35
+ update_index = i
36
+ end
37
+ bundler_version
38
+ end
39
+
40
+ def gemfile
41
+ gemfile = ENV["BUNDLE_GEMFILE"]
42
+ return gemfile if gemfile && !gemfile.empty?
43
+
44
+ File.expand_path("../../Gemfile", __FILE__)
45
+ end
46
+
47
+ def lockfile
48
+ lockfile =
49
+ case File.basename(gemfile)
50
+ when "gems.rb" then gemfile.sub(/\.rb$/, gemfile)
51
+ else "#{gemfile}.lock"
52
+ end
53
+ File.expand_path(lockfile)
54
+ end
55
+
56
+ def lockfile_version
57
+ return unless File.file?(lockfile)
58
+ lockfile_contents = File.read(lockfile)
59
+ return unless lockfile_contents =~ /\n\nBUNDLED WITH\n\s{2,}(#{Gem::Version::VERSION_PATTERN})\n/
60
+ Regexp.last_match(1)
61
+ end
62
+
63
+ def bundler_version
64
+ @bundler_version ||=
65
+ env_var_version || cli_arg_version ||
66
+ lockfile_version
67
+ end
68
+
69
+ def bundler_requirement
70
+ return "#{Gem::Requirement.default}.a" unless bundler_version
71
+
72
+ bundler_gem_version = Gem::Version.new(bundler_version)
73
+
74
+ requirement = bundler_gem_version.approximate_recommendation
75
+
76
+ return requirement unless Gem::Version.new(Gem::VERSION) < Gem::Version.new("2.7.0")
77
+
78
+ requirement += ".a" if bundler_gem_version.prerelease?
79
+
80
+ requirement
81
+ end
82
+
83
+ def load_bundler!
84
+ ENV["BUNDLE_GEMFILE"] ||= gemfile
85
+
86
+ activate_bundler
87
+ end
88
+
89
+ def activate_bundler
90
+ gem_error = activation_error_handling do
91
+ gem "bundler", bundler_requirement
92
+ end
93
+ return if gem_error.nil?
94
+ require_error = activation_error_handling do
95
+ require "bundler/version"
96
+ end
97
+ return if require_error.nil? && Gem::Requirement.new(bundler_requirement).satisfied_by?(Gem::Version.new(Bundler::VERSION))
98
+ warn "Activating bundler (#{bundler_requirement}) failed:\n#{gem_error.message}\n\nTo install the version of bundler this project requires, run `gem install bundler -v '#{bundler_requirement}'`"
99
+ exit 42
100
+ end
101
+
102
+ def activation_error_handling
103
+ yield
104
+ nil
105
+ rescue StandardError, LoadError => e
106
+ e
107
+ end
108
+ end
109
+
110
+ m.load_bundler!
111
+
112
+ if m.invoked_as_script?
113
+ load Gem.bin_path("bundler", "bundle")
114
+ end