legion-data 0.2.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rubocop-analysis.yml +28 -0
  3. data/.github/workflows/sourcehawk-scan.yml +20 -0
  4. data/.gitignore +4 -2
  5. data/.rubocop.yml +6 -14
  6. data/CHANGELOG.md +2 -9
  7. data/CODE_OF_CONDUCT.md +75 -0
  8. data/CONTRIBUTING.md +55 -0
  9. data/Gemfile +7 -1
  10. data/INDIVIDUAL_CONTRIBUTOR_LICENSE.md +30 -0
  11. data/LICENSE +201 -0
  12. data/NOTICE.txt +9 -0
  13. data/README.md +60 -23
  14. data/SECURITY.md +9 -0
  15. data/attribution.txt +1 -0
  16. data/legion-data.gemspec +22 -38
  17. data/lib/legion/data.rb +18 -21
  18. data/lib/legion/data/connection.rb +29 -26
  19. data/lib/legion/data/migration.rb +3 -3
  20. data/lib/legion/data/migrations/001_add_schema_columns.rb +1 -1
  21. data/lib/legion/data/migrations/002_add_nodes.rb +20 -0
  22. data/lib/legion/data/migrations/003_add_settings.rb +18 -0
  23. data/lib/legion/data/migrations/004_add_extensions.rb +25 -0
  24. data/lib/legion/data/migrations/005_add_runners.rb +21 -0
  25. data/lib/legion/data/migrations/006_add_functions.rb +23 -0
  26. data/lib/legion/data/migrations/007_add_default_extensions.rb +25 -0
  27. data/lib/legion/data/migrations/008_add_tasks.rb +29 -0
  28. data/lib/legion/data/model.rb +5 -2
  29. data/lib/legion/data/models/extension.rb +0 -2
  30. data/lib/legion/data/models/function.rb +2 -6
  31. data/lib/legion/data/models/node.rb +1 -3
  32. data/lib/legion/data/models/runner.rb +0 -2
  33. data/lib/legion/data/models/setting.rb +0 -0
  34. data/lib/legion/data/models/task.rb +0 -2
  35. data/lib/legion/data/models/task_log.rb +0 -0
  36. data/lib/legion/data/settings.rb +25 -19
  37. data/lib/legion/data/version.rb +1 -1
  38. data/sonar-project.properties +12 -0
  39. data/sourcehawk.yml +4 -0
  40. metadata +41 -189
  41. data/.circleci/config.yml +0 -148
  42. data/.rspec +0 -1
  43. data/Rakefile +0 -55
  44. data/bin/console +0 -14
  45. data/bin/setup +0 -8
  46. data/bitbucket-pipelines.yml +0 -26
  47. data/lib/legion/data/connections/base.rb +0 -61
  48. data/lib/legion/data/connections/jdbc.rb +0 -21
  49. data/lib/legion/data/connections/mysql.rb +0 -26
  50. data/lib/legion/data/connections/mysql2.rb +0 -11
  51. data/lib/legion/data/connections/mysql_base.rb +0 -19
  52. data/lib/legion/data/migrations/002_add_users.rb +0 -17
  53. data/lib/legion/data/migrations/003_add_groups.rb +0 -16
  54. data/lib/legion/data/migrations/004_add_chains.rb +0 -25
  55. data/lib/legion/data/migrations/005_add_envs.rb +0 -24
  56. data/lib/legion/data/migrations/006_add_dcs.rb +0 -24
  57. data/lib/legion/data/migrations/007_add_nodes.rb +0 -26
  58. data/lib/legion/data/migrations/008_add_settings.rb +0 -18
  59. data/lib/legion/data/migrations/009_add_extensions.rb +0 -25
  60. data/lib/legion/data/migrations/010_add_runners.rb +0 -21
  61. data/lib/legion/data/migrations/011_add_functions.rb +0 -29
  62. data/lib/legion/data/migrations/012_add_tasks.rb +0 -25
  63. data/lib/legion/data/migrations/013_add_task_logs.rb +0 -17
  64. data/lib/legion/data/migrations/014_add_relationships.rb +0 -27
  65. data/lib/legion/data/models/chain.rb +0 -13
  66. data/lib/legion/data/models/datacenter.rb +0 -13
  67. data/lib/legion/data/models/environment.rb +0 -13
  68. data/lib/legion/data/models/group.rb +0 -10
  69. data/lib/legion/data/models/namespace.rb +0 -14
  70. data/lib/legion/data/models/relationship.rb +0 -18
  71. data/lib/legion/data/models/user.rb +0 -10
data/.circleci/config.yml DELETED
@@ -1,148 +0,0 @@
1
- version: 2 # use CircleCI 2.0
2
- jobs:
3
- "rubocop":
4
- docker:
5
- - image: circleci/ruby:2.4-node
6
- steps:
7
- - checkout
8
- - run: gem install rubocop
9
- - run: bundle install
10
- - run:
11
- name: Run Rubocop
12
- command: rubocop
13
- - store_test_results:
14
- path: test_results
15
- "ruby-2.3":
16
- docker:
17
- - image: circleci/ruby:2.3
18
- - image: mysql:5.7
19
- environment:
20
- MYSQL_DATABASE: 'legion'
21
- MYSQL_ROOT_PASSWORD: 'legion'
22
- MYSQL_USER: 'legion'
23
- MYSQL_PASSWORD: 'legion'
24
- steps:
25
- - checkout
26
- - run:
27
- name: Bundle Install
28
- command: bundle install
29
- - run:
30
- name: Run RSpec
31
- command: bundle exec rspec --format progress --format RspecJunitFormatter -o test-results/rspec/results.xml
32
- when: always
33
- - store_test_results:
34
- path: test-results
35
-
36
- "ruby-2.4":
37
- docker:
38
- - image: circleci/ruby:2.4-node
39
- - image: mysql:5.7
40
- environment:
41
- MYSQL_DATABASE: 'legion'
42
- MYSQL_ROOT_PASSWORD: 'legion'
43
- MYSQL_USER: 'legion'
44
- MYSQL_PASSWORD: 'legion'
45
- steps:
46
- - checkout
47
- - run:
48
- name: Bundle Install
49
- command: bundle install
50
- - run:
51
- name: Run RSpec
52
- command: bundle exec rspec --format progress --format RspecJunitFormatter -o test-results/rspec/results.xml
53
- when: always
54
- - store_test_results:
55
- path: test-results
56
- "ruby-2.5":
57
- docker:
58
- - image: circleci/ruby:2.5-node
59
- - image: mysql:5.7
60
- environment:
61
- MYSQL_DATABASE: 'legion'
62
- MYSQL_ROOT_PASSWORD: 'legion'
63
- MYSQL_USER: 'legion'
64
- MYSQL_PASSWORD: 'legion'
65
- steps:
66
- - checkout
67
- - run:
68
- name: Bundle Install
69
- command: bundle install
70
- - run:
71
- name: Run RSpec
72
- command: bundle exec rspec --format progress --format RspecJunitFormatter -o test-results/rspec/results.xml
73
- when: always
74
- - store_test_results:
75
- path: test-results
76
- "ruby-2.6":
77
- docker:
78
- - image: circleci/ruby:2.6-node
79
- - image: mysql:5.7
80
- environment:
81
- MYSQL_DATABASE: 'legion'
82
- MYSQL_ROOT_PASSWORD: 'legion'
83
- MYSQL_USER: 'legion'
84
- MYSQL_PASSWORD: 'legion'
85
- steps:
86
- - checkout
87
- - run:
88
- name: Bundle Install
89
- command: bundle install
90
- - run:
91
- name: Run RSpec
92
- command: bundle exec rspec --format progress --format RspecJunitFormatter -o test-results/rspec/results.xml
93
- when: always
94
- - store_test_results:
95
- path: test-results
96
- "jruby-9.2":
97
- docker:
98
- - image: circleci/jruby:9.2
99
- - image: mysql:5.7
100
- environment:
101
- MYSQL_DATABASE: 'legion'
102
- MYSQL_ROOT_PASSWORD: 'legion'
103
- MYSQL_USER: 'legion'
104
- MYSQL_PASSWORD: 'legion'
105
- steps:
106
- - checkout
107
- - run:
108
- name: Bundle Install
109
- command: bundle install
110
- - run:
111
- name: Run RSpec
112
- command: bundle exec rspec --format progress --format RspecJunitFormatter -o test-results/rspec/results.xml
113
- when: always
114
- - store_test_results:
115
- path: test-results
116
-
117
- workflows:
118
- version: 2
119
- cop_rake_deploy:
120
- jobs:
121
- - rubocop
122
- - ruby-2.3:
123
- requires:
124
- - ruby-2.4
125
- filters:
126
- branches:
127
- only: /\bdevelop\b|\bmaster\b/
128
- - ruby-2.4:
129
- requires:
130
- - rubocop
131
- - ruby-2.5:
132
- requires:
133
- - ruby-2.4
134
- filters:
135
- branches:
136
- only: /\bdevelop\b|\bmaster\b/
137
- - ruby-2.6:
138
- requires:
139
- - ruby-2.4
140
- filters:
141
- branches:
142
- only: /\bdevelop\b|\bmaster\b/
143
- # - jruby-9.2:
144
- # requires:
145
- # - ruby-2.3
146
- # - ruby-2.4
147
- # - ruby-2.5
148
- # - ruby-2.6
data/.rspec DELETED
@@ -1 +0,0 @@
1
- --color
data/Rakefile DELETED
@@ -1,55 +0,0 @@
1
- require 'bundler/gem_tasks'
2
- require 'rspec/core/rake_task'
3
- require 'rubocop/rake_task'
4
-
5
- RSpec::Core::RakeTask.new(:spec)
6
-
7
- task default: :spec
8
-
9
- task :dev do
10
- end
11
-
12
- RuboCop::RakeTask.new(:rubocop) do |t|
13
- t.options = ['--display-cop-names']
14
- end
15
-
16
- RuboCop::RakeTask.new(:rubocop_fix) do |t|
17
- # t.options = ['--display-cop-names -a']
18
- t.options = ['--display-cop-names']
19
- end
20
-
21
- namespace :db do
22
- require 'sequel'
23
- require 'legion/logging'
24
- Sequel.extension :migration
25
-
26
- # desc 'Prints current schema version'
27
- # task :version do
28
- # version = DB[:schema_info].first[:version] # if DB.tables.include?(:schema_info) || true
29
- #
30
- # puts "Schema Version: #{version}"
31
- # end
32
- #
33
- # desc 'Perform migration up to latest migration available'
34
- # task :migrate do
35
- # Sequel::Migrator.run(DB, 'lib/legion/data/migrations')
36
- # Rake::Task['db:version'].execute
37
- # end
38
- #
39
- # desc 'Perform rollback to specified target or full rollback as default'
40
- # task :rollback, :target do |_t, args|
41
- # args.with_defaults(target: 0)
42
- #
43
- # Sequel::Migrator.run(DB, 'lib/legion/data/migrations', target: args[:target].to_i)
44
- # Rake::Task['db:version'].execute
45
- # end
46
- #
47
- # desc 'Perform migration reset (full rollback and migration)'
48
- # task :reset do
49
- # Sequel::Migrator.run(DB, 'migrations', target: 0)
50
- # Sequel::Migrator.run(DB, 'migrations')
51
- # Rake::Task['db:version'].execute
52
- # end
53
- end
54
-
55
- # RuboCop::RakeTask.new
data/bin/console DELETED
@@ -1,14 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'bundler/setup'
4
- require 'legion/data'
5
-
6
- # You can add fixtures and/or initialization code here to make experimenting
7
- # with your gem easier. You can also use a different console, if you like.
8
-
9
- # (If you use this, don't forget to add pry to your Gemfile!)
10
- # require "pry"
11
- # Pry.start
12
-
13
- require 'irb'
14
- IRB.start(__FILE__)
data/bin/setup DELETED
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
- IFS=$'\n\t'
4
- set -vx
5
-
6
- bundle install
7
-
8
- # Do any other automated setup that you need to do here
@@ -1,26 +0,0 @@
1
- image: ruby:2.4.0
2
-
3
- pipelines:
4
- branches:
5
- master:
6
- - step:
7
- caches:
8
- - bundler
9
- script:
10
- - gem install bundle rubocop
11
- - bundle install
12
- - rubocop
13
- - rake
14
- services:
15
- - mysql
16
- definitions:
17
- services:
18
- mysql:
19
- image: mysql:5.7
20
- environment:
21
- MYSQL_DATABASE: 'legion'
22
- MYSQL_ROOT_PASSWORD: 'legion'
23
- MYSQL_USER: 'legion'
24
- MYSQL_PASSWORD: 'legion'
25
- caches:
26
- bundler: vendor/bundle
@@ -1,61 +0,0 @@
1
- module Legion
2
- module Data
3
- module Connections
4
- class Base
5
- attr_reader :sequel
6
- def check_gem(gem = adapter)
7
- Gem::Specification.find_by_name(gem)
8
- rescue Gem::MissingSpecError, ArgumentError
9
- false
10
- end
11
-
12
- def creds_builder(credentials = {}) # rubocop:disable Metrics/AbcSize
13
- creds = {}
14
- if Legion::Settings[:vault][:connected] && ::Vault.sys.mounts.key?(:database)
15
- creds = Legion::Crypt.read('database/creds/legion')
16
- Legion::Logging.info 'Grabbing database creds from vault'
17
- end
18
-
19
- creds = creds.merge(default_creds) if creds.is_a? Hash
20
- creds = creds.merge(Legion::Settings[:data][:creds]) if Legion::Settings[:data][:creds].is_a? Hash
21
- creds = creds.merge(credentials) if credentials.is_a? Hash
22
- creds
23
- end
24
-
25
- def connect(adapter, creds, _options = {})
26
- creds[:adapter] = adapter
27
- @sequel = Sequel.connect(creds)
28
- end
29
-
30
- def settings(options, _connection = @connection)
31
- raise ArgumentError unless options.is_a? Hash
32
- end
33
-
34
- def debug_logging(enabled = true, connection = @connection, _options = {})
35
- if enabled
36
- connection.logger = Legion::Logging
37
- connection.sql_log_level = :debug
38
- elsif enabled == false
39
- connection.logger = nil
40
- connection.sql_log_level = :debug
41
- end
42
- connection
43
- end
44
-
45
- def adapter
46
- 'mysql2'
47
- end
48
-
49
- def default_creds
50
- { data: { creds: {
51
- host: '127.0.0.1',
52
- user: 'legion',
53
- password: 'legion',
54
- max_connections: 1000,
55
- database: 'legion'
56
- } } }
57
- end
58
- end
59
- end
60
- end
61
- end
@@ -1,21 +0,0 @@
1
- module Legion
2
- module Data
3
- module Connections
4
- class JDBC
5
- attr_accessor :connection
6
- def initialize
7
- Legion::Logging.debug('Connecting to MySQL with JBDC Connector')
8
- connection_string = build_connection_string
9
- @connection = Sequel.connect(connection_string, max_connetions: @args[:max_connections])
10
- Legion::Logging.info("Legion is connected to database #{args[:database]}")
11
- end
12
-
13
- def build_connection_string
14
- set = Legion::Settings[:data][:mysql]
15
- con_string = "jdbc:mysql://#{set[:host]}/#{set[:database]}?user=#{set[:user]}&password=#{set[:password]}"
16
- con_string
17
- end
18
- end
19
- end
20
- end
21
- end
@@ -1,26 +0,0 @@
1
- require 'legion/data/connections/mysql_base'
2
-
3
- module Legion
4
- module Data
5
- module Connections
6
- class MySQL < Legion::Data::Connections::MySQLBase
7
- attr_accessor :connection
8
- def initialize(_options = {})
9
- Legion::Logging.debug('Connecting to MySQL with MySQL2 Connector')
10
- @connection = connect
11
-
12
- Legion::Logging.info("Legion is connected to database #{Legion::Settings[:data][:mysql][:database]}")
13
- Legion::Settings[:data][:connected] = true
14
- end
15
-
16
- def adapter
17
- 'mysql2'
18
- end
19
-
20
- def connect
21
- super(adapter, creds_builder)
22
- end
23
- end
24
- end
25
- end
26
- end
@@ -1,11 +0,0 @@
1
- module Legion
2
- module Data
3
- module Connections
4
- module MySQL2
5
- def adapter
6
- :mysql2
7
- end
8
- end
9
- end
10
- end
11
- end
@@ -1,19 +0,0 @@
1
- require 'legion/data/connections/base'
2
-
3
- module Legion
4
- module Data
5
- module Connections
6
- module MySQLBase
7
- def default_creds
8
- { data: { mysql: {
9
- host: '127.0.0.1',
10
- user: 'legion',
11
- password: 'legion',
12
- max_connections: 100,
13
- database: 'legion'
14
- } } }
15
- end
16
- end
17
- end
18
- end
19
- end
@@ -1,17 +0,0 @@
1
- Sequel.migration do
2
- up do
3
- run "CREATE TABLE `users` (
4
- `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
5
- `active` tinyint(1) unsigned DEFAULT '1',
6
- `name` varchar(128) DEFAULT NULL,
7
- `version` tinyint(5) unsigned NOT NULL DEFAULT '1',
8
- `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
9
- `updated` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
10
- PRIMARY KEY (`id`)
11
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"
12
- end
13
-
14
- down do
15
- drop :users
16
- end
17
- end
@@ -1,16 +0,0 @@
1
- Sequel.migration do
2
- up do
3
- run "CREATE TABLE `groups` (
4
- `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
5
- `name` varchar(128) DEFAULT NULL,
6
- `active` tinyint(1) unsigned DEFAULT '1',
7
- `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
8
- `updated` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
9
- PRIMARY KEY (`id`)
10
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"
11
- end
12
-
13
- down do
14
- drop :groups
15
- end
16
- end