4
4
"bufio"
5
5
"bytes"
6
6
"encoding/json"
7
+ "errors"
7
8
"fmt"
8
9
"log/slog"
9
10
"os"
@@ -139,34 +140,28 @@ func (d *Node) GenerateDockerfile(path string) ([]byte, error) {
139
140
See https://flexstack.com/docs/languages-and-frameworks/autogenerate-dockerfile` , * version , packageManager , installCMD , buildCMD , startCMD ),
140
141
)
141
142
142
- if installCMD != "" {
143
- installCMDJSON , _ := json .Marshal (installCMD )
144
- installCMD = string (installCMDJSON )
145
- }
146
-
147
- if buildCMD != "" {
148
- buildCMDJSON , _ := json .Marshal (buildCMD )
149
- buildCMD = string (buildCMDJSON )
150
- }
151
-
152
- if startCMD != "" {
153
- startCMDJSON , _ := json .Marshal (startCMD )
154
- startCMD = string (startCMDJSON )
155
- }
156
-
157
143
var buf bytes.Buffer
158
144
if err := tmpl .Option ("missingkey=zero" ).Execute (& buf , map [string ]string {
159
145
"Version" : * version ,
160
- "InstallCMD" : installCMD ,
161
- "BuildCMD" : buildCMD ,
162
- "StartCMD" : startCMD ,
146
+ "InstallCMD" : safeCommand ( installCMD ) ,
147
+ "BuildCMD" : safeCommand ( buildCMD ) ,
148
+ "StartCMD" : safeCommand ( startCMD ) ,
163
149
}); err != nil {
164
- return nil , fmt . Errorf ("Failed to execute template" )
150
+ return nil , errors . New ("Failed to execute template" )
165
151
}
166
152
167
153
return buf .Bytes (), nil
168
154
}
169
155
156
+ func safeCommand (cmd string ) string {
157
+ if cmd == "" {
158
+ return ""
159
+ }
160
+
161
+ cmdJSON , _ := json .Marshal (cmd )
162
+ return strings .ReplaceAll (string (cmdJSON ), `\u0026\u0026` , "&&" )
163
+ }
164
+
170
165
var startScriptRe = regexp .MustCompile (`^.*?\b(ts-)?node(mon)?\b.*?(index|main|server|client)\.([cm]?[tj]s)\b` )
171
166
172
167
var nodeTemplate = strings .TrimSpace (`
@@ -177,7 +172,7 @@ FROM base AS deps
177
172
WORKDIR /app
178
173
COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* bun.lockb* ./
179
174
ARG INSTALL_CMD={{.InstallCMD}}
180
- RUN if [ ! -z "${INSTALL_CMD}" ]; then $ INSTALL_CMD; fi
175
+ RUN if [ ! -z "${INSTALL_CMD}" ]; then echo "${ INSTALL_CMD}" > dep.sh; sh dep.sh ; fi
181
176
182
177
FROM base AS builder
183
178
WORKDIR /app
0 commit comments