cron_for_github 0.0.1.beta → 1.0.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
  SHA1:
3
- metadata.gz: 03d221de2836e1a764f143f35480be31097a8ebe
4
- data.tar.gz: 250d06261a5764466e1c4fc5f30d81d481d06f11
3
+ metadata.gz: 74c0e745ecd904226fb3c45f2fa28386c89d364f
4
+ data.tar.gz: ff1feb1ed75c5029bff443392cc02cdd613967ba
5
5
  SHA512:
6
- metadata.gz: 8de62dd929755ce43212032717b78b579beb1d3b05328b655ea0061dc80896ee0a515b55f9a2bfd2072db2c5fd659eac3bd1ebbd194ff1e5f61e213a9215392c
7
- data.tar.gz: f06aed51573f5657e8c0d2a9db18cec464335a876d598eb6d26d5d48713747885aef1fb32ff8ee9bca1be741d7591eac49aa200aa59faa8074697adc5670eb45
6
+ metadata.gz: ef8c3e377d4095d3101bef4b02a74fde174dce4b291df685ab28328058f9be902cab261576a0d293c526cde469294fcf7e4c9faee02077156fb64cdcf5c9f46d
7
+ data.tar.gz: e848b6e38465db16c3955ddf97d8f71c85a85a6d5514ae9d33f29d8c0e4a2c7ca2dbeccccbde1d0305582a71353be6bf7ed2c1a84f038bc2e70e3b7a2814c2bc
data/CHANGELOG.md ADDED
@@ -0,0 +1,6 @@
1
+ ## 1.0.0 (2015-03-02)
2
+
3
+
4
+ #### Features
5
+
6
+ * **app:** release
data/README.md CHANGED
@@ -5,16 +5,72 @@
5
5
 
6
6
  ## Usage
7
7
 
8
+ **Cron for GitHub**, you can kick GitHub by creating branch. This also wakes web-hooks up!
9
+
10
+ ```
11
+ $ cron-for-github ping --slug=YOU/YOUR_REPO
12
+ ```
13
+
14
+ After few seconds, your repo has a new branch `cron_for_github/da0535a2-9523-42e3-bae2-a2e682b2f437`.
15
+ `da0535a2-9523-42e3-bae2-a2e682b2f437` is uuid.
16
+
8
17
  ## Command
9
18
 
19
+ ```
20
+ Commands:
21
+ cron-for-github clear --slug=SLUG # Delete cron branches
22
+ cron-for-github help [COMMAND] # Describe available commands or one specific command
23
+ cron-for-github ping --slug=SLUG # Kick cron
24
+ cron-for-github version # Show the CronForGithub version
25
+
26
+ Usage:
27
+ cron-for-github ping --slug=SLUG
28
+
29
+ Options:
30
+ [--debug], [--no-debug]
31
+ [--verbose], [--no-verbose]
32
+ --slug=SLUG
33
+ [--namespace=NAMESPACE]
34
+ # Default: cron_for_github
35
+ [--base=BASE]
36
+ # Default: master
37
+
38
+ Kick cron
39
+
40
+ Usage:
41
+ cron-for-github clear --slug=SLUG
42
+
43
+ Options:
44
+ [--debug], [--no-debug]
45
+ [--verbose], [--no-verbose]
46
+ --slug=SLUG
47
+ [--namespace=NAMESPACE]
48
+ # Default: cron_for_github
49
+
50
+ Delete cron branches
51
+ ```
52
+
10
53
  ## VS.
11
54
 
55
+ ### [traviscron.pythonanywhere.com](http://traviscron.pythonanywhere.com/)
56
+
57
+ Good service for Travis-CI. This requires form submitting, and only for Travis-CI.
58
+
12
59
  ### [Tachikoma.io](http://tachikoma.io)
13
60
 
14
61
  Dependency Update as a Service.
15
62
  This is only dependency update, so problem specific SaaS.
16
63
  If you NEVER want to maintenance your server (include Heroku), Tachikoma.io suits you.
17
64
 
65
+ ### [zapier](https://zapier.com/)/[ifttt](https://ifttt.com/)
66
+
67
+ I don't know how to achieve yet.
68
+
69
+ ### Build periodically travis-ci/travis-ci
70
+
71
+ We solve this! :)
72
+ [Build periodically travis-ci/travis-ci](https://github.com/travis-ci/travis-ci/issues/582)
73
+
18
74
  ## Installation
19
75
 
20
76
  Add this line to your application's Gemfile:
@@ -31,6 +87,10 @@ Or install it yourself as:
31
87
 
32
88
  $ gem install cron_for_github
33
89
 
90
+ ## Requirement
91
+
92
+ Set `GITHUB_ACCESS_TOKEN=__your_access_token__` to your environment variable.
93
+
34
94
  ## Development
35
95
 
36
96
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/console` for an interactive prompt that will allow you to experiment. Run `bundle exec cron_for_github` to use the code located in this directory, ignoring other installed copies of this gem.
@@ -8,6 +8,7 @@ require 'cron_for_github/ping'
8
8
  require 'cron_for_github/version'
9
9
 
10
10
  module CronForGithub
11
+ ISSUE_URL = 'https://github.com/packsaddle/ruby-cron_for_github/issues/new'
11
12
  def self.default_logger
12
13
  logger = Logger.new(STDERR)
13
14
  logger.progname = 'CronForGithub'
@@ -19,14 +19,16 @@ module CronForGithub
19
19
  option :slug, type: :string, required: true
20
20
  option :namespace, type: :string, default: Ping::NAMESPACE
21
21
  def clear
22
- if options[:debug]
23
- logger.level = Logger::DEBUG
24
- elsif options[:verbose]
25
- logger.level = Logger::INFO
26
- end
27
- logger.debug(options)
22
+ setup_logger(options)
28
23
 
29
- Ping.new.clear(options.select { |k, _| [:slug, :namespace].include?(k) })
24
+ params = {
25
+ slug: options[:slug],
26
+ namespace: options[:namespace]
27
+ }
28
+ Ping.new.clear(params)
29
+ rescue StandardError => e
30
+ suggest_messages(options)
31
+ raise e
30
32
  end
31
33
 
32
34
  desc 'ping', 'Kick cron'
@@ -36,20 +38,39 @@ module CronForGithub
36
38
  option :namespace, type: :string, default: Ping::NAMESPACE
37
39
  option :base, type: :string, default: Ping::BASE
38
40
  def ping
39
- if options[:debug]
40
- logger.level = Logger::DEBUG
41
- elsif options[:verbose]
42
- logger.level = Logger::INFO
43
- end
44
- logger.debug(options)
41
+ setup_logger(options)
45
42
 
46
- Ping.new.ping(options.select { |k, _| [:slug, :namespace, :base].include?(k) })
43
+ params = {
44
+ slug: options[:slug],
45
+ namespace: options[:namespace],
46
+ base: options[:base]
47
+ }
48
+ Ping.new.ping(params)
49
+ rescue StandardError => e
50
+ suggest_messages(options)
51
+ raise e
47
52
  end
48
53
 
49
54
  no_commands do
50
55
  def logger
51
56
  ::CronForGithub.logger
52
57
  end
58
+
59
+ def setup_logger(options)
60
+ if options[:debug]
61
+ logger.level = Logger::DEBUG
62
+ elsif options[:verbose]
63
+ logger.level = Logger::INFO
64
+ end
65
+ logger.debug(options)
66
+ end
67
+
68
+ def suggest_messages(options)
69
+ logger.error 'Please report from here:'
70
+ logger.error ISSUE_URL
71
+ logger.error 'options:'
72
+ logger.error options
73
+ end
53
74
  end
54
75
  end
55
76
  end
@@ -5,25 +5,54 @@ module CronForGithub
5
5
  end
6
6
 
7
7
  def latest_sha(slug, head_ref)
8
- client.ref(slug, head_ref).object.sha
8
+ response = client.ref(slug, head_ref)
9
+ logger.debug(response)
10
+ response.object.sha
9
11
  end
10
12
 
11
13
  def create_ref(slug, expected_ref, sha)
12
- client.create_ref(slug, expected_ref, sha)
14
+ logger.info('ref creating')
15
+ logger.info(slug: slug, ref: expected_ref)
16
+ return_ref = client.create_ref(slug, expected_ref, sha)
17
+ logger.info('ref created')
18
+ logger.debug(return_ref)
19
+ return_ref
13
20
  end
14
21
 
15
22
  def refs(slug, refs_prefix)
16
23
  client
17
24
  .refs(slug, refs_prefix)
18
25
  .map(&:ref)
26
+ .map { |ref| remove_prefix_refs(ref) }
27
+ rescue Octokit::NotFound
28
+ logger.info('no repos exist:')
29
+ logger.info(slug: slug, refs_prefix: refs_prefix)
30
+ []
19
31
  end
20
32
 
21
33
  def delete_ref(slug, ref)
22
- client.delete_ref(slug, ref)
34
+ logger.info('ref deleting')
35
+ logger.info(slug: slug, ref: ref)
36
+ return_ref = client.delete_ref(slug, ref)
37
+ logger.info('ref deleted')
38
+ logger.debug(return_ref)
39
+ return_ref
23
40
  end
24
41
 
25
42
  def access_token
26
43
  ENV['GITHUB_ACCESS_TOKEN']
27
44
  end
45
+
46
+ # remove refs/ from "refs/heads/ping/foo-bar"
47
+ def remove_prefix_refs(ref)
48
+ regex = %r{\Arefs/(?<stripped_ref>.+)\Z}
49
+ match = regex.match(ref)
50
+ fail InvalidRefPrefixError, "ref: #{ref}" unless match
51
+ match[:stripped_ref]
52
+ end
53
+
54
+ def logger
55
+ ::CronForGithub.logger
56
+ end
28
57
  end
29
58
  end
@@ -1,4 +1,6 @@
1
1
  module CronForGithub
2
2
  class CronForGithubError < StandardError; end
3
3
  class NeedSlugError < CronForGithubError; end
4
+ class InvalidRefPrefixError < CronForGithubError; end
5
+ class ReservedNamespaceError < CronForGithubError; end
4
6
  end
@@ -1,13 +1,24 @@
1
1
  module CronForGithub
2
2
  class Ping
3
- NAMESPACE = 'cron'
3
+ NAMESPACE = 'cron_for_github'
4
4
  BASE = 'master'
5
+ RESERVED_REFS = %w(
6
+ tags
7
+ gh-pages
8
+ master
9
+ branches
10
+ trunk
11
+ feature
12
+ develop
13
+ release
14
+ hotfix
15
+ )
5
16
 
6
17
  def ping(params)
7
18
  client = Client.new
8
19
  slug = decide_slug(params[:slug])
9
20
  head_ref = decide_head_ref(params[:base])
10
- cron_ref = decide_cron_ref(params[:namespace])
21
+ cron_ref = decide_cron_ref(params[:namespace], __method__)
11
22
 
12
23
  latest_sha = client.latest_sha(slug, head_ref)
13
24
  client.create_ref(slug, cron_ref, latest_sha)
@@ -22,32 +33,33 @@ module CronForGithub
22
33
  "heads/#{text}"
23
34
  end
24
35
 
25
- def decide_cron_ref(text)
26
- text = NAMESPACE if !text || text.empty?
27
- "heads/#{text}/#{SecureRandom.uuid}"
36
+ def decide_cron_ref(text, caller = nil)
37
+ "#{decide_cron_ref_prefix(text, caller)}#{SecureRandom.uuid}"
28
38
  end
29
39
 
30
40
  def clear(params)
31
41
  client = Client.new
32
42
  slug = decide_slug(params[:slug])
33
- cron_refs_prefix = decide_cron_refs_prefix(params[:namespace])
43
+ cron_ref_prefix = decide_cron_ref_prefix(params[:namespace])
34
44
 
35
- cron_refs = client.refs(slug, cron_refs_prefix)
45
+ cron_refs = client.refs(slug, cron_ref_prefix)
36
46
  cron_refs
37
- .map { |ref| convert_ref(ref) }
38
47
  .each do |clear_ref|
39
48
  client.delete_ref(slug, clear_ref)
40
49
  end
41
50
  end
42
51
 
43
- # remove refs/ from "refs/heads/ping/foo-bar"
44
- def convert_ref(ref)
45
- ref
46
- end
47
-
48
- def decide_cron_refs_prefix(text)
52
+ def decide_cron_ref_prefix(text, caller = nil)
53
+ if caller != :ping && RESERVED_REFS.include?(text)
54
+ fail ReservedNamespaceError, \
55
+ %("#{text}" is reserved. List: #{RESERVED_REFS.join(', ')})
56
+ end
49
57
  text = NAMESPACE if !text || text.empty?
50
58
  "heads/#{text}/"
51
59
  end
60
+
61
+ def logger
62
+ ::CronForGithub.logger
63
+ end
52
64
  end
53
65
  end
@@ -1,3 +1,3 @@
1
1
  module CronForGithub
2
- VERSION = '0.0.1.beta'
2
+ VERSION = '1.0.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cron_for_github
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1.beta
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - sanemat
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-03-01 00:00:00.000000000 Z
11
+ date: 2015-03-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -90,6 +90,7 @@ extra_rdoc_files: []
90
90
  files:
91
91
  - ".gitignore"
92
92
  - ".rubocop.yml"
93
+ - CHANGELOG.md
93
94
  - CODE_OF_CONDUCT.md
94
95
  - Gemfile
95
96
  - LICENSE.txt
@@ -120,9 +121,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
120
121
  version: '0'
121
122
  required_rubygems_version: !ruby/object:Gem::Requirement
122
123
  requirements:
123
- - - ">"
124
+ - - ">="
124
125
  - !ruby/object:Gem::Version
125
- version: 1.3.1
126
+ version: '0'
126
127
  requirements: []
127
128
  rubyforge_project:
128
129
  rubygems_version: 2.4.5