Files
FA_WEB/.woodpecker.yml
2026-01-02 22:02:39 +01:00

133 lines
4.9 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# .woodpecker.yml monorepo .NET z poprawną kolejnością budowania
when:
event: [push, tag, manual]
branch: [master]
steps:
restore:
image: mcr.microsoft.com/dotnet/sdk:latest
commands:
- dotnet restore
test:
image: mcr.microsoft.com/dotnet/sdk:latest
commands:
- dotnet test --no-restore --configuration Release --logger "trx"
build-and-pack-datamodels:
image: mcr.microsoft.com/dotnet/sdk:latest
commands:
- |
set -euo pipefail
# Odczytujemy typy projektów w solution (zakładamy, że każdy ma <ProjectType> w csproj)
echo "=== Wykrywanie projektów DataModel ==="
LOCAL_NUGET="/tmp/local-nuget"
mkdir -p "$LOCAL_NUGET"
for csproj in *.csproj; do
[ -f "$csproj" ] || continue
PROJECT_TYPE=$(dotnet msbuild "$csproj" -getProperty:ProjectType -noLogo 2>/dev/null || echo "Unknown")
if [[ "$PROJECT_TYPE" == "DataModel" ]]; then
PROJECT_NAME=$(basename "$csproj" .csproj)
echo "→ Pakuję DataModel: $PROJECT_NAME"
dotnet pack "$csproj" --no-build --configuration Release -o "$LOCAL_NUGET"
echo " Pakiet zapisany w $LOCAL_NUGET"
fi
done
# Dodajemy lokalny folder jako źródło NuGet dla kolejnych kroków
dotnet nuget add source "$LOCAL_NUGET" --name local-temp-nuget
echo "Lokalne źródło NuGet dodane: $LOCAL_NUGET"
ls -la "$LOCAL_NUGET"
deploy:
image: mcr.microsoft.com/dotnet/sdk:latest
environment:
BAGET_API_KEY:
from_secret: baget_api_key
BAGET_URL:
from_secret: baget_url
DEPLOY_SSH_KEY:
from_secret: deploy_ssh_key
commands:
- |
set -euo pipefail
echo "=== Informacje o projekcie (monorepo) ==="
echo "Repo: ${CI_REPO_NAME}"
echo "Commit: ${CI_COMMIT_SHA:0:8}"
echo "Branch/Tag: ${CI_COMMIT_REF}"
# Publikujemy wszystkie projekty (oprócz DataModel one już spakowane)
LOCAL_NUGET="/tmp/local-nuget"
for csproj in *.csproj; do
[ -f "$csproj" ] || continue
PROJECT_TYPE=$(dotnet msbuild "$csproj" -getProperty:ProjectType -noLogo 2>/dev/null || echo "Unknown")
DEPLOY_TO_CENTRAL=$(dotnet msbuild "$csproj" -getProperty:DeployToCentral -noLogo 2>/dev/null || echo "false")
case "$PROJECT_TYPE" in
DataModel)
# Opcjonalnie: publikuj do BaGet na koniec (po udanym buildzie całego solution)
if [[ -n "${BAGET_URL:-}" ]]; then
echo "→ Publikacja $PROJECT_TYPE do BaGet"
for pkg in "$LOCAL_NUGET"/*.nupkg; do
if [[ "$pkg" == *$(basename "$csproj" .csproj)* ]]; then
dotnet nuget push "$pkg" --api-key "$BAGET_API_KEY" --source "$BAGET_URL" --skip-duplicate
fi
done
fi
;;
ConsoleApp|Api|Blazor)
if [[ "$DEPLOY_TO_CENTRAL" != "true" ]]; then
echo "Projekt $PROJECT_TYPE: DeployToCentral=false pomijam"
continue
fi
echo "→ Publikacja $PROJECT_TYPE"
PUBLISH_ARGS="-c Release -o /tmp/publish-$(basename "$csproj" .csproj)"
if [[ "$PROJECT_TYPE" == "ConsoleApp" ]]; then
RID=$(dotnet msbuild "$csproj" -getProperty:RuntimeIdentifier -noLogo || echo "linux-x64")
SELF_CONTAINED=$(dotnet msbuild "$csproj" -getProperty:SelfContained -noLogo || echo "true")
SINGLE_FILE=$(dotnet msbuild "$csproj" -getProperty:PublishSingleFile -noLogo || echo "true")
PUBLISH_ARGS="$PUBLISH_ARGS --self-contained $SELF_CONTAINED -r $RID -p:PublishSingleFile=$SINGLE_FILE"
else
TRIMMED=$(dotnet msbuild "$csproj" -getProperty:PublishTrimmed -noLogo || echo "true")
PUBLISH_ARGS="$PUBLISH_ARGS -p:PublishTrimmed=$TRIMMED"
fi
dotnet publish "$csproj" --no-restore $PUBLISH_ARGS
# Deploy via SSH
mkdir -p ~/.ssh
echo "$DEPLOY_SSH_KEY" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan -H localhost >> ~/.ssh/known_hosts 2>/dev/null
TARGET_DIR="/opt/deployment/$PROJECT_TYPE/${CI_REPO_NAME}-$(basename "$csproj" .csproj)"
rsync -avz --delete "/tmp/publish-$(basename "$csproj" .csproj)/" " $(whoami)@localhost:$TARGET_DIR/"
ssh "$(whoami)@localhost" "find '$TARGET_DIR' -type f \\( -name '*.dll' -o -name '*.exe' -o -perm /111 \\) -exec chmod +x {} \\; || true"
echo "Deploy $PROJECT_TYPE zakończony → $TARGET_DIR"
;;
*)
echo "Projekt $(basename "$csproj") nieznany typ ($PROJECT_TYPE), pomijam"
;;
esac
done
echo "Cały pipeline monorepo zakończony pomyślnie."