kind: template name: dotnet-build-publish variables: - DOTNET_VERSION: "8.0" clone: disable: true steps: clone-manual: image: woodpeckerci/plugin-git settings: remote: http://gitea:3000/FA/FA_WEB.git # wewnętrzny URL, agent widzi gitea po nazwie serwisu! branch: master depth: 1 # 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 - | 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: 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: docker:latest commands: - source $CI_WORKSPACE/.env - | 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: 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