Automate building of all Gum Sample solutions in the repository.
The Gum CI build workflow file is located at .github/workflows/ci.yaml
- Event-Driven: Triggered by GitHub events (push, pull request) on
masterbranch. - Modular Jobs: Separates solution discovery (
list-solutions) from building (build). - Matrix Builds: Parallelizes builds across multiple .NET versions and solutions.
- Error Tolerance: Failures in one build don’t halt others (
fail-fast: false).
- Solution Discovery:
- Scans
Samplesdirectory for.slnfiles. - Excludes specified solutions (e.g.,
GumTest). - Outputs JSON list of solutions for dynamic build configuration.
- Scans
- Build Execution:
- Depends on solution list.
- Uses matrix to iterate over .NET versions (
6.0.x,8.0.x) and solutions. - Each build:
- Initializes submodules.
- Sets up .NET environment.
- Restores and builds solution in Release mode with minimal output.
- Scalability: Matrix strategy handles varying numbers of solutions and .NET versions.
- Reusability: Dynamic solution discovery avoids hardcoding.
- Efficiency: Quiet verbosity and error-only logging reduce noise.
- Robustness: Strict error handling (
continue-on-error: false) ensures clear failure points.
- Push: On
masterbranch - Pull Request: Targeting
masterbranch
- Purpose: Identify all
.slnfiles in theSamplesdirectory, excluding specified solutions. - Runner:
windows-latest - Outputs:
solutions: JSON array of solution names
- Steps:
- Checkout Repository:
- Action:
actions/checkout@v4 - Error Handling:
continue-on-error: false
- Action:
- List Solutions:
- ID:
set-solutions - Script:
- Excludes:
GumTest - Finds
.slnfiles recursively inSamples - Filters, sorts, and converts to JSON
- Outputs:
solutionsto$env:GITHUB_OUTPUT
- Excludes:
- ID:
- Checkout Repository:
- Purpose: Build each solution with specified .NET versions.
- Runner:
windows-latest - Dependencies: Requires
list-solutions - Matrix Strategy:
- Variables:
dotnet-version:['6.0.x', '8.0.x']solution: Dynamically populated fromlist-solutionsoutput
- Fail-Fast:
false(continues on failure)
- Variables:
- Steps:
- Checkout Repository:
- Action:
actions/checkout@v4 - Error Handling:
continue-on-error: false
- Action:
- Initialize Submodules:
- Command:
git submodule update --init --recursive - Error Handling:
continue-on-error: false
- Command:
- Setup .NET:
- Action:
actions/setup-dotnet@v4 - Parameter:
dotnet-versionfrom matrix - Error Handling:
continue-on-error: false
- Action:
- Build Solution:
- Script:
- Sets environment variables
- Locates solution file in
Samples - Runs:
dotnet restorewith quiet verbositydotnet buildin Release configuration, no restore, minimal output, errors only
- Error Handling:
continue-on-error: false
- Script:
- Checkout Repository: