capistrano-dockerbuild 0.1.0 → 0.2.1

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
- SHA1:
3
- metadata.gz: 20a884c1147fd81d4f831378fd286fedf5498d4a
4
- data.tar.gz: 227ca91c65a6227320fb8b275befc12cca072ba1
2
+ SHA256:
3
+ metadata.gz: 7580dbb05690bf6529b2fa5c84cf8c31c8d38b3335858af7aa3afdfcda8a8d7d
4
+ data.tar.gz: 691b01a48a7ff2aca50ca20ddcfd93275bc5b77ce27f43e7843564fbeac61d83
5
5
  SHA512:
6
- metadata.gz: a3ee23aff127683494ba9ddd071492e4d197b3a21e9ff400924e99017d9f2d82379beeba57802e2071c95048b5d56d508e7ee08e243f66f7a881576dc699cb1a
7
- data.tar.gz: 273a531f78913872dd10e2ebf288f16978e3dde3bbbaba9e273c4dccf22aadaa2ead72599329badc3b7aefd7a45c1090ae6d7fccd77bb47be0b79c36dbde354c
6
+ metadata.gz: e5a7110eb23e53fd10aa05df4520690637e41a08847b788dd510f7b6ec5b8f48a2ff8919431873ce3e0f15b68ad5e07d0296aff8d4f13503bfacb38946eb0751
7
+ data.tar.gz: a94036ec200c90d80fe321cbb1519e52c933a09d2db08a292d4375b96fd32a072e4c622af238faa85b2d39aa0a6c85255c5be52ea65f69a1abc38fbcb46183f6
data/README.md CHANGED
@@ -50,7 +50,24 @@ Use common variables
50
50
  | docker_remote_tag | no | `-> { fetch(:docker_tag) }` | Use by `docker push docker_registry/docker_remote_repository_name:{{docker_remote_tag}}` |
51
51
  | docker_remote_tag_full | no | `-> { "#{fetch(:docker_registry) &.+ "/"}#{fetch(:docker_remote_repository_name)}:#{fetch(:docker_remote_tag)}" }` | Use by `docker push {{docker_remote_tag_full}}` |
52
52
  | keep_docker_image_count | no | 10 | |
53
+ | git_http_username | no | nil | See below |
54
+ | git_http_password | no | nil | See below |
53
55
 
56
+ If you want to use GitHub Apps installation access token or something to authorize repository access using HTTPS protocol. You can set variables in your config/deploy.rb:
57
+
58
+ ```ruby
59
+ set :git_http_username, -> { ENV["GIT_HTTP_USERNAME"] }
60
+ set :git_http_password, -> { ENV["GIT_HTTP_PASSWORD"] }
61
+ set :repo_url, -> do
62
+ if fetch(:git_http_username) && fetch(:git_http_password)
63
+ "https://github.com/owner/repo.git"
64
+ else
65
+ "git@github.com:owner/repo.git"
66
+ end
67
+ end
68
+ ```
69
+
70
+ Update remote URL always if you set proper value to all of `repo_url`, `git_http_username`, and `git_http_password`.
54
71
 
55
72
  ## Tasks
56
73
 
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "capistrano-dockerbuild"
7
- spec.version = "0.1.0"
7
+ spec.version = "0.2.1"
8
8
  spec.authors = ["joker1007"]
9
9
  spec.email = ["kakyoin.hierophant@gmail.com"]
10
10
 
@@ -22,6 +22,6 @@ Gem::Specification.new do |spec|
22
22
 
23
23
  spec.add_runtime_dependency "capistrano", ">= 3.2"
24
24
 
25
- spec.add_development_dependency "bundler", "~> 1.15"
26
- spec.add_development_dependency "rake", "~> 10.0"
25
+ spec.add_development_dependency "bundler", "~> 2.3"
26
+ spec.add_development_dependency "rake", "~> 13.0"
27
27
  end
@@ -1,3 +1,6 @@
1
+ require "cgi"
2
+ require "uri"
3
+
1
4
  class Capistrano::Dockerbuild < Capistrano::Plugin
2
5
  def set_defaults
3
6
  set_if_empty :docker_build_cmd, -> { [:docker, "build", "-t", fetch(:docker_tag_full), "."] }
@@ -7,7 +10,10 @@ class Capistrano::Dockerbuild < Capistrano::Plugin
7
10
  set_if_empty :docker_remote_repository_name, -> { fetch(:docker_repository_name) }
8
11
  set_if_empty :docker_remote_tag, -> { fetch(:docker_tag) }
9
12
  set_if_empty :docker_remote_tag_full, -> { "#{fetch(:docker_registry) &.+ "/"}#{fetch(:docker_remote_repository_name)}:#{fetch(:docker_remote_tag)}" }
13
+ set_if_empty :docker_latest_tag, false
10
14
  set_if_empty :keep_docker_image_count, 10
15
+ set_if_empty :git_gc_prune_date, "3.days.ago"
16
+ set_if_empty :docker_build_no_worktree, false
11
17
  end
12
18
 
13
19
  def define_tasks
@@ -18,4 +24,19 @@ class Capistrano::Dockerbuild < Capistrano::Plugin
18
24
  raise "Need to set :docker_build_base_dir" unless fetch(:docker_build_base_dir)
19
25
  Pathname(fetch(:docker_build_base_dir))
20
26
  end
27
+
28
+ def git_repo_url
29
+ if fetch(:git_http_username) && fetch(:git_http_password)
30
+ URI.parse(repo_url).tap do |repo_uri|
31
+ repo_uri.user = fetch(:git_http_username)
32
+ repo_uri.password = CGI.escape(fetch(:git_http_password))
33
+ end.to_s
34
+ elsif fetch(:git_http_username)
35
+ URI.parse(repo_url).tap do |repo_uri|
36
+ repo_uri.user = fetch(:git_http_username)
37
+ end.to_s
38
+ else
39
+ repo_url
40
+ end
41
+ end
21
42
  end
@@ -5,18 +5,28 @@ namespace :docker do
5
5
  task :check do
6
6
  on fetch(:docker_build_server_host) do
7
7
  execute :mkdir, "-p", dockerbuild_plugin.docker_build_base_path.dirname.to_s
8
- execute :git, :'ls-remote', repo_url, "HEAD"
8
+ execute :git, :'ls-remote', dockerbuild_plugin.git_repo_url, "HEAD"
9
9
  end
10
10
  end
11
11
 
12
12
  desc "Clone the repo to docker build base directory"
13
13
  task :clone => [:'docker:check'] do
14
14
  on fetch(:docker_build_server_host) do
15
- if test " [ -f #{dockerbuild_plugin.docker_build_base_path}/HEAD ] "
16
- info t(:mirror_exists, at: dockerbuild_plugin.docker_build_base_path.to_s)
15
+ if fetch(:docker_build_no_worktree)
16
+ if test " [ -f #{dockerbuild_plugin.docker_build_base_path}/.git/HEAD ] "
17
+ info "The repository is at #{dockerbuild_plugin.docker_build_base_path}"
18
+ else
19
+ within dockerbuild_plugin.docker_build_base_path.dirname do
20
+ execute :git, :clone, dockerbuild_plugin.git_repo_url, dockerbuild_plugin.docker_build_base_path.to_s
21
+ end
22
+ end
17
23
  else
18
- within dockerbuild_plugin.docker_build_base_path.dirname do
19
- execute :git, :clone, "--mirror", repo_url, dockerbuild_plugin.docker_build_base_path.to_s
24
+ if test " [ -f #{dockerbuild_plugin.docker_build_base_path}/HEAD ] "
25
+ info t(:mirror_exists, at: dockerbuild_plugin.docker_build_base_path.to_s)
26
+ else
27
+ within dockerbuild_plugin.docker_build_base_path.dirname do
28
+ execute :git, :clone, "--mirror", dockerbuild_plugin.git_repo_url, dockerbuild_plugin.docker_build_base_path.to_s
29
+ end
20
30
  end
21
31
  end
22
32
  end
@@ -26,6 +36,7 @@ namespace :docker do
26
36
  task update_mirror: :'docker:clone' do
27
37
  on fetch(:docker_build_server_host) do
28
38
  within dockerbuild_plugin.docker_build_base_path do
39
+ execute :git, :remote, "set-url", :origin, dockerbuild_plugin.git_repo_url
29
40
  execute :git, :remote, :update, "--prune"
30
41
  end
31
42
  end
@@ -35,20 +46,26 @@ namespace :docker do
35
46
  task :build => [:'docker:update_mirror'] do
36
47
  on fetch(:docker_build_server_host) do
37
48
  within dockerbuild_plugin.docker_build_base_path do
38
- timestamp = Time.now.to_i
39
- worktree_dir_name = "worktree-#{fetch(:docker_tag)}-#{timestamp}"
49
+ if fetch(:docker_build_no_worktree)
50
+ commands = "sha1=$(git rev-parse #{fetch(:branch)}); git reset --hard ${sha1}; #{fetch(:docker_build_cmd).map {|c| c.to_s.shellescape }.join(" ")}"
51
+ execute(:flock, "capistrano_dockerbuild.lock", "-c", "'#{commands}'")
52
+ else
53
+ timestamp = Time.now.to_i
54
+ git_sha1 = `git rev-parse #{fetch(:branch)}`.chomp
55
+ worktree_dir_name = "worktree-#{git_sha1}-#{timestamp}"
40
56
 
41
- execute(:git, :worktree, :add, worktree_dir_name, fetch(:branch))
57
+ execute(:git, :worktree, :add, worktree_dir_name, git_sha1)
42
58
 
43
- begin
44
- within worktree_dir_name do
45
- execute(*fetch(:docker_build_cmd))
59
+ begin
60
+ within worktree_dir_name do
61
+ execute(*fetch(:docker_build_cmd))
62
+ end
63
+ ensure
64
+ execute(:rm, "-rf", worktree_dir_name)
65
+ execute(:git, :worktree, :prune)
66
+ # Execute "git gc" manually to avoid "There are too many unreachable loose objects" warning
67
+ execute(:git, :gc, "--auto", "--prune=#{fetch(:git_gc_prune_date)}")
46
68
  end
47
- ensure
48
- execute(:rm, "-rf", worktree_dir_name)
49
- execute(:git, :worktree, :prune)
50
- # Execute "git gc" manually to avoid "There are too many unreachable loose objects" warning
51
- execute(:git, :gc, "--auto", "--prune=3.days.ago")
52
69
  end
53
70
  end
54
71
  end
@@ -58,6 +75,11 @@ namespace :docker do
58
75
  on fetch(:docker_build_server_host) do
59
76
  execute(:docker, :tag, fetch(:docker_tag_full), fetch(:docker_remote_tag_full))
60
77
  execute(:docker, :push, fetch(:docker_remote_tag_full))
78
+ if fetch(:docker_latest_tag)
79
+ latest_tag = "#{fetch(:docker_registry) &.+ "/"}#{fetch(:docker_remote_repository_name)}:latest"
80
+ execute(:docker, :tag, fetch(:docker_tag_full), latest_tag)
81
+ execute(:docker, :push, latest_tag)
82
+ end
61
83
  end
62
84
  end
63
85
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capistrano-dockerbuild
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - joker1007
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-08-29 00:00:00.000000000 Z
11
+ date: 2024-05-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: capistrano
@@ -30,28 +30,28 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '1.15'
33
+ version: '2.3'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '1.15'
40
+ version: '2.3'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '10.0'
47
+ version: '13.0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '10.0'
54
+ version: '13.0'
55
55
  description: Capistrano task definition for `docker build`
56
56
  email:
57
57
  - kakyoin.hierophant@gmail.com
@@ -73,7 +73,7 @@ homepage: https://github.com/reproio/capistrano-dockerbuild
73
73
  licenses:
74
74
  - MIT
75
75
  metadata: {}
76
- post_install_message:
76
+ post_install_message:
77
77
  rdoc_options: []
78
78
  require_paths:
79
79
  - lib
@@ -88,9 +88,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
88
88
  - !ruby/object:Gem::Version
89
89
  version: '0'
90
90
  requirements: []
91
- rubyforge_project:
92
- rubygems_version: 2.6.12
93
- signing_key:
91
+ rubygems_version: 3.5.9
92
+ signing_key:
94
93
  specification_version: 4
95
94
  summary: Capistrano task definition for `docker build`
96
95
  test_files: []