Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ci: 👷 using .nuspec for Template Nuget package #24

Merged
merged 2 commits into from
Dec 17, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading