diff --git a/.woodpecker.yml b/.woodpecker.yml index d08c34a..b3ee2af 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -11,12 +11,14 @@ steps: - pwd - ls -la - find /woodpecker -maxdepth 4 -type d 2>/dev/null + 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: @@ -26,6 +28,7 @@ steps: echo "Aktualna ścieżka: $(pwd)" echo "=== Restore wszystkich projektów ===" find . -name "*.csproj" -type f -exec dotnet restore "{}" \; + test: image: mcr.microsoft.com/dotnet/sdk:latest commands: @@ -35,6 +38,7 @@ steps: 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: @@ -78,6 +82,7 @@ steps: echo "=== Spakowane pakiety ===" ls -la nupkg/ || echo "Brak spakowanych pakietów!" depends_on: [test] + publish-datamodels-to-baget: image: mcr.microsoft.com/dotnet/sdk:latest environment: @@ -108,6 +113,18 @@ steps: --skip-duplicate done depends_on: [pack-datamodels] + + prepare-restore-for-docker: + image: mcr.microsoft.com/dotnet/sdk:latest + commands: + - | + set -euf + cd "${CI_WORKSPACE}" + echo "=== Przygotowanie do budowania obrazów ===" + dotnet restore + echo "Restore dla projektów zakończone" + depends_on: [publish-datamodels-to-baget] + containerize-apps: image: woodpeckerci/plugin-docker-buildx:latest environment: @@ -118,46 +135,64 @@ steps: commands: - | set -euf + cd "${CI_WORKSPACE}" + echo "DEBUG: Użytkownik = '$GITEA_USER'" - echo "DEBUG: Token (pierwsze 4 znaki) = $GITEA_TOKEN..." - echo "$GITEA_TOKEN" | docker login git.modwad.pl -u "$GITEA_USER" --password-stdin - dotnet restore + echo "DEBUG: Token (pierwsze 4 znaki) = ${GITEA_TOKEN:0:4}..." + + echo "$GITEA_TOKEN" | docker login git.modwad.pl -u "$GITEA_USER" --password-stdin || { + echo "Błąd logowania do rejestru" + exit 1 + } + find . -name "*.csproj" -type f | while read csproj; do PROJECT_DIR=$(dirname "$csproj") 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 $PROJECT_NAME ($PROJECT_TYPE)" - continue - fi + + # Tymczasowo pomijamy projekty, które nie mają iść do centralnego rejestru + # Jeśli masz dokładne kryterium → możesz dodać grep po true + # Na razie prosty filtr po nazwie (dostosuj do swoich konwencji) + case "$PROJECT_NAME" in + *DataModel*|*LinuxLocal*) + echo "Pomijam $PROJECT_NAME (DataModel / LinuxLocal)" + continue ;; + esac + IMAGE_NAME="trent/${PROJECT_NAME,,}" FULL_IMAGE="git.modwad.pl/${IMAGE_NAME}" + + echo "Przygotowuję Dockerfile dla ${PROJECT_NAME}" + cat > "${PROJECT_DIR}/Dockerfile.temp" <<-EOF - 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"] + 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" \ + --push \ "${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 - depends_on: [publish-datamodels-to-baget] \ No newline at end of file + depends_on: [prepare-restore-for-docker] \ No newline at end of file