# Gradle-poet users and scenarios ## Users 1. Build engineer which works with Gradle a lot 2. Kind of ci/cd engineer with software engineer background with JVM i.e. Java backend engineer, android engineer ## Scenarios ### 1.1 User develops independent Gradle plugin for single module project - Generate a single module project - Apply their plugin to this project - Configure plugin extension - Test plugin's tasks ### 1.2 User develops independent Gradle plugin for multi module project - Generate a multi module project - Create dependencies between modules - Apply their plugin to those projects - Configure plugin extension - Test plugin's tasks ### 1.3 User develops Gradle plugin connected with other plugins - Generate a project - Apply all needed plugins to the project - Configure plugins extensions - Test plugin's tasks ### 1.4 User develops Gradle plugin connected with other plugins, want to test against all supported versions (backward compatibility) Differs to the previous scenario: - Apply another version of another/3-rd party plugin, Gradle - Configure it differently ### 1.5 User develops Gradle plugin related to source code of the project which applied this plugin I.e. plugins with bytecode transformations, code generation - Generate a project - Apply all needed plugins to the project - Configure plugins extensions - Generate/Put baseline source code - Apply dependencies needed by baseline code - Test plugin's tasks ### 1.6 User develops Gradle plugin related to check or configure execution environment I.e. gradle doctor, avito build checks plugin - Generate a project - Apply plugin - Setup Environment - Check environment state ### 1.7 User develops Gradle plugin, wants to check the it complies with all optimizations To test in all functional scenarios that optimizations works (not disabled implicitly): - Build cache for tasks - Configuration cache - Project isolation ### 1.8 User needs to compare performance of different build configurations - Generate a project - Apply plugins - Configure plugins - Generate stub files (Kotlin, resources) - Use this project as an input to run benchmarks (gradle-profiler or others) > Why can't user use manually created projects? To make different projects configurations easier. To reduce cost of maintaining of such test projects (update versions, configuration, ...). ## Non-functional scenarious ### 2.1 If project is configured incorrectly, I want to find the reason easily Scenario: - User configured a project - It fails with unexpected error in runtime Current implementation: - Copy generated project manually - Copy gradle wrapper to be able to run it - Figure out exact command to reproduce the issue Ideas: - Provide an easy way to reproduce and debug this project: ready one line command to run - Provide more context about generated project and it's internal state