diff --git a/.docfx/includes/availability-all.md b/.docfx/includes/availability-all.md index 40f1101c8..3cc6f5cac 100644 --- a/.docfx/includes/availability-all.md +++ b/.docfx/includes/availability-all.md @@ -1 +1 @@ -Availability: .NET 8, .NET 6, .NET Standard 2.1 and .NET Standard 2.0 \ No newline at end of file +Availability: .NET 9, .NET 8, .NET Standard 2.1 and .NET Standard 2.0 \ No newline at end of file diff --git a/.docfx/includes/availability-default.md b/.docfx/includes/availability-default.md index f49ad3ff1..89f4c0606 100644 --- a/.docfx/includes/availability-default.md +++ b/.docfx/includes/availability-default.md @@ -1 +1 @@ -Availability: .NET 8, .NET 6 and .NET Standard 2.0 \ No newline at end of file +Availability: .NET 9, .NET 8 and .NET Standard 2.0 \ No newline at end of file diff --git a/.docfx/includes/availability-hybrid.md b/.docfx/includes/availability-hybrid.md index a08c5e979..e31207f8c 100644 --- a/.docfx/includes/availability-hybrid.md +++ b/.docfx/includes/availability-hybrid.md @@ -1 +1 @@ -Availability: .NET 8, .NET 6 and .NET Standard 2.0 (when applicable) or .NET Standard 2.1 (when applicable) \ No newline at end of file +Availability: .NET 9, .NET 8 and .NET Standard 2.0 (when applicable) or .NET Standard 2.1 (when applicable) \ No newline at end of file diff --git a/.docfx/includes/availability-modern.md b/.docfx/includes/availability-modern.md index c3c49daea..abf53694b 100644 --- a/.docfx/includes/availability-modern.md +++ b/.docfx/includes/availability-modern.md @@ -1 +1 @@ -Availability: .NET 8 and .NET 6 \ No newline at end of file +Availability: .NET 9 and .NET 8 \ No newline at end of file diff --git a/.docfx/toc.yml b/.docfx/toc.yml index 5192c820e..08bf7441a 100644 --- a/.docfx/toc.yml +++ b/.docfx/toc.yml @@ -18,13 +18,5 @@ href: api/extensions/aspnet/Cuemon.Extensions.AspNetCore.Configuration.html - name: Other Projects href: api/extensions - expanded: true - items: - - name: Json.NET API - href: api/extensions/jsonnet/Cuemon.Extensions.Newtonsoft.Json.html - - name: Swashbuckle.AspNetCore API - href: api/extensions/swagger/Cuemon.Extensions.Swashbuckle.AspNetCore.html - - name: AWS Signature API - href: api/extensions/awssignature4/Cuemon.Extensions.AspNetCore.Authentication.AwsSignature4.html - name: NuGet href: packages diff --git a/.github/workflows/delayed-pipelines.yml b/.github/workflows/delayed-pipelines.yml new file mode 100644 index 000000000..486193699 --- /dev/null +++ b/.github/workflows/delayed-pipelines.yml @@ -0,0 +1,166 @@ +name: Cuemon CI/CD Pipeline (Delayed) +on: + pull_request: + paths-ignore: + - .codecov/** + - .docfx/** + - .github/** + - .nuget/** + - '**.md' + workflow_dispatch: + inputs: + configuration: + type: choice + description: The build configuration to use in the deploy stage. + required: true + default: Release + options: + - Debug + - Release + +jobs: + prepare_linux: + name: ๐Ÿง Prepare Linux + runs-on: ubuntu-22.04 + timeout-minutes: 15 + outputs: + restoreCacheKey: ${{ steps.dotnet-restore.outputs.restoreCacheKey }} + steps: + - name: Checkout + uses: codebeltnet/git-checkout@v1 + + - name: Install .NET + uses: codebeltnet/install-dotnet@v1 + with: + includePreview: true + + - id: dotnet-restore + name: Restore Dependencies + uses: codebeltnet/dotnet-restore@v2 + with: + useRestoreCache: true + + prepare_windows: + name: ๐ŸชŸ Prepare Windows + runs-on: windows-2022 + timeout-minutes: 15 + outputs: + restoreCacheKey: ${{ steps.dotnet-restore.outputs.restoreCacheKey }} + steps: + - name: Checkout + uses: codebeltnet/git-checkout@v1 + + - name: Install .NET + uses: codebeltnet/install-dotnet@v1 + with: + includePreview: true + + - id: dotnet-restore + name: Restore Dependencies + uses: codebeltnet/dotnet-restore@v2 + with: + useRestoreCache: true + + build: + name: ๐Ÿ› ๏ธ Build + runs-on: ubuntu-22.04 + timeout-minutes: 15 + strategy: + matrix: + configuration: [Debug, Release] + framework: [net9.0, net8.0, netstandard2.0] + needs: [prepare_linux] + outputs: + version: ${{ steps.minver-calculate.outputs.version }} + projects: ${{ steps.projects.outputs.result }} + steps: + - name: Checkout + uses: codebeltnet/git-checkout@v1 + + - name: Install .NET + uses: codebeltnet/install-dotnet@v1 + with: + includePreview: true + + - name: Install MinVer + uses: codebeltnet/dotnet-tool-install-minver@v1 + + - id: minver-calculate + name: Calculate Version + uses: codebeltnet/minver-calculate@v2 + + - name: Download cuemon.snk file + uses: codebeltnet/gcp-download-file@v1 + with: + serviceAccountKey: ${{ secrets.GCP_TOKEN }} + bucketName: ${{ secrets.GCP_BUCKETNAME }} + objectName: cuemon.snk + + - id: projects + name: Set environment variable for projects + run: | + if [ "${{ matrix.framework }}" == "netstandard2.0" ]; then + projects=( + "src/**/Cuemon.Extensions.Globalization.csproj" + ) + echo "result=$(IFS=' '; echo "${projects[*]}")" >> $GITHUB_OUTPUT + else + projects=( + "src/**/Cuemon.Core.App.csproj" + "src/**/Cuemon.Extensions.Globalization.csproj" + ) + echo "result=$(IFS=' '; echo "${projects[*]}")" >> $GITHUB_OUTPUT + fi + shell: bash + + - id: dotnet-build + name: Build for ${{ matrix.framework }} (${{ matrix.configuration }}) + uses: codebeltnet/dotnet-build@v2 + with: + projects: ${{ steps.projects.outputs.result }} + configuration: ${{ matrix.configuration }} + framework: ${{ matrix.framework }} + restoreCacheKey: ${{ needs.prepare_linux.outputs.restoreCacheKey }} + uploadBuildArtifactName: 'DelayedBuild.${{ matrix.framework }}.${{ matrix.configuration }}' + + pack: + name: ๐Ÿ“ฆ Pack + runs-on: ubuntu-22.04 + timeout-minutes: 15 + strategy: + matrix: + configuration: [Debug, Release] + needs: [prepare_linux, build] + steps: + - name: Checkout + uses: codebeltnet/git-checkout@v1 + + - name: Install .NET + uses: codebeltnet/install-dotnet@v1 + with: + includePreview: true + + - name: Pack for ${{ matrix.configuration }} + uses: codebeltnet/dotnet-pack@v2 + with: + configuration: ${{ matrix.configuration }} + uploadPackedArtifact: true + version: ${{ needs.build.outputs.version }} + restoreCacheKey: ${{ needs.prepare_linux.outputs.restoreCacheKey }} + downloadBuildArtifactPattern: 'DelayedBuild.*.${{ matrix.configuration }}' + uploadPackedArtifactName: 'NuGet-Delayed-${{ matrix.configuration }}' + projects: ${{ needs.build.outputs.projects }} + + deploy: + if: github.event_name != 'pull_request' + name: ๐Ÿš€ Deploy v${{ needs.build.outputs.version }} + runs-on: ubuntu-22.04 + timeout-minutes: 15 + needs: [build, pack] + environment: Production + steps: + - uses: codebeltnet/nuget-push@v1 + with: + token: ${{ secrets.NUGET_TOKEN }} + configuration: ${{ inputs.configuration == '' && 'Release' || inputs.configuration }} + downloadBuildArtifactName: NuGet-Delayed-${{ inputs.configuration == '' && 'Release' || inputs.configuration }} diff --git a/.github/workflows/pipelines.yml b/.github/workflows/pipelines.yml index 5199acc44..6c74ad378 100644 --- a/.github/workflows/pipelines.yml +++ b/.github/workflows/pipelines.yml @@ -72,6 +72,7 @@ jobs: needs: [prepare_linux] outputs: version: ${{ steps.minver-calculate.outputs.version }} + projects: ${{ steps.projects.outputs.result }} testProjects: ${{ steps.test-projects.outputs.result }} steps: - name: Checkout @@ -96,10 +97,11 @@ jobs: bucketName: ${{ secrets.GCP_BUCKETNAME }} objectName: cuemon.snk - - name: Set environment variable for projects + - id: projects + name: Set environment variable for projects run: | if [ "${{ matrix.framework }}" == "netstandard2.1" ]; then - echo "PROJECTS=src/**/Cuemon.Extensions.IO.csproj src/**/Cuemon.IO.csproj" >> $GITHUB_ENV + echo "result=src/**/Cuemon.Extensions.IO.csproj src/**/Cuemon.IO.csproj" >> $GITHUB_OUTPUT elif [ "${{ matrix.framework }}" == "netstandard2.0" ]; then projects=( "src/**/Cuemon.Core.csproj" @@ -114,7 +116,6 @@ jobs: "src/**/Cuemon.Extensions.Data.Integrity.csproj" "src/**/Cuemon.Extensions.DependencyInjection.csproj" "src/**/Cuemon.Extensions.Diagnostics.csproj" - "src/**/Cuemon.Extensions.Globalization.csproj" "src/**/Cuemon.Extensions.Hosting.csproj" "src/**/Cuemon.Extensions.IO.csproj" "src/**/Cuemon.Extensions.Net.csproj" @@ -132,9 +133,52 @@ jobs: "src/**/Cuemon.Threading.csproj" "src/**/Cuemon.Xml.csproj" ) - echo "PROJECTS=$(IFS=' '; echo "${projects[*]}")" >> $GITHUB_ENV + echo "result=$(IFS=' '; echo "${projects[*]}")" >> $GITHUB_OUTPUT else - echo "PROJECTS=src/**/*.csproj" >> $GITHUB_ENV + projects=( + "src/**/Cuemon.AspNetCore.csproj" + "src/**/Cuemon.AspNetCore.App.csproj" + "src/**/Cuemon.AspNetCore.Authentication.csproj" + "src/**/Cuemon.AspNetCore.Mvc.csproj" + "src/**/Cuemon.AspNetCore.Razor.TagHelpers.csproj" + "src/**/Cuemon.Core.csproj" + "src/**/Cuemon.Data.csproj" + "src/**/Cuemon.Data.Integrity.csproj" + "src/**/Cuemon.Data.SqlClient.csproj" + "src/**/Cuemon.Diagnostics.csproj" + "src/**/Cuemon.Extensions.AspNetCore.csproj" + "src/**/Cuemon.Extensions.AspNetCore.Authentication.csproj" + "src/**/Cuemon.Extensions.AspNetCore.Mvc.csproj" + "src/**/Cuemon.Extensions.AspNetCore.Mvc.Formatters.Text.Json.csproj" + "src/**/Cuemon.Extensions.AspNetCore.Mvc.Formatters.Xml.csproj" + "src/**/Cuemon.Extensions.AspNetCore.Mvc.RazorPages.csproj" + "src/**/Cuemon.Extensions.AspNetCore.Text.Json.csproj" + "src/**/Cuemon.Extensions.AspNetCore.Xml.csproj" + "src/**/Cuemon.Extensions.Collections.Generic.csproj" + "src/**/Cuemon.Extensions.Collections.Specialized.csproj" + "src/**/Cuemon.Extensions.Core.csproj" + "src/**/Cuemon.Extensions.Data.csproj" + "src/**/Cuemon.Extensions.Data.Integrity.csproj" + "src/**/Cuemon.Extensions.DependencyInjection.csproj" + "src/**/Cuemon.Extensions.Diagnostics.csproj" + "src/**/Cuemon.Extensions.Hosting.csproj" + "src/**/Cuemon.Extensions.IO.csproj" + "src/**/Cuemon.Extensions.Net.csproj" + "src/**/Cuemon.Extensions.Reflection.csproj" + "src/**/Cuemon.Extensions.Runtime.Caching.csproj" + "src/**/Cuemon.Extensions.Text.csproj" + "src/**/Cuemon.Extensions.Text.Json.csproj" + "src/**/Cuemon.Extensions.Threading.csproj" + "src/**/Cuemon.Extensions.Xml.csproj" + "src/**/Cuemon.IO.csproj" + "src/**/Cuemon.Net.csproj" + "src/**/Cuemon.Resilience.csproj" + "src/**/Cuemon.Runtime.Caching.csproj" + "src/**/Cuemon.Security.Cryptography.csproj" + "src/**/Cuemon.Threading.csproj" + "src/**/Cuemon.Xml.csproj" + ) + echo "result=$(IFS=' '; echo "${projects[*]}")" >> $GITHUB_OUTPUT fi shell: bash @@ -142,7 +186,7 @@ jobs: name: Build for ${{ matrix.framework }} (${{ matrix.configuration }}) uses: codebeltnet/dotnet-build@v2 with: - projects: ${{ env.PROJECTS }} + projects: ${{ steps.projects.outputs.result }} configuration: ${{ matrix.configuration }} framework: ${{ matrix.framework }} restoreCacheKey: ${{ needs.prepare_linux.outputs.restoreCacheKey }} @@ -177,6 +221,7 @@ jobs: uploadPackedArtifact: true version: ${{ needs.build.outputs.version }} restoreCacheKey: ${{ needs.prepare_linux.outputs.restoreCacheKey }} + projects: ${{ needs.build.outputs.projects }} test: name: ๐Ÿงช Test diff --git a/Directory.Packages.props b/Directory.Packages.props index 24b619633..343ec93a1 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -1,23 +1,21 @@ - true - - - - - - + + + + + - + @@ -25,14 +23,12 @@ - - - + @@ -41,10 +37,9 @@ - + - @@ -53,14 +48,12 @@ - - - - - - - + + + + + + - - + \ No newline at end of file diff --git a/testenvironments.json b/testenvironments.json index d39afbf25..151487cf6 100644 --- a/testenvironments.json +++ b/testenvironments.json @@ -9,7 +9,7 @@ { "name": "Docker-Ubuntu", "type": "docker", - "dockerImage": "gimlichael/ubuntu-testrunner:net6.0.427-net8.0.403-9.0.100-rc.2.24474.11" + "dockerImage": "gimlichael/ubuntu-testrunner:net8.0.404-9.0.100" } ] }