boxing 0.1.1 → 0.4.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
  SHA256:
3
- metadata.gz: 7aa77750bf2c795fb7a6ec267784bbd62c352a9803729c7ba53e2f00e8536867
4
- data.tar.gz: ec949c8362198e86a3c93b9c7b90da42697e666a2f98e517614e15dafe2234b4
3
+ metadata.gz: 747c1ce612416684731778d49c0b85eaf1630d01a305c9a96494e5828d7c0cbc
4
+ data.tar.gz: fe4025de518fce98279332c9dd5565294966d6b55e6a5bd60bcb09da5672bd8d
5
5
  SHA512:
6
- metadata.gz: 883826c272959026f32ea98284def5e4908b96cf0866f3469bd934e464ffbe813a252b1fb29dc28c55c418e025c5ebf42c6b22cd21fa84da3d7687c2d72c0b11
7
- data.tar.gz: 439823cf586f66dd4180570edbeda8089640c1ff80f7003524b8b34161c40d12ebaf7053dc432617fb3bf0db10844158c01484d17ccca127018b90bc27174603
6
+ metadata.gz: 075d91ba4af2033ca7f2f55d7d3414dbc9b718f882e6531ed854609469a268ca85c13898c3c5c3e571c4039f0a00b3828a54c6493d5717a59cb30312111317b5
7
+ data.tar.gz: 15a7c46db72f0c0e481bfbd6af6abecd69e8ac077b3f66bf971a7c98cbb7e33d33b5f87378b3afeb8126f8d00ab0d80a961b49098c6a161884126f5573e8e28e
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- boxing (0.1.1)
4
+ boxing (0.4.0)
5
5
  bundler (~> 2.0)
6
6
  thor (~> 1.0)
7
7
 
data/README.md CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  The zero-configuration Dockerfile generator for Ruby.
4
4
 
5
+ > The [Database Repository](https://github.com/elct9620/ruby-boxing-db) will be used for package information.
6
+
5
7
  ## Installation
6
8
 
7
9
  Add this line to your application's Gemfile development group:
@@ -66,9 +68,22 @@ To generate `Dockerfile` for current project
66
68
  bundle exec boxing generate
67
69
  ```
68
70
 
71
+ ### Update
72
+
73
+ To update the database for package information
74
+
75
+ ```ruby
76
+ bundle exec boxing update
77
+ ```
78
+
79
+ > If the generated `Dockerfile` is not satisfy, please try to update it.
80
+
69
81
  ## Roadmap
70
82
 
71
83
  * [x] `Dockerfile` generator
84
+ * [x] `.gitignore` generator
85
+ * [x] Common ignore files
86
+ * [ ] Customizable ignore files
72
87
  * [ ] Customize config file `config/boxing.rb`
73
88
  * [ ] Entrypoint Detection
74
89
  * [x] Openbox (Suggested)
@@ -77,12 +92,14 @@ bundle exec boxing generate
77
92
  * [ ] Ruby
78
93
  * [ ] Package Database
79
94
  * [x] Built-in (Move to standalone repoistory in future)
80
- * [ ] Standalone Repoistory
81
- * [ ] Customize Source
95
+ * [x] Standalone Repoistory
96
+ * [x] Support gems from `git` repoistory
97
+ * [x] Customize Source
82
98
  * [ ] Base Image
83
99
  * [x] Alpine
84
100
  * [ ] Ubuntu
85
- * [ ] Ruby Version
101
+ * [ ] Filter by Ruby Version
102
+ * [ ] Filter by Gem Version
86
103
 
87
104
  ## Development
88
105
 
@@ -13,5 +13,6 @@ module Boxing
13
13
  end
14
14
 
15
15
  require_relative 'commands/generate'
16
+ require_relative 'commands/update'
16
17
  end
17
18
  end
@@ -21,7 +21,10 @@ module Boxing
21
21
  #
22
22
  # @since 0.1.0
23
23
  def execute
24
+ Database.download! unless Database.exist?
25
+
24
26
  template('templates/Dockerfile.tt', 'Dockerfile', context: context.to_binding)
27
+ template('templates/dockerignore.tt', '.dockerignore', context: context.to_binding)
25
28
  end
26
29
 
27
30
  private
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Boxing
4
+ # :nodoc:
5
+ module Commands
6
+ # The Database Updater
7
+ #
8
+ # @since 0.3.0
9
+ class Update < Thor::Group
10
+ # Update Database
11
+ #
12
+ # @since 0.3.0
13
+ def execute
14
+ if Database.exist?
15
+ Database.new.update!
16
+ else
17
+ Database.download!
18
+ end
19
+ end
20
+ end
21
+
22
+ Boxing::Command.register(Update, 'update', 'update', 'Update Database')
23
+ end
24
+ end
@@ -20,11 +20,14 @@ module Boxing
20
20
  #
21
21
  # @since 0.1.0
22
22
  def packages
23
- @packages ||= Set.new(
24
- @dependencies
25
- .map(&:name)
26
- .flat_map { |name| @database.package_for(name).to_a }
27
- )
23
+ @packages ||=
24
+ Set
25
+ .new(default_packages)
26
+ .merge(
27
+ @dependencies
28
+ .map(&:name)
29
+ .flat_map { |name| @database.package_for(name).to_a }
30
+ )
28
31
  end
29
32
 
30
33
  # Check rubygems exists
@@ -38,6 +41,29 @@ module Boxing
38
41
  @dependencies.any? { |dep| names.include?(dep.name) }
39
42
  end
40
43
 
44
+ # Does any gem from git
45
+ #
46
+ # @return [TrueClass|FalseClass]
47
+ #
48
+ # @since 0.4.0
49
+ def git?
50
+ pp @dependencies
51
+ @dependencies.any?(&:git)
52
+ end
53
+
54
+ # Default packages
55
+ #
56
+ # @return [Array<Boxing::Package>]
57
+ #
58
+ # @since 0.4.0
59
+ def default_packages
60
+ [
61
+ Package.new('build-base', mode: Package::BUILD)
62
+ ]
63
+ .push(git? ? Package.new('git', mode: Package::BUILD) : nil)
64
+ .compact
65
+ end
66
+
41
67
  # Convert to binding
42
68
  #
43
69
  # @return [Binding]
@@ -9,12 +9,80 @@ module Boxing
9
9
  # @since 0.1.0
10
10
  class Database
11
11
  class << self
12
- # The database root
12
+ # Check for the database exists
13
13
  #
14
- # @since 0.1.0
15
- def root
16
- @root ||= Pathname.new(File.dirname(__FILE__)).join('../../database')
14
+ # @param [String] path
15
+ #
16
+ # @return [TrueClass\FalseClass]
17
+ #
18
+ # @since 0.3.0
19
+ def exist?(path = DEFAULT_PATH)
20
+ File.directory?(path) && !(Dir.entries(path) - %w[. ..]).empty?
21
+ end
22
+
23
+ # Download Database
24
+ #
25
+ # @since 0.3.0
26
+ def download!(path = DEFAULT_PATH)
27
+ command = %w[git clone --quiet]
28
+ command << URL << path.to_s
29
+
30
+ raise DownloadFailed, "failed to download #{URL} to #{path}" unless system(*command)
31
+
32
+ new(path)
33
+ end
34
+ end
35
+
36
+ # @since 0.3.0
37
+ class DownloadFailed < RuntimeError; end
38
+
39
+ # @since 0.3.0
40
+ class UpdateFailed < RuntimeError; end
41
+
42
+ # Git URL of the ruby-boxing-db
43
+ #
44
+ # @since 0.3.0
45
+ URL = 'https://github.com/elct9620/ruby-boxing-db.git'
46
+
47
+ # Path to the user's copy of ruby-boxing-db
48
+ #
49
+ # @since 0.3.0
50
+ USER_PATH = Pathname.new(Gem.user_home).join('.local/share/ruby-boxing-db')
51
+
52
+ # @since 0.3.0
53
+ DEFAULT_PATH = ENV['BOXING_DB'] || USER_PATH
54
+
55
+ # @since 0.3.0
56
+ attr_reader :path
57
+
58
+ # Initialize Database
59
+ #
60
+ # @since 0.3.0
61
+ def initialize(path = DEFAULT_PATH)
62
+ @path = path
63
+ end
64
+
65
+ # The Database is Git Repoistory
66
+ #
67
+ # @return [TrueClass|FalseClass]
68
+ #
69
+ # @since 0.3.0
70
+ def git?
71
+ File.directory?(File.join(@path, '.git'))
72
+ end
73
+
74
+ # Update the database
75
+ #
76
+ # @since 0.3.0
77
+ def update!
78
+ return unless git?
79
+
80
+ Dir.chdir(@path) do
81
+ command = %w[git pull --quiet origin main]
82
+ raise UpdateFailed, "failed to update #{@path}" unless system(*command)
17
83
  end
84
+
85
+ true
18
86
  end
19
87
 
20
88
  # Find packages for rubygems
@@ -41,7 +109,7 @@ module Boxing
41
109
  #
42
110
  # @since 0.1.0
43
111
  def each_package_path_for(name, &block)
44
- Dir.glob(Database.root.join('gems', name, '*.yml'), &block)
112
+ Dir.glob(File.join(@path, 'gems', name, '*.yml'), &block)
45
113
  end
46
114
  end
47
115
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Boxing
4
- VERSION = '0.1.1'
4
+ VERSION = '0.4.0'
5
5
  end
@@ -4,7 +4,7 @@ ARG RUBY_VERSION=<%= RUBY_VERSION %>
4
4
  FROM ruby:${RUBY_VERSION}-alpine AS gem
5
5
  ARG APP_ROOT
6
6
 
7
- RUN apk add --no-cache build-base <%= packages.select(&:build?).join(' ') %>
7
+ RUN apk add --no-cache <%= packages.select(&:build?).join(' ') %>
8
8
 
9
9
  RUN mkdir -p ${APP_ROOT}
10
10
  COPY Gemfile Gemfile.lock ${APP_ROOT}/
@@ -29,9 +29,6 @@ ARG APP_ROOT
29
29
  <%- if packages.select(&:runtime?).any? -%>
30
30
  RUN apk add --no-cache <%= packages.select(&:runtime?).join(' ') %>
31
31
 
32
- ARG REVISION
33
- ENV REVISION $REVISION
34
-
35
32
  <%- end -%>
36
33
  COPY --from=gem /usr/local/bundle/config /usr/local/bundle/config
37
34
  COPY --from=gem /usr/local/bundle /usr/local/bundle
@@ -46,6 +43,9 @@ ENV RAILS_LOG_TO_STDOUT=true
46
43
  ENV APP_ROOT=$APP_ROOT
47
44
 
48
45
  COPY . ${APP_ROOT}
46
+
47
+ ARG REVISION
48
+ ENV REVISION $REVISION
49
49
  RUN echo $REVISION > ${SERVER_ROOT}/REVISION
50
50
 
51
51
  # Apply Execute Permission
@@ -0,0 +1,35 @@
1
+ # Repo
2
+ .git/
3
+
4
+ # Docker
5
+ Dockerfile
6
+ docker-compose*.yml
7
+
8
+ # CI/CD
9
+ .github/
10
+ .cache/
11
+ .circleci/
12
+ coverage/
13
+ spec/
14
+ test/
15
+ features/
16
+ .gitlab-ci.yml
17
+ .travis.yml
18
+
19
+ # Lint/Test
20
+ rspec.xml
21
+ .overcommit.yml
22
+ .rubocop*.yml
23
+
24
+ # Ruby
25
+ .bundle/
26
+ .env
27
+ .env*
28
+
29
+ # Rails
30
+ log/*
31
+ tmp/*
32
+
33
+ # Licensed
34
+ .licensed.yml
35
+ .licenses
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: boxing
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - 蒼時弦也
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-12-21 00:00:00.000000000 Z
11
+ date: 2021-12-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -57,21 +57,17 @@ files:
57
57
  - bin/console
58
58
  - bin/setup
59
59
  - boxing.gemspec
60
- - database/gems/pg/postgresql-dev.yml
61
- - database/gems/pg/postgresql-libs.yml
62
- - database/gems/rails/shared-mime-info.yml
63
- - database/gems/rails/tzdata.yml
64
- - database/gems/sqlite3/sqlite-dev.yml
65
- - database/gems/sqlite3/sqlite-libs.yml
66
60
  - exe/boxing
67
61
  - lib/boxing.rb
68
62
  - lib/boxing/command.rb
69
63
  - lib/boxing/commands/generate.rb
64
+ - lib/boxing/commands/update.rb
70
65
  - lib/boxing/context.rb
71
66
  - lib/boxing/database.rb
72
67
  - lib/boxing/package.rb
73
68
  - lib/boxing/version.rb
74
69
  - templates/Dockerfile.tt
70
+ - templates/dockerignore.tt
75
71
  homepage: https://github.com/elct9620/boxing
76
72
  licenses: []
77
73
  metadata:
@@ -1,2 +0,0 @@
1
- name: postgresql-dev
2
- build: yes
@@ -1,2 +0,0 @@
1
- name: postgresql-libs
2
- runtime: yes
@@ -1,2 +0,0 @@
1
- name: shared-mime-info
2
- runtime: yes
@@ -1,2 +0,0 @@
1
- name: tzdata
2
- runtime: yes
@@ -1,2 +0,0 @@
1
- name: sqlite-dev
2
- build: yes
@@ -1,2 +0,0 @@
1
- name: sqlite-libs
2
- runtime: true