diff --git a/.woodpecker.yml b/.woodpecker.yml index 2035918..75fdbd0 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -1,9 +1,11 @@ skip_clone: true + when: event: pull_request action: - merge branch: master + steps: debug-location: image: alpine @@ -11,12 +13,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 +30,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 +40,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 +84,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 +115,7 @@ steps: --skip-duplicate done depends_on: [pack-datamodels] + prepare-for-container: image: mcr.microsoft.com/dotnet/sdk:latest commands: @@ -117,6 +125,7 @@ steps: dotnet restore echo "Przygotowanie do konteneryzacji wykonane (restore zrobione)" depends_on: [publish-datamodels-to-baget] + containerize-apps: image: woodpeckerci/plugin-docker-buildx:latest environment: @@ -128,45 +137,59 @@ steps: - | set -euf cd "${CI_WORKSPACE}" + echo "DEBUG: Użytkownik = '$GITEA_USER'" - echo "DEBUG: Token (pierwsze 4 znaki) = $GITEA_TOKEN..." + echo "DEBUG: Token (pierwsze 4 znaki) = ${GITEA_TOKEN:0:4}..." + echo "$GITEA_TOKEN" | docker login git.modwad.pl -u "$GITEA_USER" --password-stdin 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 + + # bezpieczniejsze pobieranie właściwości (bez errorów w logach) + 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 + IMAGE_NAME="trent/${PROJECT_NAME,,}" FULL_IMAGE="git.modwad.pl/${IMAGE_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"] + + 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"] 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 depends_on: [prepare-for-container] \ No newline at end of file