Aggiunge nuove azioni per il versionamento e il deploy

Sono state aggiunte azioni per estrarre la versione da un tag,
pubblicare un progetto .NET e distribuire su IIS.
Queste azioni semplificano il processo di build e deploy
per i progetti .NET, migliorando l'integrazione con Gitea Actions.
This commit is contained in:
2026-05-14 21:00:57 +02:00
parent 652c6dec0c
commit 72fcf2f74f
7 changed files with 394 additions and 0 deletions

79
publish-dotnet/action.yml Normal file
View File

@@ -0,0 +1,79 @@
name: Publish .NET
description: >
Esegue restore, publish e rsync per un progetto .NET.
inputs:
project:
description: Path al file .csproj del progetto.
required: true
output-path:
description: Directory di destinazione per i file pubblicati.
required: true
version:
description: Versione applicativa da applicare (es. 1.0.0.0).
required: true
subpath:
description: >
Sottopath relativo alla cartella di publish da copiare
(es. "wwwroot" per Blazor WASM). Vuoto per copiare tutto.
required: false
default: ""
configuration:
description: Configurazione di build (es. Release, Debug).
required: false
default: Release
exclude-dirs:
description: Directory da escludere dal rsync (separate da virgola, punto e virgola o newline).
required: false
default: store
exclude-files:
description: File da escludere dal rsync (separati da virgola, punto e virgola o newline).
required: false
default: appsettings.json
runs:
using: composite
steps:
- name: Restore
shell: bash
run: dotnet restore "${{ inputs.project }}"
- name: Publish e rsync
shell: bash
run: |
set -euo pipefail
split_input_list() {
local value="$1"
if [ -z "$value" ]; then
echo ""
return
fi
echo "$value" | tr ',;\r\n' '\n' | sed 's/^[[:space:]]*//;s/[[:space:]]*$//' | grep -v '^$'
}
tmpdir=$(mktemp -d)
trap 'rm -rf "$tmpdir"' EXIT
dotnet publish "${{ inputs.project }}" \
-c "${{ inputs.configuration }}" \
-p:Version="${{ inputs.version }}" \
-o "$tmpdir"
src="$tmpdir"
if [ -n "${{ inputs.subpath }}" ]; then
src="$tmpdir/${{ inputs.subpath }}"
fi
mkdir -p "${{ inputs.output-path }}"
exclude_args=()
while IFS= read -r dir; do
[ -n "$dir" ] && exclude_args+=(--exclude="$dir")
done < <(split_input_list "${{ inputs.exclude-dirs }}")
while IFS= read -r file; do
[ -n "$file" ] && exclude_args+=(--exclude="$file")
done < <(split_input_list "${{ inputs.exclude-files }}")
rsync -a --delete "${exclude_args[@]}" "$src/" "${{ inputs.output-path }}/"