Skip to content

Commit

Permalink
ci: 👷 using .nuspec for Template Nuget package (#24)
Browse files Browse the repository at this point in the history
  • Loading branch information
mehdihadeli authored Dec 17, 2024
1 parent bcc85cd commit 174f342
Show file tree
Hide file tree
Showing 21 changed files with 309 additions and 179 deletions.
2 changes: 1 addition & 1 deletion .config/dotnet-tools.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
"rollForward": false
},
"csharpier": {
"version": "0.29.0",
"version": "0.30.2",
"commands": [
"dotnet-csharpier"
],
Expand Down
42 changes: 23 additions & 19 deletions .github/workflows/build-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ jobs:
name: Pre-Checks
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4

- name: Conventional Commits Check
uses: amannn/action-semantic-pull-request@v5
Expand All @@ -30,23 +30,15 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Setup Node.js
uses: actions/setup-node@v3
uses: actions/setup-node@v4
with:
node-version: "18"

- name: Setup .NET Core
uses: actions/setup-dotnet@v3
uses: actions/setup-dotnet@v4
with:
dotnet-version: ${{ env.DOTNET_VERSION }}

- name: Cache NuGet packages
uses: actions/cache@v3
with:
path: ~/.nuget/packages
key: nuget-${{ runner.os }}-${{ hashFiles('**/*.csproj') }}
restore-keys: |
nuget-${{ runner.os }}-
# npm install, runs `prepare` script automatically in the initialize step
- name: Install NPM Dependencies
run: npm install
Expand All @@ -64,27 +56,39 @@ jobs:
runs-on: ubuntu-latest
needs: pre-checks
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
with:
# https://github.com/dotnet/Nerdbank.GitVersioning/blob/main/doc/cloudbuild.md#github-actions
fetch-depth: 0 # doing deep clone and avoid shallow clone so nbgv can do its work.

- name: Setup .NET Core
uses: actions/setup-dotnet@v3
uses: actions/setup-dotnet@v4
with:
dotnet-version: ${{ env.DOTNET_VERSION }}

- name: Cache NuGet packages
uses: actions/cache@v3
uses: actions/cache@v4
with:
path: ~/.nuget/packages
key: nuget-${{ runner.os }}-${{ hashFiles('**/*.csproj') }}
restore-keys: |
nuget-${{ runner.os }}-
key: nuget-cache-${{ runner.os }}-${{ env.DOTNET_VERSION }}-build-test

# https://github.com/dotnet/Nerdbank.GitVersioning/blob/main/doc/nbgv-cli.md
- name: Install Nerdbank.GitVersioning
run: dotnet tool install -g nbgv

- name: Get PackageVersion
id: get_version
run: |
nugetVersion=$(nbgv get-version | grep "NuGetPackageVersion" | awk -F': ' '{print $2}' | xargs)
echo "NuGetPackageVersion: $nugetVersion"
echo "::set-output name=nuget_version::$nugetVersion"
- name: Restore dependencies
run: dotnet restore Vertical.Slice.Template.sln

- name: Build Version
- name: Build Version ${{ steps.get_version.outputs.nuget_version }}
run: dotnet build Vertical.Slice.Template.sln -c Release --no-restore

- name: Test Version
- name: Test Version ${{ steps.get_version.outputs.nuget_version }}
run: |
dotnet test Vertical.Slice.Template.sln -c Release --no-restore --no-build
80 changes: 52 additions & 28 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,55 +9,71 @@ on:
- v* # for publish package after each release to nuget
branches:
- main # for publish package and each commit to github
paths-ignore:
- "tests/**"

env:
FEED_SOURCE: https://api.nuget.org/v3/index.json
GHC_SOURCE: ${{ vars.GHC_SOURCE }}
FEED_API_KEY: ${{ secrets.FEED_API_KEY }}
GHC_API_KEY: ${{ secrets.GHC_TOKEN }}
NuGetDirectory: ${{ github.workspace}}/nuget
DOTNET_VERSION: "8.0.*"

jobs:
# https://www.meziantou.net/publishing-a-nuget-package-following-best-practices-using-github.htm
create-nuget:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
with:
# https://github.com/dotnet/Nerdbank.GitVersioning/blob/main/doc/cloudbuild.md#github-actions
fetch-depth: 0 # avoid shallow clone so nbgv can do its work.
- name: Setup .NET
uses: actions/setup-dotnet@v3
uses: actions/setup-dotnet@v4
with:
dotnet-version: "8.0.x"
dotnet-version: ${{ env.DOTNET_VERSION }}

- name: Cache NuGet Packages
uses: actions/cache@v3
- uses: nuget/setup-nuget@v2
name: Setup NuGet
with:
nuget-version: '6.x'

- name: Cache NuGet packages
uses: actions/cache@v4
with:
key: vertical-template-nuget
path: ~/.nuget/packages

# https://github.com/joseftw/jos.enumeration/blob/main/.github/workflows/verify.yml
# https://github.com/dotnet/Nerdbank.GitVersioning
- uses: dotnet/[email protected]
id: nbgv
key: nuget-cache-${{ runner.os }}-${{ env.DOTNET_VERSION }}-publish

# https://github.com/dotnet/Nerdbank.GitVersioning/blob/main/doc/nbgv-cli.md
- name: Install Nerdbank.GitVersioning
run: dotnet tool install -g nbgv

- name: Get NuGetPackageVersion
id: get_version
run: |
nugetVersion=$(nbgv get-version | grep "NuGetPackageVersion" | awk -F': ' '{print $2}' | xargs)
echo "NuGetPackageVersion: $nugetVersion"
echo "::set-output name=nuget_version::$nugetVersion"
- name: Restore dependencies
run: dotnet restore Vertical.Slice.Template.sln

- name: Build Version ${{ steps.nbgv.outputs.SemVer2 }}
- name: Build Version ${{ steps.get_version.outputs.nuget_version }}
run: dotnet build Vertical.Slice.Template.sln -c Release --no-restore

# https://learn.microsoft.com/en-us/dotnet/core/tools/dotnet-pack
- name: Pack NuGet Package Version ${{ steps.nbgv.outputs.SemVer2 }}
run: dotnet pack vertical-slice-template.csproj -c Release -o ${{ env.NuGetDirectory }}
- name: Pack NuGet Package Version ${{ steps.get_version.outputs.nuget_version }}
run: nuget pack vertical-slice-template.nuspec -OutputDirectory ${{ env.NuGetDirectory }} -Properties "version=${{ steps.get_version.outputs.nuget_version }}" -NoDefaultExcludes -c Release --no-restore --no-build

# Publish the NuGet package as an artifact, so they can be used in the following jobs
- uses: actions/upload-artifact@v4
# Publish the NuGet package as an artifact, so they can be used in the following jobs
- name: Upload Package Version ${{ steps.get_version.outputs.nuget_version }}
uses: actions/upload-artifact@v4
with:
name: nuget
if-no-files-found: error
retention-days: 7
retention-days: 1
path: ${{ env.NuGetDirectory }}/*.nupkg

deploy-nuget:
Expand All @@ -68,38 +84,46 @@ jobs:
# You can update this logic if you want to manage releases differently
needs: [create-nuget]
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
with:
# https://github.com/dotnet/Nerdbank.GitVersioning/blob/main/doc/cloudbuild.md#github-actions
fetch-depth: 0 # avoid shallow clone so nbgv can do its work.
# Download the NuGet package created in the previous job

# .nupkg should be in the same folder that we have `.template.config`, so we should put it in the root of source directory
- uses: actions/download-artifact@v4
# Download the NuGet package created in the previous job and copy in the root
- name: Download Nuget
uses: actions/download-artifact@v4
with:
name: nuget
## Optional. Default is $GITHUB_WORKSPACE
path: ${{ github.workspace}}

# Install the .NET SDK indicated in the global.json file
- name: Setup .NET Core
uses: actions/setup-dotnet@v3
uses: actions/setup-dotnet@v4
with:
dotnet-version: "8.0.x"
dotnet-version: ${{ env.DOTNET_VERSION }}

# https://github.com/dotnet/Nerdbank.GitVersioning/blob/main/doc/nbgv-cli.md
- name: Install Nerdbank.GitVersioning
run: dotnet tool install -g nbgv

# https://github.com/joseftw/jos.enumeration/blob/main/.github/workflows/verify.yml
# https://github.com/dotnet/Nerdbank.GitVersioning
- uses: dotnet/[email protected]
id: nbgv
- name: Get NuGetPackageVersion
id: get_version
run: |
nugetVersion=$(nbgv get-version | grep "NuGetPackageVersion" | awk -F': ' '{print $2}' | xargs)
echo "NuGetPackageVersion: $nugetVersion"
echo "::set-output name=nuget_version::$nugetVersion"
# for publish package to github for each commit
- name: Publish NuGet Package Version ${{ steps.nbgv.outputs.SemVer2 }} to GitHub
- name: Publish NuGet Package Version ${{ steps.get_version.outputs.nuget_version }} to GitHub
run: dotnet nuget push *.nupkg --skip-duplicate --api-key ${{ env.GHC_API_KEY }} --source ${{ env.GHC_SOURCE }}
if: github.event_name == 'push' && (startswith(github.ref, 'refs/heads') || startswith(github.ref, 'refs/tags'))

# Publish all NuGet packages to NuGet.org
# Use --skip-duplicate to prevent errors if a package with the same version already exists.
# If you retry a failed workflow, already published packages will be skipped without error.
# https://learn.microsoft.com/en-us/dotnet/core/tools/dotnet-nuget-push
- name: Publish NuGet Package Version ${{ steps.nbgv.outputs.SemVer2 }} to Nuget
- name: Publish NuGet Package Version ${{ steps.get_version.outputs.nuget_version }} to Nuget
run: dotnet nuget push *.nupkg --skip-duplicate --source ${{ env.FEED_SOURCE }} --api-key ${{ env.FEED_API_KEY }}
if: github.event_name == 'push' && startswith(github.ref, 'refs/tags')
8 changes: 1 addition & 7 deletions .github/workflows/release-drafter.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,5 @@ jobs:
with:
config-name: release-drafter.yml
disable-autolabeler: true
## Default versioning just increase the path version as default. but the can use minor, patch and breaking-changes labels to apply semver
# version: 1.29.1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

# - name: Do something when a new release published
# run: |
# echo ${{ $RESOLVED_VERSION steps.semantic.outputs }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
10 changes: 5 additions & 5 deletions .template.config/template.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"$schema": "http://json.schemastore.org/template",
"author": "Mehdi Hadeli",
"classifications": ["Web", "WebAPI", "C#"],
"name": "Vertical Slice API Template",
"name": "Vertical Slice Template",
"identity": "Vertical.Slice.Template",
"shortName": "vsa",
"sourceName": "Vertical.Slice.Template",
Expand All @@ -19,13 +19,13 @@
"datatype": "choice",
"enableQuotelessLiterals": true,
"choices": [
{
"choice": "net7.0",
"description": "Target net7.0"
},
{
"choice": "net8.0",
"description": "Target net8.0"
},
{
"choice": "net9.0",
"description": "Target net9.0"
}
],
"replaces": "{TargetFramework}",
Expand Down
6 changes: 0 additions & 6 deletions Directory.Build.props

This file was deleted.

6 changes: 4 additions & 2 deletions Vertical.Slice.Template.sln
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "solution-items", "solution-
package.json = package.json
readme.md = readme.md
version.json = version.json
vertical-slice-template.csproj = vertical-slice-template.csproj
Directory.Build.props = Directory.Build.props
vertical-slice-template.nuspec = vertical-slice-template.nuspec
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".config", ".config", "{154A55C1-CE45-463D-B411-816C702D6A25}"
Expand All @@ -51,6 +50,9 @@ EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".github", ".github", "{AEFEEF63-5831-49E5-A7D9-892AF653C32D}"
ProjectSection(SolutionItems) = preProject
.github\release-drafter.yml = .github\release-drafter.yml
.github\labeler.yml = .github\labeler.yml
.github\multi-labeler.yml = .github\multi-labeler.yml
.github\release.yml = .github\release.yml
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflows", "workflows", "{ED6C6F59-8A39-4D7D-BB93-888AA486AFE9}"
Expand Down
24 changes: 0 additions & 24 deletions readme-nuget.md

This file was deleted.

4 changes: 2 additions & 2 deletions src/App/Vertical.Slice.Template.Api/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -92,9 +92,9 @@
app.UseCustomSwagger();

// https://github.com/scalar/scalar/blob/main/packages/scalar.aspnetcore/README.md
app.MapScalarApiReference(x =>
app.MapScalarApiReference(redocOptions =>
{
x.OpenApiRoutePattern = "/swagger/v1/swagger.json";
redocOptions.WithOpenApiRoutePattern("/swagger/{documentName}/swagger.json");
});
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
<Project Sdk="Microsoft.NET.Sdk.Web">

<ItemGroup>
<InternalsVisibleTo Include="Vertical.Slice.Template.DependencyTests" />
</ItemGroup>
<ItemGroup>
<InternalsVisibleTo Include="Vertical.Slice.Template.DependencyTests"/>
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\Vertical.Slice.Template\Vertical.Slice.Template.csproj"/>
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\Vertical.Slice.Template\Vertical.Slice.Template.csproj" />
</ItemGroup>

</Project>
Loading

0 comments on commit 174f342

Please sign in to comment.