build

package
v0.0.0-...-7937c2d Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 6, 2023 License: MIT Imports: 8 Imported by: 0

README

build

Пакет build содержит описание графа сборки и набор хелпер-функций для работы с графом. Вам не нужно писать новый код в этом пакете, но нужно научиться пользоваться тем кодом, который вам дан.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Cmd

type Cmd struct {
	// Exec описывает команду, которую нужно выполнить.
	Exec []string

	// Environ описывает переменные окружения, которые необходимы для работы команды из Exec.
	Environ []string

	// WorkingDirectory задаёт рабочую директорию для команды из Exec.
	WorkingDirectory string

	// CatTemplate задаёт шаблон строки, которую нужно записать в файл.
	CatTemplate string

	// CatOutput задаёт выходной файл для команды типа cat.
	CatOutput string
}

Cmd описывает одну команду сборки.

Есть несколько видов команд. Все виды команд описываются одной структурой. Реальный тип определяется тем, какие поля структуры заполнены.

exec - выполняет произвольную команду
cat  - записывает строку в файл

Все строки в описании команды могут содержать в себе на переменные. Перед выполнением реальной команды, переменные заменяются на их реальные значения.

{{.OutputDir}} - абсолютный путь до выходной директории джоба.
{{.SourceDir}} - абсолютный путь до директории с исходными файлами.
{{index .Deps "f374b81d81f641c8c3d5d5468081ef83b2c7dae9"}} - абсолютный путь до директории,
содержащей выход джоба с id f374b81d81f641c8c3d5d5468081ef83b2c7dae9.

func (*Cmd) Render

func (c *Cmd) Render(ctx JobContext) (*Cmd, error)

Render replaces variable references with their real value.

type Graph

type Graph struct {
	SourceFiles map[ID]string

	Jobs []Job
}

type ID

type ID [sha1.Size]byte

func NewID

func NewID() ID

func (ID) MarshalText

func (id ID) MarshalText() ([]byte, error)

func (ID) Path

func (id ID) Path() string

func (ID) String

func (id ID) String() string

func (*ID) UnmarshalText

func (id *ID) UnmarshalText(b []byte) error

type Job

type Job struct {
	// ID задаёт уникальный идентификатор джоба.
	//
	// ID вычисляется как хеш от всех входных файлов, команд запуска и хешей зависимых джобов.
	//
	// Выход джоба целиком определяется его ID. Это важное свойство позволяет кешировать
	// результаты сборки.
	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
}

Job описывает одну вершину графа сборки.

func TopSort

func TopSort(jobs []Job) []Job

TopSort sorts jobs in topological order assuming dependency graph contains no cycles.

type JobContext

type JobContext struct {
	SourceDir string
	OutputDir string
	Deps      map[ID]string
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL