Добавлена возможность запуска drawio внутри xvfb-run
All checks were successful
drawio-export/pipeline/head This commit looks good
drawio-export/pipeline/tag This commit looks good

This commit is contained in:
Алексей Бадяев 2023-04-13 19:34:27 +07:00
parent b02cc1a22c
commit 6a7fc32d1b
Signed by: alexey
GPG Key ID: 686FBC1363E4AFAE
5 changed files with 35 additions and 14 deletions

View File

@ -33,6 +33,7 @@
"tamerh", "tamerh",
"usestdlibvars", "usestdlibvars",
"wdir", "wdir",
"xmlparser" "xmlparser",
"Xvfb"
] ]
} }

View File

@ -19,6 +19,9 @@ func init() {
// Application // Application
flag.StringVar(&opts.Application, "A", "", "Draw.io Desktop Application") flag.StringVar(&opts.Application, "A", "", "Draw.io Desktop Application")
flag.StringVar(&opts.Application, "application", "", "Draw.io Desktop Application") flag.StringVar(&opts.Application, "application", "", "Draw.io Desktop Application")
// EnableXvfb
flag.BoolVar(&opts.EnableXvfb, "X", false, "Run drawio inside xvfb-run")
flag.BoolVar(&opts.EnableXvfb, "enable-xvfb", false, "Run drawio inside xvfb-run")
// Output // Output
flag.StringVar(&opts.Output, "o", "", "Exported folder name [default: export]") flag.StringVar(&opts.Output, "o", "", "Exported folder name [default: export]")
flag.StringVar(&opts.Output, "output", "", "Exported folder name [default: export]") flag.StringVar(&opts.Output, "output", "", "Exported folder name [default: export]")

View File

@ -149,14 +149,17 @@ func (exp Exporter) ExportFile(
outName += "-" + name outName += "-" + name
} }
outName += exp.opts.OutExt() outName += exp.opts.OutExt()
drawioArgs := make([]string, len(args), len(args)+4) drawioArgs := make([]string, len(args), len(args)+10)
copy(drawioArgs, args) copy(drawioArgs, args)
drawioArgs = append(drawioArgs, drawioArgs = append(drawioArgs,
"--page-index", strconv.Itoa(i), "--page-index", strconv.Itoa(i),
"--output", path.Join(output, outName), "--output", path.Join(output, outName),
"--export", filePath, "--export", filePath,
"--no-sandbox",
) )
if exp.opts.EnableXvfb {
drawioArgs = append(drawioArgs,
"--disable-gpu", "--headless", "--no-sandbox")
}
cmd := exec.Command(exp.opts.App(), drawioArgs...) cmd := exec.Command(exp.opts.App(), drawioArgs...)
cmd.Stdout = os.Stdout cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr cmd.Stderr = os.Stderr

View File

@ -142,7 +142,6 @@ var testData = []exportTest{
"drawio", "--page-index", "0", "drawio", "--page-index", "0",
"--output", "export/diagrams-1.pdf", "--output", "export/diagrams-1.pdf",
"--export", "source/diagrams.drawio", "--export", "source/diagrams.drawio",
"--no-sandbox",
}, },
}, },
{ {
@ -151,7 +150,6 @@ var testData = []exportTest{
"drawio", "--page-index", "1", "drawio", "--page-index", "1",
"--output", "export/diagrams-2.pdf", "--output", "export/diagrams-2.pdf",
"--export", "source/diagrams.drawio", "--export", "source/diagrams.drawio",
"--no-sandbox",
}, },
}, },
{ {
@ -160,7 +158,6 @@ var testData = []exportTest{
"drawio", "--page-index", "2", "drawio", "--page-index", "2",
"--output", "export/diagrams-3.pdf", "--output", "export/diagrams-3.pdf",
"--export", "source/diagrams.drawio", "--export", "source/diagrams.drawio",
"--no-sandbox",
}, },
}, },
}, },
@ -230,7 +227,6 @@ var testData = []exportTest{
"drawio", "--page-index", "0", "drawio", "--page-index", "0",
"--output", "export/diagrams-1.pdf", "--output", "export/diagrams-1.pdf",
"--export", "source/diagrams.drawio", "--export", "source/diagrams.drawio",
"--no-sandbox",
}, },
}, },
{ {
@ -239,7 +235,6 @@ var testData = []exportTest{
"drawio", "--page-index", "1", "drawio", "--page-index", "1",
"--output", "export/diagrams-2.pdf", "--output", "export/diagrams-2.pdf",
"--export", "source/diagrams.drawio", "--export", "source/diagrams.drawio",
"--no-sandbox",
}, },
}, },
{ {
@ -248,7 +243,6 @@ var testData = []exportTest{
"drawio", "--page-index", "2", "drawio", "--page-index", "2",
"--output", "export/diagrams-3.pdf", "--output", "export/diagrams-3.pdf",
"--export", "source/diagrams.drawio", "--export", "source/diagrams.drawio",
"--no-sandbox",
}, },
}, },
}, },
@ -272,7 +266,6 @@ var testData = []exportTest{
"drawio", "--page-index", "0", "drawio", "--page-index", "0",
"--output", "export/additional-Один.pdf", "--output", "export/additional-Один.pdf",
"--export", "source/additional.xml", "--export", "source/additional.xml",
"--no-sandbox",
}, },
}, },
{ {
@ -281,7 +274,6 @@ var testData = []exportTest{
"drawio", "--page-index", "1", "drawio", "--page-index", "1",
"--output", "export/additional-Два.pdf", "--output", "export/additional-Два.pdf",
"--export", "source/additional.xml", "--export", "source/additional.xml",
"--no-sandbox",
}, },
}, },
}, },
@ -306,7 +298,6 @@ var testData = []exportTest{
"drawio", "--page-index", "0", "drawio", "--page-index", "0",
"--output", "export/subdir/Вложенные диаграммы-Первая диаграмма.pdf", "--output", "export/subdir/Вложенные диаграммы-Первая диаграмма.pdf",
"--export", "source/subdir/Вложенные диаграммы.drawio", "--export", "source/subdir/Вложенные диаграммы.drawio",
"--no-sandbox",
}, },
}, },
{ {
@ -315,7 +306,6 @@ var testData = []exportTest{
"drawio", "--page-index", "1", "drawio", "--page-index", "1",
"--output", "export/subdir/Вложенные диаграммы-Вторая диаграмма.pdf", "--output", "export/subdir/Вложенные диаграммы-Вторая диаграмма.pdf",
"--export", "source/subdir/Вложенные диаграммы.drawio", "--export", "source/subdir/Вложенные диаграммы.drawio",
"--no-sandbox",
}, },
}, },
}, },

View File

@ -76,6 +76,7 @@ func (f Format) ext() string {
// Параметры экспортёра диаграмм // Параметры экспортёра диаграмм
type Options struct { type Options struct {
Application string // Путь к приложению drawio Application string // Путь к приложению drawio
EnableXvfb bool // Запускать drawio внутри xvfb-run
Output string // Путь к папке с экспортированными файлами Output string // Путь к папке с экспортированными файлами
Format Format // Формат экспортированных файлов Format Format // Формат экспортированных файлов
Recursive bool // Рекурсивно сканировать вложенные папки с файлами Recursive bool // Рекурсивно сканировать вложенные папки с файлами
@ -104,9 +105,12 @@ type ReadDirFunc func(string) ([]os.DirEntry, error)
// Путь к приложению drawio // Путь к приложению drawio
func (opts Options) App() string { func (opts Options) App() string {
if opts.EnableXvfb {
return "xvfb"
}
app := opts.Application app := opts.Application
if len(app) == 0 { if len(app) == 0 {
app = "drawio" return "drawio"
} }
return app return app
} }
@ -132,6 +136,13 @@ func (opts Options) OutExt() string {
// Аргументы командной строки drawio // Аргументы командной строки drawio
func (opts Options) Args() []string { func (opts Options) Args() []string {
args := []string{} args := []string{}
if opts.EnableXvfb {
app := "drawio"
if len(opts.Application) > 0 {
app = opts.Application
}
args = append(args, "-a", "-l", app)
}
if len(opts.Format) > 0 { if len(opts.Format) > 0 {
args = append(args, "--format", string(opts.Format)) args = append(args, "--format", string(opts.Format))
} }
@ -184,6 +195,19 @@ func (opt optionApplication) apply(opts *Options) {
opts.Application = string(opt) opts.Application = string(opt)
} }
// Запускать drawio внутри xvfb-run
func WithXvfb() Option {
return optionXvfb{}
}
type optionXvfb struct{}
var _ Option = optionXvfb{}
func (opt optionXvfb) apply(opts *Options) {
opts.EnableXvfb = true
}
// Путь к папке с экспортированными файлами // Путь к папке с экспортированными файлами
func WithOutput(path string) Option { func WithOutput(path string) Option {
return optionOutput(path) return optionOutput(path)