You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
en: "Directory inside the image that contains the manifest files (required for go-mod and python-*)"
597
-
ru: "Директория внутри образа, содержащая файлы манифеста (обязательно для go-mod и python-*)"
596
+
en: "Directory inside the image that contains the manifest files (required for go-mod, python-*, and rust-cargo)"
597
+
ru: "Директория внутри образа, содержащая файлы манифеста (обязательно для go-mod, python-* и rust-cargo)"
598
598
- name: spec
599
599
value: "string"
600
600
description:
601
-
en: "Manifest file name (defaults: go.mod for go-mod, pyproject.toml for python-uv/python-poetry, requirements.txt for python-pip)"
602
-
ru: "Имя файла манифеста (по умолчанию: go.mod для go-mod, pyproject.toml для python-uv/python-poetry, requirements.txt для python-pip)"
601
+
en: "Manifest file name (defaults: go.mod for go-mod, pyproject.toml for python-uv/python-poetry, requirements.txt for python-pip, Cargo.toml for rust-cargo)"
602
+
ru: "Имя файла манифеста (по умолчанию: go.mod для go-mod, pyproject.toml для python-uv/python-poetry, requirements.txt для python-pip, Cargo.toml для rust-cargo)"
603
603
- name: lock
604
604
value: "string"
605
605
description:
606
-
en: "Lock file name (defaults: go.sum for go-mod, uv.lock for python-uv, poetry.lock for python-poetry; empty for python-pip)"
607
-
ru: "Имя lock-файла (по умолчанию: go.sum для go-mod, uv.lock для python-uv, poetry.lock для python-poetry; пусто для python-pip)"
606
+
en: "Lock file name (defaults: go.sum for go-mod, uv.lock for python-uv, poetry.lock for python-poetry, Cargo.lock for rust-cargo; empty for python-pip)"
607
+
ru: "Имя lock-файла (по умолчанию: go.sum для go-mod, uv.lock для python-uv, poetry.lock для python-poetry, Cargo.lock для rust-cargo; пусто для python-pip)"
Copy file name to clipboardExpand all lines: docs/pages_en/usage/build/stapel/instructions.md
+76-5Lines changed: 76 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -140,7 +140,13 @@ No limitations are imposed on assembly instructions. The suggested use of _user
140
140
141
141
## Installing binary packages
142
142
143
-
The `packages` directive provides a declarative way to install binary packages with the `pm` package manager. werf installs the listed packages in a dedicated `packagesInstall` stage that runs before the `install` stage. When SBOM generation is enabled (`build.sbom.enable: true`), the installed packages — including their transitive dependencies — are recorded in the resulting image SBOM.
143
+
The `packages` directive provides a declarative way to declare package dependencies. werf processes each entry in a dedicated `packagesInstall` stage that runs before the `install` stage. When SBOM generation is enabled (`build.sbom.enable: true`), the installed packages — including their transitive dependencies — are recorded in the resulting image SBOM.
144
+
145
+
Two kinds of package sources are supported: OS package manager (`os-pm`) and file-based package ecosystems (`go-mod`, `python-uv`, `python-pip`, `python-poetry`, `rust-cargo`).
146
+
147
+
### OS packages
148
+
149
+
The `os-pm` type installs system packages via the `pm` package manager bundled in the builder base image:
144
150
145
151
```yaml
146
152
image: app
@@ -152,15 +158,80 @@ packages:
152
158
- jq
153
159
```
154
160
155
-
The directive supports the following options:
156
-
157
-
- `type`— the package source type. Only `os-pm` (the `pm` package manager) is currently supported.
158
-
- `spec`— an inline list of package names to install. File-based package lists are not supported.
161
+
- `type: os-pm` — selects the `pm` package manager.
162
+
- `spec`— an inline list of package names to install.
159
163
160
164
The base image must provide the `pm` binary in `$PATH` (for example, a Deckhouse builder base image labeled `io.deckhouse.internal.builder=true`). Otherwise the build fails because `pm` cannot be found.
161
165
162
166
Packages installed in a parent image are inherited by images based on it via `fromImage` and remain present in the child image SBOM.
163
167
168
+
### File-based package ecosystems
169
+
170
+
File-based types run the ecosystem's install command inside the build container and feed the resulting lock file to syft for SBOM generation. The package manager itself must be pre-installed in the builder image.
171
+
172
+
**Go modules** (`go-mod`):
173
+
174
+
```yaml
175
+
packages:
176
+
- type: go-mod
177
+
workdir: /app
178
+
```
179
+
180
+
Runs `go mod download`. Default files: `go.mod`(spec) and `go.sum` (lock).
181
+
182
+
**Python — uv** (`python-uv`, alias `uv`):
183
+
184
+
```yaml
185
+
packages:
186
+
- type: python-uv
187
+
workdir: /app
188
+
```
189
+
190
+
Runs `uv sync --frozen`. Default files: `pyproject.toml`(spec) and `uv.lock` (lock).
191
+
192
+
**Python — pip** (`python-pip`, alias `pip`):
193
+
194
+
```yaml
195
+
packages:
196
+
- type: python-pip
197
+
workdir: /app
198
+
```
199
+
200
+
Runs `pip install --no-cache-dir -r requirements.txt`. Default spec: `requirements.txt`. No lock file (pip has no lock semantics; the `lock` field is rejected).
201
+
202
+
**Python — poetry** (`python-poetry`, alias `poetry`):
203
+
204
+
```yaml
205
+
packages:
206
+
- type: python-poetry
207
+
workdir: /app
208
+
```
209
+
210
+
Runs `poetry install --no-root`. Default files: `pyproject.toml`(spec) and `poetry.lock` (lock).
211
+
212
+
**Rust — Cargo** (`rust-cargo`, alias `cargo`):
213
+
214
+
```yaml
215
+
packages:
216
+
- type: rust-cargo
217
+
workdir: /app
218
+
```
219
+
220
+
Runs `cargo fetch`. Default files: `Cargo.toml`(spec) and `Cargo.lock` (lock). syft uses the `rust-cargo-lock-cataloger` to scan the lock file.
221
+
222
+
All file-based types support `workdir` (required), `spec` (optional, overrides default manifest filename), and `lock` (optional, overrides default lock filename). Multiple entries of the same or different types can be combined in one image:
223
+
224
+
```yaml
225
+
packages:
226
+
- type: go-mod
227
+
workdir: /app
228
+
- type: rust-cargo
229
+
workdir: /app/native
230
+
- type: os-pm
231
+
spec:
232
+
- libssl-dev
233
+
```
234
+
164
235
## Syntax
165
236
166
237
There are two mutually exclusive top-level ***builder directives*** for assembly instructions: `shell`and `ansible`. You can build an image either via ***shell instructions*** or via their ***ansible counterparts***.
Copy file name to clipboardExpand all lines: docs/pages_ru/usage/build/stapel/instructions.md
+76-5Lines changed: 76 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -153,7 +153,13 @@ shell:
153
153
154
154
## Установка бинарных пакетов
155
155
156
-
Директива `packages` позволяет декларативно устанавливать бинарные пакеты с помощью пакетного менеджера `pm`. werf устанавливает перечисленные пакеты в отдельной стадии `packagesInstall`, которая выполняется до стадии `install`. Если включена генерация SBOM (`build.sbom.enable: true`), установленные пакеты — вместе с их транзитивными зависимостями — попадают в итоговый SBOM образа.
156
+
Директива `packages` позволяет декларативно объявлять зависимости от пакетов. werf обрабатывает каждую запись в отдельной стадии `packagesInstall`, которая выполняется до стадии `install`. Если включена генерация SBOM (`build.sbom.enable: true`), установленные пакеты — вместе с их транзитивными зависимостями — попадают в итоговый SBOM образа.
157
+
158
+
Поддерживаются два вида источников пакетов: менеджер системных пакетов (`os-pm`) и файловые экосистемы (`go-mod`, `python-uv`, `python-pip`, `python-poetry`, `rust-cargo`).
159
+
160
+
### Системные пакеты
161
+
162
+
Тип `os-pm` устанавливает системные пакеты через пакетный менеджер `pm`, входящий в состав базового образа сборщика:
157
163
158
164
```yaml
159
165
image: app
@@ -165,15 +171,80 @@ packages:
165
171
- jq
166
172
```
167
173
168
-
Директива поддерживает следующие опции:
169
-
170
-
- `type`— тип источника пакетов. Сейчас поддерживается только `os-pm` (пакетный менеджер `pm`).
171
-
- `spec`— inline-список имён пакетов для установки. Списки пакетов из файла не поддерживаются.
- `spec`— inline-список имён пакетов для установки.
172
176
173
177
Базовый образ должен предоставлять бинарь `pm` в `$PATH` (например, базовый образ Deckhouse с меткой `io.deckhouse.internal.builder=true`). Иначе сборка завершится ошибкой, так как `pm` не будет найден.
174
178
175
179
Пакеты, установленные в родительском образе, наследуются образами, построенными на его основе через `fromImage`, и остаются в SBOM дочернего образа.
176
180
181
+
### Файловые экосистемы пакетов
182
+
183
+
Файловые типы запускают команду установки экосистемы внутри контейнера сборки и передают полученный lock-файл в syft для генерации SBOM. Пакетный менеджер должен быть предустановлен в образе сборщика.
184
+
185
+
**Go-модули** (`go-mod`):
186
+
187
+
```yaml
188
+
packages:
189
+
- type: go-mod
190
+
workdir: /app
191
+
```
192
+
193
+
Выполняет `go mod download`. Файлы по умолчанию: `go.mod`(spec) и `go.sum` (lock).
194
+
195
+
**Python — uv** (`python-uv`, алиас `uv`):
196
+
197
+
```yaml
198
+
packages:
199
+
- type: python-uv
200
+
workdir: /app
201
+
```
202
+
203
+
Выполняет `uv sync --frozen`. Файлы по умолчанию: `pyproject.toml`(spec) и `uv.lock` (lock).
204
+
205
+
**Python — pip** (`python-pip`, алиас `pip`):
206
+
207
+
```yaml
208
+
packages:
209
+
- type: python-pip
210
+
workdir: /app
211
+
```
212
+
213
+
Выполняет `pip install --no-cache-dir -r requirements.txt`. Spec по умолчанию: `requirements.txt`. Lock-файл не поддерживается (pip не имеет семантики lock; поле `lock` отклоняется с ошибкой).
Выполняет `poetry install --no-root`. Файлы по умолчанию: `pyproject.toml`(spec) и `poetry.lock` (lock).
224
+
225
+
**Rust — Cargo** (`rust-cargo`, алиас `cargo`):
226
+
227
+
```yaml
228
+
packages:
229
+
- type: rust-cargo
230
+
workdir: /app
231
+
```
232
+
233
+
Выполняет `cargo fetch`. Файлы по умолчанию: `Cargo.toml`(spec) и `Cargo.lock` (lock). Для генерации SBOM syft использует каталогизатор `rust-cargo-lock-cataloger`.
234
+
235
+
Все файловые типы поддерживают поля `workdir` (обязательно), `spec` (опционально, переопределяет имя файла манифеста) и `lock` (опционально, переопределяет имя lock-файла). В одном образе можно комбинировать несколько записей одного или разных типов:
236
+
237
+
```yaml
238
+
packages:
239
+
- type: go-mod
240
+
workdir: /app
241
+
- type: rust-cargo
242
+
workdir: /app/native
243
+
- type: os-pm
244
+
spec:
245
+
- libssl-dev
246
+
```
247
+
177
248
## Синтаксис
178
249
179
250
Пользовательские стадии и инструкции сборки определяются внутри двух взаимоисключающих директив — `shell` и `ansible`. Каждый образ может собираться либо используя сборочные инструкции ***shell***, либо задачи ***ansible***, описанные в соответствующих директивах.
0 commit comments