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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1661ac7caf5f8acda7e034ba84e71e262379c5bf1c4566f99e9df448d35bede7
4
- data.tar.gz: b2784aa89b5380ccd51ccfe8a6033c0de63a8b9df943c9a3acd57493c81c97d0
3
+ metadata.gz: c847596586376e72096363509de165d2b7a7c0523999c683433b2de163e35c28
4
+ data.tar.gz: be7a17f14463e9173d37f0243267d2b78459f73c030874bf53ac6ddab7fac255
5
5
  SHA512:
6
- metadata.gz: 9729df121785f1545a5b6389079ea8a3f9c85c02c1636e87027cd67470908b347fc8750ccf3ff78bf735fa475d5340cf174712aa0b04e888d32127a8c6065674
7
- data.tar.gz: 0e46b6765c707f6e9eac553336c742535818b182568aaf0c71e9ccd353731700dba8af3e52e77383bdb2dbb4553d4bdfa883b074a5dbd1be1490738d90488e1e
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
- Install
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
- - Clone repository: `git clone https://github.com/ochorocho/gitlab-mirror-pull.git`
13
- - Run bundler: `bundle install`
14
- - Copy and modify `config.example.yml` to `config.yml`
13
+ # Install (for development)
15
14
 
16
- Run
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
- ```ruby
20
- ruby gitlab-mirror-pull.rb
19
+ ## Run
20
+
21
+ ```bash
22
+ ./bin/gitlab-mirror-pull -c config.yml -l INFO
21
23
  ```
22
24
 
23
- Setup a CronJob
24
- ---------------
25
+ # Using 'gem install'
25
26
 
26
- If you want to trigger periodically
27
+ ### Install
27
28
 
28
29
  ```bash
29
- 0 */1 * * * /usr/bin/ruby /path/to/gitlab-mirror-pull.rb
30
+ gem install gitlab-mirror-pull
30
31
  ```
31
32
 
32
- Using 'gem install'
33
- -------------------
33
+ ### Run
34
34
 
35
- Install
35
+ ```bash
36
+ gitlab-mirror-pull -c /path/to/config.yml
37
+ ```
38
+
39
+ Default config location
36
40
 
37
41
  ```bash
38
- gem install gitlab-mirror-pull
42
+ /etc/gitlab-mirror-pull/config.yml
39
43
  ```
40
44
 
41
- Run
45
+ ## Setup a CronJob
46
+
47
+ If you want to trigger periodically
42
48
 
43
49
  ```bash
44
- gitlab-mirror-pull -c /path/to/config.yml
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`
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require_relative '../lib/gitlab-mirror-pull.rb'
3
+ require_relative '../lib/gitlab_mirror_pull.rb'
4
4
 
5
5
  options = {
6
- :config => File.join(File.dirname(__FILE__), "../config.example.yml"),
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 #{File.join(File.dirname(__FILE__), "../config.example.yml")}\n\n"
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
- puts repo_path
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.2.2
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-13 00:00:00.000000000 Z
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
- - lib/gitlab-mirror-pull.rb
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