forked from cucumber/messages
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDockerfile
81 lines (53 loc) · 2.31 KB
/
Dockerfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#syntax=docker/dockerfile:1.6
ARG LANGUAGE=ruby
FROM ruby:3.2.2-alpine AS ruby
RUN apk add coreutils
WORKDIR /cucumber
RUN mkdir --parents /build
COPY --link . .
FROM ruby AS go-unformatted
RUN <<-EOF
ruby scripts/codegen.rb Go . go.go.erb > /build/messages.go
ruby scripts/codegen.rb Go . go.enum.go.erb >> /build/messages.go
EOF
# Todo: can we eliminate this stage with smarter ERB templates?
FROM golang:1.21.5-alpine AS go-codegen
WORKDIR /build
COPY --link --from=go-unformatted /build/ .
RUN go fmt *.go
FROM ruby AS java-codegen
RUN <<-EOF
mkdir --parents /tmp/build
ruby scripts/codegen.rb Java . java.java.erb > /tmp/build/Generated.java.tmp
ruby scripts/codegen.rb Java . java.enum.java.erb >> /tmp/build/Generated.java.tmp
csplit --prefix=/tmp/build/Generated --suffix-format=%02d.java.tmp --elide-empty-files /tmp/build/Generated.java.tmp "/^.*[.]java\$/" {*}
for file in /tmp/build/Generated**; do tail -n +2 $file > /build/$(head -n 1 $file); done
EOF
FROM ruby AS javascript-codegen
RUN <<-EOF
ruby scripts/codegen.rb TypeScript . typescript.ts.erb > /build/messages.ts
ruby scripts/codegen.rb TypeScript . typescript.enum.ts.erb >> /build/messages.ts
EOF
FROM ruby AS perl-codegen
RUN <<-EOF
ruby scripts/codegen.rb Perl . perl.pm.erb > /build/Messages.pm
EOF
FROM ruby AS php-codegen
RUN <<-EOF
mkdir --parents /tmp/build
ruby scripts/codegen.rb Php . php.php.erb > /tmp/build/messages.php
ruby scripts/codegen.rb Php . php.enum.php.erb >> /tmp/build/messages.php
csplit --prefix=/tmp/build/Generated --suffix-format=%02d.tmp.php --elide-empty-files /tmp/build/messages.php "/^.*[.]php\$/" {*}
for file in /tmp/build/Generated**; do mkdir -p /build/$(head -n 1 $file | sed 's/[^/]*.php$//'); done
for file in /tmp/build/Generated**; do tail -n +2 $file > /build/$(head -n 1 $file); done
EOF
FROM ruby AS ruby-codegen
RUN <<-EOF
ruby scripts/codegen.rb Ruby . ruby.rb.erb > /build/messages.dtos.rb
ruby scripts/codegen.rb Ruby . ruby.enum.rb.erb >> /build/messages.dtos.rb
ruby scripts/codegen.rb Ruby . ruby_deserializers.rb.erb > /build/messages.deserializers.rb
EOF
# Stages used to output build folder(s) to disk
FROM ${LANGUAGE}-codegen AS codegen
FROM scratch AS output
COPY --link --from=codegen /build /