-
Notifications
You must be signed in to change notification settings - Fork 63
merging master to official 202.5 RC #4388
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
164aedf
f711286
aec18f2
6da64d3
a9191d4
22ef824
bd11802
9612b77
dc2fca8
f411648
f5a855e
a3cf019
27de7b1
939a571
e27dbe1
065664b
41204cf
1797f3b
5ef7168
fcfed2f
25bec05
76be19e
37c7dda
6d56eb0
17f8f26
159054d
66f536b
0e7e33f
09cd5c2
1775fa4
6b8048c
1d06fbd
39c7b65
002964a
a931def
958675a
9c6030b
6d57691
671b3eb
034daf2
e90d3cf
55a24e5
edfbb17
308f01b
1b27b68
f0fdb1c
14b4321
2adedb5
73b3500
b95cc4a
7b04dd9
73b3395
a58e9e4
e299329
946ea71
924751b
0f1c872
7253c87
8bc6378
8ffbae0
46ced1d
a892a8b
649aad6
4d3a3c5
918b2eb
bc0eb9d
5e59d95
823a5c1
2d953ee
225a60d
262895d
1e912d9
ca0ede4
26e5248
9b8588c
6c669be
8aef164
c002f3e
5270db2
5f53a7a
19c9308
d5b07a8
45a2836
d21d806
2f575ce
f4840ba
80ace3d
ae03099
43d1cf4
175e889
93a6d00
dec159c
36d9b1b
43377ad
76b5d6e
dacb0de
528d31a
defacd2
332b442
d6ff9bf
e24d4aa
0b49dc3
5677bf0
d8accb8
d229ede
7c1325d
8786d3b
b5a6fe8
ca6e19e
b6ffcfa
4d432af
71452b8
8d87582
2c32eb4
f3c9a79
226adde
532f5b9
ae1512b
b0e21c8
f6470b3
6974e11
6ade640
7bf4492
8d4359a
5599647
944bd18
57e0787
e9a1771
3dee952
14984bb
87af84e
c62b142
13ab6cd
8909917
f79bd52
b1b6c93
54e2de3
2aef88e
80d6bb9
844ca5f
8b925e8
9a7a169
877037e
7ba3098
f7211b5
b680dfd
04e16b1
19c2958
0255db3
5fac81d
3cc4a77
76342a0
4912e71
7c44668
9762e99
f28d0f5
9a83e09
64b31f2
4f1c848
db227a4
5ce2759
02f7c24
c73bfdd
23eb837
a1a2527
12611ad
a66aa40
02ad643
e143853
d85b70e
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,122 @@ | ||
| # Ginger Automation AI Coding Agent Guide | ||
|
|
||
| ## Project Overview | ||
| Ginger is a comprehensive automation IDE supporting multiple platforms (Web, Mobile, APIs, Java, Windows, PowerBuilder, Linux/Unix, Mainframe). It uses a drag-and-drop approach enabling users with or without coding skills to create automation flows. | ||
|
|
||
| ## Core Architecture Concepts | ||
|
|
||
| ### 1. Execution Hierarchy | ||
| The fundamental execution structure follows this hierarchy: | ||
| ``` | ||
| Solution → RunSet → Runner → BusinessFlow → Activity → Action (Act) | ||
| ``` | ||
|
|
||
| - **BusinessFlow**: Top-level test scenario container (`GingerCoreCommon/Repository/BusinessFlowLib/BusinessFlow.cs`) | ||
| - **Activity**: Group of related actions within a BusinessFlow (`GingerCoreCommon/Repository/BusinessFlowLib/Activity.cs`) | ||
| - **Act/Action**: Individual executable step (`GingerCoreCommon/Actions/Act.cs`) | ||
| - **Agent**: Driver wrapper that connects to target applications (`GingerCoreCommon/RunLib/Agent.cs`) | ||
|
|
||
| ### 2. Key Project Structure | ||
| - **Ginger/**: Main WPF application (UI) | ||
| - **GingerCoreCommon/**: Shared models and base classes | ||
| - **GingerCoreNET/**: .NET execution engine and CLI components | ||
| - **GingerRuntime/**: Console application entry point | ||
| - **GingerCore/**: Legacy core components (being migrated to GingerCoreNET) | ||
|
|
||
| ### 3. Driver Architecture | ||
| Each platform has dedicated drivers under `GingerCore/Drivers/`: | ||
| - `SeleniumDriver` for web automation | ||
| - `JavaDriver` for Java applications | ||
| - `ConsoleDriverLib` for command-line interfaces | ||
| - `WindowsAutomation` for Windows applications | ||
| - Agents (`Agent.cs`) act as wrappers providing unified interface | ||
|
|
||
| ## Development Workflows | ||
|
|
||
| ### Building & Testing | ||
| ```powershell | ||
| # Main build (Windows) | ||
| dotnet build Ginger/Ginger.sln | ||
|
|
||
| # Run tests | ||
| ./TestDotNetFramework.ps1 # Framework tests | ||
| ./CLITests.ps1 # CLI functionality tests | ||
|
|
||
| # Console execution | ||
| cd Ginger/GingerRuntime/bin/Release/net8.0/publish/ | ||
| dotnet GingerConsole.dll run -s "path/to/solution" -e "Environment" -r "RunSet" | ||
| ``` | ||
|
|
||
| ### CLI Commands | ||
| **Windows:** | ||
| - `ginger.exe help` or `dotnet ginger.dll help` - Show CLI help | ||
| - `ginger.exe run -s <solution> -e <env> -r <runset>` - Execute automation | ||
| - `ginger.exe analyze -s <solution>` - Analyze solution | ||
| - `ginger.exe grid --port <port>` - Start grid mode | ||
|
|
||
| **Linux:** | ||
| - `dotnet gingerruntime.dll help` - Show CLI help | ||
| - `dotnet gingerruntime.dll run -s <solution> -e <env> -r <runset>` - Execute automation | ||
| - `dotnet gingerruntime.dll analyze -s <solution>` - Analyze solution | ||
| - `dotnet gingerruntime.dll grid --port <port>` - Start grid mode | ||
|
|
||
| ## Project Conventions | ||
|
|
||
| ### 1. File Organization | ||
| - Actions inherit from `Act` class and implement platform-specific logic | ||
| - Repository objects use `[IsSerializedForLocalRepository]` attribute for persistence | ||
| - Test files end with `Test.cs` and use MSTest framework with `[TestClass]` and `[TestMethod]` | ||
|
|
||
| ### 2. Naming Patterns | ||
| - Actions: `Act{PlatformType}{ActionType}` (e.g., `ActBrowserElement`, `ActConsoleCommand`) | ||
| - Drivers: `{Platform}Driver` (e.g., `SeleniumDriver`, `JavaDriver`) | ||
| - Pages/Windows: `{Feature}Page` or `{Feature}Window` | ||
|
|
||
| ### 3. Error Handling | ||
| - Use `Reporter.ToLog(eLogLevel.ERROR, message)` for logging | ||
| - Actions set `act.Error` and `act.Status = eRunStatus.Failed` on failure | ||
| - Execution continues based on `Activity.ActionRunOption` setting | ||
|
|
||
| ## Integration Points | ||
|
|
||
| ### 1. Solution Structure | ||
| Solutions are XML-based with this folder structure: | ||
| ``` | ||
| Solution/ | ||
| ├── BusinessFlows/ # Test scenarios | ||
| ├── Activities/ # Reusable activity groups | ||
| ├── Actions/ # Shared actions | ||
| ├── Agents/ # Driver configurations | ||
| ├── Environments/ # Environment settings | ||
| ├── DataSources/ # Test data | ||
| └── Applications/ # Target application definitions | ||
| ``` | ||
|
|
||
| ### 2. Execution Engine | ||
| - `RunsetExecutor` orchestrates execution (`GingerCoreNET/Run/RunsetExecutor.cs`) | ||
| - `GingerExecutionEngine` handles individual runner execution | ||
| - Execution logging via `ExecutionLogger` implementations | ||
| - Supports parallel execution across multiple agents | ||
|
|
||
| ### 3. Plugin Architecture | ||
| - Legacy drivers implement `DriverBase` | ||
| - New plugins use `Agent.eAgentType.Service` with `PluginId`/`ServiceId` | ||
| - External integrations via `ALM` (Application Lifecycle Management) connectors | ||
| - Plugin packages defined by `Ginger.PluginPackage.json` manifest | ||
| - Managed through `PluginsManager` (`GingerCoreNET/PlugInsLib/PluginsManager.cs`) | ||
|
|
||
| ## Critical Development Notes | ||
|
|
||
| - **Target Framework**: .NET 8.0 with Windows 10.0.17763.0 compatibility | ||
| - **WPF Dependencies**: Main UI uses WPF; console components are cross-platform | ||
| - **XML Serialization**: Repository objects serialize to XML using custom attributes | ||
| - **Multi-Threading**: Execution engine supports parallel runners; use thread-safe patterns | ||
| - **Memory Management**: Dispose drivers properly; avoid memory leaks in long-running executions | ||
|
|
||
| ## Testing Strategy | ||
| - Unit tests in `*Test.cs` files use dependency injection patterns | ||
| - Integration tests use `TestResources/Solutions/` for test data | ||
| - CLI tests verify command-line interface functionality | ||
| - Use `mConsoleMessages` pattern for testing CLI output capture | ||
|
|
||
| When working with this codebase, focus on the execution hierarchy and understand how Actions flow through Activities within BusinessFlows, executed by Agents that wrap platform-specific drivers. | ||
|
Comment on lines
+1
to
+122
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Fix Markdown formatting to comply with style guide. The file has systematic formatting violations that should be corrected before merge:
🔎 Proposed fixes for Markdown formattingAdd blank lines before all headings and major sections, specify language identifiers, and add trailing newline. Example pattern: -## Project Overview
-Ginger is a comprehensive automation IDE...
+
+## Project Overview
+
+Ginger is a comprehensive automation IDE...For code blocks without a language: -```
-Solution → RunSet → Runner → BusinessFlow → Activity → Action (Act)
-```
+
+```
+Solution → RunSet → Runner → BusinessFlow → Activity → Action (Act)
+```Apply these patterns consistently throughout lines 1–122 and ensure the file ends with a newline.
🧰 Tools🪛 markdownlint-cli2 (0.18.1)3-3: Headings should be surrounded by blank lines (MD022, blanks-around-headings) 8-8: Headings should be surrounded by blank lines (MD022, blanks-around-headings) 10-10: Fenced code blocks should be surrounded by blank lines (MD031, blanks-around-fences) 10-10: Fenced code blocks should have a language specified (MD040, fenced-code-language) 19-19: Headings should be surrounded by blank lines (MD022, blanks-around-headings) 26-26: Headings should be surrounded by blank lines (MD022, blanks-around-headings) 36-36: Headings should be surrounded by blank lines (MD022, blanks-around-headings) 37-37: Fenced code blocks should be surrounded by blank lines (MD031, blanks-around-fences) 50-50: Headings should be surrounded by blank lines (MD022, blanks-around-headings) 65-65: Headings should be surrounded by blank lines (MD022, blanks-around-headings) 70-70: Headings should be surrounded by blank lines (MD022, blanks-around-headings) 75-75: Headings should be surrounded by blank lines (MD022, blanks-around-headings) 82-82: Headings should be surrounded by blank lines (MD022, blanks-around-headings) 84-84: Fenced code blocks should be surrounded by blank lines (MD031, blanks-around-fences) 84-84: Fenced code blocks should have a language specified (MD040, fenced-code-language) 95-95: Headings should be surrounded by blank lines (MD022, blanks-around-headings) 101-101: Headings should be surrounded by blank lines (MD022, blanks-around-headings) 116-116: Headings should be surrounded by blank lines (MD022, blanks-around-headings) 122-122: Files should end with a single newline character (MD047, single-trailing-newline) 🤖 Prompt for AI Agents |
||
This file was deleted.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,112 @@ | ||
| # For most projects, this workflow file will not need changing; you simply need | ||
| # to commit it to your repository. | ||
| # | ||
| # You may wish to alter this file to override the set of languages analyzed, | ||
| # or to provide custom queries or build logic. | ||
| # | ||
| # ******** NOTE ******** | ||
| # We have attempted to detect the languages in your repository. Please check | ||
| # the `language` matrix defined below to confirm you have the correct set of | ||
| # supported CodeQL languages. | ||
| # | ||
| name: "CodeQL Security Scan" | ||
|
|
||
|
|
||
| on: | ||
| push: | ||
| branches: [ master, Features/Linux-Migration, Releases/*, Releases/*/*] | ||
| pull_request: | ||
| branches: [ master ] | ||
| schedule: | ||
| - cron: '0 0 * * 0' | ||
|
|
||
| jobs: | ||
| analyze: | ||
| name: CodeQL - ${{ matrix.language }} - ${{ matrix.os }} | ||
| runs-on: ${{ matrix.os }} | ||
| permissions: | ||
| actions: read | ||
| contents: read | ||
| security-events: write | ||
|
|
||
| strategy: | ||
| fail-fast: false | ||
| matrix: | ||
| language: [ 'csharp', 'javascript' ] | ||
| os: [windows-latest] | ||
|
|
||
| # ------------------------------------------------------------------------------------------------------ | ||
| # Checkout Ginger Repository | ||
| # ------------------------------------------------------------------------------------------------------ | ||
|
|
||
| steps: | ||
| - name: Checkout repository | ||
| uses: actions/checkout@v3 | ||
|
|
||
| # ------------------------------------------------------------------------------------------------------ | ||
| # Initialize CodeQL | ||
| # ------------------------------------------------------------------------------------------------------ | ||
|
|
||
| - name: Initialize CodeQL | ||
| uses: github/codeql-action/init@v3 | ||
| with: | ||
| languages: ${{ matrix.language }} | ||
| config-file: ./.github/workflows/codeql-config.yml | ||
|
|
||
| # ------------------------------------------------------------------------------------------------------ | ||
| # Install .Net core SDK 8.0.100 | ||
| # ------------------------------------------------------------------------------------------------------ | ||
|
|
||
| - name: Install .NET 8 | ||
| uses: actions/setup-dotnet@v3 | ||
| with: | ||
| dotnet-version: '8.0.100' | ||
|
|
||
| # ------------------------------------------------------------------------------------------------------ | ||
| # Install Mono - for Ubuntu & macOS as pre-requisite for building Ginger | ||
| # ------------------------------------------------------------------------------------------------------ | ||
|
|
||
| - name: Install Mono - Linux | ||
| if: runner.os == 'Linux' | ||
| run: | | ||
| sudo apt-get update | ||
| sudo apt-get install -y mono-complete | ||
|
|
||
| - name: 'Install Mono - macOS' | ||
| if: runner.os == 'macOS' | ||
| run: brew install mono | ||
|
|
||
| # ------------------------------------------------------------------------------------------------------ | ||
| # Build && Publish Ginger Solution | ||
| # ------------------------------------------------------------------------------------------------------ | ||
|
|
||
| - name: Setup Nuget | ||
| uses: Nuget/setup-nuget@v1.0.5 | ||
|
|
||
| - name: Restore Nuget Packages | ||
| run: nuget restore ./Ginger/Ginger.sln | ||
|
|
||
| - name: Add msbuild to PATH | ||
| if: runner.os == 'windows' | ||
| uses: microsoft/setup-msbuild@v1.0.2 | ||
|
|
||
| - name: Build Windows Ginger Solution | ||
| if: runner.os == 'windows' | ||
| run: msbuild ./Ginger/Ginger.sln /p:DebugSymbols=true /p:DebugType=full /p:Configuration=Release | ||
|
|
||
| - name: Publish GingerRuntime - Linux | ||
| if: runner.os == 'Linux' | ||
| run: dotnet publish ./Ginger/GingerRuntime/GingerRuntime.csproj --runtime linux-x64 --self-contained true -c Release | ||
|
|
||
| - name: Publish GingerRuntime - macOS | ||
| if: runner.os == 'macOS' | ||
| run: dotnet publish ./Ginger/GingerRuntime/GingerRuntime.csproj --runtime osx-x64 --self-contained true -c Release | ||
|
|
||
| # ------------------------------------------------------------------------------------------------------ | ||
| # Security Scan with CodeQL | ||
| # ------------------------------------------------------------------------------------------------------ | ||
|
|
||
| - name: Perform CodeQL Analysis | ||
| uses: github/codeql-action/analyze@v3 | ||
| with: | ||
| category: "/language:${{ matrix.language }}" |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,33 @@ | ||
| name: "CodeQL Config" | ||
|
|
||
| paths: | ||
| - 'Ginger' # Only scan the Ginger directory for CodeQL | ||
|
|
||
| paths-ignore: | ||
|
|
||
| # ignore build outputs | ||
| - '**/bin/**' | ||
| - '**/obj/**' | ||
| - '**/Release/**' | ||
| - '**/Debug/**' | ||
|
|
||
| # ignore test projects | ||
| - 'Ginger/GingerAutoPilotTest/**' | ||
| - 'Ginger/GingerConsoleTest/**' | ||
| - 'Ginger/GingerCoreCommonTest/**' | ||
| - 'Ginger/GingerCoreNETUnitTest/**' | ||
| - 'Ginger/GingerCoreTest/**' | ||
| - 'Ginger/GingerPluginCoreTest/**' | ||
| - 'Ginger/GingerTest/**' | ||
| - 'Ginger/GingerUtilsTest/**' | ||
| - 'Ginger/GingerWPFDriverWindowTest/**' | ||
|
|
||
| # more optional files to ignore | ||
| # - '**/*.Designer.cs' # Auto-generated designer files | ||
| # - '**/*.g.cs' # Auto-generated files | ||
| # - '**/*.g.i.cs' # Auto-generated intermediate files | ||
| # - '**/AssemblyInfo.cs' # Assembly info files | ||
| # - '**/packages/**' # NuGet packages | ||
| # - '**/node_modules' # JavaScript dependencies | ||
| # - '**/*.min.js' # Minified JavaScript | ||
| # - '**/*.min.css' # Minified CSS |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,7 +1,7 @@ | ||
| | ||
| Microsoft Visual Studio Solution File, Format Version 12.00 | ||
| # Visual Studio Version 17 | ||
| VisualStudioVersion = 17.1.32319.34 | ||
| # Visual Studio Version 18 | ||
| VisualStudioVersion = 18.0.11205.157 | ||
|
Comment on lines
+3
to
+4
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Verify Visual Studio 2026 (Version 18) requirement is intentional. The solution file has been updated to target Visual Studio 2026 (Version 18), which began rolling out on November 11, 2025. Ensure this is intentional for the 2025 RC release, as it may impact developers who haven't upgraded to Visual Studio 2026 yet. While the 🤖 Prompt for AI Agents |
||
| MinimumVisualStudioVersion = 10.0.40219.1 | ||
| Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GingerCoreCommon", "GingerCoreCommon\GingerCoreCommon.csproj", "{9D569B65-EC6C-4677-A59B-CF12C24B5EB0}" | ||
| EndProject | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
🏁 Script executed:
Repository: Ginger-Automation/Ginger
Length of output: 2062
🏁 Script executed:
Repository: Ginger-Automation/Ginger
Length of output: 733
🏁 Script executed:
Repository: Ginger-Automation/Ginger
Length of output: 498
🏁 Script executed:
Repository: Ginger-Automation/Ginger
Length of output: 325
🏁 Script executed:
Repository: Ginger-Automation/Ginger
Length of output: 156
🏁 Script executed:
Repository: Ginger-Automation/Ginger
Length of output: 225
🏁 Script executed:
Repository: Ginger-Automation/Ginger
Length of output: 611
🏁 Script executed:
Repository: Ginger-Automation/Ginger
Length of output: 5791
Update driver paths to reflect actual post-refactoring locations.
Lines 27–32 reference driver locations that are now outdated. SeleniumDriver and ConsoleDriver implementations have been migrated to GingerCoreNET:
SeleniumDriveris located inGingerCoreNET/Drivers/CoreDrivers/Web/Selenium/, notGingerCore/Drivers/DOSConsoleDriver,UnixShellDriver) are located inGingerCoreNET/Drivers/CoreDrivers/Console/, not underGingerCore/Drivers/ConsoleDriverLibJavaDriverremains inGingerCore/Drivers/JavaDriverLib/(accurate)WindowsAutomationtoWindowsDriverfor consistency with actual class names and the{Platform}Drivernaming pattern🤖 Prompt for AI Agents