dockerfile-rb 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
  SHA256:
3
- metadata.gz: 0f7550872225ced2ce677f0e8af5022518091692f9b3e85b8e8bf3a464b54e55
4
- data.tar.gz: f6f6bc21c3160f00e9595aa9e8b2933d0143d787bdfaed006699d521cfe267ee
3
+ metadata.gz: 663aa3f090391de7b468e62880fc66e97a5bd7c57a03d0d786f71f75f08f32e6
4
+ data.tar.gz: 9df143eb94746540c6845ec09a68157c337267c612c76bcb918c50fba7c4c3c5
5
5
  SHA512:
6
- metadata.gz: b52821ac6315a6728aaa172458751a4603089539058425e42a01ce1b035556d22a7ae6b922f056073b5e8ebc9603b5a01eeca762aee8f64c67ffbf296001a269
7
- data.tar.gz: b797d2d4510c97a48bee02309ba18a7af726f8266e72913846242f6c6d3811cf3934d1b8ea3fc24fe2838cd4cf2f643ae63e6f15fb88a72b4b5b8c9ffcb143ab
6
+ metadata.gz: 2999672e3c952718aeb3bf011b3b472d6e5ae3a7eca6aef9da8466770fa37662cdfeb19a81b96befd8417e29c11e761259e27bfbdcee9593bbd7933c4dc16963
7
+ data.tar.gz: 7c263c8dd367e0c0bb2fc57590cb851ace3d3fdfd46001179b6fb02e1e475f0ee24693487a6263ebb050eb90895b610c1283dcebd52d718e182b33c2527a5388
@@ -1,6 +1,12 @@
1
1
  name: Rake Test
2
2
 
3
- on: [push]
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ pull_request:
8
+ branches:
9
+ - main
4
10
 
5
11
  jobs:
6
12
  build:
@@ -1,9 +1,8 @@
1
1
  name: Release Gem
2
2
 
3
3
  on:
4
- create:
5
- tags:
6
- - v*
4
+ release:
5
+ types: [published]
7
6
 
8
7
  jobs:
9
8
  build:
data/.gitignore CHANGED
@@ -9,3 +9,5 @@
9
9
 
10
10
  # rspec failure tracking
11
11
  .rspec_status
12
+
13
+ Gemfile.lock
data/CHANGELOG.md ADDED
@@ -0,0 +1,25 @@
1
+ # Changelog
2
+
3
+ ## [v0.2.0](https://github.com/gscho/dockerfile-rb/tree/v0.2.0) (2021-09-29)
4
+
5
+ [Full Changelog](https://github.com/gscho/dockerfile-rb/compare/0.1.0...v0.2.0)
6
+
7
+ **Implemented enhancements:**
8
+
9
+ - Add support for variables [\#4](https://github.com/gscho/dockerfile-rb/pull/4) ([gscho](https://github.com/gscho))
10
+
11
+ **Closed issues:**
12
+
13
+ - variable looks not supported [\#2](https://github.com/gscho/dockerfile-rb/issues/2)
14
+
15
+ ## [0.1.0](https://github.com/gscho/dockerfile-rb/tree/0.1.0) (2020-05-10)
16
+
17
+ [Full Changelog](https://github.com/gscho/dockerfile-rb/compare/1908994ec01bb02077da3fb5efc975c90e591716...0.1.0)
18
+
19
+ **Merged pull requests:**
20
+
21
+ - Update rake requirement from ~\> 10.0 to ~\> 13.0 [\#1](https://github.com/gscho/dockerfile-rb/pull/1) ([dependabot[bot]](https://github.com/apps/dependabot))
22
+
23
+
24
+
25
+ \* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)*
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  ![](https://github.com/gscho/dockerfile-rb/workflows/Rake%20Test/badge.svg)
4
4
 
5
- The intent of this gem is to use a PEG (citrus) to parse a Dockerfile into a Ruby object .
5
+ The intent of this gem is to use a PEG (citrus) to parse a Dockerfile into a hash of Ruby objects.
6
6
 
7
7
  ## Installation
8
8
 
@@ -27,7 +27,8 @@ Example usage:
27
27
  ```
28
28
  require 'dockerfile-rb'
29
29
 
30
- dockerfile = DockerfileRB.parse('/path/to/Dockerfile')
30
+ dockerfile = DockerfileRB.parse(File.read('/path/to/Dockerfile'))
31
+ puts dockerfile.inspect
31
32
  ```
32
33
 
33
34
  ## Contributing
@@ -26,7 +26,7 @@ Gem::Specification.new do |spec|
26
26
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
27
27
  spec.require_paths = ["lib"]
28
28
 
29
- spec.add_development_dependency "bundler", "~> 1.17"
29
+ spec.add_development_dependency "bundler", "~> 2.0"
30
30
  spec.add_development_dependency "rake", "~> 13.0"
31
31
  spec.add_development_dependency "rspec", "~> 3.0"
32
32
  spec.add_dependency "citrus"
@@ -2,8 +2,12 @@ module DockerfileRB
2
2
  class Expose
3
3
  attr_reader :port, :protocol
4
4
  def initialize(port, protocol)
5
- @port = port.to_i
6
- @protocol = (protocol || 'tcp').downcase
5
+ if port.match /\d/
6
+ @port = port.to_i
7
+ @protocol = (protocol || 'tcp').downcase
8
+ else # port is a variable
9
+ @port = port
10
+ end
7
11
  end
8
12
  end
9
13
  module ExposeParser
@@ -24,22 +24,27 @@ grammar DockerfileRB::Dockerfile
24
24
  )*
25
25
  {
26
26
  parsed = matches.map(&:value).compact
27
- value = Hash.new {|h,k| h[k] = [] }
28
- parsed.each{|p| value[p.class.name.split('::').last.downcase].push p }
29
- value
27
+ results = Hash.new {|h,k| h[k] = [] }
28
+ parsed.each do |p|
29
+ key = p.class.name.split('::').last.downcase
30
+ next if key.eql?('string')
31
+
32
+ results[key].push p
33
+ end
34
+ results
30
35
  }
31
36
  end
32
37
 
33
38
  rule add
34
- ('ADD' space arg_term:('--chown=' [a-zA-Z0-9.@/_\-\$\\]+ ':' [a-zA-Z0-9:.@/_\-\$\\]+)? space? src_term:(string) space dest_term:(string) ) <DockerfileRB::AddParser>
39
+ ('ADD' space arg_term:('--chown=' [a-zA-Z0-9.@/_\-\$\\]+ ':' [a-zA-Z0-9:.@/_\-\$\\]+)? space? src_term:(string | variable) space dest_term:(string | variable) comment?) <DockerfileRB::AddParser>
35
40
  end
36
41
 
37
42
  rule add_with_whitespace
38
- ('ADD' space arg_term:('--chown=' [a-zA-Z0-9.@/_\-\$\\]+ ':' [a-zA-Z0-9:.@/_\-\$\\]+)? space? '[' quote src_term:(string_with_whitespace) quote comma quote dest_term:(string_with_whitespace) quote ']' ) <DockerfileRB::AddParser>
43
+ ('ADD' space arg_term:('--chown=' [a-zA-Z0-9.@/_\-\$\\]+ ':' [a-zA-Z0-9:.@/_\-\$\\]+)? space? '[' quote src_term:(string_with_whitespace | variable) quote comma quote dest_term:(string_with_whitespace | variable) quote ']' comment?) <DockerfileRB::AddParser>
39
44
  end
40
45
 
41
46
  rule arg
42
- ('ARG' space arg_name_term:(string) '=' arg_value_term:(string)) <DockerfileRB::ArgParser>
47
+ ('ARG' space arg_name_term:(string) '=' arg_value_term:(string) comment?) <DockerfileRB::ArgParser>
43
48
  end
44
49
 
45
50
  rule as
@@ -48,32 +53,28 @@ grammar DockerfileRB::Dockerfile
48
53
  }
49
54
  end
50
55
 
51
- rule comment
52
- '#' space? (string_with_whitespace | '\'' | '=' | '"')* line_break
53
- end
54
-
55
56
  rule copy
56
- ('COPY' space arg_term:('--chown=' [a-zA-Z0-9.@/_\-\$\\]+ ':' [a-zA-Z0-9:.@/_\-\$\\]+)? space? src_term:(string) space dest_term:(string) ) <DockerfileRB::CopyParser>
57
+ ('COPY' space arg_term:('--chown=' [a-zA-Z0-9.@/_\-\$\\]+ ':' [a-zA-Z0-9:.@/_\-\$\\]+)? space? src_term:(string | variable) space dest_term:(string | variable) comment?) <DockerfileRB::CopyParser>
57
58
  end
58
59
 
59
60
  rule copy_with_whitespace
60
- ('COPY' space arg_term:('--chown=' [a-zA-Z0-9.@/_\-\$\\]+ ':' [a-zA-Z0-9:.@/_\-\$\\]+)? space? '[' quote src_term:(string_with_whitespace) quote comma quote dest_term:(string_with_whitespace) quote ']' ) <DockerfileRB::CopyParser>
61
+ ('COPY' space arg_term:('--chown=' [a-zA-Z0-9.@/_\-\$\\]+ ':' [a-zA-Z0-9:.@/_\-\$\\]+)? space? '[' quote src_term:(string_with_whitespace | variable) quote comma quote dest_term:(string_with_whitespace | variable) quote ']' comment?) <DockerfileRB::CopyParser>
61
62
  end
62
63
 
63
64
  rule cmd_exec
64
- ('CMD' space '[' (quote cmd_term:(string) quote comma?)* ']') <DockerfileRB::CmdParser>
65
+ ('CMD' space '[' (quote cmd_term:(string) quote comma?)* ']' comment?) <DockerfileRB::CmdParser>
65
66
  end
66
67
 
67
68
  rule cmd_shell
68
- ('CMD' space (cmd_term:(string) space?)*) <DockerfileRB::CmdParser>
69
+ ('CMD' space (cmd_term:(string) space?)* comment?) <DockerfileRB::CmdParser>
69
70
  end
70
71
 
71
72
  rule entrypoint_exec
72
- ('ENTRYPOINT' space '[' (quote entrypoint_term:(string) quote comma?)* ']') <DockerfileRB::EntrypointExecParser>
73
+ ('ENTRYPOINT' space '[' (quote entrypoint_term:(string) quote comma?)* ']' comment?) <DockerfileRB::EntrypointExecParser>
73
74
  end
74
75
 
75
76
  rule entrypoint_shell
76
- ('ENTRYPOINT' space (entrypoint_term:(string) space?)*) <DockerfileRB::EntrypointShellParser>
77
+ ('ENTRYPOINT' space (entrypoint_term:(string) space?)* comment?) <DockerfileRB::EntrypointShellParser>
77
78
  end
78
79
 
79
80
  rule env_with_whitespace
@@ -81,65 +82,70 @@ grammar DockerfileRB::Dockerfile
81
82
  end
82
83
 
83
84
  rule env_key_value
84
- ('ENV' space (key_term:(escaped_string) space? '=' quote? space? value_term:(escaped_string) quote? line_continuation?)+) <DockerfileRB::EnvKeyValueParser>
85
+ ('ENV' space (key_term:(escaped_string) space? '=' quote? space? value_term:(escaped_string | variable) quote? line_continuation?)+ comment?) <DockerfileRB::EnvKeyValueParser>
85
86
  end
86
87
 
87
88
  rule expose
88
- ('EXPOSE' space expose_term:(string)) <DockerfileRB::ExposeParser>
89
+ ('EXPOSE' space expose_term:(string | variable) comment?) <DockerfileRB::ExposeParser>
89
90
  end
90
91
 
91
92
  rule healthcheck_none
92
- 'HEALTHCHECK NONE' <DockerfileRB::HealthcheckNoneParser>
93
+ ('HEALTHCHECK NONE' comment?) <DockerfileRB::HealthcheckNoneParser>
93
94
  end
94
95
 
95
96
  rule from
96
- ('FROM' space from_term:(string) space? as?) <DockerfileRB::FromParser>
97
+ ('FROM' space from_term:(string | variable) space? as? comment?) <DockerfileRB::FromParser>
97
98
  end
98
99
 
99
100
  rule label
100
- ('LABEL' space label_term:(quote? string_with_whitespace quote? '=' quote? string_with_whitespace quote? line_continuation?)+) <DockerfileRB::LabelParser>
101
+ ('LABEL' space label_term:(quote? string_with_whitespace quote? '=' quote? (string_with_whitespace | variable) quote? line_continuation?)+ comment?) <DockerfileRB::LabelParser>
101
102
  end
102
103
 
103
104
  rule maintainer
104
- ('MAINTAINER' space maintainer_term:(string)) <DockerfileRB::MaintainerParser>
105
+ ('MAINTAINER' space maintainer_term:(string) comment?) <DockerfileRB::MaintainerParser>
105
106
  end
106
107
 
107
108
  rule run_exec
108
- ('RUN' space '[' (quote run_term:(string_with_whitespace) quote comma?)* ']') <DockerfileRB::RunExecParser>
109
+ ('RUN' space '[' (quote run_term:(string_with_whitespace) quote comma?)* ']' comment?) <DockerfileRB::RunExecParser>
109
110
  end
110
111
 
111
112
  rule run_shell
112
- ('RUN' space (run_term:(run_string) space? line_continuation? (comment)*)*) <DockerfileRB::RunShellParser>
113
+ ('RUN' space (run_term:(run_string) space? line_continuation? (comment)*)* comment?) <DockerfileRB::RunShellParser>
113
114
  end
114
115
 
115
116
  rule stopsignal
116
- ('STOPSIGNAL' space signal_term:(signal)) <DockerfileRB::StopsignalParser>
117
+ ('STOPSIGNAL' space signal_term:(signal | variable) comment?) <DockerfileRB::StopsignalParser>
117
118
  end
118
119
 
119
120
  rule user
120
- ('USER' space user_term:(string)) <DockerfileRB::UserParser>
121
+ ('USER' space user_term:(string | variable) comment?) <DockerfileRB::UserParser>
121
122
  end
122
123
 
123
124
  rule volume_string
124
- ('VOLUME' space (volume_term:(string) space?)* (']')?) <DockerfileRB::VolumeStringParser>
125
+ ('VOLUME' space (volume_term:(string | variable) space?)* (']')?) <DockerfileRB::VolumeStringParser>
125
126
  end
126
127
 
127
128
  rule volume_json
128
- ('VOLUME' space '[' (quote volume_term:(string) quote comma?)* ']') <DockerfileRB::VolumeJSONParser>
129
+ ('VOLUME' space '[' (quote volume_term:(string | variable) quote comma?)* ']') <DockerfileRB::VolumeJSONParser>
129
130
  end
130
131
 
131
132
  rule workdir
132
- ('WORKDIR' space quote? workdir_term:(path) quote?) <DockerfileRB::WorkdirParser>
133
+ ('WORKDIR' space quote? workdir_term:(path | variable) quote? comment?) <DockerfileRB::WorkdirParser>
134
+ end
135
+
136
+ rule comment
137
+ (space? "#" (~line_break)* line_break?)
133
138
  end
134
139
 
135
140
  rule path
136
- [a-zA-Z0-9:.@/_\-\$\[\]\\]+
141
+ [a-zA-Z0-9:.@/_\-\$\[\]\\{}]+
137
142
  end
138
143
 
139
144
  rule string
140
- [a-zA-Z0-9:;!#<>*&^,(){}+#.@/_\-\$\[\]\|$?]+
145
+ [a-zA-Z0-9:;!<>*&^,()+.@/_\-\[\]\|\?{}]+
141
146
  end
142
147
 
148
+
143
149
  rule string_with_whitespace
144
150
  (string | ' ')+
145
151
  end
@@ -149,7 +155,11 @@ grammar DockerfileRB::Dockerfile
149
155
  end
150
156
 
151
157
  rule run_string
152
- [a-zA-Z0-9:;!#<>*&^,(){}+#.@/_\-\$\[\]\|$ ='"?]+ | '\\'
158
+ [a-zA-Z0-9:;!#<>*&^,()+#.@/_\-\$\[\]\| ='"?{}%]+ | '\\'
159
+ end
160
+
161
+ rule variable
162
+ /^(\\\$|\$)/ string
153
163
  end
154
164
 
155
165
  rule comma
@@ -1,3 +1,3 @@
1
1
  module DockerfileRB
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: dockerfile-rb
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
  - gscho
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-05-10 00:00:00.000000000 Z
11
+ date: 2021-09-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.17'
19
+ version: '2.0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.17'
26
+ version: '2.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -77,9 +77,8 @@ files:
77
77
  - ".github/workflows/release.yml"
78
78
  - ".gitignore"
79
79
  - ".rspec"
80
- - ".travis.yml"
80
+ - CHANGELOG.md
81
81
  - Gemfile
82
- - Gemfile.lock
83
82
  - LICENSE.txt
84
83
  - README.md
85
84
  - Rakefile
@@ -127,7 +126,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
127
126
  - !ruby/object:Gem::Version
128
127
  version: '0'
129
128
  requirements: []
130
- rubygems_version: 3.0.3
129
+ rubygems_version: 3.0.3.1
131
130
  signing_key:
132
131
  specification_version: 4
133
132
  summary: A Dockerfile parser implemented in ruby
data/.travis.yml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- sudo: false
3
- language: ruby
4
- cache: bundler
5
- rvm:
6
- - 2.5.1
7
- before_install: gem install bundler -v 2.0.2
data/Gemfile.lock DELETED
@@ -1,37 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- dockerfile-rb (0.1.0)
5
- citrus
6
-
7
- GEM
8
- remote: https://rubygems.org/
9
- specs:
10
- citrus (3.0.2)
11
- diff-lcs (1.3)
12
- rake (13.0.1)
13
- rspec (3.9.0)
14
- rspec-core (~> 3.9.0)
15
- rspec-expectations (~> 3.9.0)
16
- rspec-mocks (~> 3.9.0)
17
- rspec-core (3.9.1)
18
- rspec-support (~> 3.9.1)
19
- rspec-expectations (3.9.0)
20
- diff-lcs (>= 1.2.0, < 2.0)
21
- rspec-support (~> 3.9.0)
22
- rspec-mocks (3.9.1)
23
- diff-lcs (>= 1.2.0, < 2.0)
24
- rspec-support (~> 3.9.0)
25
- rspec-support (3.9.2)
26
-
27
- PLATFORMS
28
- ruby
29
-
30
- DEPENDENCIES
31
- bundler (~> 1.17)
32
- dockerfile-rb!
33
- rake (~> 13.0)
34
- rspec (~> 3.0)
35
-
36
- BUNDLED WITH
37
- 1.17.3