diff --git a/.woodpecker.yml b/.woodpecker.yml index 4cbe6c1..ff6414f 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -108,9 +108,28 @@ steps: --skip-duplicate done depends_on: [pack-datamodels] + select-projects-for-container: + image: mcr.microsoft.com/dotnet/sdk:latest + commands: + - | + set -euf + cd "${CI_WORKSPACE}" + > projects-to-build.txt + find . -name "*.csproj" -type f | while read csproj; do + PROJECT_TYPE=$(dotnet msbuild "$csproj" -getProperty:ProjectType -noLogo 2>/dev/null || echo "Unknown") + if [[ "$PROJECT_TYPE" == "Unknown" || "$PROJECT_TYPE" == "DataModel" || "$PROJECT_TYPE" == "LinuxLocal" ]]; then + : + else + PROJECT_NAME=$(basename "$csproj" .csproj) + PROJECT_DIR=$(dirname "$csproj") + echo "$PROJECT_DIR|$PROJECT_NAME" >> projects-to-build.txt + fi + done + depends_on: [publish-datamodels-to-baget] containerize-apps: image: woodpeckerci/plugin-docker-buildx:latest environment: + DOCKER_HOST: unix:///var/run/docker.sock GITEA_USER: from_secret: gitea_registry_user GITEA_TOKEN: @@ -119,35 +138,35 @@ steps: - | set -euf cd "${CI_WORKSPACE}" + echo "DEBUG: DOCKER_HOST = $DOCKER_HOST" + echo "DEBUG: ls /var/run/docker.sock:" + ls -l /var/run/docker.sock || echo "Socket NIE widoczny" 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 - 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 + if [ ! -s projects-to-build.txt ]; then + echo "Brak projektów do zbudowania" + exit 0 + fi + while IFS='|' read -r PROJECT_DIR PROJECT_NAME; do + if [ -z "$PROJECT_NAME" ]; then 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"] - 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}" \ @@ -158,5 +177,5 @@ steps: 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 + done < projects-to-build.txt + depends_on: [select-projects-for-container] \ No newline at end of file