- UI: textarea 'Зависимости' в формах создания и редактирования - плейсхолдер меняется по языку (requirements.txt / package.json / Gemfile / composer.json) - Python: если deps заполнен → zip(main.py + requirements.txt), иначе raw bytes - PHP: если deps → zip(main.php + composer.json) - Ruby: если deps → zip(handler.rb + Gemfile) - Node.js: пока без изменений (сложная структура package.json) - runtime: BuildPythonZip, BuildScriptZipWithDeps, buildZipTwo - model: Deps string в CreateFunctionRequest и UpdateCodeRequest - v1.3.89
53 lines
1.3 KiB
Go
53 lines
1.3 KiB
Go
package runtime
|
|
|
|
import (
|
|
"archive/zip"
|
|
"bytes"
|
|
)
|
|
|
|
// buildZip создаёт zip-архив с одним файлом fileName и содержимым content.
|
|
// Вспомогательная функция: используется в buildScriptZip (PHP/Ruby),
|
|
// а также как основа для buildGoSourceZip и buildJSDeployZip.
|
|
func buildZip(fileName string, content []byte) ([]byte, error) {
|
|
var buf bytes.Buffer
|
|
zw := zip.NewWriter(&buf)
|
|
|
|
fw, err := zw.Create(fileName)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if _, err := fw.Write(content); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if err := zw.Close(); err != nil {
|
|
return nil, err
|
|
}
|
|
return buf.Bytes(), nil
|
|
}
|
|
|
|
// buildZipTwo создаёт zip-архив с двумя файлами.
|
|
// Используется когда пользователь указал файл зависимостей (requirements.txt и т.д.).
|
|
func buildZipTwo(file1, file2 string, content1, content2 []byte) ([]byte, error) {
|
|
var buf bytes.Buffer
|
|
zw := zip.NewWriter(&buf)
|
|
|
|
for _, f := range []struct {
|
|
name string
|
|
content []byte
|
|
}{{file1, content1}, {file2, content2}} {
|
|
fw, err := zw.Create(f.name)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if _, err := fw.Write(f.content); err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
if err := zw.Close(); err != nil {
|
|
return nil, err
|
|
}
|
|
return buf.Bytes(), nil
|
|
}
|