Skip to content

showcase app consolidation#1097

Draft
PTKu wants to merge 40 commits intodevfrom
3-unify-showcase
Draft

showcase app consolidation#1097
PTKu wants to merge 40 commits intodevfrom
3-unify-showcase

Conversation

@PTKu
Copy link
Copy Markdown
Contributor

@PTKu PTKu commented Apr 1, 2026

Summary

This PR consolidates 31 separate showcase/testing applications — previously scattered across individual library component directories — into a single, unified showcase application at src/showcase/app. This eliminates massive duplication of boilerplate (hardware config, Blazor scaffolding, build artifacts), simplifies the build pipeline, and provides a centralized place for documentation, integration testing, and live feature demonstration.

The unified showcase app includes both the PLC-side Structured Text code and a Blazor Server UI with documentation pages covering every component and core feature in AXOpen. The PR also adds a per-component documentation layer (README, CHANGELOG, component pages, DocFX integration) and full-text search across the showcase site.


Motivation

  • Duplication problem: Each library component maintained its own standalone app/ folder with near-identical scaffolding: hardware config, Blazor host, security setup, data repositories, and build configuration. This resulted in ~1.5M lines of redundant generated/boilerplate code.
  • Maintenance burden: Any change to the showcase infrastructure (e.g., updating the Blazor host, adjusting security, or changing the PLC configuration) had to be replicated across 31+ directories.
  • Testing fragmentation: Integration tests were spread across individual app folders with no unified test surface.
  • Documentation gap: No consistent per-library documentation surface (README/CHANGELOG/component pages) and no cross-library search.
  • Onboarding friction: New contributors had to navigate dozens of nearly identical app folders to understand how components work together.

What Changed

1. Removed Individual App Folders (31 directories, ~1,511 files deleted)

The following library app/ directories were completely removed:

Category Removed Directories
Core/Foundation src/abstractions/app/, src/core/app/, src/data/app/, src/inspectors/app/, src/io/app/, src/probers/app/, src/timers/app/, src/utils/app/, src/integrations/app/, src/simatic1500/app/
Drives src/components.drives/app/, src/components.festo.drives/app/, src/components.rexroth.drives/app/
Robotics src/components.robotics/app/, src/components.abb.robotics/app/, src/components.kuka.robotics/app/, src/components.mitsubishi.robotics/app/, src/components.ur.robotics/app/
Vision src/components.cognex.vision/app/, src/components.keyence.vision/app/, src/components.zebra.vision/app/
Tightening src/components.desoutter.tightening/app/, src/components.rexroth.tightening/app/
Other Components src/components.elements/app/, src/components.pneumatics/app/, src/components.rexroth.press/app/, src/components.dukane.welders/app/, src/components.balluff.identification/app/, src/components.siem.communication/app/, src/components.siem.identification/app/, src/components.abstractions/app/
Template src/template.axolibrary/app/

Also removed the legacy integration/ folder and dead sandbox references.

2. New Unified Showcase App (src/showcase/app/)

PLC Application (src/)

src/showcase/app/src/
├── Foundation/
│   ├── AbstractionsShowcase.st
│   ├── FoundationShowcase.st
│   ├── InspectorsShowcase.st
│   └── IoShowcase.st
├── IO/
│   ├── HwIdentifiers.st
│   ├── Inputs.st / Outputs.st / IoStructures.st
├── ShowcaseContext.st          # Unified context for all showcases
├── configuration.st            # Hardware/PLC configuration
└── program.st                  # Main program entry point

Blazor UI (ix-blazor/showcase.blazor/)

ix-blazor/showcase.blazor/
├── Pages/                          # Documentation pages for every component & core feature
│   ├── Core/                       # AxoComponent, AxoTask, AxoSequencer, AxoMessaging, AxoDialogs, ...
│   ├── Foundation/                 # DataExchange, DistributedData, Rendering, Security
│   └── Components/                 # All hardware component showcases (KUKA, Cognex, Keyence, Utils, ...)
├── Shared/
│   ├── MainLayout.razor
│   ├── NavMenu.razor               # Expandable navigation with all features
│   ├── TopRow.razor
│   └── Showcase/                   # Reusable showcase UI components
│       ├── AxoStepCard.razor       # Step-by-step guide cards
│       ├── CodeBlock.razor         # Syntax-highlighted code display
│       ├── LibraryResources.razor  # Shared per-library resources panel (badges, links, deps)
│       ├── MaturityBadge.razor     # Component maturity indicators
│       ├── SourceFileLink.razor    # Links to source files
│       └── SourceViewerModal.razor # Modal source code viewer
├── Services/
│   ├── CodeSnippetProvider.cs      # Dynamic code snippet loader with line-range support
│   ├── DocFxMarkdownProcessor.cs   # Renders DocFX markdown inside Blazor pages
│   └── SearchIndex / Registry      # Full-text search across showcase pages
├── wwwroot/
│   ├── css/momentum.css            # Operon/Momentum design system
│   └── css/tailwind.css
└── Program.cs                      # App configuration & startup

Key features of the Blazor UI:

  • Living documentationCodeSnippetProvider loads real source code from .st and .cs files, supporting line-range extraction and automatic language detection.
  • DocFX-rendered pagesDocFxMarkdownProcessor renders the per-library DocFX markdown (READMEs, component pages) directly inside the Blazor UI so docs and showcase share one source of truth.
  • Full-text search — Search index over all showcase/documentation pages with a search registry entry per component.
  • Dynamic documentation badge — Components surface a live documentation/maturity badge in the UI.
  • Momentum/Operon styling — Consistent design system matching the Simatic AX visual language.
  • Data exchange showcase — Demonstrates all 4 data exchange patterns: AxoDataExchange, AxoDataFragmentExchange, AxoDataPersistentExchange, AxoDataDistributed.
  • Security — Roles-based access control with JSON repository.

3. Per-Component Documentation Layer

Each library now ships a consistent documentation set under src/<library>/docs/:

  • README.md — library overview, dependencies, links
  • CHANGELOG.md — version-tracked changes (semver from GitVersion.yml)
  • {ComponentName}.md — per-component pages with code references wired to the showcase
  • index.md + toc.yml — DocFX integration

Examples added/expanded in this PR: Utils (AxoBlinker, AxoCRC, AxoStringBuilder), Keyence Vision (descriptions, hardware config, dependencies, vendor docs), KUKA Robotics, Cognex Vision, plus refactors across all component categories to use the shared LibraryResources component and a unified external-links section.

4. Solution File Updates

Solution Change
src/AXOpen.sln Added showcase (PLC) and showcase.blazor (UI) projects; added AXOpen.Data.Distributed.Tests_L4
src/AXOpen.solution.sln Matching updates
src/AXOpen-L1-tests.sln Updated test references
src/AXOpen-L3-tests.sln Updated test references
src/showcase/showcase.sln New — Standalone showcase solution
src/showcase/app/showcase.blazor.sln New — Blazor-only solution for UI development

5. Build Pipeline Updates (cake/)

cake/BuildContext.cs:

  • Disabled HasApp flag for all 32 library configurations
  • Removed app folder paths from GetControllerAxFolders(), GetApplicationAxFolders(), and GetApaxYmlFiles()

cake/Program.cs:

  • Simplified test runner to no longer traverse individual app/ directories
  • Changed folder discovery from checking both app and ax to only ax

Other:

  • Initial apax-traversal configuration added at the repo root for unified dependency traversal across libraries.

6. Hardware / Twin / Tooling Updates

  • AXSharp bumped to 0.47.0-alpha.476 across all AXSharp.config.json files.
  • PLCSIM compatibility: showcase HW switched to 1518_v40 so the app loads on PLCSIM until V41 is functional.
  • NTP exposed in 1500 hardware templates (expose ntp confs in 1500 hw temps #1094).
  • New UiHostProject field added to AXSharp.config.json files.
  • Showcase twin project added to git.

7. Documentation Updates (60+ files)

  • All component documentation links updated to point to the unified showcase app (../app/...../../showcase/app/...).
  • DocFX site refactored to render per-library docs through DocFxMarkdownProcessor.
  • External-links sections refactored to a shared component.
  • Minor API reference fix in README.md: Entry.Plc.AxoRemoteTasksEntry.Plc.Ctx.AxoRemoteTasks.

8. Configuration Changes

Directory.Packages.props:

  • Added Markdig v0.40.0 — Markdown parsing library used by CodeSnippetProvider and DocFxMarkdownProcessor for documentation rendering in the Blazor UI.

Architecture Diagram

BEFORE (31 separate apps):                AFTER (1 unified app + per-lib docs):

src/core/app/          ─┐                 src/showcase/app/
  ├── src/              │                   ├── src/  (Foundation, IO, ShowcaseContext, ...)
  ├── ix-blazor/        │                   ├── ix-blazor/showcase.blazor/
  ├── hwc/              │                   │   ├── Pages/   (Core, Foundation, Components)
  └── apax.yml          │                   │   ├── Shared/  (LibraryResources, MaturityBadge, ...)
                        │                   │   ├── Services/ (CodeSnippetProvider,
src/data/app/          ─┤                   │   │             DocFxMarkdownProcessor, Search)
  ├── ...               ├──► CONSOLIDATED   │   └── wwwroot/ (Momentum CSS, search assets)
  └── apax.yml          │    INTO            ├── hwc/ (1518_v40, NTP)
                        │                   └── apax.yml
src/components.*/app/  ─┤                 src/<library>/docs/
  ├── ...               │                   ├── README.md
  └── apax.yml         ─┘                   ├── CHANGELOG.md
                                            ├── {Component}.md
                                            ├── index.md
                                            └── toc.yml

Testing Considerations

  • Verify apax build succeeds for src/showcase/app
  • Verify the Blazor showcase app starts and all pages render correctly
  • Verify CodeSnippetProvider resolves source files from the correct paths
  • Verify DocFxMarkdownProcessor renders per-library README/CHANGELOG/component pages
  • Verify full-text search returns hits across all components
  • Verify all documentation links in component docs point to valid files
  • Verify cake build pipeline correctly skips removed app folders
  • Run L1 and L3 test suites to confirm no regressions
  • Verify data exchange scenarios (JSON persistence, fragments, distributed) function correctly
  • Load showcase app to PLCSIM (1518_v40) and verify NTP exposure on 1500 templates
  • Confirm no remaining references to deleted app/ paths or the removed integration/ folder

Breaking Changes

  • Removed 31 standalone app directories — Any workflow, script, or CI job that references individual src/<component>/app/ paths must be updated to use src/showcase/app/ instead.
  • Removed integration/ folder — Migrate any references to the unified showcase app.
  • Build configurationHasApp flag is now false for all library components in BuildContext.cs. The build no longer looks for or processes individual app folders.
  • Solution structure — Projects removed from solutions; showcase projects added. IDE users will need to reload solutions.
  • AXSharp version bump0.47.0-alpha.476 across all configs; downstream consumers should align.

Risk Assessment

Risk Likelihood Mitigation
Missing showcase coverage for a component Low All 31 original apps were audited; unified pages created for each
Broken documentation links Low All doc links verified post-update; DocFX builds against new layout
Build pipeline regression Medium Cake scripts updated but need CI validation
Generated code path changes Medium AXSharp connector paths changed; verify axsharp.companion.json
PLCSIM load regression Low HW pinned to 1518_v40 until V41 PLCSIM is functional

@PTKu PTKu requested a review from TomKovac April 1, 2026 08:50
@PTKu PTKu marked this pull request as draft April 1, 2026 12:52
PTKu added 5 commits April 1, 2026 14:56
- Updated AXSharp.config.json in timers/ctrl to include "UiHostProject": null.
- Updated AXSharp.config.json in traversals/apax to include "UiHostProject": null.
- Updated AXSharp.config.json in utils/ctrl to include "UiHostProject": null.
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Seems that component4 and 5 from the removed test app are missing .

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

seems that component 3 is missing

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

seems that component 3 and 4 are missing

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

gitignore???

Changed PLC to 1815 V41 with NTP
Copy link
Copy Markdown
Collaborator

@TomKovac TomKovac left a comment

Choose a reason for hiding this comment

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

It seems that some components are missing in library\docs\Component_3-5 especially in Cognex lib and some others. Not sure if it is on purpose as in showcase app there are present.

PTKu and others added 16 commits April 7, 2026 07:01
- Created apax.yml to define the apax.traversal application.
- Specified version, type, targets, registries, dependencies, and devDependencies.
- Included various Inxton components and libraries for integration.
- Created a new Documentation.razor page for Utils showcasing AxoStringBuilder and CRC functions.
- Implemented AxoStaticMessengerDocuExample.cs to demonstrate static messaging.
- Added AxoTextListExample.cs for dictionary-based text list management.
- Introduced Directory.Build.props to manage package versions centrally.
- Established Entry.cs for PLC connection configuration and management.
- Created showcase.csproj for project structure and dependencies.
- Added various structured text files for showcasing components:
  - ComponentsAbstractionsShowcase.st
  - ProbersShowcase.st
  - Simatic1500Showcase.st
  - TimersShowcase.st
  - UtilsShowcase.st
PTKu added 17 commits April 8, 2026 11:13
- Implemented AxoDataFragmentExchange and AxoDataPersistentExchange examples demonstrating data management and persistence.
- Created inspectors showcase illustrating the use of AXOpen.Inspectors for hardware diagnostics.
- Developed IO showcase for AXOpen.Io, featuring hardware diagnostics and record access tools.
- Introduced probers showcase for AXOpen.Probers, showcasing counter and condition-based probing.
- Added Simatic1500 showcase for AXOpen.S71500, demonstrating real-time clock and runtime measurement functionalities.
- Implemented timers showcase for AXOpen.Timers, demonstrating various timer usage patterns.
- Created utils showcase for AXOpen.Utils, demonstrating string building and CRC checksum calculations.
- Renamed component classes in Keyence Vision namespace to follow a unified naming convention.
- Updated class names in Kuka Robotics namespace for better identification.
- Standardized class names in Mitsubishi Robotics namespace.
- Adjusted class names in Rexroth Drives, Press, and Tightening namespaces for improved readability.
- Modified class names in Siem Communication and Identification namespaces to enhance clarity.
- Refined class names in Zebra Vision namespace for consistency.
- Updated showcase classes in Inspectors, Io, Probers, Simatic1500, Timers, and Utils namespaces to align with new naming conventions.
- Updated documentation paths in AxoSequencer.razor and AxoTask.razor to use consistent naming conventions.
- Added TROUBLES.md and CHANGELOG.md documentation files for AxoSequencer and AxoTask.
- Enhanced Program.cs to include SignalRDialogHub for dialog synchronization and added AxoRemoteTask initialization.
- Updated ShowcasePageRegistry to reflect new documentation paths and added new examples for AxoLogger and AxoAlert.
- Improved AxoBoolArray and AxoByteArray examples with better structure and comments.
- Added AxoAlertDocuExample for demonstrating alert usage in dialogs.
- Enhanced logging examples in AxoLoggerDocuExample with detailed log level usage and structured logging.
- Removed redundant external links sections from various documentation pages.
- Updated the ExternalLinks component to include a header and list structure for better organization.
- Ensured consistent usage of the ExternalLinks component across multiple pages, enhancing maintainability.
…d integrate DocFxMarkdownProcessor for enhanced markdown processing

- Updated ProbersShowcase.razor, Simatic1500Showcase.razor, TimersShowcase.razor, UtilsShowcase.razor to replace inline library resource sections with LibraryResources component.
- Introduced DocFxMarkdownProcessor to handle DocFX markdown directives in SourceViewerModal.
- Added BasePath property to CodeSnippetProvider for resolving file paths.
- Created DocFxMarkdownProcessor.cs to process markdown content and resolve includes and code snippets.
- Enhanced SourceViewerModal to support rendering of mermaid diagrams in markdown content.
- Updated Program.cs to register DocFxMarkdownProcessor as a singleton service.
- Updated AxoCmmtAs components to include InfoTime, ErrorTime, and TaskTimeout settings in AxoCmmtAs_Showcase and AxoCmmtAs_Showcase2.
- Modified Axo_IV3_Showcase and Axo_SR_1000_Showcase to set configuration parameters before restoring components.
- Increased the number of steps in Axo_SR_1000_Showcase and Axo_SR_750_Showcase to accommodate additional functionality.
- Enhanced Kuka robotics showcases to include more steps for better control and management of robot actions.
- Introduced new AxoCylinder component with comprehensive methods for controlling pneumatic cylinders.
- Removed deprecated PneumaticsShowcase class and replaced it with a more streamlined implementation.
- Updated Rexroth drive showcases to include configuration parameters for improved performance.
- Enhanced Zebra vision showcases to set configuration parameters before executing actions.
- Added robotics showcase to demonstrate shared utility functions and robotics component implementations.
- Improved Siem communication showcases by adding configuration parameters for better control.
- Created AxoBlinker documentation with usage examples.
- Added CHANGELOG for version 0.43.0 detailing new features and documentation.
- Introduced troubleshooting guide for common timer issues.
- Documented CRC checksum functions and byte conversion utilities in AXOpen.Utils.
- Updated table of contents to include new documentation entries.
…onent information, hardware configuration, dependencies, vendor documentation, and additional resources.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants