db_vcs 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.db_vcs.yml.sample +3 -0
- data/CHANGELOG.md +4 -0
- data/README.md +11 -2
- data/bin/start-docker +8 -1
- data/db_vcs.gemspec +1 -0
- data/docker-compose.yml +9 -0
- data/lib/db_vcs/adapters/mysql.rb +95 -0
- data/lib/db_vcs/config.rb +8 -1
- data/lib/db_vcs/manager.rb +5 -1
- data/lib/db_vcs/version.rb +1 -1
- data/lib/db_vcs.rb +1 -0
- metadata +19 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f22df6cac64b23c5396db8e1ba55b640b7a4fd5ffc2a55d8f05a7185985ba067
|
4
|
+
data.tar.gz: 0610b51b4a5ca2025eb8f76b1df56ed12ad4c802be3cbd99a9b00167a6456108
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fb51601226cb01d431ec76cfb76d527f5bd4e28134c8c3a075d588ecd1643b81cbdb5adacf4a50af2deded09abb43fe27c2e7e28aa571446091c53dc3f59649f
|
7
|
+
data.tar.gz: fec6984d43ddbbdafb389153b69d8f2a14139382bcba0debc3ad52e18e6520fd0410ca5743b6f286de1eb52c56d676565269da38b961f0e099d0d3bc0cf34948
|
data/.db_vcs.yml.sample
CHANGED
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -50,13 +50,22 @@ mongo_config: # Configuration of Mongodb
|
|
50
50
|
mongodump_path: "/path/to/mongodump" # resolved automatically using which util. Override it otherwise
|
51
51
|
mongorestore_path: "/path/to/mongorestore" # resolved automatically using which util. Override it otherwise
|
52
52
|
mongo_uri: mongodb://localhost:27017
|
53
|
+
mysql_config: # Configuration of MySQL
|
54
|
+
host: 127.0.0.1
|
55
|
+
port: '3306'
|
56
|
+
username: root
|
57
|
+
password: root
|
58
|
+
mysqldump_path: "/path/to/mysqldump" # resolved automatically using which util. Override it otherwise
|
59
|
+
mysql_path: "/path/to/mysql" # resolved automatically using which util. Override it otherwise
|
53
60
|
```
|
54
61
|
|
55
62
|
Notices:
|
56
63
|
|
57
64
|
- to be able to use MongoDB - you need to have "mongo" gem installed
|
58
|
-
- to be able to use MongoDB - you need to have [MongoDB Database Tools](https://docs.mongodb.com/database-tools/) installed
|
65
|
+
- to be able to use MongoDB - you need to have [MongoDB Database Tools](https://docs.mongodb.com/database-tools/) installed. You can have it as docker container - just make sure to adjust "mongodump_path" and "mongorestore_path" options in configuration file
|
59
66
|
- to be able to use PostgreSQL - you need to have "pg" gem installed
|
67
|
+
- to be able to use MySQL - you need to have "mysql2" gem installed
|
68
|
+
- to be able to use MySQL - you need to have `mysql` and `mysqldump` utils installed. You can have it as docker container - just make sure to adjust "mysqldump_path" and "mysql_path" options in configuration file
|
60
69
|
|
61
70
|
## Usage
|
62
71
|
|
@@ -137,7 +146,7 @@ Example of file's content:
|
|
137
146
|
# Comparison with third argument is needed to detect whether the checkout is related to the switching between branches. In this case third argument equals to 1.
|
138
147
|
if [ $3 -eq 1 ]
|
139
148
|
then
|
140
|
-
bundle exec db-vcs check
|
149
|
+
bundle exec db-vcs check # or "bundle exec db-vcs create" if you want to create databases automatically on checkout
|
141
150
|
bundle exec pumactl -C config/puma.rb restart
|
142
151
|
fi
|
143
152
|
```
|
data/bin/start-docker
CHANGED
@@ -7,9 +7,16 @@ require "db_vcs/autoconfigure"
|
|
7
7
|
pg_user = DbVcs.config.pg_config.username
|
8
8
|
pg_port = DbVcs.config.pg_config.port
|
9
9
|
mongo_port = URI.parse(DbVcs.config.mongo_config.mongo_uri).port
|
10
|
+
mysql_port = DbVcs.config.mysql_config.port
|
10
11
|
|
11
12
|
pid = Kernel.spawn(
|
12
|
-
{
|
13
|
+
{
|
14
|
+
"PGUSER" => pg_user.to_s,
|
15
|
+
"PG_PORT" => pg_port.to_s,
|
16
|
+
"MONGO_PORT" => mongo_port.to_s,
|
17
|
+
"MYSQL_PORT" => mysql_port.to_s
|
18
|
+
},
|
19
|
+
"docker-compose up 1>&2",
|
13
20
|
close_others: true
|
14
21
|
)
|
15
22
|
Process.waitpid(pid)
|
data/db_vcs.gemspec
CHANGED
@@ -33,6 +33,7 @@ Gem::Specification.new do |spec|
|
|
33
33
|
|
34
34
|
spec.add_development_dependency "pg", "~> 1.2"
|
35
35
|
spec.add_development_dependency "mongo", "~> 2.17"
|
36
|
+
spec.add_development_dependency "mysql2", "~> 0.5.3"
|
36
37
|
spec.add_development_dependency "rspec", "~> 3.10"
|
37
38
|
spec.add_development_dependency "rspec-its", "~> 1.3"
|
38
39
|
spec.add_development_dependency "fivemat", "~> 1.3"
|
data/docker-compose.yml
CHANGED
@@ -18,6 +18,15 @@ services:
|
|
18
18
|
ports:
|
19
19
|
- ${MONGO_PORT}:27017
|
20
20
|
|
21
|
+
mysql:
|
22
|
+
image: mysql:latest
|
23
|
+
environment:
|
24
|
+
- MYSQL_ALLOW_EMPTY_PASSWORD=true
|
25
|
+
volumes:
|
26
|
+
- mysql_db:/var/lib/mysql
|
27
|
+
ports:
|
28
|
+
- ${MYSQL_PORT}:3306
|
21
29
|
volumes:
|
22
30
|
mongo_db:
|
23
31
|
pg_db:
|
32
|
+
mysql_db:
|
@@ -0,0 +1,95 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module DbVcs
|
4
|
+
module Adapters
|
5
|
+
class Mysql
|
6
|
+
class Config
|
7
|
+
include DbVcs::ConfigAttributes
|
8
|
+
|
9
|
+
attr_accessor :host, :port, :username, :password
|
10
|
+
# Path to mysqldump util. It is resolved automatically.
|
11
|
+
attr_accessor :mysqldump_path
|
12
|
+
# Path to mysql util. It is resolved automatically.
|
13
|
+
attr_accessor :mysql_path
|
14
|
+
|
15
|
+
def initialize
|
16
|
+
@host = "127.0.0.1"
|
17
|
+
@port = "3306"
|
18
|
+
@username = "root"
|
19
|
+
@password = nil
|
20
|
+
@mysqldump_path = DbVcs::Utils.resolve_exec_path("mysqldump")
|
21
|
+
@mysql_path = DbVcs::Utils.resolve_exec_path("mysql")
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
class << self
|
26
|
+
include DbVcs::AdapterInterface
|
27
|
+
|
28
|
+
# @return [DbVcs::Adapters::Mysql::Config]
|
29
|
+
def config
|
30
|
+
DbVcs.config.mysql_config
|
31
|
+
end
|
32
|
+
|
33
|
+
# @return [Mysql2::Client]
|
34
|
+
def connection
|
35
|
+
@connection ||=
|
36
|
+
begin
|
37
|
+
require "mysql2"
|
38
|
+
Mysql2::Client.new(
|
39
|
+
host: config.host,
|
40
|
+
username: config.username,
|
41
|
+
port: config.port,
|
42
|
+
password: config.password
|
43
|
+
)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
# @param db_name [String]
|
48
|
+
# @return [Boolean]
|
49
|
+
def db_exists?(db_name)
|
50
|
+
!connection
|
51
|
+
.query("SELECT 1 as one FROM `INFORMATION_SCHEMA`.`SCHEMATA` WHERE `SCHEMA_NAME` = '#{db_name}' LIMIT 1")
|
52
|
+
.first.nil?
|
53
|
+
end
|
54
|
+
|
55
|
+
# @param to_db [String]
|
56
|
+
# @param from_db [String]
|
57
|
+
# @return void
|
58
|
+
def copy_database(to_db, from_db)
|
59
|
+
create_opts =
|
60
|
+
connection.query(<<~SQL).first
|
61
|
+
SELECT `DEFAULT_CHARACTER_SET_NAME` as charset, `DEFAULT_COLLATION_NAME` as collation
|
62
|
+
FROM `INFORMATION_SCHEMA`.`SCHEMATA` WHERE `SCHEMA_NAME` = '#{from_db}' LIMIT 1
|
63
|
+
SQL
|
64
|
+
connection.query(<<~SQL)
|
65
|
+
CREATE DATABASE #{to_db} CHARACTER SET #{create_opts["charset"]} COLLATE #{create_opts["collation"]}
|
66
|
+
SQL
|
67
|
+
password_opt = config.password.to_s.strip.empty? ? "" : "-p #{config.password}"
|
68
|
+
command =
|
69
|
+
<<~SH
|
70
|
+
#{config.mysqldump_path} -u #{config.username} #{password_opt} -h #{config.host} -P #{config.port} #{from_db} \
|
71
|
+
| #{config.mysql_path} -u #{config.username} #{password_opt} -h #{config.host} -P #{config.port} #{to_db}
|
72
|
+
SH
|
73
|
+
`#{command}`
|
74
|
+
end
|
75
|
+
|
76
|
+
# @param db_name [String]
|
77
|
+
# @return void
|
78
|
+
def create_database(db_name)
|
79
|
+
connection.query("CREATE DATABASE #{db_name}")
|
80
|
+
end
|
81
|
+
|
82
|
+
# @return [Array<String>]
|
83
|
+
def list_databases
|
84
|
+
connection.query("SELECT `SCHEMA_NAME` FROM `INFORMATION_SCHEMA`.`SCHEMATA`").to_a.flat_map(&:values)
|
85
|
+
end
|
86
|
+
|
87
|
+
# @param db_name [String]
|
88
|
+
# @return [void]
|
89
|
+
def drop_by_dbname(db_name)
|
90
|
+
connection.query("DROP DATABASE #{db_name}")
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
data/lib/db_vcs/config.rb
CHANGED
@@ -12,7 +12,7 @@ module DbVcs
|
|
12
12
|
# available values. Defaults to empty array.
|
13
13
|
attr_accessor :dbs_in_use
|
14
14
|
# Configuration of dbs clients.
|
15
|
-
attr_reader :pg_config, :mongo_config
|
15
|
+
attr_reader :pg_config, :mongo_config, :mysql_config
|
16
16
|
# A name of branch to be used as a default branch to copy databases from.
|
17
17
|
attr_accessor :main_branch
|
18
18
|
|
@@ -23,6 +23,7 @@ module DbVcs
|
|
23
23
|
@main_branch = "main"
|
24
24
|
@pg_config = DbVcs::Adapters::Postgres::Config.new
|
25
25
|
@mongo_config = DbVcs::Adapters::Mongo::Config.new
|
26
|
+
@mysql_config = DbVcs::Adapters::Mysql::Config.new
|
26
27
|
end
|
27
28
|
|
28
29
|
# @param hash [Hash]
|
@@ -36,5 +37,11 @@ module DbVcs
|
|
36
37
|
def mongo_config=(hash)
|
37
38
|
mongo_config.assign_attributes(hash)
|
38
39
|
end
|
40
|
+
|
41
|
+
# @param hash [Hash]
|
42
|
+
# @return [void]
|
43
|
+
def mysql_config=(hash)
|
44
|
+
mysql_config.assign_attributes(hash)
|
45
|
+
end
|
39
46
|
end
|
40
47
|
end
|
data/lib/db_vcs/manager.rb
CHANGED
@@ -2,7 +2,11 @@
|
|
2
2
|
|
3
3
|
module DbVcs
|
4
4
|
class Manager
|
5
|
-
ADAPTERS = {
|
5
|
+
ADAPTERS = {
|
6
|
+
"postgres" => DbVcs::Adapters::Postgres,
|
7
|
+
"mongo" => DbVcs::Adapters::Mongo,
|
8
|
+
"mysql" => DbVcs::Adapters::Mysql
|
9
|
+
}.freeze
|
6
10
|
|
7
11
|
class << self
|
8
12
|
# @param adapter_name [String]
|
data/lib/db_vcs/version.rb
CHANGED
data/lib/db_vcs.rb
CHANGED
@@ -8,6 +8,7 @@ require_relative "db_vcs/config"
|
|
8
8
|
require_relative "db_vcs/adapter_interface"
|
9
9
|
require_relative "db_vcs/adapters/mongo"
|
10
10
|
require_relative "db_vcs/adapters/postgres"
|
11
|
+
require_relative "db_vcs/adapters/mysql"
|
11
12
|
require_relative "db_vcs/utils"
|
12
13
|
require_relative "db_vcs/manager"
|
13
14
|
require_relative "db_vcs/version"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: db_vcs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ivan Dzyzenko
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-01-
|
11
|
+
date: 2022-01-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pg
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '2.17'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: mysql2
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.5.3
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.5.3
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: rspec
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -135,6 +149,7 @@ files:
|
|
135
149
|
- lib/db_vcs.rb
|
136
150
|
- lib/db_vcs/adapter_interface.rb
|
137
151
|
- lib/db_vcs/adapters/mongo.rb
|
152
|
+
- lib/db_vcs/adapters/mysql.rb
|
138
153
|
- lib/db_vcs/adapters/postgres.rb
|
139
154
|
- lib/db_vcs/autoconfigure.rb
|
140
155
|
- lib/db_vcs/config.rb
|
@@ -148,8 +163,8 @@ licenses:
|
|
148
163
|
metadata:
|
149
164
|
allowed_push_host: https://rubygems.org
|
150
165
|
homepage_uri: https://github.com/intale/db_vcs
|
151
|
-
source_code_uri: https://github.com/intale/vcs_db/tree/v1.
|
152
|
-
changelog_uri: https://github.com/intale/vcs_db/blob/v1.
|
166
|
+
source_code_uri: https://github.com/intale/vcs_db/tree/v1.1.0
|
167
|
+
changelog_uri: https://github.com/intale/vcs_db/blob/v1.1.0/CHANGELOG.md
|
153
168
|
post_install_message:
|
154
169
|
rdoc_options: []
|
155
170
|
require_paths:
|