{"id":22800968,"url":"https://github.com/dailydevops/pipelines","last_synced_at":"2026-04-02T00:01:58.296Z","repository":{"id":155575246,"uuid":"632658893","full_name":"dailydevops/pipelines","owner":"dailydevops","description":"Reusable GitHub Actions workflow templates for .NET projects, providing standardized CI/CD pipelines for building, testing, and publishing with built-in quality checks and NuGet package support.","archived":false,"fork":false,"pushed_at":"2026-03-28T17:39:10.000Z","size":814,"stargazers_count":2,"open_issues_count":2,"forks_count":0,"subscribers_count":4,"default_branch":"main","last_synced_at":"2026-03-28T19:25:13.699Z","etag":null,"topics":["dotnet","github-actions","github-templates","github-workflows"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dailydevops.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-04-25T21:40:11.000Z","updated_at":"2026-03-27T11:41:16.000Z","dependencies_parsed_at":"2026-02-11T08:06:41.111Z","dependency_job_id":null,"html_url":"https://github.com/dailydevops/pipelines","commit_stats":null,"previous_names":["dailydevops/pipelines"],"tags_count":117,"template":false,"template_full_name":null,"purl":"pkg:github/dailydevops/pipelines","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dailydevops%2Fpipelines","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dailydevops%2Fpipelines/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dailydevops%2Fpipelines/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dailydevops%2Fpipelines/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dailydevops","download_url":"https://codeload.github.com/dailydevops/pipelines/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dailydevops%2Fpipelines/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31293154,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-01T21:15:39.731Z","status":"ssl_error","status_checked_at":"2026-04-01T21:15:34.046Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["dotnet","github-actions","github-templates","github-workflows"],"created_at":"2024-12-12T08:08:32.916Z","updated_at":"2026-04-02T00:01:58.244Z","avatar_url":"https://github.com/dailydevops.png","language":null,"readme":"# Daily DevOps \u0026 .NET - Pipelines\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![GitHub Actions](https://img.shields.io/badge/GitHub-Actions-2088FF?logo=github-actions\u0026logoColor=white)](https://github.com/dailydevops/pipelines/actions)\n\nThis repository contains reusable GitHub Actions workflow templates for .NET applications. These templates help automate the process of building, testing, and deploying applications, following best practices and reducing boilerplate code across projects.\n\n## Table of Contents\n\n- [Overview](#overview)\n- [Prerequisites](#prerequisites)\n- [Quick Start](#quick-start)\n- [Main Workflow Templates](#main-workflow-templates)\n  - [build-dotnet-fast.yml](#build-dotnet-fastyml)\n  - [build-dotnet-single.yml](#build-dotnet-singleyml)\n  - [build-dotnet-matrix.yml](#build-dotnet-matrixyml)\n  - [cicd-dotnet.yml](#cicd-dotnetyml)\n  - [publish-nuget.yml](#publish-nugetyml)\n- [Step Templates](#step-templates)\n  - [step-node-commitlint.yml](#step-node-commitlintyml)\n  - [step-dotnet-version.yml](#step-dotnet-versionyml)\n  - [step-dotnet-format.yml](#step-dotnet-formatyml)\n  - [step-dotnet-build.yml](#step-dotnet-buildyml)\n  - [step-dotnet-tests.yml](#step-dotnet-testsyml)\n  - [step-dotnet-draft-release.yml](#step-dotnet-draft-releaseyml)\n  - [step-dotnet-publish-nuget.yml](#step-dotnet-publish-nugetyml)\n  - [step-dependabot-merge.yml](#step-dependabot-mergeyml)\n- [Common Usage Examples](#common-usage-examples)\n- [Additional Documentation](#additional-documentation)\n- [Contributing](#contributing)\n- [License](#license)\n\n## Overview\n\nThe pipelines in this repository are designed to be composable and reusable. They provide:\n\n- **Automated CI/CD** for .NET applications\n- **Code quality checks** including formatting and linting\n- **Testing** with coverage reporting and multiple OS support\n- **Versioning** using GitVersion\n- **Publishing** to NuGet with manual approval workflows\n- **Dependabot integration** for automated dependency updates\n\nAll workflows are designed to work with .NET 8.x and 9.x by default, with configurable support for other versions.\n\n## Prerequisites\n\nBefore using these workflows, ensure you have:\n\n- A GitHub repository with a .NET solution or project\n- GitHub Actions enabled in your repository\n- Required secrets configured (see individual workflow documentation)\n- (Optional) GitVersion configuration file (`GitVersion.yml`) in your repository root\n- (Optional) Release Drafter configuration (`.github/release-drafter.yml`) for draft releases\n\n### Common Secrets\n\nMany workflows support the following optional secret:\n\n- **`FETCH_TOKEN`**: A GitHub Personal Access Token (PAT) with repository access, used to fetch dependencies from private repositories. If not provided, the default `github.token` is used.\n\n## Quick Start\n\nTo use any of these workflows in your repository, reference them in your workflow file:\n\n```yaml\nname: CI/CD Pipeline\n\non:\n  push:\n    branches: [main]\n  pull_request:\n\njobs:\n  build:\n    uses: dailydevops/pipelines/.github/workflows/build-dotnet-single.yml@main\n    with:\n      solution: \"src/YourApp.sln\"\n    secrets: inherit\n```\n\nFor specific versions, replace `@main` with a tag like `@v1.0.0`.\n\n## Main Workflow Templates\n\nThese are complete CI/CD workflows that orchestrate multiple jobs.\n\n### `build-dotnet-fast.yml`\n\nA fast CI pipeline that performs a single-pass build and test on a single OS. Ideal for quick feedback on pull requests.\n\n**Features:**\n- Commit linting\n- Build and test in one job (no separate stages)\n- Automatic Dependabot PR merging\n\n**Usage:**\n\n```yaml\njobs:\n  build:\n    uses: dailydevops/pipelines/.github/workflows/build-dotnet-fast.yml@main\n    with:\n      solution: \"src/YourApp.sln\"\n    secrets: inherit\n```\n\n**Parameters:**\n\n| Parameter | Description | Required | Default |\n|-----------|-------------|----------|---------|\n| `solution` | Path to the solution or project file | ✅ | |\n| `disableCodeFormat` | Skip code formatting checks | ❌ | `false` |\n| `disableCoverageUpload` | Skip uploading coverage reports | ❌ | `false` |\n| `disableDependaMerge` | Disable automatic Dependabot merge | ❌ | `false` |\n| `dotnetLogging` | Verbosity level for dotnet commands | ❌ | `minimal` |\n| `dotnetVersion` | .NET SDK version(s) to install | ❌ | `8.x\\n9.x` |\n| `enableCleanUpDockerDocker` | Free disk space by cleaning Docker images | ❌ | `false` |\n| `runsOnBuild` | Runner label for build job | ❌ | `ubuntu-latest` |\n\n**Secrets:**\n- `FETCH_TOKEN` (optional): GitHub token for private repository access\n\n---\n\n### `build-dotnet-single.yml`\n\nA comprehensive CI pipeline that runs on a single OS with separate stages for formatting, versioning, testing, and building.\n\n**Features:**\n- Commit linting\n- Code formatting validation\n- Version detection using GitVersion\n- Testing with coverage reports\n- Build with artifact publishing\n- Automatic Dependabot PR merging\n\n**Usage:**\n\n```yaml\njobs:\n  build:\n    uses: dailydevops/pipelines/.github/workflows/build-dotnet-single.yml@main\n    with:\n      solution: \"src/YourApp.sln\"\n    secrets: inherit\n```\n\n**Parameters:**\n\nSame as `build-dotnet-fast.yml`.\n\n**Secrets:**\n- `FETCH_TOKEN` (optional): GitHub token for private repository access\n\n---\n\n### `build-dotnet-matrix.yml`\n\nA comprehensive CI pipeline that runs tests across multiple operating systems (Windows, Linux, macOS) in a matrix strategy.\n\n**Features:**\n- All features from `build-dotnet-single.yml`\n- Multi-OS testing (Windows, Linux, macOS)\n- Configurable fail-fast behavior\n- OS-specific test exclusions\n\n**Usage:**\n\n```yaml\njobs:\n  build:\n    uses: dailydevops/pipelines/.github/workflows/build-dotnet-matrix.yml@main\n    with:\n      solution: \"src/YourApp.sln\"\n    secrets: inherit\n```\n\n**Parameters:**\n\nAll parameters from `build-dotnet-single.yml`, plus:\n\n| Parameter | Description | Required | Default |\n|-----------|-------------|----------|---------|\n| `disableTestsOnLinux` | Skip tests on Linux | ❌ | `false` |\n| `disableTestsOnMacOs` | Skip tests on macOS | ❌ | `false` |\n| `disableTestsOnWindows` | Skip tests on Windows | ❌ | `false` |\n| `failFast` | Stop all jobs if one fails | ❌ | `true` |\n\n**Secrets:**\n- `FETCH_TOKEN` (optional): GitHub token for private repository access\n\n---\n\n### `cicd-dotnet.yml`\n\nA deprecated/experimental workflow template. This workflow is currently set to fail on purpose and should not be used.\n\n---\n\n### `publish-nuget.yml`\n\nA workflow for publishing NuGet packages with manual approval. This workflow verifies a successful build on the main branch and requires manual approval before publishing to NuGet.\n\n**Features:**\n- Cross-workflow artifact downloading\n- Build verification on main branch\n- Manual approval via GitHub Environments\n- Automatic package publishing to NuGet.org\n- Automated release creation\n\n**Usage:**\n\n```yaml\nname: Publish to NuGet\n\non:\n  workflow_dispatch:\n\njobs:\n  publish:\n    uses: dailydevops/pipelines/.github/workflows/publish-nuget.yml@main\n    with:\n      artifactPattern: \"release-packages-*\"\n      workflowName: \"build-dotnet-single.yml\"\n      runId: \"1234567890\"  # Get this from the workflow run you want to publish\n      environment: \"nuget-production\"\n    secrets:\n      NUGET_TOKEN: ${{ secrets.NUGET_TOKEN }}\n      WORKFLOW_PACKAGES: ${{ secrets.GITHUB_TOKEN }}\n```\n\n**Parameters:**\n\n| Parameter | Description | Required | Default |\n|-----------|-------------|----------|---------|\n| `artifactPattern` | Pattern to match artifact names | ✅ | `release-packages-*` |\n| `workflowName` | Workflow name to check for builds | ✅ | `ci-dotnet.yml` |\n| `runId` | ID of workflow run to download artifacts from | ✅ | (none) |\n| `environment` | GitHub Environment for manual approval | ✅ | `nuget-production` |\n\n\u003e **Note:** Parameters marked as required have default values (except `runId`), so you only need to specify them if you want to override the defaults. The default `workflowName` value `ci-dotnet.yml` is a legacy reference - you should explicitly specify your actual build workflow name (e.g., `build-dotnet-single.yml`, `build-dotnet-matrix.yml`, or `build-dotnet-fast.yml`).\n\n**Secrets:**\n\n| Secret | Description | Required |\n|--------|-------------|----------|\n| `NUGET_TOKEN` | NuGet API key for publishing | ✅ |\n| `WORKFLOW_PACKAGES` | GitHub token for workflow/artifact access | ✅ |\n\n**Prerequisites:**\n- GitHub Environment configured with manual approval reviewers\n- Source workflow must produce NuGet package artifacts\n- See [Manual Approval Setup Guide](./docs/MANUAL_APPROVAL_SETUP.md) for detailed setup instructions\n\n---\n\n## Step Templates\n\nThese are individual job templates that can be composed into custom workflows or used independently.\n\n### `step-node-commitlint.yml`\n\nValidates commit messages using commitlint to ensure they follow conventional commit standards.\n\n**Usage:**\n\n```yaml\njobs:\n  commitlint:\n    uses: dailydevops/pipelines/.github/workflows/step-node-commitlint.yml@main\n    secrets: inherit\n```\n\n**Parameters:** None\n\n**Secrets:**\n- `FETCH_TOKEN` (optional): GitHub token for private repository access\n\n**Requirements:**\n- `.commitlintrc` or similar configuration file in repository root\n\n---\n\n### `step-dotnet-version.yml`\n\nDetects the version of your application using GitVersion based on commit history and branching strategy.\n\n**Usage:**\n\n```yaml\njobs:\n  version:\n    uses: dailydevops/pipelines/.github/workflows/step-dotnet-version.yml@main\n    with:\n      dotnet-version: \"8.x\"\n    secrets: inherit\n\n  # Use the version in another job\n  another-job:\n    needs: version\n    runs-on: ubuntu-latest\n    steps:\n      - run: echo \"Version is ${{ needs.version.outputs.solution-version }}\"\n```\n\n**Parameters:**\n\n| Parameter | Description | Required | Default |\n|-----------|-------------|----------|---------|\n| `dotnet-version` | .NET SDK version to install | ❌ | `8.x` |\n| `runs-on` | Runner label | ❌ | `ubuntu-latest` |\n\n**Outputs:**\n\n| Output | Description |\n|--------|-------------|\n| `solution-version` | Detected semantic version (e.g., `1.2.3`) |\n\n**Secrets:**\n- `FETCH_TOKEN` (optional): GitHub token for private repository access\n\n**Requirements:**\n- `GitVersion.yml` configuration file in repository root\n\n---\n\n### `step-dotnet-format.yml`\n\nValidates code formatting using CSharpier to ensure consistent code style.\n\n**Usage:**\n\n```yaml\njobs:\n  format:\n    uses: dailydevops/pipelines/.github/workflows/step-dotnet-format.yml@main\n    with:\n      dotnet-version: \"8.x\"\n    secrets: inherit\n```\n\n**Parameters:**\n\n| Parameter | Description | Required | Default |\n|-----------|-------------|----------|---------|\n| `dotnet-logging` | Verbosity level | ❌ | `quiet` |\n| `dotnet-version` | .NET SDK version | ❌ | `8.x` |\n| `runs-on` | Runner label | ❌ | `ubuntu-latest` |\n\n**Secrets:**\n- `FETCH_TOKEN` (optional): GitHub token for private repository access\n\n**Requirements:**\n- CSharpier will be installed automatically\n\n---\n\n### `step-dotnet-build.yml`\n\nBuilds the .NET solution and uploads build artifacts as `release-packages`.\n\n**Usage:**\n\n```yaml\njobs:\n  build:\n    uses: dailydevops/pipelines/.github/workflows/step-dotnet-build.yml@main\n    with:\n      solution: \"src/YourApp.sln\"\n    secrets: inherit\n```\n\n**Parameters:**\n\n| Parameter | Description | Required | Default |\n|-----------|-------------|----------|---------|\n| `solution` | Path to solution or project file | ✅ | |\n| `disablePublish` | Skip uploading artifacts | ❌ | `false` |\n| `dotnet-logging` | Verbosity level | ❌ | `quiet` |\n| `dotnet-version` | .NET SDK version | ❌ | `8.x` |\n| `runs-on` | Runner label | ❌ | `ubuntu-latest` |\n\n**Secrets:**\n- `FETCH_TOKEN` (optional): GitHub token for private repository access\n\n**Artifacts:**\n- `release-packages`: Contains built NuGet packages (if any)\n\n---\n\n### `step-dotnet-tests.yml`\n\nRuns tests for the .NET solution with code coverage reporting.\n\n**Features:**\n- Test execution with coverage collection\n- ReportGenerator for coverage reports\n- Codecov integration\n- Optional SonarQube support\n- Optional Docker image cleanup for disk space\n\n**Usage:**\n\n```yaml\njobs:\n  version:\n    uses: dailydevops/pipelines/.github/workflows/step-dotnet-version.yml@main\n    secrets: inherit\n\n  test:\n    needs: version\n    uses: dailydevops/pipelines/.github/workflows/step-dotnet-tests.yml@main\n    with:\n      solution: \"src/YourApp.sln\"\n      solution-version: ${{ needs.version.outputs.solution-version }}\n    secrets: inherit\n```\n\n**Parameters:**\n\n| Parameter | Description | Required | Default |\n|-----------|-------------|----------|---------|\n| `solution` | Path to solution or project file | ✅ | |\n| `solution-version` | Version from step-dotnet-version | ✅ | |\n| `enableSonarQube` | Enable SonarQube analysis | ❌ | `false` |\n| `enableCleanUpDockerDocker` | Free disk space | ❌ | `false` |\n| `disableCoverageUpload` | Skip coverage artifacts | ❌ | `false` |\n| `dotnet-logging` | Verbosity level | ❌ | `quiet` |\n| `dotnet-version` | .NET SDK version | ❌ | `8.x` |\n| `runs-on` | Runner label | ❌ | `ubuntu-latest` |\n\n**Secrets:**\n- `FETCH_TOKEN` (optional): GitHub token for private repository access\n- `CODECOV_TOKEN` (optional): Codecov token for coverage upload\n- `SONAR_ORGANIZATION` (optional): SonarQube organization\n- `SONAR_PROJECT` (optional): SonarQube project key\n- `SONAR_TOKEN` (optional): SonarQube token\n\n**Artifacts:**\n- `reportgenerator-{os}-{hash}`: Generated coverage reports\n- `coverage-{os}-{hash}`: Raw coverage data files\n- `logs-{os}-{hash}`: Test logs and SARIF files\n\n---\n\n### `step-dotnet-draft-release.yml`\n\nCreates or updates a draft release using Release Drafter when code is pushed to the main branch.\n\n**Usage:**\n\n```yaml\njobs:\n  version:\n    uses: dailydevops/pipelines/.github/workflows/step-dotnet-version.yml@main\n    secrets: inherit\n\n  release:\n    needs: version\n    uses: dailydevops/pipelines/.github/workflows/step-dotnet-draft-release.yml@main\n    with:\n      solution-version: ${{ needs.version.outputs.solution-version }}\n    secrets: inherit\n```\n\n**Parameters:**\n\n| Parameter | Description | Required | Default |\n|-----------|-------------|----------|---------|\n| `solution-version` | Version from step-dotnet-version | ✅ | |\n| `runs-on` | Runner label | ❌ | `ubuntu-latest` |\n\n**Secrets:**\n- `FETCH_TOKEN` (optional): GitHub token for private repository access\n- `GITHUB_TOKEN` (required): Automatically provided\n\n**Requirements:**\n- `.github/release-drafter.yml` configuration file\n- Only runs on pushes to `main` branch (not pull requests)\n\n---\n\n### `step-dotnet-publish-nuget.yml`\n\nPublishes NuGet packages from artifacts to NuGet.org with manual approval via GitHub Environments.\n\n**Usage:**\n\n```yaml\njobs:\n  publish:\n    uses: dailydevops/pipelines/.github/workflows/step-dotnet-publish-nuget.yml@main\n    with:\n      artifactPattern: \"release-packages-*\"\n      environment: \"nuget-production\"\n      runId: \"123456789\"\n      workflowName: \"build-dotnet-single.yml\"\n    secrets:\n      NUGET_TOKEN: ${{ secrets.NUGET_TOKEN }}\n      WORKFLOW_PACKAGES: ${{ secrets.GITHUB_TOKEN }}\n```\n\n**Parameters:**\n\n| Parameter | Description | Required | Default |\n|-----------|-------------|----------|---------|\n| `artifactPattern` | Pattern to match artifacts | ✅ | `release-packages-*` |\n| `environment` | GitHub Environment for approval | ✅ | `nuget-production` |\n| `runId` | Workflow run ID to download from | ✅ | |\n| `workflowName` | Source workflow name | ✅ | `ci-dotnet.yml` |\n\n\u003e **Note:** Parameters marked as required have default values (except `runId`), so you only need to specify them if you want to override the defaults. The default `workflowName` value `ci-dotnet.yml` is a legacy reference - you should explicitly specify your actual build workflow name (e.g., `build-dotnet-single.yml`, `build-dotnet-matrix.yml`, or `build-dotnet-fast.yml`).\n\n**Secrets:**\n\n| Secret | Description | Required |\n|--------|-------------|----------|\n| `NUGET_TOKEN` | NuGet API key | ✅ |\n| `WORKFLOW_PACKAGES` | GitHub token for artifacts | ✅ |\n\n**Note:** Consider using the higher-level `publish-nuget.yml` workflow instead for a more complete publishing solution.\n\n---\n\n### `step-dependabot-merge.yml`\n\nAutomatically merges Dependabot pull requests after successful CI checks.\n\n**Usage:**\n\n```yaml\njobs:\n  dependabot:\n    if: github.actor == 'dependabot[bot]'\n    needs: [build, test]  # Add your CI jobs here\n    uses: dailydevops/pipelines/.github/workflows/step-dependabot-merge.yml@main\n    secrets: inherit\n```\n\n**Parameters:** None\n\n**Secrets:**\n- All secrets are inherited from the calling workflow\n- Requires appropriate `GITHUB_TOKEN` permissions to merge PRs\n\n**Requirements:**\n- Only runs on pull requests from `dependabot[bot]`\n- All required status checks must pass before merge\n\n---\n\n## Common Usage Examples\n\n### Basic CI/CD Pipeline\n\n```yaml\nname: CI/CD\n\non:\n  push:\n    branches: [main]\n  pull_request:\n\njobs:\n  build-and-test:\n    uses: dailydevops/pipelines/.github/workflows/build-dotnet-single.yml@main\n    with:\n      solution: \"src/MyApp.sln\"\n    secrets: inherit\n```\n\n### Multi-OS Testing\n\n```yaml\nname: CI\n\non:\n  push:\n    branches: [main]\n  pull_request:\n\njobs:\n  build:\n    uses: dailydevops/pipelines/.github/workflows/build-dotnet-matrix.yml@main\n    with:\n      solution: \"src/MyApp.sln\"\n      disableTestsOnMacOs: true  # Skip macOS if not needed\n    secrets: inherit\n```\n\n### Custom Pipeline with Individual Steps\n\n```yaml\nname: Custom Pipeline\n\non:\n  push:\n    branches: [main]\n  pull_request:\n\njobs:\n  commitlint:\n    uses: dailydevops/pipelines/.github/workflows/step-node-commitlint.yml@main\n    secrets: inherit\n\n  version:\n    uses: dailydevops/pipelines/.github/workflows/step-dotnet-version.yml@main\n    secrets: inherit\n\n  format:\n    needs: [commitlint]\n    uses: dailydevops/pipelines/.github/workflows/step-dotnet-format.yml@main\n    secrets: inherit\n\n  test:\n    needs: [commitlint, version]\n    uses: dailydevops/pipelines/.github/workflows/step-dotnet-tests.yml@main\n    with:\n      solution: \"src/MyApp.sln\"\n      solution-version: ${{ needs.version.outputs.solution-version }}\n    secrets: inherit\n\n  build:\n    needs: [test, format]\n    uses: dailydevops/pipelines/.github/workflows/step-dotnet-build.yml@main\n    with:\n      solution: \"src/MyApp.sln\"\n    secrets: inherit\n\n  draft-release:\n    if: github.ref == 'refs/heads/main'\n    needs: [build, version]\n    uses: dailydevops/pipelines/.github/workflows/step-dotnet-draft-release.yml@main\n    with:\n      solution-version: ${{ needs.version.outputs.solution-version }}\n    secrets: inherit\n```\n\n### Publishing to NuGet with Approval\n\n```yaml\nname: Publish to NuGet\n\non:\n  workflow_dispatch:\n\npermissions:\n  actions: read\n  contents: write\n\njobs:\n  publish:\n    uses: dailydevops/pipelines/.github/workflows/publish-nuget.yml@main\n    with:\n      artifactPattern: \"release-packages-*\"\n      workflowName: \"build-dotnet-single.yml\"\n      runId: \"1234567890\"  # Replace with actual workflow run ID\n      environment: \"nuget-production\"\n    secrets:\n      NUGET_TOKEN: ${{ secrets.NUGET_TOKEN }}\n      WORKFLOW_PACKAGES: ${{ secrets.GITHUB_TOKEN }}\n```\n\n## Additional Documentation\n\n- [Manual Approval Setup Guide](./docs/MANUAL_APPROVAL_SETUP.md) - Detailed instructions for configuring GitHub Environments for manual approval workflows\n\n## Contributing\n\nContributions are welcome! Please feel free to submit issues or pull requests.\n\nWhen contributing:\n1. Ensure your changes are backwards compatible\n2. Update documentation for any parameter or behavior changes\n3. Follow conventional commit standards\n4. Test your changes in a real project before submitting\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\nCopyright (c) 2023-2025 Daily DevOps \u0026 .NET\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdailydevops%2Fpipelines","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdailydevops%2Fpipelines","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdailydevops%2Fpipelines/lists"}