From 4e94cccc889a643b9b38ccf82546c1999ca5b41c Mon Sep 17 00:00:00 2001 From: trent Date: Fri, 2 Jan 2026 13:20:39 +0100 Subject: [PATCH] Update .woodpecker.yml --- .woodpecker.yml | 147 +++++++++++++++++++++++++++++++++++------------- 1 file changed, 107 insertions(+), 40 deletions(-) diff --git a/.woodpecker.yml b/.woodpecker.yml index 5e3e097..4bcf387 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -1,50 +1,117 @@ +kind: template +name: dotnet-build-publish + +variables: + - DOTNET_VERSION: "8.0" + steps: - restore: - image: mcr.microsoft.com/dotnet/sdk:8.0 - commands: - - dotnet restore --no-cache --force - build: - image: mcr.microsoft.com/dotnet/sdk:8.0 - commands: - - dotnet build --no-restore -c Release - depends_on: - - restore - - test: - image: mcr.microsoft.com/dotnet/sdk:8.0 - commands: - - dotnet test --no-build -c Release --logger "trx" --results-directory ./test-results - depends_on: - - build - - pack-nuget: - image: mcr.microsoft.com/dotnet/sdk:8.0 + # Krok 1: Detekcja, które projekty zmieniły się w tym commicie + detect-changed-projects: + image: alpine/git:latest commands: + - echo "Pobieram listę zmienionych plików..." + - git fetch origin $CI_COMMIT_BEFORE $CI_COMMIT_SHA - | - for proj in $(find . -name "*DataModel.csproj"); do - echo "Packaging $proj" - dotnet pack "$proj" --no-build -c Release -o ./nuget-packages - done + CHANGED_FILES=$(git diff --name-only $CI_COMMIT_BEFORE $CI_COMMIT_SHA || echo "") + echo "Zmienione pliki:" + echo "$CHANGED_FILES" + + # Resetujemy env + > $CI_WORKSPACE/.env + + # Sprawdzamy po folderach / konwencjach + if echo "$CHANGED_FILES" | grep -Eq "^(DataModel|src/DataModel|Models)/"; then + echo "BUILD_DATAMODEL=true" >> $CI_WORKSPACE/.env + echo "Zmieniono projekt DataModel" + fi + + if echo "$CHANGED_FILES" | grep -Eq "^(Api|src/Api|Backend)/"; then + echo "BUILD_API=true" >> $CI_WORKSPACE/.env + echo "Zmieniono projekt API" + fi + + if echo "$CHANGED_FILES" | grep -Eq "^(Web|Blazor|Frontend|src/Blazor)/"; then + echo "BUILD_BLAZOR=true" >> $CI_WORKSPACE/.env + echo "Zmieniono projekt Blazor/Web" + fi + + # Jeśli nic nie zmieniono w projektach – kończymy szybko + if ! grep -q "BUILD_" $CI_WORKSPACE/.env; then + echo "Brak zmian w projektach .NET – pomijam build." + exit 0 + fi + + cat $CI_WORKSPACE/.env + + # Krok 2: Restore (wspólny) + restore: + image: mcr.microsoft.com/dotnet/sdk:${DOTNET_VERSION} + commands: + - dotnet nuget add source "http://srv51.mikr.us:20120/v3/index.json" --name baget || true + - dotnet restore --locked-mode + + # Krok 3: Testy (zawsze jeśli coś się zmieniło) + test: + image: mcr.microsoft.com/dotnet/sdk:${DOTNET_VERSION} + commands: + - dotnet test --no-restore -c Release when: - branch: ${CI_REPO_DEFAULT_BRANCH} - event: push - path: - include: - - "**/*DataModel.csproj" + event: [push, pull_request, tag] + + # Krok 4: Build & Publish – osobne kroki dla każdego typu + publish-datamodel: + image: mcr.microsoft.com/dotnet/sdk:${DOTNET_VERSION} + commands: + - source $CI_WORKSPACE/.env + - | + if [ "$BUILD_DATAMODEL" != "true" ]; then + echo "Pomijam publikację DataModel – brak zmian" + exit 0 + fi + - | + VERSION=${CI_COMMIT_TAG:-$(git rev-parse --short HEAD)} + # Zakładam, że projekt DataModel ma .csproj w folderze DataModel/ + dotnet pack DataModel/*.csproj --no-restore --no-build -c Release -o /workspace/nupkg /p:Version=$VERSION + for pkg in /workspace/nupkg/*.nupkg; do + dotnet nuget push "$pkg" --source baget --api-key ${BAGET_API_KEY} --skip-duplicate + done + secrets: [baget_api_key] + when: + event: [push, tag] + branch: main publish-api: - image: mcr.microsoft.com/dotnet/sdk:8.0 + image: docker:latest commands: + - source $CI_WORKSPACE/.env - | - for proj in $(find . -name "*API.csproj"); do - proj_name=$(basename "$proj" .csproj) - echo "Publishing $proj" - dotnet publish "$$ proj" --no-build -c Release -o ./publish/ $${proj_name} - done + if [ "$BUILD_API" != "true" ]; then + echo "Pomijam budowanie API – brak zmian" + exit 0 + fi + - | + cd Api # lub ścieżka do Dockerfile + docker build -t myregistry/${CI_REPO_OWNER}/${CI_REPO_NAME}-api:${CI_COMMIT_TAG:-latest} . + echo ${DOCKER_PASSWORD} | docker login myregistry -u ${DOCKER_USERNAME} --password-stdin + docker push myregistry/${CI_REPO_OWNER}/${CI_REPO_NAME}-api:${CI_COMMIT_TAG:-latest} + secrets: [docker_username, docker_password] when: - branch: ${CI_REPO_DEFAULT_BRANCH} - event: push - path: - include: - - "**/*API.csproj" \ No newline at end of file + event: [push, tag] + branch: main + + publish-blazor: + image: mcr.microsoft.com/dotnet/sdk:${DOTNET_VERSION} + commands: + - source $CI_WORKSPACE/.env + - | + if [ "$BUILD_BLAZOR" != "true" ]; then + echo "Pomijam publikację Blazor – brak zmian" + exit 0 + fi + - dotnet publish Web/*.csproj --no-restore -c Release -o /workspace/publish + - echo "Pliki Blazor gotowe do deployu w /workspace/publish" + # Tu później możesz dodać rsync, az copy, itp. + when: + event: [push, tag] + branch: main \ No newline at end of file