papa 0.1.0 → 0.2.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
  SHA1:
3
- metadata.gz: baa63ed9a4682f55dff53db355e5af29448bc4ab
4
- data.tar.gz: 5513f134da10af2b98048a6c988840ed2668939d
3
+ metadata.gz: 71de33eed576744cad1400a5d795616b436d8146
4
+ data.tar.gz: e2a1e530d112d5c819d487c1804e31d119d76cdb
5
5
  SHA512:
6
- metadata.gz: 22a55a5b2b748a4eb98662d1be83392fc7826e117297127c6ecc31dabddbbd562b30106b64cc2d0036516aa211abe400f618c18be8b56ed96f40565ae9e744a6
7
- data.tar.gz: 272a9e587e4b100ed4418397a49a4ff88429aea3277961756dbd323638d3eff1b09108ff4cb114b66c6cd25501ad5958b89b4d6dcfce66bc868ff5a870f6b0be
6
+ metadata.gz: 1e686d587e3b4d15b6a72da07663e270b97eef6f7bfa5e1c190a4ad234af3a558605005ad9805cb4ad849647f45070de2792fa692ac5cbb35950f56b804e9a76
7
+ data.tar.gz: f9f40abba6bddd80576d0d8a76b704262415430b712c42a34c207a45fe826d46f8337f7758d3698bec5bcc194eb441fa192047d29fbc1b4e91a7f1a5fb8436c7
data/CHANGELOG.md CHANGED
@@ -0,0 +1,11 @@
1
+ # Changelog
2
+
3
+ ## 0.2.0
4
+ * Added `integration [start]`
5
+ * Added `deploy` via larga
6
+ * Hard reset local feature and bugfix branches to remote versions before adding
7
+
8
+ ## 0.1.0
9
+ * Initial release
10
+ * Added `release [start, add, finish]`, `hotfix [start, add, finish]` and `sandbox [generate]` commands
11
+ * Added simple error handling for some git commands for when they fail
File without changes
@@ -0,0 +1,13 @@
1
+ module Papa
2
+ class Integration < Thor
3
+ desc 'start', 'Start an integration branch'
4
+ option :base_branch, aliases: '-b', required: true
5
+ def start
6
+ base_branch = options[:base_branch]
7
+
8
+ require 'papa/common/start'
9
+ require 'papa/integration/start'
10
+ Integration::Start.new(base_branch: base_branch).run
11
+ end
12
+ end
13
+ end
File without changes
File without changes
data/lib/papa/cli.rb CHANGED
@@ -1,7 +1,8 @@
1
1
  require 'papa/common'
2
- require 'papa/release'
3
- require 'papa/hotfix'
4
- require 'papa/sandbox'
2
+ require 'papa/cli/release'
3
+ require 'papa/cli/hotfix'
4
+ require 'papa/cli/integration'
5
+ require 'papa/cli/sandbox'
5
6
 
6
7
  module Papa
7
8
  class CLI < Thor
@@ -11,6 +12,22 @@ module Papa
11
12
  desc 'hotfix [COMMAND]', 'Perform actions on hotfix branches'
12
13
  subcommand 'hotfix', Hotfix
13
14
 
15
+ desc 'integration [COMMAND]', 'Perform actions on integration branches'
16
+ subcommand 'integration', Integration
17
+
18
+ desc 'deploy', 'Deploy a branch with larga'
19
+ option :branch, aliases: '-b', required: true
20
+ option :hostname, aliases: '-h'
21
+ def deploy
22
+ require 'papa/deploy'
23
+ require 'papa/larga'
24
+
25
+ branch = options[:branch]
26
+ hostname = options[:hostname]
27
+
28
+ Deploy.new(branch: branch, hostname: hostname).run
29
+ end
30
+
14
31
  desc 'sandbox [COMMAND]', 'Test out papa in a sandboxed git environment'
15
32
  subcommand 'sandbox', Sandbox
16
33
  end
data/lib/papa/command.rb CHANGED
@@ -2,15 +2,21 @@ module Papa
2
2
  class Command
3
3
  attr_accessor :command, :output, :exit_status
4
4
 
5
- def initialize(command)
5
+ def initialize(command, options = {})
6
6
  @command = command
7
7
  @output = nil
8
8
  @exit_status = nil
9
+ @output_redirect =
10
+ if options[:silent]
11
+ Output::REDIRECT_TO_NULL
12
+ else
13
+ ''
14
+ end
9
15
  end
10
16
 
11
17
  def run
12
18
  return if @command.nil?
13
- output = `#{@command} #{Output::REDIRECT_TO_NULL}`
19
+ output = `#{@command} #{@output_redirect}`
14
20
  exit_status = $?.exitstatus
15
21
  @output = output
16
22
  @exit_status = exit_status
@@ -22,11 +28,11 @@ module Papa
22
28
  end
23
29
 
24
30
  def cleanup
25
- Output.stderr 'Cleaning up...'
31
+ # Override me
26
32
  end
27
33
 
28
34
  def success?
29
- @exit_status == 0
35
+ !failed?
30
36
  end
31
37
 
32
38
  def failed?
@@ -11,6 +11,7 @@ module Papa
11
11
  queue.add Git.fetch(remote: 'origin')
12
12
  queue.add Git.checkout(branch_name: @build_branch)
13
13
  queue.add Git.checkout(branch_name: branch)
14
+ queue.add Git.hard_reset(remote: 'origin', branch_name: branch)
14
15
  queue.add Git.rebase(base_branch_name: @build_branch)
15
16
  queue.add Git.force_push(remote: 'origin', branch_name: branch)
16
17
  queue.add Git.checkout(branch_name: @build_branch)
@@ -0,0 +1,48 @@
1
+ module Papa
2
+ class Deploy
3
+ def initialize(options = {})
4
+ @options = options
5
+ build_options
6
+ end
7
+
8
+ def run
9
+ queue = CommandQueue.new
10
+ queue.add Larga.type
11
+ queue.add Larga.deploy(@options)
12
+ if queue.run
13
+ success_message
14
+ else
15
+ failure_message
16
+ exit 1
17
+ end
18
+ end
19
+
20
+ private
21
+
22
+ def success_message
23
+ Output.stdout 'Successfully deployed larga instance.'
24
+ end
25
+
26
+ def failure_message
27
+ # TODO
28
+ end
29
+
30
+ def build_options
31
+ return if !branch_is_release_or_hotfix?
32
+ @options[:lifespan] = Larga::RELEASE_OR_HOTFIX_LIFESPAN
33
+ @options[:protection] = Larga::RELEASE_OR_HOTFIX_PROTECTION
34
+ end
35
+
36
+ def branch_is_release_or_hotfix?
37
+ branch_is_release? || branch_is_hotfix?
38
+ end
39
+
40
+ def branch_is_release?
41
+ @options[:branch].include? 'release'
42
+ end
43
+
44
+ def branch_is_hotfix?
45
+ @options[:branch].include? 'hotfix'
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,13 @@
1
+ module Papa
2
+ class Git::Fetch < Command
3
+ def initialize(remote)
4
+ command = "git fetch #{remote}"
5
+ super(command)
6
+ end
7
+
8
+ def failure_message
9
+ super
10
+ Output.stderr 'ERROR: Make sure origin exists and you have a working Internet connection'
11
+ end
12
+ end
13
+ end
data/lib/papa/git.rb CHANGED
@@ -5,11 +5,14 @@ module Papa
5
5
  end
6
6
 
7
7
  def self.fetch(remote:)
8
- Command.new "git fetch #{remote}"
8
+ require 'papa/git/fetch'
9
+
10
+ Git::Fetch.new(remote)
9
11
  end
10
12
 
11
13
  def self.checkout(branch_name:)
12
14
  require 'papa/git/checkout'
15
+
13
16
  Git::Checkout.new(branch_name)
14
17
  end
15
18
 
@@ -23,6 +26,7 @@ module Papa
23
26
 
24
27
  def self.merge(branch_name:)
25
28
  require 'papa/git/merge'
29
+
26
30
  Git::Merge.new(branch_name)
27
31
  end
28
32
 
@@ -44,6 +48,7 @@ module Papa
44
48
 
45
49
  def self.rebase(base_branch_name:)
46
50
  require 'papa/git/rebase'
51
+
47
52
  Git::Rebase.new(base_branch_name)
48
53
  end
49
54
 
@@ -58,5 +63,9 @@ module Papa
58
63
  def self.push_tag(remote:, tag_name:)
59
64
  push(remote: remote, branch_name: tag_name)
60
65
  end
66
+
67
+ def self.hard_reset(remote:, branch_name:)
68
+ Command.new "git reset --hard #{remote}/#{branch_name}"
69
+ end
61
70
  end
62
71
  end
@@ -0,0 +1,17 @@
1
+ require 'date'
2
+
3
+ module Papa
4
+ class Integration::Start < Common::Start
5
+ def initialize(base_branch:)
6
+ @build_type = 'integration'
7
+ @base_branch = base_branch
8
+ @build_branch = generate_integration_branch_name
9
+ end
10
+
11
+ private
12
+
13
+ def generate_integration_branch_name
14
+ "integration/#{DateTime.now.strftime('%y.%m.%d.%H.%M').gsub('.0', '.')}"
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,36 @@
1
+ module Papa
2
+ class Larga::Deploy < Command
3
+ def initialize(branch, lifespan, protection, hostname)
4
+ @branch = branch
5
+ @lifespan = lifespan
6
+ @protection = protection
7
+ @hostname = hostname
8
+
9
+ command = "larga #{build_options.join(' ')}"
10
+ super(command, silent: false)
11
+ end
12
+
13
+ def failed?
14
+ @output.include? 'Cowardly refusing'
15
+ end
16
+
17
+ def failure_message
18
+ super
19
+ Output.stderr 'ERROR: Ensure that the branch exists before trying again'
20
+ end
21
+
22
+ private
23
+
24
+ def build_options()
25
+ options = []
26
+ options << '-action deploy'
27
+ options << "-branch #{@branch}"
28
+ options << "-lifespan #{@lifespan}"
29
+ options << "-protection #{@protection}"
30
+ if @hostname
31
+ options << "-hostname #{@hostname}"
32
+ end
33
+ options
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,12 @@
1
+ module Papa
2
+ class Larga::Type < Command
3
+ def initialize
4
+ super('type larga')
5
+ end
6
+
7
+ def failure_message
8
+ super
9
+ Output.stderr 'Larga is not installed in this system'
10
+ end
11
+ end
12
+ end
data/lib/papa/larga.rb ADDED
@@ -0,0 +1,18 @@
1
+ module Papa
2
+ class Larga
3
+ RELEASE_OR_HOTFIX_LIFESPAN = '3d'
4
+ DEFAULT_LIFESPAN = '4h'
5
+ RELEASE_OR_HOTFIX_PROTECTION = 'off'
6
+ DEFAULT_PROTECTION = 'on'
7
+
8
+ def self.type
9
+ Larga::Type.new
10
+ end
11
+
12
+ def self.deploy(branch:, lifespan: DEFAULT_LIFESPAN, protection: DEFAULT_PROTECTION, hostname: nil)
13
+ require 'papa/larga/deploy'
14
+
15
+ Larga::Deploy.new(branch, lifespan, protection, hostname)
16
+ end
17
+ end
18
+ end
@@ -99,7 +99,7 @@ module Papa
99
99
  end
100
100
 
101
101
  def clone_remote_repository
102
- Command.new("git clone #{@remote_repository_directory} #{@local_repository_directory}").run
102
+ Command.new("git clone #{@remote_repository_directory} #{@local_repository_directory}", silent: true).run
103
103
  Dir.chdir @local_repository_directory
104
104
  end
105
105
 
data/lib/papa/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Papa
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: papa
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - boggs
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-09-06 00:00:00.000000000 Z
11
+ date: 2017-09-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -85,27 +85,34 @@ files:
85
85
  - exe/papa
86
86
  - lib/papa.rb
87
87
  - lib/papa/cli.rb
88
+ - lib/papa/cli/hotfix.rb
89
+ - lib/papa/cli/integration.rb
90
+ - lib/papa/cli/release.rb
91
+ - lib/papa/cli/sandbox.rb
88
92
  - lib/papa/command.rb
89
93
  - lib/papa/command_queue.rb
90
94
  - lib/papa/common.rb
91
95
  - lib/papa/common/add.rb
92
96
  - lib/papa/common/finish.rb
93
97
  - lib/papa/common/start.rb
98
+ - lib/papa/deploy.rb
94
99
  - lib/papa/git.rb
95
100
  - lib/papa/git/checkout.rb
101
+ - lib/papa/git/fetch.rb
96
102
  - lib/papa/git/merge.rb
97
103
  - lib/papa/git/rebase.rb
98
- - lib/papa/hotfix.rb
99
104
  - lib/papa/hotfix/add.rb
100
105
  - lib/papa/hotfix/finish.rb
101
106
  - lib/papa/hotfix/start.rb
107
+ - lib/papa/integration/start.rb
108
+ - lib/papa/larga.rb
109
+ - lib/papa/larga/deploy.rb
110
+ - lib/papa/larga/type.rb
102
111
  - lib/papa/output.rb
103
- - lib/papa/release.rb
104
112
  - lib/papa/release/add.rb
105
113
  - lib/papa/release/finish.rb
106
114
  - lib/papa/release/patch.rb
107
115
  - lib/papa/release/start.rb
108
- - lib/papa/sandbox.rb
109
116
  - lib/papa/sandbox/branches/bugfix/4-fix-charmeleon-spelling/Gemfile
110
117
  - lib/papa/sandbox/branches/bugfix/5-fix-gem-source/Gemfile
111
118
  - lib/papa/sandbox/branches/feature/1-add-butterfree-gem/Gemfile