From eb95d4197538179727ca945837de67f26cf5e3a1 Mon Sep 17 00:00:00 2001 From: trent Date: Wed, 14 Jan 2026 20:39:00 +0000 Subject: [PATCH] Update .woodpecker.yml --- .woodpecker.yml | 103 ++++++++++++++++++++++++++++++++---------------- 1 file changed, 68 insertions(+), 35 deletions(-) diff --git a/.woodpecker.yml b/.woodpecker.yml index 937acdc..bc53b90 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -1,18 +1,17 @@ skip_clone: true - when: event: pull_request action: - merge branch: master - steps: debug-location: image: alpine commands: - - pwd # gdzie aktualnie jesteśmy - - ls -la # co jest w bieżącym katalogu + - pwd + - ls -la - find /woodpecker -maxdepth 4 -type d 2>/dev/null + clone-manual: image: woodpeckerci/plugin-git settings: @@ -54,15 +53,14 @@ steps: --minimum-major-minor 2.0 \ --default-pre-release-identifiers alpha.0 \ --verbosity info) - + echo "Wersja: $MINVER_VERSION" - + mkdir -p nupkg echo "=== Pełniejsze fetch git (unshallow + tags) ===" git fetch --prune --unshallow || echo "Już full clone – OK" git fetch --tags - - # Diagnostyka – sprawdź czy tag jest widoczny + echo "=== Dostępne tagi ===" git tag -l echo "=== Aktualny commit i opis ===" @@ -81,10 +79,10 @@ steps: /p:PackageVersion=$MINVER_VERSION else PROJECT_NAME=$(basename "$csproj" .csproj) - echo "→ Pomijam $PROJECT_NAME – brak (nie jest to biblioteka NuGet)" + echo "→ Pomijam $PROJECT_NAME – brak " fi done - echo "=== Spakowane pakiety (.nupkg) ===" + echo "=== Spakowane pakiety ===" ls -la nupkg/ || echo "Brak spakowanych pakietów!" depends_on: [test] @@ -99,7 +97,6 @@ steps: cd "${CI_WORKSPACE}" 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 @@ -110,8 +107,6 @@ steps: 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")" @@ -120,35 +115,73 @@ steps: --api-key "$BAGETTER_API_KEY" \ --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 + containerize-apps: + image: woodpeckerci/plugin-docker-buildx:latest + settings: + registry: git.modwad.pl + username: + from_secret: gitea_registry_user + password: + from_secret: gitea_registry_token commands: - | set -euf cd "${CI_WORKSPACE}" - echo "=== Ponowny restore aplikacji (z najnowszymi pakietami z BaGetter) ===" - find . -name "*.csproj" -type f -exec dotnet restore "{}" \; - echo "=== Publish aplikacji ===" + + # Logowanie do rejestru + echo "${PLUGIN_PASSWORD}" | docker login "${PLUGIN_REGISTRY}" -u "${PLUGIN_USERNAME}" --password-stdin + + # Restore raz jeszcze – bo w tym kroku nie mamy zależności od wcześniejszego restore + dotnet restore + 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 "./publish-$PROJECT_NAME" - # ←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←← - # Tu wstaw swój kod deployu (rsync/ssh itp.) - # ←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←← - else - echo "Pomijam $PROJECT_NAME (nie jest to Api ani Blazor)" + PROJECT_NAME=$(basename "$csproj" .csproj) + + 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") + + if [ "$DEPLOY_TO_CENTRAL" != "true" ] || [[ "$PROJECT_TYPE" == "Unknown" || "$PROJECT_TYPE" == "DataModel" || "$PROJECT_TYPE" == "LinuxLocal" ]]; then + echo "Pomijam konteneryzację $PROJECT_NAME ($PROJECT_TYPE)" + continue fi + + IMAGE_NAME="projekty/${PROJECT_NAME,,}" # np. projekty/customerapi + FULL_IMAGE="${PLUGIN_REGISTRY}/${IMAGE_NAME}" + + # Generujemy tymczasowy Dockerfile + cat <<'EOF' > "${PROJECT_DIR}/Dockerfile.temp" +FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base +WORKDIR /app +EXPOSE 8080 + +FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build +WORKDIR /src +COPY . . +RUN dotnet restore "${PROJECT_NAME}.csproj" +RUN dotnet publish "${PROJECT_NAME}.csproj" -c Release -o /app/publish /p:UseAppHost=false + +FROM base AS final +WORKDIR /app +COPY --from=build /app/publish . +ENV ASPNETCORE_URLS=http://+:8080 +ENTRYPOINT ["dotnet", "${PROJECT_NAME}.dll"] +EOF + + echo "Buduję → ${FULL_IMAGE}:${CI_COMMIT_SHA}" + docker buildx build --platform linux/amd64 \ + -t "${FULL_IMAGE}:${CI_COMMIT_SHA}" \ + -t "${FULL_IMAGE}:latest" \ + -f "${PROJECT_DIR}/Dockerfile.temp" \ + "${PROJECT_DIR}" + + docker push "${FULL_IMAGE}:${CI_COMMIT_SHA}" + docker push "${FULL_IMAGE}:latest" + + rm -f "${PROJECT_DIR}/Dockerfile.temp" + + echo "Opublikowano: ${FULL_IMAGE}:latest" done - echo "Pipeline zakończony pomyślnie!" - depends_on: [publish-datamodels-to-baget] + depends_on: [publish-datamodels-to-baget] \ No newline at end of file -- 2.49.1