##// 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
variant-sources-plugin.md
159 lines | 4.6 KiB | text/x-minidsrc | MarkdownLexer
/ common / variant-sources-plugin.md
cin
implemented variants model, variants-sources adapter
r26 # Variant Sources Plugin
## NAME
`VariantsSourcesPlugin` и extension `variantSources`.
## SYNOPSIS
```groovy
plugins {
id 'org.implab.gradle-variants-sources'
}
variants {
layer('main')
variant('browser') {
role('main') { layers('main') }
}
variant('node') {
role('main') { layers('main') }
}
}
variantSources {
bind('main').sourceSetNamePattern = '{layer}'
bind('main') {
configureSourceSet {
declareOutputs('compiled')
}
}
whenRegistered { sourceSetName() }
whenBound('browser') { roleName() }
}
```
## DESCRIPTION
`VariantsSourcesPlugin` применяет `VariantsPlugin` и `SourcesPlugin`, затем
cin
Variants mutation guard after finalize
r27 регистрирует source sets из модели `variants`.
cin
implemented variants model, variants-sources adapter
r26
cin
Variants mutation guard after finalize
r27 Точка запуска registration:
cin
implemented variants model, variants-sources adapter
r26
- `variants.whenFinalized(model -> registerSourceSets(...))`
cin
Variants mutation guard after finalize
r27 ### registration
cin
implemented variants model, variants-sources adapter
r26
Для каждой usage-связки `variant/role/layer` вычисляется имя source set,
регистрируется `GenericSourceSet` (если он еще не существует), затем
вызываются callbacks.
### binding
cin
Working on separating variants as standalone plugin
r38 `bind('<layer>')` возвращает `LayerBindingSpec` и задает policy для этого
cin
implemented variants model, variants-sources adapter
r26 слоя:
- как именовать source set;
- как конфигурировать source set;
- какие callbacks вызвать на registration/binding.
### sourceSetNamePattern
cin
Variants mutation guard after finalize
r27 `sourceSetNamePattern` определяет naming policy зарегистрированного source set.
cin
implemented variants model, variants-sources adapter
r26
Default:
- `{variant}{layerCap}`
Tokens:
- `{variant}`, `{variantCap}`
- `{role}`, `{roleCap}`
- `{layer}`, `{layerCap}`
Имя санитизируется (`[^A-Za-z0-9_.-] -> _`).
Ограничение:
- один `sourceSetName` не может быть порожден разными слоями.
## EVENTS
### whenRegistered
- callback на новый уникальный source set;
- replayable;
- при shared source set срабатывает один раз.
### whenBound
- callback на каждую usage-связку `variant/role/layer`;
- replayable;
- подходит для per-usage логики.
### variant filter
cin
separated SourceSetRegistration, SourceSetUsageBinding
r31 Фильтр по варианту поддерживает только usage-binding:
cin
implemented variants model, variants-sources adapter
r26
- `whenBound(String variantName, ...)`
cin
separated SourceSetRegistration, SourceSetUsageBinding
r31 ## PAYLOAD TYPES
`SourceSetRegistration` содержит:
cin
implemented variants model, variants-sources adapter
r26
cin
separated SourceSetRegistration, SourceSetUsageBinding
r31 - `layerName`, `sourceSetName`;
- `sourceSet` (`NamedDomainObjectProvider<GenericSourceSet>`).
Sugar:
- `configureSourceSet(Action|Closure)`.
`SourceSetUsageBinding` содержит:
cin
implemented variants model, variants-sources adapter
r26
- `variantName`, `roleName`, `layerName`, `sourceSetName`;
- `sourceSet` (`NamedDomainObjectProvider<GenericSourceSet>`).
Sugar:
- `configureSourceSet(Action|Closure)`.
## API
### VariantSourcesExtension
cin
Working on separating variants as standalone plugin
r38 - `bind(BuildLayer)` — получить/создать binding для canonical layer identity.
cin
implemented variants model, variants-sources adapter
r26 - `bind(String)` — получить/создать binding по имени слоя.
- `bind(String, Action|Closure)` — сконфигурировать binding.
cin
Working on separating variants as standalone plugin
r38 - `bind(BuildLayer, Action|Closure)` — сконфигурировать binding по `BuildLayer`.
- `getBindings()` — read-only snapshot текущих bindings.
cin
implemented variants model, variants-sources adapter
r26 - `whenRegistered(...)` — глобальные callbacks регистрации source set.
- `whenBound(...)` — глобальные callbacks usage-binding.
cin
separated SourceSetRegistration, SourceSetUsageBinding
r31 - `whenBound(String variantName, ...)` — usage-binding callbacks с variant-filter.
cin
implemented variants model, variants-sources adapter
r26
cin
Working on separating variants as standalone plugin
r38 ### LayerBindingSpec
cin
implemented variants model, variants-sources adapter
r26
- `sourceSetNamePattern` — naming policy для source set слоя.
- `configureSourceSet(...)` — слойная конфигурация `GenericSourceSet`.
- `whenRegistered(...)` — callbacks регистрации в рамках слоя.
- `whenBound(...)` — callbacks usage-binding в рамках слоя.
## KEY CLASSES
- `VariantsSourcesPlugin` — точка входа plugin adapter.
- `VariantSourcesExtension` — глобальный DSL bind/events.
cin
Working on separating variants as standalone plugin
r38 - `LayerBindingSpec` — публичный DSL-contract layer-local policy/callbacks.
cin
separated SourceSetRegistration, SourceSetUsageBinding
r31 - `SourceSetRegistration` — payload регистрации source set.
- `SourceSetUsageBinding` — payload usage-binding.
cin
implemented variants model, variants-sources adapter
r26
## NOTES
cin
Variants mutation guard after finalize
r27 - `sourceSetNamePattern` фиксируется при первом чтении в registration
cin
implemented variants model, variants-sources adapter
r26 (`finalizeValueOnRead`).
cin
Working on separating variants as standalone plugin
r38 - runtime state bindings скрыт внутри adapter implementation (`LayerBinding`).
- name-based bindings резолвятся к canonical `BuildLayer` через registry `variants`.
cin
implemented variants model, variants-sources adapter
r26 - Closure callbacks используют delegate-first.
- Для вложенных closure лучше явный параметр (`ctx -> ...`).