##// END OF EJS Templates
Rework variant artifacts materialization model...
Rework variant artifacts materialization model Refactor VariantArtifactsPlugin around a live outgoing artifacts context and split artifact publication into explicit internal services: outgoing variant registry, assembly binding, materialization policy hooks, primary-slot convention, and slot assembly handling. Introduce variant artifact slots as identity-first public API and expose materialized assembly handles through ArtifactAssemblies. Add replayable configuration hooks for outgoing configurations, outgoing slots, outgoing variants, and registered assemblies. Create consumable outgoing configurations per variant, bind the primary slot to the root outgoing artifact set, and publish non-primary slots as Gradle outgoing configuration variants. Add deterministic injective task names for slot assembly tasks, use Sync for directory assembly, and configure the default assembly output location under build/variant-assemblies. Make primary-slot selection finalize-on-read and provide a single-slot convention that fails when no unique default can be inferred. Mark artifact internal implementation package as non-public API.

File last commit:

r38:87d6128f0bc8 default
r51:9db7822cd26c default
Show More
variants-plugin.md
112 lines | 4.1 KiB | text/x-minidsrc | MarkdownLexer
/ common / variants-plugin.md
cin
implemented variants model, variants-sources adapter
r26 # Variants Plugin
## NAME
`VariantsPlugin` и extension `variants`.
## SYNOPSIS
```groovy
plugins {
id 'org.implab.gradle-variants'
}
variants {
layer('mainBase')
layer('mainAmd')
variant('browser') {
attributes {
string('jsRuntime', 'browser')
string('jsModule', 'amd')
}
role('main') {
layers('mainBase', 'mainAmd')
}
artifactSlot('mainCompiled')
}
}
```
## DESCRIPTION
`VariantsPlugin` задает доменную модель сборки и ее валидацию. Плагин не
регистрирует compile/copy/bundle задачи напрямую.
### layers
Глобальные логические слои. Служат единым словарем имен, на которые затем
cin
Removed layer links from variants
r30 ссылаются роли.
cin
implemented variants model, variants-sources adapter
r26
### variants
Именованные варианты исполнения/пакетирования (`browser`, `node`, и т.д.).
cin
Removed layer links from variants
r30 Вариант агрегирует роли, атрибуты и artifact slots.
cin
implemented variants model, variants-sources adapter
r26
### roles
Роль описывает набор слоев в пределах варианта (`main`, `test`, `tools`).
Одна роль может ссылаться на несколько слоев.
### attributes
Typed-атрибуты (`Attribute<T> -> Provider<T>`) для передачи параметров в
адаптеры и публикацию артефактов.
### artifact slots
Именованные слоты ожидаемых артефактов варианта. Используются как контракт
между моделью варианта и плагинами, создающими/публикующими результаты.
## VALIDATION
В `finalizeModel()` выполняется проверка:
- роль не может ссылаться на неизвестный layer;
- пустые имена layer запрещены;
cin
Removed layer links from variants
r30 - имена ролей в варианте должны быть уникальны;
- имена artifact slots в варианте должны быть уникальны.
cin
implemented variants model, variants-sources adapter
r26
## LIFECYCLE
- `VariantsPlugin` вызывает `variants.finalizeModel()` на `afterEvaluate`.
cin
Variants mutation guard after finalize
r27 - после `finalizeModel()` мутации модели запрещены.
cin
implemented variants model, variants-sources adapter
r26 - `whenFinalized(...)` replayable.
## API
### BuildVariantsExtension
- `layer(...)` — объявление или конфигурация `BuildLayer`.
- `variant(...)` — объявление или конфигурация `BuildVariant`.
cin
Working on separating variants as standalone plugin
r38 - `layers { layer(...) }`, `variants { ... }` — grouped DSL без публикации container API наружу.
cin
implemented variants model, variants-sources adapter
r26 - `all(...)` — callback для всех вариантов.
cin
Working on separating variants as standalone plugin
r38 - `findLayer(name)`, `requireLayer(name)`, `getAllLayers()` — доступ к registry слоев.
cin
variants API cleanup
r29 - `getAll()`, `find(name)`, `require(name)` — доступ к вариантам.
cin
implemented variants model, variants-sources adapter
r26 - `validate()` — явный запуск валидации.
- `finalizeModel()` — валидация + финализация модели.
- `whenFinalized(...)` — callback по завершенной модели (replayable).
### BuildVariant
- `attributes { ... }` — атрибуты варианта (+ sugar `string/bool/integer`).
- `role(...)`, `roles { ... }` — роли варианта.
- `artifactSlot(...)`, `artifactSlots { ... }` — артефактные слоты.
## KEY CLASSES
- `VariantsPlugin` — точка входа плагина.
- `BuildVariantsExtension` — root extension и lifecycle.
- `BuildVariant` — агрегатная модель варианта.
cin
Working on separating variants as standalone plugin
r38 - `BuildLayer` — canonical identity-model слоя.
cin
implemented variants model, variants-sources adapter
r26 - `BuildRole` — модель роли.
- `BuildArtifactSlot` — модель артефактного слота.
- `VariantAttributes` — typed wrapper для variant attributes.
## NOTES
- Модель `variants` intentionally agnostic к toolchain.
cin
Working on separating variants as standalone plugin
r38 - Layer registry хранится как явная identity-map, а не как публичный `NamedDomainObjectContainer`.
cin
implemented variants model, variants-sources adapter
r26 - Интеграция с задачами выполняется через `variantSources` и адаптеры.