Skip to content

Commit b57061b

Browse files
committed
feat: modernize CI/CD pipeline infrastructure
✨ Phase 1: Infrastructure Modernization Complete ## 🚀 New Features - **Modern CI/CD Pipeline**: Consolidated 3 separate OS workflows into unified matrix-based ci.yml - **Automated GitHub Packages**: Daily development builds for immediate testing feedback - **Enhanced Security**: CodeQL analysis + Dependabot automation - **GitHub Test Reporter**: Native test result visualization (replaces Testspace) ## 🔄 Workflow Changes - ✅ **ci.yml**: Cross-platform matrix testing (Windows/Linux/macOS) with modern actions - ✅ **publish-dev-github.yml**: Automated GitHub Packages publishing for development - ✅ **publish-nuget.yml**: Enhanced manual workflow supporting both GitHub Packages & NuGet.org - ✅ **security.yml**: CodeQL security scanning + dependency review - ✅ **dependabot.yml**: Automated dependency management with smart grouping ## 🏗️ Infrastructure Updates - **GitHub Actions**: Updated to v4 (checkout, setup-dotnet, cache, upload-artifact) - **Runners**: Migrated from ubuntu-20.04 to ubuntu-latest - **Test Reporting**: Native GitHub integration via dorny/test-reporter@v1 - **Package Caching**: Optimized NuGet package caching for faster builds - **Build System**: Added GitHub Packages support to Cake Frosting build ## 🗑️ Removed Deprecated Components - ❌ **Old Workflows**: build-ubuntu.yml, build-windows.yml, build-macos.yml - ❌ **Testspace**: External test reporting service dependency - ❌ **Old Actions**: checkout@v2, setup-dotnet@v1, setup-nuget@v1.0.5 ## 📦 Release Strategy - **Development**: Auto-publish to GitHub Packages on every master/v2-preview1 commit - **Preview/Stable**: Manual NuGet.org publishing with enhanced dropdown workflow - **Version Format**: 2.0.0-preview1.20240715.a1b2c3d for development builds Ready for Phase 2: Enhanced automation & community features! 🎯
1 parent c1522fb commit b57061b

File tree

10 files changed

+503
-195
lines changed

10 files changed

+503
-195
lines changed

.github/dependabot.yml

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
version: 2
2+
updates:
3+
# .NET dependencies
4+
- package-ecosystem: "nuget"
5+
directory: "/"
6+
schedule:
7+
interval: "weekly"
8+
day: "monday"
9+
time: "06:00"
10+
open-pull-requests-limit: 10
11+
reviewers:
12+
- "localstack-dotnet/maintainers"
13+
assignees:
14+
- "localstack-dotnet/maintainers"
15+
commit-message:
16+
prefix: "deps"
17+
include: "scope"
18+
groups:
19+
# Group AWS SDK updates together
20+
aws-sdk:
21+
patterns:
22+
- "AWSSDK.*"
23+
- "AWS.*"
24+
# Group Microsoft packages together
25+
microsoft:
26+
patterns:
27+
- "Microsoft.*"
28+
- "System.*"
29+
# Group testing packages together
30+
testing:
31+
patterns:
32+
- "xunit*"
33+
- "*Test*"
34+
- "coverlet*"
35+
- "FluentAssertions*"
36+
# Group build and tooling packages
37+
build-tools:
38+
patterns:
39+
- "Cake.*"
40+
- "GitVersion*"
41+
- "Nuke.*"
42+
ignore:
43+
# Ignore patch updates for stable dependencies
44+
- dependency-name: "Microsoft.Extensions.*"
45+
update-types: ["version-update:semver-patch"]
46+
47+
# GitHub Actions dependencies
48+
- package-ecosystem: "github-actions"
49+
directory: "/"
50+
schedule:
51+
interval: "weekly"
52+
day: "monday"
53+
time: "06:00"
54+
open-pull-requests-limit: 5
55+
reviewers:
56+
- "localstack-dotnet/maintainers"
57+
commit-message:
58+
prefix: "ci"
59+
include: "scope"

.github/workflows/build-macos.yml

Lines changed: 0 additions & 55 deletions
This file was deleted.

.github/workflows/build-ubuntu.yml

Lines changed: 0 additions & 55 deletions
This file was deleted.

.github/workflows/build-windows.yml

Lines changed: 0 additions & 49 deletions
This file was deleted.

.github/workflows/ci.yml

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
name: "CI/CD Pipeline"
2+
3+
on:
4+
push:
5+
paths-ignore:
6+
- "**.md"
7+
- LICENSE
8+
branches:
9+
- "master"
10+
- "feature/v2-preview1"
11+
- "feature/ci-cd-modernization"
12+
pull_request:
13+
paths-ignore:
14+
- "**.md"
15+
- LICENSE
16+
branches:
17+
- master
18+
- "feature/v2-preview1"
19+
20+
env:
21+
DOTNET_CLI_TELEMETRY_OPTOUT: true
22+
DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true
23+
DOTNET_NOLOGO: true
24+
25+
jobs:
26+
build-and-test:
27+
name: "Build & Test (${{ matrix.name }})"
28+
runs-on: ${{ matrix.os }}
29+
30+
strategy:
31+
fail-fast: false
32+
matrix:
33+
include:
34+
# Windows: All frameworks including .NET Framework
35+
- os: windows-latest
36+
name: "Windows"
37+
script: ".\build.ps1"
38+
frameworks: "net8.0,net9.0,netstandard2.0,net472"
39+
40+
# Linux: .NET Core + Mono for Framework testing
41+
- os: ubuntu-latest
42+
name: "Linux"
43+
script: "./build.sh"
44+
frameworks: "net8.0,net9.0,netstandard2.0"
45+
46+
# macOS: .NET Core frameworks (most common usage)
47+
- os: macos-latest
48+
name: "macOS"
49+
script: "./build.sh"
50+
frameworks: "net8.0,net9.0,netstandard2.0"
51+
52+
steps:
53+
- name: "Checkout"
54+
uses: actions/checkout@v4
55+
with:
56+
fetch-depth: 0 # Full history for better caching
57+
58+
- name: "Setup .NET SDK"
59+
uses: actions/setup-dotnet@v4
60+
with:
61+
dotnet-version: |
62+
8.0.x
63+
9.0.x
64+
65+
- name: "Make build script executable"
66+
if: runner.os != 'Windows'
67+
run: chmod +x ./build.sh
68+
69+
- name: "Cache NuGet packages"
70+
uses: actions/cache@v4
71+
with:
72+
path: ~/.nuget/packages
73+
key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json', '**/*.csproj', '**/Directory.Packages.props') }}
74+
restore-keys: |
75+
${{ runner.os }}-nuget-
76+
77+
- name: "Build"
78+
run: ${{ matrix.script }} --target build
79+
80+
- name: "Run Tests"
81+
run: ${{ matrix.script }} --target tests --skipFunctionalTest false --exclusive
82+
83+
- name: "Publish Test Results"
84+
uses: dorny/test-reporter@v1
85+
if: success() || failure()
86+
with:
87+
name: 'Test Results (${{ matrix.name }})'
88+
path: '**/*.trx'
89+
reporter: 'dotnet-trx'
90+
fail-on-error: true
91+
max-annotations: 50
92+
93+
- name: "Upload Test Artifacts"
94+
uses: actions/upload-artifact@v4
95+
if: failure()
96+
with:
97+
name: test-results-${{ matrix.name }}
98+
path: |
99+
**/*.trx
100+
**/TestResults/**/*
101+
retention-days: 7

0 commit comments

Comments
 (0)