diff --git a/.woodpecker.yml b/.woodpecker.yml new file mode 100644 index 0000000..2b5c959 --- /dev/null +++ b/.woodpecker.yml @@ -0,0 +1,134 @@ +skip_clone: true + +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: + - | + set -euf + CODE_DIR="/woodpecker/src/srv51.mikr.us/git/FA/FA_WEB" + cd "$CODE_DIR" + echo "=== Restore wszystkich projektów ===" + find . -name "*.csproj" -type f -exec dotnet restore "{}" \; + + test: + image: mcr.microsoft.com/dotnet/sdk:latest + commands: + - | + set -euf + CODE_DIR="/woodpecker/src/srv51.mikr.us/git/FA/FA_WEB" + cd "$CODE_DIR" + echo "=== Uruchamianie testów ===" + dotnet test --no-restore --configuration Release --logger "trx" + depends_on: [restore] + + pack-datamodels: + image: mcr.microsoft.com/dotnet/sdk:latest + commands: + - | + set -euf + CODE_DIR="/woodpecker/src/srv51.mikr.us/git/FA/FA_WEB" + cd "$CODE_DIR" + echo "=== Diagnostyka projektów ===" + find . -name "*.csproj" -type f | sort + mkdir -p nupkg + echo "=== Pakowanie projektów DataModel (wykrywane po obecności ) ===" + find . -name "*.csproj" -type f | while read csproj; do + if grep -q '' "$csproj"; then + PROJECT_NAME=$(basename "$csproj" .csproj) + echo "→ Pakuję $PROJECT_NAME ($csproj)" + dotnet pack "$csproj" --configuration Release -o "$CODE_DIR/nupkg" + else + PROJECT_NAME=$(basename "$csproj" .csproj) + echo "→ Pomijam $PROJECT_NAME – brak (nie jest to biblioteka NuGet)" + fi + done + echo "=== Spakowane pakiety (.nupkg) ===" + ls -la nupkg/ || echo "Brak spakowanych pakietów!" + depends_on: [test] + + publish-datamodels-to-baget: + image: mcr.microsoft.com/dotnet/sdk:latest + environment: + BAGETTER_API_KEY: + from_secret: baget_api_key + commands: + - | + set -euf + CODE_DIR="/woodpecker/src/srv51.mikr.us/git/FA/FA_WEB" + cd "$CODE_DIR" + + echo "=== Test połączenia z BaGetter ===" + curl -f http://baget:80/v3/index.json || echo "Nie można połączyć się z BaGetter!" + + # Tworzymy minimalny NuGet.Config tylko po to, żeby odblokować HTTP dla nazwanego źródła + cat < NuGet.Config + + + + + + + + + EOF + + echo "=== Użyty NuGet.Config (tylko do odblokowania HTTP) ===" + cat NuGet.Config + + echo "=== Publikacja pakietów do BaGetter ===" + find ./nupkg -name "*.nupkg" -type f | while read pkg; do + echo "→ Push $(basename "$pkg")" + dotnet nuget push "$pkg" \ + --source "BaGet" \ + --api-key "hfsa853nc9vfap53285ybndfahi58325hie242dsafa954" \ + --skip-duplicate + done + + echo "Wszystkie pakiety DataModel opublikowane w BaGetter!" + depends_on: [pack-datamodels] + + build-and-publish-apps: + image: mcr.microsoft.com/dotnet/sdk:latest + environment: + DEPLOY_SSH_KEY: + from_secret: deploy_ssh_key + commands: + - | + set -euf + CODE_DIR="/woodpecker/src/srv51.mikr.us/git/FA/FA_WEB" + cd "$CODE_DIR" + echo "=== Ponowny restore aplikacji (z najnowszymi pakietami z BaGetter) ===" + find . -name "*.csproj" -type f -exec dotnet restore "{}" \; + echo "=== Publish aplikacji ===" + find . -name "*.csproj" -type f | while read csproj; do + PROJECT_NAME=$(basename "$csproj" .csproj) + PROJECT_DIR=$(dirname "$csproj") + if [[ "$PROJECT_NAME" == *"Api"* ]] || [[ "$PROJECT_NAME" == *"Blazor"* ]] || [[ "$PROJECT_DIR" == *"/Api/"* ]] || [[ "$PROJECT_DIR" == *"/Blazor/"* ]]; then + DEPLOY_TO_CENTRAL=$(dotnet msbuild "$csproj" -getProperty:DeployToCentral -noLogo 2>/dev/null || echo "false") + if [ "$DEPLOY_TO_CENTRAL" != "true" ]; then + echo "Pomijam $PROJECT_NAME (DeployToCentral ≠ true)" + continue + fi + echo "→ Publish $PROJECT_NAME ($csproj)" + dotnet publish "$csproj" --no-restore -c Release -o "$CODE_DIR/publish-$PROJECT_NAME" + # ←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←← + # Tu wstaw swój kod deployu (rsync/ssh itp.) + # ←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←← + else + echo "Pomijam $PROJECT_NAME (nie jest to Api ani Blazor)" + fi + done + echo "Pipeline zakończony pomyślnie!" + depends_on: [publish-datamodels-to-baget] \ No newline at end of file