travis-backup 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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