Skip to content

Change how contexts are merged - #811

Merged
ekharkunov merged 4 commits into
devfrom
issue-771-manifest-merge
Nov 13, 2025
Merged

Change how contexts are merged#811
ekharkunov merged 4 commits into
devfrom
issue-771-manifest-merge

Conversation

@ekharkunov

@ekharkunov ekharkunov commented Nov 12, 2025

Copy link
Copy Markdown
Contributor

Fixes #771

Technical details

Change how manifests are applied. Now so-called prune mappings (lists which define what should include or exclude) are taken only from applied manifest. E.g.

build.yml <-- ext1.manifest <-- ext2.manifest <-- application.appmanifest.

@ekharkunov
ekharkunov force-pushed the issue-771-manifest-merge branch from 2e286c6 to aaddc42 Compare November 12, 2025 16:01
@github-actions

github-actions Bot commented Nov 12, 2025

Copy link
Copy Markdown

Summary - Extender code coverage report

Summary
Generated on: 11/12/2025 - 17:39:09
Coverage date: 11/12/2025 - 17:38:41
Parser: JaCoCo
Assemblies: 13
Classes: 80
Files: 80
Line coverage: 30.1% (1639 of 5430)
Covered lines: 1639
Uncovered lines: 3791
Coverable lines: 5430
Total lines: 11152
Branch coverage: 33.1% (670 of 2019)
Covered branches: 670
Total branches: 2019
Method coverage: Feature is only available for sponsors
Tag: 68_19306403973

Coverage

com/defold/extender - 26.3%
Name Line Branch
com/defold/extender 26.3% 29.5%
com/defold/extender/AppManifestConfiguration 100%
com/defold/extender/AppManifestPlatformConfig 100%
com/defold/extender/AsyncBuilder 0% 0%
com/defold/extender/BuilderConstants 0%
com/defold/extender/Configuration 100%
com/defold/extender/Extender 11.2% 10.3%
com/defold/extender/ExtenderApplication 0%
com/defold/extender/ExtenderBuildState 63.1% 57.1%
com/defold/extender/ExtenderConst 0%
com/defold/extender/ExtenderController 21.2% 24.3%
com/defold/extender/ExtenderException 42.8%
com/defold/extender/ExtenderUtil 66.8% 57.3%
com/defold/extender/ExtenderYamlSafeConstructor 100%
com/defold/extender/ExtensionManifestValidator 69.5% 55%
com/defold/extender/ManifestConfiguration 100%
com/defold/extender/ManifestPlatformConfig 100%
com/defold/extender/PlatformConfig 100%
com/defold/extender/TemplateExecutor 33.3% 50%
com/defold/extender/Timer 0%
com/defold/extender/TreePrinter 0% 0%
com/defold/extender/Version 0%
com/defold/extender/WebSecurityConfig 0% 0%
com/defold/extender/WhitelistConfig 100%
com/defold/extender/ZipUtils 64.9% 56.6%
com/defold/extender/builders - 0%
Name Line Branch
com/defold/extender/builders 0% 0%
com/defold/extender/builders/CSharpBuilder 0% 0%
com/defold/extender/cache - 35.4%
Name Line Branch
com/defold/extender/cache 35.4% 9.3%
com/defold/extender/cache/CacheEntry 100%
com/defold/extender/cache/CacheKeyGenerator 81.8% 100%
com/defold/extender/cache/DataCache
com/defold/extender/cache/DataCacheException 0%
com/defold/extender/cache/DataCacheFactory 0% 0%
com/defold/extender/cache/DummyDataCache 80%
com/defold/extender/cache/GCPDataCache 0% 0%
com/defold/extender/cache/LocalDiskDataCache 64.7% 16.6%
com/defold/extender/cache/info - 100%
Name Line Branch
com/defold/extender/cache/info 100% ****
com/defold/extender/cache/info/CacheInfoFileParser 100%
com/defold/extender/cache/info/CacheInfoFileWriter 100%
com/defold/extender/cache/info/CacheInfoWrapper 100%
com/defold/extender/log - 0%
Name Line Branch
com/defold/extender/log 0% 0%
com/defold/extender/log/ExtenderLogEnhancer 0% 0%
com/defold/extender/log/ExtenderLogEnhancerConfiguration 0% 0%
com/defold/extender/log/Markers 0%
com/defold/extender/metrics - 7.4%
Name Line Branch
com/defold/extender/metrics 7.4% ****
com/defold/extender/metrics/MetricsWriter 7.4%
com/defold/extender/process - 10.4%
Name Line Branch
com/defold/extender/process 10.4% 7.1%
com/defold/extender/process/ProcessExecutor 12.3% 8.8%
com/defold/extender/process/ProcessUtils 0% 0%
com/defold/extender/remote - 0%
Name Line Branch
com/defold/extender/remote 0% 0%
com/defold/extender/remote/RemoteBuildException 0%
com/defold/extender/remote/RemoteEngineBuilder 0% 0%
com/defold/extender/remote/RemoteHostConfiguration 0%
com/defold/extender/remote/RemoteInstanceConfig 0%
com/defold/extender/services - 24%
Name Line Branch
com/defold/extender/services 24% 24.3%
com/defold/extender/services/DataCacheService 0% 0%
com/defold/extender/services/DefoldSdkService 78.1% 66.6%
com/defold/extender/services/DefoldSdkServiceConfiguration
com/defold/extender/services/GCPInstanceService 0% 0%
com/defold/extender/services/GradleService 0%
com/defold/extender/services/GradleServiceInterface
com/defold/extender/services/HealthReporterService 0% 0%
com/defold/extender/services/MockGradleService 0%
com/defold/extender/services/RealGradleService 0% 0%
com/defold/extender/services/UserUpdateService 0% 0%
com/defold/extender/services/cocoapods - 50.6%
Name Line Branch
com/defold/extender/services/cocoapods 50.6% 53.3%
com/defold/extender/services/cocoapods/CocoaPodsService 2.1% 1.8%
com/defold/extender/services/cocoapods/CocoaPodsServiceBuildState 16.6% 0%
com/defold/extender/services/cocoapods/CreateBuildSpecArgs 60.7%
com/defold/extender/services/cocoapods/IConfigParser
com/defold/extender/services/cocoapods/LanguageSet 66.6% 50%
com/defold/extender/services/cocoapods/MainPodfile 20%
com/defold/extender/services/cocoapods/PlatformAndLanguageSet 0% 0%
com/defold/extender/services/cocoapods/PlatformSet 0% 0%
com/defold/extender/services/cocoapods/PlistBuddyWrapper 0% 0%
com/defold/extender/services/cocoapods/PodBuildSpec 79.7% 62.5%
com/defold/extender/services/cocoapods/PodfileParser 92.8% 81.8%
com/defold/extender/services/cocoapods/PodfileParsingException 100%
com/defold/extender/services/cocoapods/PodSpec 52% 10%
com/defold/extender/services/cocoapods/PodSpecParser 89.4% 78.7%
com/defold/extender/services/cocoapods/PodUtils 63% 51.4%
com/defold/extender/services/cocoapods/ResolvedPods 52.7% 45.6%
com/defold/extender/services/cocoapods/XCConfigParser 94.6% 88.4%
com/defold/extender/services/data - 80.7%
Name Line Branch
com/defold/extender/services/data 80.7% 75%
com/defold/extender/services/data/DefoldSdk 87.5% 75%
com/defold/extender/services/data/GCPInstanceState 0%
com/defold/extender/tracing - 0%
Name Line Branch
com/defold/extender/tracing 0% 0%
com/defold/extender/tracing/ExtenderExecutor 0% 0%
com/defold/extender/tracing/ExtenderTracerInterceptor 0% 0%
com/defold/extender/tracing/TraceIdInResponseServletFilter 0% 0%
com/defold/extender/utils - 0%
Name Line Branch
com/defold/extender/utils 0% 0%
com/defold/extender/utils/FrameworkUtil 0% 0%
com/defold/extender/utils/PodBuildUtil 0% 0%

@ekharkunov
ekharkunov force-pushed the issue-771-manifest-merge branch from fa6f191 to 148eaa3 Compare November 12, 2025 17:34
@ekharkunov
ekharkunov force-pushed the issue-771-manifest-merge branch from 148eaa3 to 9e575de Compare November 12, 2025 17:36
@ekharkunov
ekharkunov requested a review from JCash November 12, 2025 17:44

echo "PATH=\"${APPENDED_PATH}\"" >> $OUTPUT_FILE

echo ";DM_DEBUG_COMMANDS=1" >> $OUTPUT_FILE

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unrelated changes. Just add commented lines to result user.env for future debugging.

// because depends on that list we defined which extension to build and which symbols should be included into
// result binary
new PruneMapping("excludeSymbols", "", "symbols"),
new PruneMapping("frameworks", "includeFrameworks", "excludeFrameworks")

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added missed definition for frameworks

// if applied manifest contains 'symbols' which were excluded before - need update 'excludeSymbols' list
// because depends on that list we defined which extension to build and which symbols should be included into
// result binary
new PruneMapping("excludeSymbols", "", "symbols"),

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added reverse mapping because we need to exclude symbols from excludeSymbols list in case if next manifest contains values in symbols list.

ExtenderUtil.pruneItems(srcList,
ExtenderUtil.getStringList(context, mapping.includeName),
ExtenderUtil.getStringList(context, mapping.excludeName)) );
ExtenderUtil.getStringList(b, mapping.includeName),

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Main fix: apply prune mappings only from applied context, not from merged and accumulated context.

@ekharkunov
ekharkunov marked this pull request as ready for review November 12, 2025 17:44
}
};

private static List<PruneMapping> MAPPINGS = List.of(

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Create list once instead of every call of mergeContexts

@JCash JCash left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Lgtm!

assertFalse(excludeSymbols.contains("ProfilerExt"));
assertFalse(excludeSymbols.contains("ProfilerBasic"));
assertFalse(excludeSymbols.contains("ProfilerRemotery"));
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

❤️

@ekharkunov
ekharkunov merged commit 200e7ce into dev Nov 13, 2025
1 check passed
@ekharkunov
ekharkunov deleted the issue-771-manifest-merge branch November 13, 2025 11:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Ensure consistent application of app manifest

3 participants