From b2e6a2ac990d6ca237d98ae7b4d252c33b176a8e Mon Sep 17 00:00:00 2001 From: Philippe Matray Date: Sat, 28 Dec 2024 16:55:37 +0100 Subject: [PATCH 01/21] docs: include stats --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 139ffa7..998eb2b 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,10 @@ SalesPitch is a sales pitch generation application using OpenAI GPT-4. Create im * User-friendly interface with Spectre.Console * Ability to use demo data +## Stats + +![Alt](https://repobeats.axiom.co/api/embed/9e8cea0532101e0c02a5034825d6be9f1b40f732.svg "Repobeats analytics image") + ## Installation Ensure that you have .NET 9.0 or a later version installed on your machine. From 294f44c2b86fb6332dc6e86bda7ddd98cd57d774 Mon Sep 17 00:00:00 2001 From: Philippe Matray Date: Mon, 16 Feb 2026 10:05:41 +0000 Subject: [PATCH 02/21] chore: Upgrade to .NET 10 This PR upgrades the project to .NET 10 (latest stable release). Changes: - Updated all .csproj files to target net10.0 - Updated global.json to SDK 10.0.100 with latestFeature rollForward - Updated GitHub Actions workflows to use .NET 10.x and setup-dotnet@v5 - Verified successful build locally Migration notes: - .NET 10 includes C# 13 language features - All NuGet packages should be compatible - CI/CD will validate cross-platform builds --- .github/workflows/continuous.yml | 2 +- build/_build.csproj | 2 +- global.json | 6 ++++++ src/SalesPitch/SalesPitch.csproj | 2 +- 4 files changed, 9 insertions(+), 3 deletions(-) create mode 100644 global.json diff --git a/.github/workflows/continuous.yml b/.github/workflows/continuous.yml index e11eadb..0822843 100644 --- a/.github/workflows/continuous.yml +++ b/.github/workflows/continuous.yml @@ -27,7 +27,7 @@ jobs: with: fetch-depth: 0 - name: Setup dotnet - uses: actions/setup-dotnet@v4 + uses: actions/setup-dotnet@v5 with: dotnet-version: | 8.0.x diff --git a/build/_build.csproj b/build/_build.csproj index 23d6bad..a184ad9 100644 --- a/build/_build.csproj +++ b/build/_build.csproj @@ -2,7 +2,7 @@ Exe - net9.0 + net10.0 CS0649;CS0169;CA1050;CA1822;CA2211;IDE1006 .. diff --git a/global.json b/global.json new file mode 100644 index 0000000..512142d --- /dev/null +++ b/global.json @@ -0,0 +1,6 @@ +{ + "sdk": { + "version": "10.0.100", + "rollForward": "latestFeature" + } +} diff --git a/src/SalesPitch/SalesPitch.csproj b/src/SalesPitch/SalesPitch.csproj index 5dcadbe..2cb9e23 100644 --- a/src/SalesPitch/SalesPitch.csproj +++ b/src/SalesPitch/SalesPitch.csproj @@ -2,7 +2,7 @@ Exe - net9.0 + net10.0 enable enable 458c1c01-d3e1-4d45-9846-e8beb07f93ce From 7768fa9c5bcd136f6e9f4c1f2af293aa06ab148a Mon Sep 17 00:00:00 2001 From: Philippe Matray Date: Wed, 18 Feb 2026 20:40:33 +0000 Subject: [PATCH 03/21] chore: add Renovate configuration --- renovate.json | 1 + 1 file changed, 1 insertion(+) create mode 100644 renovate.json diff --git a/renovate.json b/renovate.json new file mode 100644 index 0000000..692ce4a --- /dev/null +++ b/renovate.json @@ -0,0 +1 @@ +{"$schema":"https://docs.renovatebot.com/renovate-schema.json","extends":["config:recommended"]} From eb422d282cb1336020be5b41207a91f137a80dc9 Mon Sep 17 00:00:00 2001 From: Philippe Matray Date: Wed, 18 Feb 2026 20:42:15 +0000 Subject: [PATCH 04/21] chore: remove Dependabot configuration (switching to Renovate) --- .github/dependabot.yml | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml deleted file mode 100644 index 575048f..0000000 --- a/.github/dependabot.yml +++ /dev/null @@ -1,12 +0,0 @@ -# To get started with Dependabot version updates, you'll need to specify which -# package ecosystems to update and where the package manifests are located. -# Please see the documentation for all configuration options: -# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates - -version: 2 -updates: - - package-ecosystem: "nuget" - directory: "/src" - schedule: - interval: "daily" - open-pull-requests-limit: 25 From f65ddbeeaf0d2a5e566bddabbb07cb4fdca7b126 Mon Sep 17 00:00:00 2001 From: Philippe Matray Date: Thu, 26 Feb 2026 13:48:24 +0100 Subject: [PATCH 05/21] chore: remove Qodana configuration --- build/_build.csproj | 4 ---- qodana.yaml | 29 ----------------------------- 2 files changed, 33 deletions(-) delete mode 100644 qodana.yaml diff --git a/build/_build.csproj b/build/_build.csproj index 23d6bad..d7386ed 100644 --- a/build/_build.csproj +++ b/build/_build.csproj @@ -15,8 +15,4 @@ - - - - diff --git a/qodana.yaml b/qodana.yaml deleted file mode 100644 index 99a40de..0000000 --- a/qodana.yaml +++ /dev/null @@ -1,29 +0,0 @@ -#-------------------------------------------------------------------------------# -# Qodana analysis is configured by qodana.yaml file # -# https://www.jetbrains.com/help/qodana/qodana-yaml.html # -#-------------------------------------------------------------------------------# -version: "1.0" - -#Specify inspection profile for code analysis -profile: - name: qodana.starter - -#Enable inspections -#include: -# - name: - -#Disable inspections -#exclude: -# - name: -# paths: -# - - -#Execute shell command before Qodana execution (Applied in CI/CD pipeline) -#bootstrap: sh ./prepare-qodana.sh - -#Install IDE plugins before Qodana execution (Applied in CI/CD pipeline) -#plugins: -# - id: #(plugin id can be found at https://plugins.jetbrains.com) - -#Specify Qodana linter for analysis (Applied in CI/CD pipeline) -linter: jetbrains/qodana-dotnet:latest From 2fa495279627dd5066370e125d61ede8fd521b3e Mon Sep 17 00:00:00 2001 From: Philippe Matray Date: Fri, 27 Feb 2026 17:43:29 +0100 Subject: [PATCH 06/21] docs: standardize README following org template --- README.md | 227 ++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 187 insertions(+), 40 deletions(-) diff --git a/README.md b/README.md index 998eb2b..378b66a 100644 --- a/README.md +++ b/README.md @@ -1,53 +1,109 @@ -# SalesPitch [![Sparkline](https://stars.medv.io/Atypical-Consulting/SalesPitch.svg)](https://stars.medv.io/Atypical-Consulting/SalesPitch) +# SalesPitch -SalesPitch is a sales pitch generation application using OpenAI GPT-4. Create impactful sales pitches for your products in just a few simple steps. +> **Generate tailored, professional sales pitches in seconds using AI — stop choosing between generic copy and hours of personalization.** -![SalesPitch](./assets/salespitch.png) + +[![Atypical-Consulting - SalesPitch](https://img.shields.io/static/v1?label=Atypical-Consulting&message=SalesPitch&color=blue&logo=github)](https://github.com/Atypical-Consulting/SalesPitch) +[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) +[![.NET 9](https://img.shields.io/badge/.NET-9.0-purple?logo=dotnet)](https://dotnet.microsoft.com/) +[![stars - SalesPitch](https://img.shields.io/github/stars/Atypical-Consulting/SalesPitch?style=social)](https://github.com/Atypical-Consulting/SalesPitch) +[![forks - SalesPitch](https://img.shields.io/github/forks/Atypical-Consulting/SalesPitch?style=social)](https://github.com/Atypical-Consulting/SalesPitch) -## Features + +[![GitHub tag](https://img.shields.io/github/tag/Atypical-Consulting/SalesPitch?include_prereleases=&sort=semver&color=blue)](https://github.com/Atypical-Consulting/SalesPitch/releases/) +[![issues - SalesPitch](https://img.shields.io/github/issues/Atypical-Consulting/SalesPitch)](https://github.com/Atypical-Consulting/SalesPitch/issues) +[![GitHub pull requests](https://img.shields.io/github/issues-pr/Atypical-Consulting/SalesPitch)](https://github.com/Atypical-Consulting/SalesPitch/pulls) +[![GitHub last commit](https://img.shields.io/github/last-commit/Atypical-Consulting/SalesPitch)](https://github.com/Atypical-Consulting/SalesPitch/commits/main) -* Interacts with OpenAI GPT-4o to generate sales pitches -* Supports multiple languages (French, English, German, and Spanish) -* Includes various sales pitch frameworks - * AIDA (Attention, Interest, Desire, Action) - * PAS (Problem-Agitate-Solve) - * USP (Unique Selling Proposition) - * Features-Benefits - * Storytelling - * WIIFM (What’s In It For Me) - * Youtility - * FAB (Features, Advantages, Benefits) - * HHE (Headline, Hook, Empathy) - * SUSPENSE (Surprise, Uniqueness, Specifics, Promise, Excitement, Newness, Story) -* User-friendly interface with Spectre.Console -* Ability to use demo data + +[![Build](https://github.com/Atypical-Consulting/SalesPitch/actions/workflows/continuous.yml/badge.svg)](https://github.com/Atypical-Consulting/SalesPitch/actions/workflows/continuous.yml) -## Stats +--- -![Alt](https://repobeats.axiom.co/api/embed/9e8cea0532101e0c02a5034825d6be9f1b40f732.svg "Repobeats analytics image") +![SalesPitch](./assets/salespitch.png) + +## Table of Contents -## Installation +- [The Problem](#the-problem) +- [The Solution](#the-solution) +- [Features](#features) +- [Tech Stack](#tech-stack) +- [Getting Started](#getting-started) +- [Usage](#usage) +- [Architecture](#architecture) +- [Project Structure](#project-structure) +- [Roadmap](#roadmap) +- [Stats](#stats) +- [Contributing](#contributing) +- [License](#license) +- [Acknowledgments](#acknowledgments) -Ensure that you have .NET 9.0 or a later version installed on your machine. +## The Problem -Clone this repository and navigate to the source folder: +Writing compelling, tailored sales pitches for every prospect is time-consuming. Sales teams either write generic pitches that fail to resonate, or spend hours personalizing each one. Existing tools lack support for proven sales frameworks and multi-language output, forcing teams to manually adapt their messaging for different audiences and markets. + +## The Solution + +**SalesPitch** uses OpenAI GPT-4 to generate tailored, professional sales pitches from minimal input via an interactive CLI. Choose from 10 proven sales frameworks, pick your target language, describe your product, and get a polished pitch in seconds. ```sh -git clone https://github.com/user/SalesPitch.git -cd SalesPitch +dotnet run --configuration Release --project src/SalesPitch + +# The interactive CLI will guide you through: +# 1. Select a language (French, English, German, Spanish) +# 2. Choose a sales framework (AIDA, PAS, USP, etc.) +# 3. Describe your product +# 4. Receive a tailored sales pitch powered by GPT-4 ``` -Install the dependencies and build the project: +## Features -```sh +- [x] AI-powered pitch generation using OpenAI GPT-4o +- [x] 10 proven sales pitch frameworks (AIDA, PAS, USP, Features-Benefits, Storytelling, WIIFM, Youtility, FAB, HHE, SUSPENSE) +- [x] Multi-language support (French, English, German, Spanish) +- [x] Interactive CLI powered by Spectre.Console +- [x] Demo data mode for quick evaluation +- [x] User secrets support for secure API key storage + +## Tech Stack + +| Layer | Technology | +|-------|-----------| +| Runtime | .NET 9.0 | +| AI | OpenAI GPT-4 via [Betalgo.Ranul.OpenAI](https://github.com/betalgo/openai) 9.x | +| CLI | [Spectre.Console](https://spectreconsole.net/) 0.49 | +| DI | [Scrutor](https://github.com/khellang/Scrutor) 5.x | +| Build | [Nuke](https://nuke.build/) | + +## Getting Started + +### Prerequisites + +- [.NET 9.0 SDK](https://dotnet.microsoft.com/download/dotnet/9.0) or later +- An [OpenAI API key](https://platform.openai.com/signup/) + +### Installation + +**From Source** + +```bash +git clone https://github.com/Atypical-Consulting/SalesPitch.git +cd SalesPitch dotnet restore dotnet build --configuration Release ``` -## Configuration +### Configuration + +Set your OpenAI API key using .NET user secrets (recommended): -1. Obtain an API key from OpenAI ([https://beta.openai.com/signup/](https://beta.openai.com/signup/)) -2. Create an `appsettings.json` file at the root of the project with the API key: +```bash +cd src/SalesPitch +dotnet user-secrets set "OpenAIServiceOptions:ApiKey" "" +dotnet user-secrets set "OpenAIServiceOptions:Organization" "" +``` + +Or create an `appsettings.json` file in the project root: ```json { @@ -60,26 +116,117 @@ dotnet build --configuration Release ## Usage -Run the application using the following command at the root of the project: +Run the application from the repository root: ```sh dotnet run --configuration Release --project src/SalesPitch ``` -The application will guide you through several steps to generate a sales pitch for your product. You can also use the demo data to see how the application works. +The interactive CLI will guide you through several steps to generate a sales pitch for your product. You can also use the demo data to see how the application works. + +## Architecture + +``` +┌─────────────────────────────────────────────────┐ +│ CLI Input │ +│ (Language, Framework, Product) │ +└──────────────────────┬──────────────────────────┘ + │ + ▼ +┌─────────────────────────────────────────────────┐ +│ Spectre.Console CLI │ +│ (Interactive prompts, rich formatting) │ +└──────────────────────┬──────────────────────────┘ + │ + ▼ +┌─────────────────────────────────────────────────┐ +│ Language Service Layer │ +│ (FR / EN / DE / ES prompt localization) │ +└──────────────────────┬──────────────────────────┘ + │ + ▼ +┌─────────────────────────────────────────────────┐ +│ OpenAI GPT-4 API │ +│ (Betalgo.Ranul.OpenAI SDK) │ +└──────────────────────┬──────────────────────────┘ + │ + ▼ +┌─────────────────────────────────────────────────┐ +│ Formatted Output │ +│ (Sales pitch in chosen language) │ +└─────────────────────────────────────────────────┘ +``` + +### Project Structure + +``` +SalesPitch/ +├── src/ +│ └── SalesPitch/ +│ ├── Commands/ # CLI command definitions and settings +│ ├── Extensions/ # Response extension methods +│ ├── Infrastructure/ # DI type resolver and registrar +│ ├── Services/ +│ │ └── Language/ # Language-specific prompt services +│ ├── TypeConverters/ # Custom type converters +│ └── Program.cs # Application entry point +├── build/ # Nuke build automation +├── assets/ # Screenshots and images +├── SalesPitch.sln # Solution file +└── README.md +``` + +## Roadmap -## Contribution +- [ ] Add more languages (Italian, Portuguese, Japanese, Chinese) +- [ ] Template customization — let users define custom pitch structures +- [ ] Batch generation — generate pitches for multiple products at once +- [ ] Export to PDF/Markdown/HTML +- [ ] Tone control — formal, casual, persuasive, technical +- [ ] Cost estimation — show token usage and API cost per generation -If you wish to contribute to this project, please submit a pull request or open an issue in the GitHub repository. +> Want to contribute? Pick any roadmap item and open a PR! + +## Stats + +![Alt](https://repobeats.axiom.co/api/embed/9e8cea0532101e0c02a5034825d6be9f1b40f732.svg "Repobeats analytics image") + +## Contributing + +Contributions are welcome! Here's how to get started: + +1. Fork the repository +2. Create your feature branch (`git checkout -b feature/amazing-feature`) +3. Commit using [conventional commits](https://www.conventionalcommits.org/) (`git commit -m 'feat: add amazing feature'`) +4. Push to the branch (`git push origin feature/amazing-feature`) +5. Open a Pull Request + +### Conventional Commits + +This project follows the [Conventional Commits](https://www.conventionalcommits.org/) specification: + +| Prefix | Purpose | +|--------|---------| +| `feat:` | A new feature | +| `fix:` | A bug fix | +| `docs:` | Documentation changes | +| `refactor:` | Code refactoring (no feature or fix) | +| `test:` | Adding or updating tests | +| `chore:` | Maintenance tasks | ## License -This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for more details. +[MIT](LICENSE) © 2023 [Atypical Consulting](https://atypical.garry-ai.cloud) ## Acknowledgments -This application was inspired by the following article: [Write A Great Chat GPT Sales Pitch in 5 Steps](https://txtly.ai/write-a-chat-gpt-sales-pitch/) +- Inspired by [Write A Great Chat GPT Sales Pitch in 5 Steps](https://txtly.ai/write-a-chat-gpt-sales-pitch/) +- [OpenAI](https://openai.com/) — GPT-4 language model +- [Spectre.Console](https://spectreconsole.net/) — Beautiful CLI framework for .NET +- [Betalgo.OpenAI](https://github.com/betalgo/openai) — .NET SDK for OpenAI + +--- + +Built with care by [Atypical Consulting](https://atypical.garry-ai.cloud) — opinionated, production-grade open source. -* [OpenAI](https://openai.com/) -* [Spectre.Console](https://spectreconsole.net/) -* [Betalgo.OpenAI](https://github.com/betalgo/openai) \ No newline at end of file +[![Contributors](https://contrib.rocks/image?repo=Atypical-Consulting/SalesPitch)](https://github.com/Atypical-Consulting/SalesPitch/graphs/contributors) From 843197aaed09e33a5e4c9d6aa4aa33e312578b9b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 27 Feb 2026 16:56:46 +0000 Subject: [PATCH 07/21] chore(deps): update dependency nuke.common to 9.0.4 --- build/_build.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/_build.csproj b/build/_build.csproj index e7cae9f..4f6e02a 100644 --- a/build/_build.csproj +++ b/build/_build.csproj @@ -12,7 +12,7 @@ - + From 06965319aed40b9b3ebc82c16e7952ffdb4c6179 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 27 Feb 2026 16:56:51 +0000 Subject: [PATCH 08/21] chore(deps): update dotnet monorepo --- global.json | 2 +- src/SalesPitch/SalesPitch.csproj | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/global.json b/global.json index 512142d..ed07ad8 100644 --- a/global.json +++ b/global.json @@ -1,6 +1,6 @@ { "sdk": { - "version": "10.0.100", + "version": "10.0.103", "rollForward": "latestFeature" } } diff --git a/src/SalesPitch/SalesPitch.csproj b/src/SalesPitch/SalesPitch.csproj index 2cb9e23..9e1b922 100644 --- a/src/SalesPitch/SalesPitch.csproj +++ b/src/SalesPitch/SalesPitch.csproj @@ -10,9 +10,9 @@ - - - + + + From 0b47b887d925def41fb68cb9ceb53a2e5221eab1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 28 Feb 2026 01:17:51 +0100 Subject: [PATCH 09/21] chore(deps): update dependency betalgo.ranul.openai to 9.2.6 (#14) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- src/SalesPitch/SalesPitch.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SalesPitch/SalesPitch.csproj b/src/SalesPitch/SalesPitch.csproj index 9e1b922..96d2dc2 100644 --- a/src/SalesPitch/SalesPitch.csproj +++ b/src/SalesPitch/SalesPitch.csproj @@ -9,7 +9,7 @@ - + From 40169a3df490f90bdb121fe07f50b619f5fcdd39 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 28 Feb 2026 01:17:57 +0100 Subject: [PATCH 10/21] chore(deps): update dependency scrutor to 5.1.2 (#15) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- src/SalesPitch/SalesPitch.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SalesPitch/SalesPitch.csproj b/src/SalesPitch/SalesPitch.csproj index 96d2dc2..9ac631c 100644 --- a/src/SalesPitch/SalesPitch.csproj +++ b/src/SalesPitch/SalesPitch.csproj @@ -13,7 +13,7 @@ - + all From a048b28f1023864872f3823bcb48e157be218f97 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 28 Feb 2026 01:18:07 +0100 Subject: [PATCH 11/21] chore(deps): update actions/cache action to v5 (#17) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/continuous.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/continuous.yml b/.github/workflows/continuous.yml index 0822843..96276a3 100644 --- a/.github/workflows/continuous.yml +++ b/.github/workflows/continuous.yml @@ -33,7 +33,7 @@ jobs: 8.0.x 9.0.x - name: 'Cache: .nuke/temp, ~/.nuget/packages' - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: | .nuke/temp From 94248deeb0adc08893c1eaa1d4758bd6aa503cc8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 28 Feb 2026 01:18:13 +0100 Subject: [PATCH 12/21] chore(deps): update actions/checkout action to v6 (#18) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/continuous.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/continuous.yml b/.github/workflows/continuous.yml index 96276a3..849c885 100644 --- a/.github/workflows/continuous.yml +++ b/.github/workflows/continuous.yml @@ -23,7 +23,7 @@ jobs: name: ubuntu-latest runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 with: fetch-depth: 0 - name: Setup dotnet From 37d341b265b270aa22e6f586d4f10b35e4fba120 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 28 Feb 2026 01:18:19 +0100 Subject: [PATCH 13/21] chore(deps): update dependency nuke.common to v10 (#19) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- build/_build.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/_build.csproj b/build/_build.csproj index 4f6e02a..99fb31c 100644 --- a/build/_build.csproj +++ b/build/_build.csproj @@ -12,7 +12,7 @@ - + From 8e08e4c53e1f0a8d9c5e78268f66f6267a379232 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 28 Feb 2026 01:18:25 +0100 Subject: [PATCH 14/21] chore(deps): update dependency scrutor to v7 (#20) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- src/SalesPitch/SalesPitch.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SalesPitch/SalesPitch.csproj b/src/SalesPitch/SalesPitch.csproj index 9ac631c..91c153a 100644 --- a/src/SalesPitch/SalesPitch.csproj +++ b/src/SalesPitch/SalesPitch.csproj @@ -13,7 +13,7 @@ - + all From 64a715df543597962394146f5ec82b768070894c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 28 Feb 2026 01:18:54 +0100 Subject: [PATCH 15/21] chore(deps): update spectre-console monorepo (#16) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- src/SalesPitch/SalesPitch.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/SalesPitch/SalesPitch.csproj b/src/SalesPitch/SalesPitch.csproj index 91c153a..053176b 100644 --- a/src/SalesPitch/SalesPitch.csproj +++ b/src/SalesPitch/SalesPitch.csproj @@ -14,12 +14,12 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + From 40d7abedf366da067c44999dcaa3ce17294856d8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 28 Feb 2026 01:19:08 +0100 Subject: [PATCH 16/21] chore(deps): update dotnet monorepo to v10 (#21) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- src/SalesPitch/SalesPitch.csproj | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/SalesPitch/SalesPitch.csproj b/src/SalesPitch/SalesPitch.csproj index 053176b..48da869 100644 --- a/src/SalesPitch/SalesPitch.csproj +++ b/src/SalesPitch/SalesPitch.csproj @@ -10,9 +10,9 @@ - - - + + + From fcd9c10d840c5e0a24076762a8325736f32ec4c5 Mon Sep 17 00:00:00 2001 From: Philippe Matray Date: Sat, 28 Feb 2026 01:21:46 +0100 Subject: [PATCH 17/21] fix: remove broken Nuke.Common.IO imports after v10 upgrade (#22) FileSystemTasks and PathConstruction were removed in Nuke.Common v10. The code already uses the new extension method API style, so these unused using static imports just need to be removed. --- build/Build.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/build/Build.cs b/build/Build.cs index 500df9f..6ad802b 100644 --- a/build/Build.cs +++ b/build/Build.cs @@ -12,8 +12,6 @@ using Nuke.Common.Utilities.Collections; using Serilog; using static Nuke.Common.EnvironmentInfo; -using static Nuke.Common.IO.FileSystemTasks; -using static Nuke.Common.IO.PathConstruction; using static Nuke.Common.Tools.DotNet.DotNetTasks; // ReSharper disable AllUnderscoreLocalParameterName From 1c6101c26070b06b8bc04466de83e9fe2c6cc80b Mon Sep 17 00:00:00 2001 From: Philippe Matray Date: Sat, 28 Feb 2026 01:24:33 +0100 Subject: [PATCH 18/21] fix: update ExecuteAsync signature for Spectre.Console v1 breaking change (#23) AsyncCommand.ExecuteAsync now requires a CancellationToken parameter in the latest Spectre.Console version. Add the parameter to satisfy the override contract. --- src/SalesPitch/Commands/SalesPitchCommand.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/SalesPitch/Commands/SalesPitchCommand.cs b/src/SalesPitch/Commands/SalesPitchCommand.cs index bf9498f..ded86cb 100644 --- a/src/SalesPitch/Commands/SalesPitchCommand.cs +++ b/src/SalesPitch/Commands/SalesPitchCommand.cs @@ -42,7 +42,8 @@ public SalesPitchCommand( /// The exit code public override async Task ExecuteAsync( CommandContext context, - SalesPitchSettings settings) + SalesPitchSettings settings, + CancellationToken cancellationToken) { // Display a header and a rule AnsiConsole.Write( From 9a76f9b2a55758f286880009ca1855f0347b237e Mon Sep 17 00:00:00 2001 From: Philippe Matray Date: Sat, 28 Feb 2026 14:40:05 +0100 Subject: [PATCH 19/21] ci: restrict triggers to main branch and add concurrency (#24) - Change trigger from all pushes to push/PR on main only - Add concurrency group to cancel redundant runs - Add .NET 10.0.x SDK alongside existing versions --- .github/workflows/continuous.yml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/.github/workflows/continuous.yml b/.github/workflows/continuous.yml index 849c885..03d0fab 100644 --- a/.github/workflows/continuous.yml +++ b/.github/workflows/continuous.yml @@ -16,7 +16,15 @@ name: continuous -on: [push] +on: + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + +concurrency: + group: ci-${{ github.ref }} + cancel-in-progress: true jobs: ubuntu-latest: @@ -32,6 +40,7 @@ jobs: dotnet-version: | 8.0.x 9.0.x + 10.0.x - name: 'Cache: .nuke/temp, ~/.nuget/packages' uses: actions/cache@v5 with: From 37013630ebded24014eb7c4864e5c80d33ff6a52 Mon Sep 17 00:00:00 2001 From: Philippe Matray Date: Wed, 4 Mar 2026 23:58:11 +0100 Subject: [PATCH 20/21] chore: configure Renovate auto-merge for patch+minor --- renovate.json | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/renovate.json b/renovate.json index 692ce4a..e48fa99 100644 --- a/renovate.json +++ b/renovate.json @@ -1 +1,16 @@ -{"$schema":"https://docs.renovatebot.com/renovate-schema.json","extends":["config:recommended"]} +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "extends": [ + "config:recommended" + ], + "packageRules": [ + { + "matchUpdateTypes": [ + "minor", + "patch" + ], + "automerge": true + } + ], + "platformAutomerge": true +} From dd9d8be137580ae9a33b8059e7987e9abcab0d32 Mon Sep 17 00:00:00 2001 From: Philippe Matray Date: Mon, 9 Mar 2026 11:54:55 +0100 Subject: [PATCH 21/21] chore: add standardized renovate config (#25) * chore: standardize renovate config * chore: fix renovate config for repo technologies --- renovate.json | 39 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/renovate.json b/renovate.json index e48fa99..d11bbe8 100644 --- a/renovate.json +++ b/renovate.json @@ -3,14 +3,49 @@ "extends": [ "config:recommended" ], + "baseBranchPatterns": [ + "dev" + ], + "schedule": [ + "before 9am on Saturday" + ], + "timezone": "Europe/Brussels", + "labels": [ + "dependencies", + "renovate" + ], "packageRules": [ { + "description": "Automerge minor and patch updates", "matchUpdateTypes": [ "minor", "patch" ], - "automerge": true + "automerge": true, + "automergeType": "pr" + }, + { + "description": "Group all NuGet minor/patch updates together", + "matchManagers": [ + "nuget" + ], + "matchUpdateTypes": [ + "minor", + "patch" + ], + "groupName": "NuGet minor/patch updates" + }, + { + "description": "Group all NuGet major updates together", + "matchManagers": [ + "nuget" + ], + "matchUpdateTypes": [ + "major" + ], + "groupName": "NuGet major updates", + "dependencyDashboardApproval": true } ], "platformAutomerge": true -} +} \ No newline at end of file