2020-03-10 12:08:59 +00:00
|
|
|
|
package build
|
|
|
|
|
|
|
|
|
|
// Job описывает одну вершину графа сборки.
|
|
|
|
|
type Job struct {
|
|
|
|
|
// ID задаёт уникальный идентификатор джоба.
|
|
|
|
|
//
|
|
|
|
|
// ID вычисляется как хеш от всех входных файлов, команд запуска и хешей зависимых джобов.
|
|
|
|
|
//
|
2020-04-05 15:19:59 +00:00
|
|
|
|
// Выход джоба целиком определяется его ID. Это важное свойство позволяет кешировать
|
2020-03-10 12:08:59 +00:00
|
|
|
|
// результаты сборки.
|
|
|
|
|
ID ID
|
|
|
|
|
|
|
|
|
|
// Name задаёт человекочитаемое имя джоба.
|
|
|
|
|
//
|
|
|
|
|
// Например:
|
|
|
|
|
// build gitlab.com/slon/disbuild/pkg/b
|
|
|
|
|
// vet gitlab.com/slon/disbuild/pkg/a
|
|
|
|
|
// test gitlab.com/slon/disbuild/pkg/test
|
|
|
|
|
Name string
|
|
|
|
|
|
|
|
|
|
// Inputs задаёт список файлов из директории с исходным кодом,
|
|
|
|
|
// которые нужны для работы этого джоба.
|
|
|
|
|
//
|
|
|
|
|
// В типичном случае, тут будут перечислены все .go файлы одного пакета.
|
|
|
|
|
Inputs []string
|
|
|
|
|
|
|
|
|
|
// Deps задаёт список джобов, выходы которых нужны для работы этого джоба.
|
|
|
|
|
Deps []ID
|
|
|
|
|
|
|
|
|
|
// Cmds описывает список команд, которые нужно выполнить в рамках этого джоба.
|
|
|
|
|
Cmds []Cmd
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Cmd описывает одну команду сборки.
|
|
|
|
|
//
|
|
|
|
|
// Есть несколько видов команд. Все виды команд описываются одной структурой.
|
|
|
|
|
// Реальный тип определяется тем, какие поля структуры заполнены.
|
|
|
|
|
//
|
2023-02-13 07:50:51 +00:00
|
|
|
|
// exec - выполняет произвольную команду
|
|
|
|
|
// cat - записывает строку в файл
|
2020-03-10 12:08:59 +00:00
|
|
|
|
//
|
2024-06-05 17:36:34 +00:00
|
|
|
|
// Все строки в описании команды могут содержать в себе ссылки на контекстные переменные. Перед выполнением
|
2020-03-10 12:08:59 +00:00
|
|
|
|
// реальной команды, переменные заменяются на их реальные значения.
|
|
|
|
|
//
|
2023-02-13 07:50:51 +00:00
|
|
|
|
// {{.OutputDir}} - абсолютный путь до выходной директории джоба.
|
|
|
|
|
// {{.SourceDir}} - абсолютный путь до директории с исходными файлами.
|
|
|
|
|
// {{index .Deps "f374b81d81f641c8c3d5d5468081ef83b2c7dae9"}} - абсолютный путь до директории,
|
|
|
|
|
// содержащей выход джоба с id f374b81d81f641c8c3d5d5468081ef83b2c7dae9.
|
2020-03-10 12:08:59 +00:00
|
|
|
|
type Cmd struct {
|
|
|
|
|
// Exec описывает команду, которую нужно выполнить.
|
|
|
|
|
Exec []string
|
|
|
|
|
|
|
|
|
|
// Environ описывает переменные окружения, которые необходимы для работы команды из Exec.
|
|
|
|
|
Environ []string
|
|
|
|
|
|
|
|
|
|
// WorkingDirectory задаёт рабочую директорию для команды из Exec.
|
|
|
|
|
WorkingDirectory string
|
|
|
|
|
|
|
|
|
|
// CatTemplate задаёт шаблон строки, которую нужно записать в файл.
|
|
|
|
|
CatTemplate string
|
|
|
|
|
|
|
|
|
|
// CatOutput задаёт выходной файл для команды типа cat.
|
|
|
|
|
CatOutput string
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type Graph struct {
|
|
|
|
|
SourceFiles map[ID]string
|
|
|
|
|
|
|
|
|
|
Jobs []Job
|
|
|
|
|
}
|