UNPKG

3.49 kBJavaScriptView Raw
1Object.defineProperty(exports,"__esModule",{value:!0});const e=require("tslib"),i=require("common-tags"),r=e.__importDefault(require("fast-glob")),a=require("fs"),t=require("fs-extra"),n=require("inquirer"),o=require("path"),c=require("@navch/cli-utils"),s=require("./prompt-scoped-package");function generateForPackages({ws:n},s){return e.__awaiter(this,void 0,void 0,function*(){const l=yield t.readdir(n.rootPath),d=yield n.readPackageJSON(),p=yield n.getPackages(!0),u=e=>{e.push("FROM node:8"),e.push("WORKDIR /app/")},f=i=>e.__awaiter(this,void 0,void 0,function*(){const e=yield r.default(["yarn.lock","**/package.json"],{cwd:n.rootPath,ignore:["**/node_modules"]});i.push(e.map(e=>`COPY ${e} ${e}`).join("\n")),i.push("RUN yarn install --frozen-lockfile")}),h=e=>{e.push("RUN yarn install --production --frozen-lockfile")},g=e=>{e.push("RUN yarn cache clean")},k=e=>{const r=l.filter(e=>"."!==e.charAt(0)).filter(e=>!e.endsWith(".log")).filter(e=>a.statSync(e).isFile());e.push(`COPY ${r.join(" \\\n ")} ./`),l.filter(e=>"."!==e.charAt(0)).filter(e=>"docker"!==e).filter(e=>"node_modules"!==e).filter(e=>a.statSync(e).isDirectory()).forEach(i=>{e.push(`COPY ${i} ${i}`)}),e.push(i.stripIndent`
2 RUN find . \\
3 -mindepth 1 \\
4 -name 'npm' -o \\
5 -name 'test' -o \\
6 -name 'build' -o \\
7 -name '*.env*' -o \\
8 -name '*.spec.*' \\
9 -exec rm -rf {} +
10 `)},y=(i,r)=>e.__awaiter(this,void 0,void 0,function*(){const{dependencies:e={}}=yield r.readPackageJSON(),a=p.filter(i=>!(i.packageName in e)).filter(e=>e.packageDir!==r.packageDir).map(e=>`rm -rf packages/${e.packageDir}`);a.length>0&&i.push("RUN "+a.join(" && \\\n "))}),m=e=>{e.push("RUN chown -R node: /app"),e.push("USER node")},w=(e,i)=>{const r=`serve:${i.packageDir}`,a=d.scripts;if(!a||!a[r])throw new Error(c.theme`Expected {command ${r}} script in `+c.theme`workspace root {path package.json} file.`);e.push(`CMD ["yarn", "${r}"]`)},P=n.progress(c.theme`Generating Dockerfile`);if(null!=s)for(const e of s){const i=`Dockerfile.${e.packageDir}`,r=o.join(n.dockerPath,i);P.text+="\n"+n.li(c.theme`{package ${e.packageName}}`+c.theme` ({path ${r}})`);const a=new Array;yield u(a),yield f(a),yield k(a),yield y(a,e),yield h(a),yield g(a),yield m(a),yield w(a,e),yield t.writeFile(r,a.join("\n\n"))}else{const e="Dockerfile",i=o.join(n.dockerPath,e);P.text+="\n"+n.li(c.theme` ({path ${i}})`);const r=new Array;yield u(r),yield f(r),yield k(r),yield h(r),yield g(r),yield m(r),yield t.writeFile(i,r.join("\n\n"))}P.succeed()})}exports.manageDockerfile=function manageDockerfile(i){return e.__awaiter(this,void 0,void 0,function*(){yield i.ws.progress(function verifyWorkspaceConfig({ws:i}){return e.__awaiter(this,void 0,void 0,function*(){const e=yield i.readPackageJSON(),r=e.scripts;if(!r||!r.build)throw new Error(c.theme`Expected '{command build}' script in `+c.theme`workspcae root {path ${i.packageJSONPath}}.`)})}(i),"Verifying workspace structure");const r=yield t.readdir(i.ws.dockerPath),a=r.length<=0,{individual:o}=yield n.prompt({type:"confirm",name:"individual",message:"Generate dockerfile for individual packages",default:!0});if(o){const e=yield s.promptScopedPackage({multi:!0,packages:yield i.ws.getPackages(),checked:e=>{const i=`Dockerfile.${e.packageDir}`,t=r.includes(i);return a||t}});yield generateForPackages(i,e)}else yield generateForPackages(i,null)})};
11//# sourceMappingURL=manage-dockerfile.js.map
\No newline at end of file