gitlab-mirror-pull 0.2.2 → 0.3.0

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.
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