Files
common/dotnet/dotnet-pack-and-compare/action.yaml
2025-07-01 15:32:31 -07:00

113 lines
3.8 KiB
YAML

name: dotnet-pack-and-compare
description: "Pack a .sln or .csproj file into a .nupkg."
inputs:
name:
description: "The name of the package."
required: true
project:
description: "The .sln or .csproj project to pack."
required: true
configuration:
description: "The build configuration to use. Default: Release"
required: false
default: "Release"
additionalArgs:
description: "Additional arguments to use when packing project."
required: false
keepSymbols:
description: "Keep the '.symbols.nupkg' artifacts. Default: true"
required: false
default: "true"
defaultVersion:
description: "Version of the .nupkg file."
required: true
default: 1.0.0
outputDirectory:
description: "Directory for the output .nupkg."
required: true
default: "out"
url:
description: "Url of the GitHub server instance."
required: true
default: ${{ github.server_url }}
organization:
description: "Organization to search."
required: true
default: ${{ github.repository_owner }}
username:
description: "Username for the nuget repository to search."
required: true
default: ${{ github.actor }}
password:
description: "Password or ApiKey of the nuget repository to search."
required: true
default: ${{ github.token }}
outputs:
nupkg:
description: "The generated output .nupkg file."
value: ${{ steps.package.outputs.nupkg }}
nupkgName:
description: "The generated output .nupkg file's name."
value: ${{ steps.package.outputs.nupkgName }}
hasChanged:
description: "Whether or not the .nupkg files match."
value: ${{ steps.compare.outputs.success != 'true' }}
runs:
using: "composite"
steps:
# - run: echo "Own workspace."
# shell: bash
# - name: "Own workspace."
# uses: act/common/utils/chown@master
- run: echo "Get the next version of the package."
shell: bash
- name: "Get the next version of the package."
uses: act/common/nuget/nuget-get-next-branched-version@master
id: nuget
with:
name: ${{ inputs.name }}
defaultVersion: ${{ inputs.defaultVersion }}
url: ${{ inputs.url }}
organization: ${{ inputs.organization }}
apiToken: ${{ inputs.password }}
- run: echo "Build .nupkg."
shell: bash
- name: "Build .nupkg."
uses: act/common/dotnet/dotnet-pack@master
with:
project: ${{ inputs.project || inputs.name }}
id: ${{ inputs.name }}
version: ${{ steps.nuget.outputs.nextVersion }}
configuration: ${{ inputs.configuration }}
outputDirectory: ${{ inputs.outputDirectory }}
keepSymbols: ${{ inputs.keepSymbols }}
additionalArgs: ${{ inputs.additionalArgs }}
- run: echo "Generate package outputs."
shell: bash
- name: "Generate package outputs."
id: package
run: |
NUPKG_EXT=".nupkg"
if [ "${{ inputs.keepSymbols }}" == "true" ]; then
NUPKG_EXT=".symbols$NUPKG_EXT"
fi
NUPKG_NAME="${{ inputs.name }}.${{ steps.nuget.outputs.nextVersion }}$NUPKG_EXT"
NUPKG_PATH="${{ inputs.outputDirectory }}/$NUPKG_NAME"
echo "nupkg=$NUPKG_PATH" >> "$GITHUB_OUTPUT"
echo "nupkgName=$NUPKG_NAME" >> "$GITHUB_OUTPUT"
shell: bash
- name: "Compare .nupkg to remote .nupkg."
if: ${{ steps.nuget.outputs.latestVersion }}
id: compare
uses: act/common/nuget/nuget-compare-version@master
with:
lhs: ${{ steps.package.outputs.nupkg }}
version: ${{ steps.nuget.outputs.latestVersion }}
name: ${{ inputs.name }}
username: ${{ inputs.username }}
password: ${{ inputs.password }}
# This is for GitHub.
#url: ${{ inputs.url }}/_registry/nuget/${{ inputs.organization }}/index.json
# This is for Gitea.
url: ${{ inputs.url }}/api/packages/${{ inputs.organization }}/nuget/index.json