-
Notifications
You must be signed in to change notification settings - Fork 1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Replace netlify's zip-it-and-ship-it for serverless deploy #3782
Changes from 1 commit
f24d442
9b8192c
8ad5618
e3d8a4a
daeeed2
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
import path from 'path' | ||
|
||
import { nodeFileTrace } from '@vercel/nft' | ||
import archiver from 'archiver' | ||
import fse from 'fs-extra' | ||
|
||
const ZIPBALL_DIR = './api/dist/zipball' | ||
|
||
function zipDirectory(source, out) { | ||
const archive = archiver('zip', { zlib: { level: 5 } }) | ||
const stream = fse.createWriteStream(out) | ||
|
||
return new Promise((resolve, reject) => { | ||
archive | ||
.directory(source, false) | ||
.on('error', (err) => reject(err)) | ||
.pipe(stream) | ||
|
||
stream.on('close', () => resolve()) | ||
archive.finalize() | ||
}) | ||
} | ||
|
||
const packageSingleFunction = async (functionFile) => { | ||
const { name: functionName } = path.parse(functionFile) | ||
const { fileList: functionDependencyFileList } = await nodeFileTrace([ | ||
functionFile, | ||
]) | ||
const copyPromises = [] | ||
for (const singleDependencyPath of functionDependencyFileList) { | ||
copyPromises.push( | ||
fse.copy( | ||
'./' + singleDependencyPath, | ||
`${ZIPBALL_DIR}/${functionName}/${singleDependencyPath}` | ||
) | ||
) | ||
} | ||
const functionEntryPromise = fse.outputFile( | ||
`${ZIPBALL_DIR}/${functionName}/${functionName}.js`, | ||
`module.exports = require('${functionFile}')` | ||
) | ||
copyPromises.push(functionEntryPromise) | ||
|
||
await Promise.all(copyPromises) | ||
await zipDirectory( | ||
`${ZIPBALL_DIR}/${functionName}`, | ||
`${ZIPBALL_DIR}/${functionName}.zip` | ||
) | ||
await fse.remove(`${ZIPBALL_DIR}/${functionName}`) | ||
return | ||
} | ||
|
||
export const pack = async () => { | ||
console.log('starting pack') | ||
const startTime = new Date().valueOf() | ||
const filesToBePacked = (await fse.readdir('./api/dist/functions')) | ||
.filter((path) => path.endsWith('.js')) | ||
.map((path) => `./api/dist/functions/${path}`) | ||
await Promise.all(filesToBePacked.map(packageSingleFunction)) | ||
console.log( | ||
`Packed in ${Math.round((new Date().valueOf() - startTime) / 1000)}s` | ||
) | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -7,25 +7,10 @@ export const preRequisites = [ | |
'Please follow the steps at https://www.serverless.com/framework/docs/providers/aws/guide/installation/ to install Serverless.', | ||
Irev-Dev marked this conversation as resolved.
Show resolved
Hide resolved
dac09 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
], | ||
}, | ||
{ | ||
title: 'Checking if @netlify/zip-it-and-ship-it is installed...', | ||
command: ['yarn', ['zip-it-and-ship-it', '--version']], | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The new deps that have been added are There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Not sure it is easy, but in the past to verify dependencies like this are there, I have loaded |
||
errorMessage: [ | ||
'Looks like @netlify/zip-it-and-ship-it is not installed.', | ||
'Either run `yarn rw setup aws-serverless` or add it separately as a dev dependency in the api workspace.', | ||
], | ||
}, | ||
] | ||
|
||
export const buildCommands = [ | ||
{ title: 'Building API...', command: ['yarn', ['rw', 'build', 'api']] }, | ||
{ | ||
title: 'Packaging API...', | ||
command: [ | ||
'yarn', | ||
['zip-it-and-ship-it', 'api/dist/functions/', 'api/dist/zipball'], | ||
], | ||
}, | ||
] | ||
|
||
export const deployCommand = { | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
is
packages/cli/src/commands/deploy/aws-providers/packing.js
a good home? not sure where this file should live.Or should these functions be rolled into
packages/cli/src/commands/deploy/aws-providers/serverless.js
?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
My preference: move packing to a separate folder and called in "packaging/nft.js"
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Now in
packages/cli/src/commands/deploy/packing/nft.js
.Is that what you intended, or did you want it in
packages/cli/src/commands/deploy/aws-providers/packing/nft.js
or other?