##// 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
readme.md
134 lines | 5.1 KiB | text/x-minidsrc | MarkdownLexer
cin
implemented variants model, variants-sources adapter
r26 # Gradle Common Sources Model
## NAME
`gradle-common/common` — набор плагинов для моделирования вариантов сборки,
cin
Variants mutation guard after finalize
r27 регистрации source sets и интеграции этой модели с toolchain-адаптерами.
cin
implemented variants model, variants-sources adapter
r26
## SYNOPSIS
```groovy
plugins {
id 'org.implab.gradle-variants-sources'
}
variants {
layer('mainBase')
layer('mainAmd')
variant('browser') {
role('main') { layers('mainBase', 'mainAmd') }
}
}
variantSources {
bind('mainBase') {
configureSourceSet {
declareOutputs('compiled')
}
}
bind('mainAmd').sourceSetNamePattern = '{variant}{layerCap}'
whenRegistered { sourceSetName() }
whenBound { ctx ->
ctx.configureSourceSet {
declareOutputs('typings')
}
}
}
```
## DESCRIPTION
Модуль состоит из трех логических частей:
- `variants` — декларативная доменная модель сборки;
cin
Variants mutation guard after finalize
r27 - `sources` — модель физически регистрируемых source sets;
cin
implemented variants model, variants-sources adapter
r26 - `variantSources` — адаптер, который связывает первые две модели.
Ниже раскрытие каждой части.
### variants
`variants` задает структуру пространства сборки: какие есть слои, какие роли
cin
Removed layer links from variants
r30 используют эти слои в каждом варианте, какие есть атрибуты и artifact slots.
Модель не создает задачи и не привязана к TS/JS.
cin
implemented variants model, variants-sources adapter
r26
Практический смысл:
- формализовать архитектуру сборки;
- дать адаптерам единый источник правды.
### sources
`sources` описывает независимые source sets (`GenericSourceSet`) с именованными
outputs. Это уже "физический" уровень, к которому удобно привязывать задачи,
артефакты и task inputs/outputs.
Практический смысл:
- создать единый контракт по входам/выходам;
- регистрировать результаты задач как outputs source set;
- минимизировать ручные `dependsOn` за счет модели outputs.
### variantSources
cin
Variants mutation guard after finalize
r27 `variantSources` регистрирует source sets на основе `variants`, применяет
cin
implemented variants model, variants-sources adapter
r26 конфигурацию layer-bindings и отдает события (`whenRegistered`, `whenBound`) для
адаптеров других плагинов.
Практический смысл:
- переводить логическую модель `variants` в executable-модель `sources`;
cin
Variants mutation guard after finalize
r27 - навешивать политики toolchain на зарегистрированные source sets;
cin
implemented variants model, variants-sources adapter
r26 - синхронизировать плагины через replayable callback-контракт.
## DOMAIN MODEL
cin
Working on separating variants as standalone plugin
r38 - `BuildLayer` — canonical identity-model объявленного слоя.
cin
Removed layer links from variants
r30 - `BuildVariant` — агрегат ролей, атрибутов, артефактных слотов.
cin
Working on separating variants as standalone plugin
r38 - `BuildRole` — роль внутри варианта, содержит ссылки на declared layer names.
cin
Variants mutation guard after finalize
r27 - `GenericSourceSet` — зарегистрированный набор исходников и outputs.
cin
Working on separating variants as standalone plugin
r38 - `LayerBindingSpec` — публичный DSL-contract adapter policy/callbacks для слоя.
cin
separated SourceSetRegistration, SourceSetUsageBinding
r31 - `SourceSetRegistration` — payload события регистрации source set.
- `SourceSetUsageBinding` — payload события usage-binding.
cin
implemented variants model, variants-sources adapter
r26
## EVENT CONTRACT
- `whenRegistered`:
- событие нового уникального source set name;
- replayable.
- `whenBound`:
- событие каждой usage-связки `variant/role/layer`;
- replayable.
Closure callbacks работают в delegate-first режиме (`@DelegatesTo`). Для
вложенных closure рекомендуется явный параметр (`ctx -> ...`).
## KEY CLASSES
- `SourcesPlugin` — регистрирует extension `sources`.
- `GenericSourceSet` — модель источников/outputs для конкретного имени.
- `VariantsPlugin` — регистрирует extension `variants` и lifecycle finalize.
- `BuildVariantsExtension` — корневой API модели вариантов.
cin
Removed layer links from variants
r30 - `BuildVariant` — API ролей, attributes и artifact slots варианта.
cin
implemented variants model, variants-sources adapter
r26 - `VariantsSourcesPlugin` — применяет `variants` + `sources` и запускает адаптер.
cin
Variants mutation guard after finalize
r27 - `VariantSourcesExtension` — API bind/events registration.
cin
Working on separating variants as standalone plugin
r38 - `LayerBindingSpec` — слой-конкретный DSL для policy/configuration source set.
cin
separated SourceSetRegistration, SourceSetUsageBinding
r31 - `SourceSetRegistration` — payload `whenRegistered(...)`.
- `SourceSetUsageBinding` — payload `whenBound(...)`.
cin
implemented variants model, variants-sources adapter
r26
## NOTES
- Marker ids:
- `org.implab.gradle-variants`
- `org.implab.gradle-variants-sources`
- `SourcesPlugin` пока class-only (без marker id).
## SEE ALSO
- `sources-plugin.md`
- `variants-plugin.md`
- `variant-sources-plugin.md`