magi 0.1.2 → 0.1.3

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
  SHA1:
3
- metadata.gz: d9b37e2f2249ebba06dacf853b32344b7de4dbc8
4
- data.tar.gz: 07d0c016c8eb3cbd46433416923d912d44f8025a
3
+ metadata.gz: 2232fb038a30303249630f1c9f782240ae5a55f6
4
+ data.tar.gz: f1ef12fccfa8ffb10151443898de7680cc0f8e68
5
5
  SHA512:
6
- metadata.gz: 14299f4ba42d7a39813ad25815abde2cc7096c000f5ad660599c1afc3010b2f6555872dbd229a422228e770f1c828d8875dbe163091a203f1f3cff5604f5a216
7
- data.tar.gz: a0f096a9d2dbf44468755b1a84312abd4df7bb161c93bdc2c6a45d167bc9e274b2aec86928cae26846b3e1df7666ff6fdde610c6adf71c5c4e8b5a9dc88afc00
6
+ metadata.gz: a641d3baa3fd907bcb5b2daa3706916a80a91ac3c517f9e2bec32e20f85ff5b6e6ab4b6351c17a0c1ad31da2c8e6dae79f84425644f7efa694631c6d593e64cd
7
+ data.tar.gz: 8dbb5cd16914d9ce09cf06ead2cabe14ae25ece7f8d9636c34f4996965503dc461f4aebf8e3100dbda3cb6e1258489badf007e9268ff001288a37e3aad69e672
data/Gemfile CHANGED
@@ -33,7 +33,5 @@ group :assets do
33
33
  gem "uglifier"
34
34
  end
35
35
 
36
- # Put Gemfile in plugins/:name/Gemfile to use arbitrary gems in your plugin.
37
- Pathname.glob("plugins/*/Gemfile").each do |pathname|
38
- eval(pathname.read)
39
- end
36
+ # Put Gemfile.local to use arbitrary gems for your use case.
37
+ eval File.read("Gemfile.local") if File.exist?("Gemfile.local")
data/README.md CHANGED
@@ -21,8 +21,12 @@ Magi is just a rails application with some middlewares.
21
21
  * redis: build started/finished notification by pubsub system
22
22
  * autodoc: generate [RESTful API documents](https://github.com/r7kamura/magi/blob/master/doc) from request-specs
23
23
 
24
- ### TODO
25
- * authentication (with read, write)
26
- * build stop button
27
- * self-repairing system
28
- * plugin updater
24
+ ## Plugins
25
+ * [magi-git](https://github.com/r7kamura/magi-git): Git integration plugin
26
+ * [magi-simple_cov](https://github.com/r7kamura/magi-simple_cov): Save simplecov coverage for each build
27
+
28
+ ```ruby
29
+ # Put your favorite plugin gems into Gemfile.local
30
+ gem "magi-git", git: "git@github.com:r7kamura/magi-git"
31
+ gem "magi-simple_cov", git: "git@github.com:r7kamura/magi-simple_cov"
32
+ ```
data/app/models/job.rb CHANGED
@@ -98,15 +98,19 @@ class Job < ActiveRecord::Base
98
98
  @workspace ||= Magi::Workspace.new(workspace_path)
99
99
  end
100
100
 
101
- private
102
-
103
101
  def workspace_path
104
102
  Magi.configuration.workspace_path + "jobs/#{id}"
105
103
  end
106
104
 
107
105
  def execute
108
106
  execute_before_executes
109
- workspace.chdir { execute_script }.tap { execute_after_executes }
107
+ execute_without_before_executes.tap { execute_after_executes }
108
+ end
109
+
110
+ private
111
+
112
+ def execute_without_before_executes
113
+ workspace.chdir { execute_script }
110
114
  end
111
115
 
112
116
  def execute_script
data/lib/magi/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Magi
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.3"
3
3
  end
@@ -2,5 +2,6 @@ require "factory_girl"
2
2
 
3
3
  FactoryGirl.define do
4
4
  factory(:build) do
5
+ job { FactoryGirl.create(:job) }
5
6
  end
6
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: magi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryo Nakamura
@@ -362,8 +362,6 @@ files:
362
362
  - lib/magi/workspace.rb
363
363
  - lib/magi.rb
364
364
  - lib/tasks/resque.rake
365
- - plugins/git/git.rb
366
- - plugins/simplecov/simplecov.rb
367
365
  - public/404.html
368
366
  - public/422.html
369
367
  - public/500.html
data/plugins/git/git.rb DELETED
@@ -1,92 +0,0 @@
1
- require "open3"
2
-
3
- module Magi
4
- class Repository
5
- attr_reader :job
6
-
7
- def initialize(job)
8
- @job = job
9
- end
10
-
11
- def before_enqueue
12
- if has_repository_url?
13
- clone unless cloned?
14
- update
15
- updated_since_last_finished_build?
16
- end
17
- end
18
-
19
- def before_execute
20
- if has_repository_url?
21
- clone
22
- end
23
- end
24
-
25
- def after_execute
26
- if has_repository_url?
27
- job.current_build.update_properties(revision: revision)
28
- end
29
- end
30
-
31
- def clone
32
- validate_existence_of_repository_url
33
- command("git clone #{job.repository_url} #{path}")
34
- end
35
-
36
- def update
37
- command("cd #{path} && git pull")
38
- end
39
-
40
- def revision
41
- command("cd #{path} && git rev-parse HEAD").rstrip
42
- end
43
-
44
- def updated_since_last_finished_build?
45
- revision != job.last_finished_build.try(:revision)
46
- end
47
-
48
- def cloned?
49
- path.join(".git").exist?
50
- end
51
-
52
- def command(script)
53
- Open3.capture3(script)[0]
54
- end
55
-
56
- def path
57
- job.workspace.path + "repository"
58
- end
59
-
60
- def has_repository_url?
61
- job.repository_url.present?
62
- end
63
-
64
- private
65
-
66
- def validate_existence_of_repository_url
67
- raise RepositoryUrlNotFound unless has_repository_url?
68
- end
69
-
70
- class RepositoryUrlNotFound < StandardError
71
- def message
72
- "You must set `repository_url`"
73
- end
74
- end
75
- end
76
- end
77
-
78
- Job.class_eval do
79
- property(:repository_url)
80
-
81
- before_enqueue { repository.before_enqueue }
82
-
83
- before_execute { repository.before_execute }
84
-
85
- after_execute { repository.after_execute }
86
-
87
- def repository
88
- @repository ||= Magi::Repository.new(self)
89
- end
90
- end
91
-
92
- Build.property(:revision)
@@ -1,98 +0,0 @@
1
- require "json"
2
- require "fileutils"
3
-
4
- module Magi
5
- class SimpleCov
6
- attr_reader :job
7
-
8
- def initialize(job)
9
- @job = job
10
- end
11
-
12
- def after_execute
13
- save if enabled? && has_coverage?
14
- end
15
-
16
- def enabled?
17
- !!job.enable_simplecov
18
- end
19
-
20
- def workspace_path
21
- job.workspace.path + "coverage"
22
- end
23
-
24
- def last_coverage
25
- JSON.parse(last_run_json)["result"]["covered_percent"]
26
- rescue JSON::ParserError, NoMethodError
27
- end
28
-
29
- def last_run_json
30
- last_run_json_path.read
31
- end
32
-
33
- def has_last_run_json?
34
- last_run_json_path.exist?
35
- end
36
-
37
- def has_coverage?
38
- has_last_run_json?
39
- end
40
-
41
- def last_run_json_path
42
- job.repository.path + "coverage/.last_run.json"
43
- end
44
-
45
- def assets_path
46
- job.repository.path + "coverage/assets"
47
- end
48
-
49
- def assets_relative_path
50
- assets_path.relative_path_from(current_build_path)
51
- end
52
-
53
- def result_html_path
54
- job.repository.path + "coverage/index.html"
55
- end
56
-
57
- def current_build_path
58
- workspace_path + job.current_build.id.to_s
59
- end
60
-
61
- def symlink_assets
62
- File.symlink(assets_relative_path, current_build_path + "assets")
63
- end
64
-
65
- def copy_result_html
66
- FileUtils.cp(result_html_path, current_build_path)
67
- end
68
-
69
- def save
70
- save_files
71
- save_build
72
- end
73
-
74
- def save_files
75
- current_build_path.mkpath
76
- symlink_assets
77
- copy_result_html
78
- end
79
-
80
- def save_build
81
- job.current_build.update_properties(coverage: last_coverage)
82
- end
83
- end
84
- end
85
-
86
- Job.class_eval do
87
- property(:enable_simplecov, type: :boolean)
88
-
89
- after_execute { coverage.after_execute }
90
-
91
- def coverage
92
- @coverage ||= Magi::SimpleCov.new(self)
93
- end
94
- end
95
-
96
- Build.class_eval do
97
- property(:coverage)
98
- end