Warehouses #1

Merged
trent merged 159 commits from Warehouses into master 2026-01-10 20:24:17 +00:00
Showing only changes of commit 398e0d5796 - Show all commits

View File

@@ -1,50 +1,52 @@
# .woodpecker.yml deploy via SSH (bez volumes i bez Trusted)
skip_clone: true
# .woodpecker.yml monorepo .NET z poprawną kolejnością budowania
when:
event: [push, tag, manual]
branch: [master]
steps:
clone-manual:
image: woodpeckerci/plugin-git
settings:
remote: http://gitea:3000/FA/FA_WEB.git
branch: master
depth: 1
restore:
image: mcr.microsoft.com/dotnet/sdk:latest
commands:
- dotnet restore
restore:
image: mcr.microsoft.com/dotnet/sdk:latest
environment:
BAGET_URL:
from_secret: baget_url # np. https://twoj-serwer.pl/baget/v3/index.json
BAGET_API_KEY: # opcjonalnie, jeśli BaGet wymaga klucza do pobierania
from_secret: baget_api_key
commands:
- |
# Dodaj BaGet jako dodatkowe źródło NuGet
dotnet nuget add source "$BAGET_URL" --name internal-baget
# Jeśli BaGet wymaga autentykacji do pobierania (rzadkie, ale możliwe)
# dotnet nuget update source internal-baget --username anything --password "$BAGET_API_KEY" --store-password-in-clear-text
dotnet restore
test:
image: mcr.microsoft.com/dotnet/sdk:latest
commands:
- dotnet test --no-restore --configuration Release --logger "trx" --results-directory /tmp/test-results
- dotnet test --no-restore --configuration Release --logger "trx"
build:
build-and-pack-datamodels:
image: mcr.microsoft.com/dotnet/sdk:latest
commands:
- dotnet build --no-restore --configuration Release
- |
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
@@ -59,71 +61,73 @@ steps:
- |
set -euo pipefail
echo "=== Informacje o projekcie ==="
echo "=== Informacje o projekcie (monorepo) ==="
echo "Repo: ${CI_REPO_NAME}"
echo "Commit: ${CI_COMMIT_SHA:0:8}"
echo "Branch/Tag: ${CI_COMMIT_REF}"
echo "SDK version: $(dotnet --version)"
PROJECT_TYPE=$(dotnet msbuild -getProperty:ProjectType -noLogo 2>/dev/null || echo "Unknown")
DEPLOY_TO_CENTRAL=$(dotnet msbuild -getProperty:DeployToCentral -noLogo 2>/dev/null || echo "false")
# Publikujemy wszystkie projekty (oprócz DataModel one już spakowane)
LOCAL_NUGET="/tmp/local-nuget"
echo "ProjectType: $PROJECT_TYPE"
echo "DeployToCentral: $DEPLOY_TO_CENTRAL"
for csproj in *.csproj; do
[ -f "$csproj" ] || continue
case "$PROJECT_TYPE" in
DataModel)
echo "→ Pakowanie i publikacja do BaGet"
dotnet pack --no-build --configuration Release -o /tmp/nupkg
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")
for pkg in /tmp/nupkg/*.nupkg; do
dotnet nuget push "$pkg" \
--api-key "${BAGET_API_KEY}" \
--source "${BAGET_URL}" \
--skip-duplicate
done
echo "Publikacja NuGet zakończona."
;;
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 "DeployToCentral=false pomijam deploy."
exit 0
fi
ConsoleApp|Api|Blazor)
if [[ "$DEPLOY_TO_CENTRAL" != "true" ]]; then
echo "Projekt $PROJECT_TYPE: DeployToCentral=false pomijam"
continue
fi
echo "→ Publikacja $PROJECT_TYPE"
echo "→ Publikacja $PROJECT_TYPE"
PUBLISH_ARGS="--no-build -c Release -o /tmp/publish"
PUBLISH_ARGS="-c Release -o /tmp/publish-$(basename "$csproj" .csproj)"
if [[ "$PROJECT_TYPE" == "ConsoleApp" ]]; then
RID=$(dotnet msbuild -getProperty:RuntimeIdentifier -noLogo 2>/dev/null || echo "linux-x64")
SELF_CONTAINED=$(dotnet msbuild -getProperty:SelfContained -noLogo 2>/dev/null || echo "true")
SINGLE_FILE=$(dotnet msbuild -getProperty:PublishSingleFile -noLogo 2>/dev/null || echo "true")
PUBLISH_ARGS="$PUBLISH_ARGS --self-contained $SELF_CONTAINED -r $RID -p:PublishSingleFile=$SINGLE_FILE"
else
TRIMMED=$(dotnet msbuild -getProperty:PublishTrimmed -noLogo 2>/dev/null || echo "true")
PUBLISH_ARGS="$PUBLISH_ARGS -p:PublishTrimmed=$TRIMMED"
fi
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 $PUBLISH_ARGS
dotnet publish "$csproj" --no-restore $PUBLISH_ARGS
echo "Przygotowanie SSH do deployu na localhost"
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
# 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}"
echo "Deploy via rsync do $TARGET_DIR"
TARGET_DIR="/opt/deployment/$PROJECT_TYPE/${CI_REPO_NAME}-$(basename "$csproj" .csproj)"
rsync -avz --delete "/tmp/publish-$(basename "$csproj" .csproj)/" " $(whoami)@localhost:$TARGET_DIR/"
rsync -avz --delete /tmp/publish/ "$(whoami)@localhost:$TARGET_DIR/"
ssh "$(whoami)@localhost" "find '$TARGET_DIR' -type f \\( -name '*.dll' -o -name '*.exe' -o -perm /111 \\) -exec chmod +x {} \\; || true"
ssh "$(whoami)@localhost" "find '$TARGET_DIR' -type f \\( -name '*.dll' -o -name '*.exe' -o -perm /111 \\) -exec chmod +x {} \\; 2>/dev/null || true"
echo "Deploy $PROJECT_TYPE zakończony → $TARGET_DIR"
;;
echo "Deploy $PROJECT_TYPE zakończony pomyślnie → $TARGET_DIR"
;;
*)
echo "Projekt $(basename "$csproj") nieznany typ ($PROJECT_TYPE), pomijam"
;;
esac
done
*)
echo "Nieznany ProjectType brak akcji."
;;
esac
echo "Cały pipeline monorepo zakończony pomyślnie."