{"id":35849299,"url":"https://github.com/bancolombia/screenplayarchitecture","last_synced_at":"2026-01-08T07:00:05.309Z","repository":{"id":190280214,"uuid":"664832262","full_name":"bancolombia/ScreenPlayArchitecture","owner":"bancolombia","description":"Screenplay Architecture is a plugin that enables the creation of structured projects used for REST and UX test automation.","archived":false,"fork":false,"pushed_at":"2024-01-10T22:33:23.000Z","size":171,"stargazers_count":0,"open_issues_count":2,"forks_count":2,"subscribers_count":2,"default_branch":"trunk","last_synced_at":"2024-01-10T23:43:46.736Z","etag":null,"topics":["java","screenplay-pattern","serenity-bdd","testing"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bancolombia.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS.txt","security":"SECURITY.md","support":null,"governance":null}},"created_at":"2023-07-10T21:12:17.000Z","updated_at":"2024-01-10T23:43:46.736Z","dependencies_parsed_at":"2023-11-14T17:39:54.642Z","dependency_job_id":null,"html_url":"https://github.com/bancolombia/ScreenPlayArchitecture","commit_stats":null,"previous_names":["juniormm12/screenplayarchitecture","bancolombia/screenplayarchitecture"],"tags_count":0,"template":null,"template_full_name":null,"purl":"pkg:github/bancolombia/ScreenPlayArchitecture","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bancolombia%2FScreenPlayArchitecture","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bancolombia%2FScreenPlayArchitecture/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bancolombia%2FScreenPlayArchitecture/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bancolombia%2FScreenPlayArchitecture/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bancolombia","download_url":"https://codeload.github.com/bancolombia/ScreenPlayArchitecture/tar.gz/refs/heads/trunk","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bancolombia%2FScreenPlayArchitecture/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28242434,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2026-01-08T02:00:06.591Z","response_time":241,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["java","screenplay-pattern","serenity-bdd","testing"],"created_at":"2026-01-08T07:00:01.403Z","updated_at":"2026-01-08T07:00:05.302Z","avatar_url":"https://github.com/bancolombia.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Scaffolding of ScreenPlay Architecture\n\nGradle plugin to create a java application based on ScreenPlay Architecture following our best practices.\n\n- [Scaffolding of ScreenPlay Architecture](#Scaffolding-of-ScreenPlay-Architecture)\n- [Plugin Implementation](#plugin-implementation)\n- [Tasks](#tasks)\n  - [Generate Project](#generate-project)\n  - [Generate Features](#generate-features)\n  - [Generate Runners](#generate-runners)\n  - [Generate Rest Interaction](#generate-rest-interaction)\n  - [Generate Tasks](#generate-tasks)\n  - [Generate Pipeline](#generate-pipeline)\n  - [Generate Critical Root](#generate-critical-root)\n- [How can I help?](#how-can-i-help)\n- [What's Next?](#whats-next)\n\n\n\n# Plugin implementation \n\nTo use the [plugin](#) you need Gradle version 8.6 or later, to start add the following section into your\n**build.gradle** file.\n\n```groovy\nplugins {\n    id \"co.com.bancolombia.screenplayarchitecture\" version \"1.0.0\"\n}\n```\nor if is a new project execute this script in the root directory of your project.\n```sh\necho \"plugins {\n  id \\\"co.com.bancolombia.screenplayarchitecture\\\" version \\\"1.0.0\\\"\n}\" \u003e build.gradle\n```\n# Tasks\nThe Scaffolding ScreenPlay Architecture plugin will allow you run 7 tasks:\n\n## Generate Project\n\nThe **`screenPlayArchitecture | spa`** task will generate a ScreenPlay architecture structure in your project, this task\nhas 3 optional parameters; `projectName` , `groupId` and `principalPackage`.\nIf you run this task on an existing project it will override the `build.gradle` file.\n  - **`projectName`** `= ProjectName`: This parameter is going to specify name of the project. `Default value = Screenplay_architecture`\n  - **`groupId`** `= \u003cyour.company.domain\u003e`: You can specify your domain, this parameter going to use for package structure. `Default value = co.com.bancolombia.certificacion`\n  - **`principalPackage`** `= package container`: This parameter going to like package container and is a complement for groupId. `Default value = screen`\n  - **`type`** `= choose between REST or UX`: This parameter going to specify type automation will be create. `Default value = UX`\n\n\n```shell\ngradle screenPlayArchitecture --projectName=Team_moduloPrueba --groupId=co.com.bancolombia.certificacion --principalPackage=moduloprueba --type=REST\ngradle spa --projectName=Team_moduloPrueba --groupId=co.com.bancolombia.certificacion --principalPackage=moduloprueba --type=REST\n```\n\n**_The structure will look like this for java:_**\n\n```bash\n   📦NameProject\n   ┣ 📂src\n   ┃ ┣ 📂main\n   ┃ ┃ ┗ 📂java\n   ┃ ┃   ┗ 📂co\n   ┃ ┃     ┗ 📂com\n   ┃ ┃       ┗ 📂bancolombia\n   ┃ ┃         ┗ 📂certificacion\n   ┃ ┃           ┗ 📂[principalPackage]\n   ┃ ┃             ┣ 📂exceptions\n   ┃ ┃             ┣ 📂integrations\n   ┃ ┃             ┣ 📂interactions\n   ┃ ┃             ┣ 📂models\n   ┃ ┃             ┣ 📂questions\n   ┃ ┃             ┣ 📂tasks\n   ┃ ┃             ┣ 📂userinterfaces\n   ┃ ┃             ┗ 📂utils\n   ┃ ┗ 📂test\n   ┃   ┣ 📂java\n   ┃   ┃ ┗ 📂co\n   ┃   ┃   ┗ 📂com\n   ┃   ┃     ┗ 📂bancolombia\n   ┃   ┃       ┗ 📂certificacion\n   ┃   ┃         ┗ 📂[principalPackage]\n   ┃   ┃           ┣ 📂runners\n   ┃   ┃           ┗ 📂stepdefinitions\n   ┃   ┗ 📂resources          \n   ┃     ┗ 📂features         \n   ┣ 📜build.gradle\n   ┗ 📜settings.gradle\n   ```\n## Generate Features\nThe **`generateFeature | gft`** task will generate feature files inside features folder, this task has two required parameter `name` and `nameSubFolder`\nalso, there are 1 parameters optional `examples`   \n- **`name`** `= name_feature`: This parameter is going to specify the name of the feature class. `field is required`\n- **`examples`** `= true`: This parameter is going to specify if Scenario Outline are needed. `field for default is false`\n- **`nameSubFolder`** `= nameSubFolder`: This parameter is going to specify the name of the subfolder that will contain the feature files. `field is requered.`\n\n```shell\n  gradle generateFeature --name=feature_name --nameSubFolder=[nameSubFolder] --examples=[optionalBoolValue] \n  gradle gft --name=feature_name --nameSubFolder=[nameSubFolder] --examples=[optionalBoolValue] \n```\n```bash\n   📂test\n   ┃   ┣ 📂java\n   ┃   ┗ 📂resources          \n   ┃     ┗ 📂features\n   ┃       ┗ 📂[nameSubFolder]\n   ┃         ┗ 📜[feature_name].feature\n```\n\n## Generate Runners\nThe **`generateRunner | grun`** task will generate runners classes inside runners package, this task has one required parameter `name`\n- **`name`** `= NameRunner`: This parameter is going to specify the name of the runner class. `field is required`\n- **`folderName`** `= package name`: This parameter is going to specify the name of the package that will contain the runners classes. `field is required`\n\n```shell\n  gradle generateRunner --name=runnerClassName --folderName=runnerspackage\n  gradle grun --name=runnerClassName --folderName=runnerspackage\n```\n```bash\n\n┃ ┗ 📂test\n┃   ┣ 📂java\n┃   ┃ ┗ 📂co\n┃   ┃   ┗ 📂com\n┃   ┃     ┗ 📂bancolombia\n┃   ┃       ┗ 📂certificacion\n┃   ┃         ┗ 📂[principalPackage]\n┃   ┃           ┣ 📂runners\n┃   ┃           ┃ ┗ 📂[runnerspackage]\n┃   ┃           ┃   ┗ 📜[name].java\n\n```\n\n\n## Generate Rest Interaction\nThe **`generateRestInteraction | gri`** task will generate the rest interaction classes, this task has one required parameters `typeInteraction`\n- **`typeInteraction`** `= interaction`: This parameter is going to specify the type of interaction to use. `field is required`\n- **`nameInteraction`** `= Interaction`: This parameter is going to specify the name of interaction to use. `This field is required only when you choose` `GENERIC` `as type of interaction class`\n\n```shell\n  gradle generateRestInteraction --typeInteraction=[typeInteraction]\n  gradle gri --typeInteraction=[typeInteraction] \n```\n\n| Reference for **typeInteraction** | Name                |\n|-----------------------------------|---------------------|\n| Generic                           | Generic interaction |\n| Post                              | Rest Post           |\n| Get                               | Rest Get            |\n| Options                           | Rest Options        |\n| Patch                             | Rest Patch          |\n| Put                               | Rest Put            |\n\n```bash\n 📦NameProject\n ┣ 📂src\n ┃ ┣ 📂main\n ┃ ┃ ┗ 📂java\n ┃ ┃   ┗ 📂co\n ┃ ┃     ┗ 📂com\n ┃ ┃       ┗ 📂bancolombia\n ┃ ┃         ┗ 📂certificacion\n ┃ ┃           ┗ 📂[principalPackage]\n ┃ ┃             ┣ 📂exceptions\n ┃ ┃             ┣ 📂integrations\n ┃ ┃             ┣ 📂interactions\n ┃ ┃             ┃ ┣ 📜[Post].java\n ┃ ┃             ┃ ┣ 📜[Get].java\n ┃ ┃             ┃ ┣ 📜[Put].java\n ┃ ┃             ┃ ┣ 📜[Options].java  \n ┃ ┃             ┃ ┣ 📜[Patch].java  \n ┃ ┃             ┃ ┣ 📜[nameInteraction].java\n```\n\n## Generate Tasks\nThe **`generateTask | gtk`** task will generate the Rest task or Ux class, this task has two required parameter `name` and `typeTask`\n- **`name`** `= nameTaskClass`: This parameter is going to specify the name task class to use. `field is required`\n- **`typeTask`** `= Rest`: This parameter is going to specify the type task class to use. `field is required`\n- **`method`** `= typeTask`: If you choose 'Rest' for the `typeTask` field, the 'method' field becomes mandatory, as it constructs the Task list for REST consumption. `field is required`\n\n```shell\n  gradle generateTask --name=[nameTaskClass] --typeTask=[typeTask] --method=[optionalField]\n  gradle gtk --name=[nameTaskClass] --typeTask=[typeTask] --method=[optionalField]\n```\n\n| Reference for **typeTask** | Name      |\n|----------------------------|-----------|\n| Rest                       | Rest Rest |\n| Ux                         | Rest Ux   |\n\n```bash\n 📦NameProject\n ┣ 📂src\n ┃ ┣ 📂main\n ┃ ┃ ┗ 📂java\n ┃ ┃   ┗ 📂co\n ┃ ┃     ┗ 📂com\n ┃ ┃       ┗ 📂bancolombia\n ┃ ┃         ┗ 📂certificacion\n ┃ ┃           ┗ 📂[principalPackage]\n ┃ ┃             ┣ 📂exceptions\n ┃ ┃             ┣ 📂integrations\n ┃ ┃             ┣ 📂interactions\n ┃ ┃             ┣ 📂models\n ┃ ┃             ┣ 📂questions\n ┃ ┃             ┣ 📂tasks\n ┃ ┃             ┃ ┣ 📜[Rest].java\n ┃ ┃             ┃ ┣ 📜[Ux].java\n```\n\n## Generate Pipeline\nThe **`generatePipeline | gpl`** task will generate CI/CD pipeline inside root project, this task has two required parameters `name` and `type`\n- **`name`** `= NamePipeline`: This parameter is going to specify the name of the pipeline. `field is required`\n- **`type`** `= azure`: This parameter is going to specify the pipeline type. `field is required`\n\n```shell\n  gradle generatePipeline --name=pipelineCi --type=[type Pipeline] \n  gradle gpl --name=pipelineCi --type=[typePipeline] \n```\n\n| Reference for **pipelineType** | Name           |\n| ------------------------------ | -------------- |\n| azure                          | Azure Pipeline |\n\n```bash\n   ┣ 📜build.gradle\n   ┣ 📜[name]_Build.gradle\n   ┗ 📜settings.gradle\n```\n## Generate Critical Root\nThe **`generateCriticalRoot | gcr`** task will generate the Json file that containing the critical path feature,\nthis task has two required parameters `features` and `language`\n- **`componentName`** `= component_name_test`: This parameter specify the project component name  `field is optional`\n- **`features`** `= featureroot`: This parameter specify the feature root and name to extract the scenario separate for comma. `field is required`\n- **`language`** `= languageFeature`: This parameter specify the language used in the Gherkin language into the feature file. `field is required`\n\n```shell\n  gradle generateCriticalRoot --componentName=component_test --features=root/feature_one, root/feature_two --language=EN \n  gradle gcr --componentName=component_test --features=root/feature_one, root/feature_two --language=EN\n```\n\n| Reference for **language** | Name    |\n|----------------------------|---------|\n| EN                         | English |\n| ES                         | Spanish |\n\n\n# How can I help?\nReview the issues, we hear new ideas. Read more [Contributing](https://github.com/bancolombia/)\n\n# Whats Next?\nRead more  [About ScreenPlay Architecure]()","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbancolombia%2Fscreenplayarchitecture","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbancolombia%2Fscreenplayarchitecture","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbancolombia%2Fscreenplayarchitecture/lists"}