gitlab-mirror-pull 0.2.2 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +43 -19
- data/bin/gitlab-mirror-pull +11 -6
- data/extconf.rb +18 -0
- data/init.d/gitlab-mirror-server.sh +100 -0
- data/lib/{gitlab-mirror-pull.rb → gitlab_mirror_pull.rb} +4 -3
- metadata +7 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c847596586376e72096363509de165d2b7a7c0523999c683433b2de163e35c28
|
4
|
+
data.tar.gz: be7a17f14463e9173d37f0243267d2b78459f73c030874bf53ac6ddab7fac255
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1cc83bfa75b327b0fbc99252600158366ade011c6564952b447db416eb9503943d70b619740fd5e8d33488dd7a1d38b9b7d75732835bac484280f6a72e7b6349
|
7
|
+
data.tar.gz: 5b23b8accb84df8dc0a08110d8edf6db929a3e1fe3cab69c6545859c2f1535efe4aab492c7ae247afeb2544f2f09baba488c4e60a368f407698436fe66a8f5ca
|
data/README.md
CHANGED
@@ -6,40 +6,64 @@ Description
|
|
6
6
|
|
7
7
|
Update your git repositories automatically when `remote` is set
|
8
8
|
|
9
|
-
|
10
|
-
|
9
|
+
* Adds a command to fetch repositories
|
10
|
+
* Run a tiny Webserver to integrate with Gitlabs webhooks
|
11
|
+
* Adds init script to `/etc/init.d/gitlab-mirror-server`
|
11
12
|
|
12
|
-
|
13
|
-
- Run bundler: `bundle install`
|
14
|
-
- Copy and modify `config.example.yml` to `config.yml`
|
13
|
+
# Install (for development)
|
15
14
|
|
16
|
-
|
17
|
-
|
15
|
+
* Clone repository: `git clone https://github.com/ochorocho/gitlab-mirror-pull.git`
|
16
|
+
* Run bundler: `bundle install`
|
17
|
+
* Copy and modify `config.example.yml` to `config.yml`
|
18
18
|
|
19
|
-
|
20
|
-
|
19
|
+
## Run
|
20
|
+
|
21
|
+
```bash
|
22
|
+
./bin/gitlab-mirror-pull -c config.yml -l INFO
|
21
23
|
```
|
22
24
|
|
23
|
-
|
24
|
-
---------------
|
25
|
+
# Using 'gem install'
|
25
26
|
|
26
|
-
|
27
|
+
### Install
|
27
28
|
|
28
29
|
```bash
|
29
|
-
|
30
|
+
gem install gitlab-mirror-pull
|
30
31
|
```
|
31
32
|
|
32
|
-
|
33
|
-
-------------------
|
33
|
+
### Run
|
34
34
|
|
35
|
-
|
35
|
+
```bash
|
36
|
+
gitlab-mirror-pull -c /path/to/config.yml
|
37
|
+
```
|
38
|
+
|
39
|
+
Default config location
|
36
40
|
|
37
41
|
```bash
|
38
|
-
|
42
|
+
/etc/gitlab-mirror-pull/config.yml
|
39
43
|
```
|
40
44
|
|
41
|
-
|
45
|
+
## Setup a CronJob
|
46
|
+
|
47
|
+
If you want to trigger periodically
|
42
48
|
|
43
49
|
```bash
|
44
|
-
gitlab-mirror-pull
|
50
|
+
* */1 * * * git /usr/bin/ruby /usr/local/bin/gitlab-mirror-pull
|
45
51
|
```
|
52
|
+
|
53
|
+
## Setup gitlab webhook
|
54
|
+
|
55
|
+
Allow webhooks on `localhost` in gitlab (Admin -> Settings -> Outbound requests)
|
56
|
+
and check `Allow requests to the local network from hooks and services` and hit save
|
57
|
+
|
58
|
+
Go to your porject -> Settings -> Integrations:
|
59
|
+
|
60
|
+
* Add URL `http://localhost:8088/commit`
|
61
|
+
* Leave Token empty
|
62
|
+
* Check `Enable SSL verification`
|
63
|
+
* Tick boxes to enable `Triggers`
|
64
|
+
* Run server `sudo /etc/init.d/gitlab-mirror-server start`
|
65
|
+
|
66
|
+
**Logs**
|
67
|
+
|
68
|
+
* `/var/log/gitlab-mirror-server.err`
|
69
|
+
* `/var/log/gitlab-mirror-server.log`
|
data/bin/gitlab-mirror-pull
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require_relative '../lib/
|
3
|
+
require_relative '../lib/gitlab_mirror_pull.rb'
|
4
4
|
|
5
5
|
options = {
|
6
|
-
:config =>
|
6
|
+
:config => "/etc/gitlab-mirror-pull/config.yml",
|
7
7
|
:log_level => Logger::ERROR
|
8
8
|
}
|
9
9
|
|
@@ -21,7 +21,7 @@ OptionParser.new do |opts|
|
|
21
21
|
opts.set_summary_indent(' ')
|
22
22
|
opts.set_summary_width(50)
|
23
23
|
opts.define_head "Fetch gitlab repositories when remote set.
|
24
|
-
Default config
|
24
|
+
Default config /etc/gitlab-mirror-pull/config.yml\n\n"
|
25
25
|
|
26
26
|
# Config argument
|
27
27
|
opts.on("-c", "--config [config.yml]", "Specify config yaml") do |yml|
|
@@ -60,19 +60,24 @@ if options[:run] == 'server'
|
|
60
60
|
require 'multi_json'
|
61
61
|
|
62
62
|
config = YAML.load_file(options[:config])
|
63
|
+
pull = GitlabMirrorPull.new(options[:config], options[:log_level])
|
63
64
|
|
64
65
|
# Configure server
|
65
66
|
set :port, config['server']['port']
|
66
67
|
set :bind, config['server']['bind']
|
68
|
+
# Set to true to run sinatra webserver in production
|
69
|
+
set :run, true
|
67
70
|
|
68
71
|
post '/commit' do
|
69
72
|
gitlab_json = MultiJson.load(request.body.read)
|
70
73
|
# File.join(File.dirname(__FILE__), "../config.example.yml")
|
71
|
-
repo_path = File.join(config['git']['repos'], gitlab_json['project']['namespace'].downcase, gitlab_json['project']['name'].downcase)
|
72
|
-
|
74
|
+
repo_path = File.join(config['git']['repos'], gitlab_json['project']['namespace'].downcase, gitlab_json['project']['name'].downcase + ".git")
|
75
|
+
pull.fetch_repositories([repo_path])
|
76
|
+
return ''
|
73
77
|
end
|
74
78
|
|
75
79
|
else
|
76
80
|
# Run `git fetch` depending on options[:config]
|
77
|
-
GitlabMirrorPull.new(options[:config], options[:log_level])
|
81
|
+
pull = GitlabMirrorPull.new(options[:config], options[:log_level])
|
82
|
+
pull.fetch_repositories
|
78
83
|
end
|
data/extconf.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
require "fileutils"
|
2
|
+
|
3
|
+
# Create fake Makefile - without this install fails due to missing Makefile
|
4
|
+
require "mkmf"
|
5
|
+
create_makefile ''
|
6
|
+
|
7
|
+
# Make sure config folder exists
|
8
|
+
directory_name = "/etc/gitlab-mirror-pull/"
|
9
|
+
Dir.mkdir(directory_name) unless File.exists?(directory_name)
|
10
|
+
|
11
|
+
# Copy config if it does not exist
|
12
|
+
config_copy = "/etc/gitlab-mirror-pull/config.yml"
|
13
|
+
FileUtils.cp("./config.example.yml",config_copy) unless File.exists?(config_copy)
|
14
|
+
|
15
|
+
# Copy init script into place
|
16
|
+
init_copy = "/etc/init.d/gitlab-mirror-server"
|
17
|
+
FileUtils.rm(init_copy) unless File.exists?(init_copy)
|
18
|
+
FileUtils.cp("./init.d/gitlab-mirror-server.sh",init_copy)
|
@@ -0,0 +1,100 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
### BEGIN INIT INFO
|
3
|
+
# Provides:
|
4
|
+
# Required-Start: $remote_fs $syslog
|
5
|
+
# Required-Stop: $remote_fs $syslog
|
6
|
+
# Default-Start: 2 3 4 5
|
7
|
+
# Default-Stop: 0 1 6
|
8
|
+
# Short-Description: Start gitlab-mirror-pull webserver
|
9
|
+
# Description: Start gitlab-mirror-pull webserver. Set url to http://localhost:[:port] to trigger git fetch on triggered repo
|
10
|
+
### END INIT INFO
|
11
|
+
|
12
|
+
dir="/"
|
13
|
+
binary=`which gitlab-mirror-pull`
|
14
|
+
config="/etc/gitlab-mirror-pull/config.yml"
|
15
|
+
cmd="$binary -r server -c $config -l ERROR"
|
16
|
+
user=""
|
17
|
+
|
18
|
+
name=`basename $0`
|
19
|
+
pid_file="/var/run/$name.pid"
|
20
|
+
stdout_log="/var/log/$name.log"
|
21
|
+
stderr_log="/var/log/$name.err"
|
22
|
+
|
23
|
+
get_pid() {
|
24
|
+
cat "$pid_file"
|
25
|
+
}
|
26
|
+
|
27
|
+
is_running() {
|
28
|
+
[ -f "$pid_file" ] && ps `get_pid` > /dev/null 2>&1
|
29
|
+
}
|
30
|
+
|
31
|
+
case "$1" in
|
32
|
+
start)
|
33
|
+
if is_running; then
|
34
|
+
echo "$name already started ..."
|
35
|
+
else
|
36
|
+
echo "Starting $name ..."
|
37
|
+
cd "$dir"
|
38
|
+
if [ -z "$user" ]; then
|
39
|
+
sudo $cmd >> "$stdout_log" 2>> "$stderr_log" &
|
40
|
+
else
|
41
|
+
sudo -u "$user" $cmd >> "$stdout_log" 2>> "$stderr_log" &
|
42
|
+
fi
|
43
|
+
echo $! > "$pid_file"
|
44
|
+
if ! is_running; then
|
45
|
+
echo "Unable to start, see $stdout_log and $stderr_log"
|
46
|
+
exit 1
|
47
|
+
fi
|
48
|
+
fi
|
49
|
+
;;
|
50
|
+
stop)
|
51
|
+
if is_running; then
|
52
|
+
echo -n "Stopping $name ..."
|
53
|
+
kill `get_pid`
|
54
|
+
for i in {1..10}
|
55
|
+
do
|
56
|
+
if ! is_running; then
|
57
|
+
break
|
58
|
+
fi
|
59
|
+
|
60
|
+
echo -n "."
|
61
|
+
sleep 1
|
62
|
+
done
|
63
|
+
echo
|
64
|
+
|
65
|
+
if is_running; then
|
66
|
+
echo "Not stopped; may still be shutting down or shutdown may have failed"
|
67
|
+
exit 1
|
68
|
+
else
|
69
|
+
echo "$name stopped ..."
|
70
|
+
if [ -f "$pid_file" ]; then
|
71
|
+
rm "$pid_file"
|
72
|
+
fi
|
73
|
+
fi
|
74
|
+
else
|
75
|
+
echo "$name not running ..."
|
76
|
+
fi
|
77
|
+
;;
|
78
|
+
restart)
|
79
|
+
$0 stop
|
80
|
+
if is_running; then
|
81
|
+
echo "Unable to stop, will not attempt to start"
|
82
|
+
exit 1
|
83
|
+
fi
|
84
|
+
$0 start
|
85
|
+
;;
|
86
|
+
status)
|
87
|
+
if is_running; then
|
88
|
+
echo "$name is running ..."
|
89
|
+
else
|
90
|
+
echo "$name stopped ..."
|
91
|
+
exit 1
|
92
|
+
fi
|
93
|
+
;;
|
94
|
+
*)
|
95
|
+
echo "Usage: $0 {start|stop|restart|status}"
|
96
|
+
exit 1
|
97
|
+
;;
|
98
|
+
esac
|
99
|
+
|
100
|
+
exit 0
|
@@ -3,6 +3,7 @@ require 'git'
|
|
3
3
|
require 'logger'
|
4
4
|
require 'yaml'
|
5
5
|
|
6
|
+
# Fetch Gitlab repositories
|
6
7
|
class GitlabMirrorPull
|
7
8
|
|
8
9
|
attr_accessor :config, :log_level
|
@@ -20,7 +21,6 @@ class GitlabMirrorPull
|
|
20
21
|
@log = Logger.new(STDOUT)
|
21
22
|
@log.level = log_level
|
22
23
|
@config = YAML.load_file(config)
|
23
|
-
self.fetch_repositories
|
24
24
|
end
|
25
25
|
|
26
26
|
# Prepare list of repositories
|
@@ -45,16 +45,17 @@ class GitlabMirrorPull
|
|
45
45
|
|
46
46
|
# Fetch repositories return by `repositories_to_fetch`
|
47
47
|
#
|
48
|
+
# @param [Array<String>] repos with absolute path to repositories you want to fetch
|
48
49
|
# @return Logging infos on fetched repos
|
49
50
|
#
|
50
|
-
def fetch_repositories
|
51
|
+
def fetch_repositories(repos = nil)
|
51
52
|
# Init git settings
|
52
53
|
Git.configure do |config|
|
53
54
|
config.binary_path = "#{@config['git']['path']}"
|
54
55
|
end
|
55
56
|
|
56
57
|
# Loop through repos and fetch it
|
57
|
-
repos_to_fetch = self.repositories_to_fetch
|
58
|
+
repos_to_fetch = repos.nil? ? self.repositories_to_fetch : repos
|
58
59
|
repos_to_fetch.each do |repo|
|
59
60
|
if File.directory?(repo)
|
60
61
|
# Get branches
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gitlab-mirror-pull
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ochorocho
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-06-
|
11
|
+
date: 2018-06-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: git
|
@@ -55,13 +55,16 @@ description: Checks for repositories with a set remote and run git fetch on thes
|
|
55
55
|
email: rothjochen@gmail.com
|
56
56
|
executables:
|
57
57
|
- gitlab-mirror-pull
|
58
|
-
extensions:
|
58
|
+
extensions:
|
59
|
+
- extconf.rb
|
59
60
|
extra_rdoc_files: []
|
60
61
|
files:
|
61
62
|
- README.md
|
62
63
|
- bin/gitlab-mirror-pull
|
63
64
|
- config.example.yml
|
64
|
-
-
|
65
|
+
- extconf.rb
|
66
|
+
- init.d/gitlab-mirror-server.sh
|
67
|
+
- lib/gitlab_mirror_pull.rb
|
65
68
|
homepage: https://github.com/ochorocho/gitlab-mirror-pull
|
66
69
|
licenses:
|
67
70
|
- MIT
|