Files
FA_WEB/.woodpecker.yml
trent 59415520fe
All checks were successful
ci/woodpecker/pr/woodpecker Pipeline was successful
Update .woodpecker.yml
2026-01-15 14:07:58 +00:00

252 lines
8.7 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
skip_clone: true
when:
event: pull_request
action:
- merge
branch: master
steps:
debug-location:
image: alpine
commands:
- 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:
- |
set -euf
cd "${CI_WORKSPACE}"
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:
- |
set -euf
cd "${CI_WORKSPACE}"
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:
- |
set -euf
cd "${CI_WORKSPACE}"
echo "=== Instalacja MinVer CLI ==="
dotnet tool install --tool-path /tmp/minver minver-cli
echo "=== Obliczona wersja przez MinVer ==="
MINVER_VERSION=$(/tmp/minver/minver \
--auto-increment patch \
--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
echo "=== Dostępne tagi ==="
git tag -l
echo "=== Aktualny commit i opis ==="
git describe --tags --always --dirty
echo "=== Diagnostyka projektów ==="
find . -name "*.csproj" -type f | sort
mkdir -p nupkg
echo "=== Pakowanie projektów DataModel (wykrywane po obecności <PackageId>) ==="
find . -name "*.csproj" -type f | while read csproj; do
if grep -q '<PackageId>' "$csproj"; then
PROJECT_NAME=$(basename "$csproj" .csproj)
echo "→ Pakuję $PROJECT_NAME ($csproj)"
dotnet pack "$csproj" \
--configuration Release \
-o "./nupkg" \
/p:PackageVersion=$MINVER_VERSION
else
PROJECT_NAME=$(basename "$csproj" .csproj)
echo "→ Pomijam $PROJECT_NAME brak <PackageId>"
fi
done
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:
BAGETTER_API_KEY:
from_secret: baget_api_key
commands:
- |
set -euf
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!"
cat <<EOF > NuGet.Config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<clear />
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
<add key="BaGet" value="http://baget:80/v3/index.json" allowInsecureConnections="true" />
</packageSources>
</configuration>
EOF
echo "=== Publikacja pakietów do BaGetter ==="
find ./nupkg -name "*.nupkg" -type f | while read pkg; do
echo "→ Push $(basename "$pkg")"
dotnet nuget push "$pkg" \
--source "BaGet" \
--api-key "$BAGETTER_API_KEY" \
--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
echo "=== Debugowanie wszystkich projektów ==="
find . -name "*.csproj" -type f | while read csproj; do
PROJECT_NAME=$(basename "$csproj" .csproj)
echo ""
echo "=== Sprawdzam: $PROJECT_NAME ==="
echo "Plik: $csproj"
# Sprawdź czy ProjectType jest w pliku
grep -i "ProjectType" "$csproj" || echo "Brak ProjectType w pliku!"
# Pobierz ProjectType przez MSBuild
PROJECT_TYPE=$(dotnet msbuild "$csproj" -getProperty:ProjectType -noLogo 2>/dev/null || echo "Unknown")
echo "MSBuild zwrócił: '$PROJECT_TYPE'"
if [[ "$PROJECT_TYPE" == "Linux" || "$PROJECT_TYPE" == "Api" || "$PROJECT_TYPE" == "ServerProcess" || "$PROJECT_TYPE" == "Blazor" ]]; then
PROJECT_DIR=$(dirname "$csproj")
echo "✓ DODAJĘ do buildu"
echo "$PROJECT_DIR|$PROJECT_NAME" >> projects-to-build.txt
else
echo "✗ POMIJAM (typ niepasujący)"
fi
done
echo ""
echo "=== PODSUMOWANIE ==="
if [ -s projects-to-build.txt ]; then
echo "Znalezione projekty:"
cat projects-to-build.txt
echo "Łącznie: $(wc -l < projects-to-build.txt)"
else
echo "BRAK PROJEKTÓW DO BUDOWY!"
fi
depends_on: [publish-datamodels-to-baget]
containerize-apps:
image: docker:27-cli
environment:
GITEA_USER:
from_secret: gitea_registry_user
GITEA_TOKEN:
from_secret: gitea_registry_token
commands:
- |
set -euf
cd "${CI_WORKSPACE}"
echo "$GITEA_TOKEN" | docker login git.modwad.pl -u "$GITEA_USER" --password-stdin
if [ ! -s projects-to-build.txt ]; then
echo "Brak projektow"
exit 0
fi
rm -f NuGet.Config
cat > NuGet.Config <<EOF
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<clear />
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
<add key="BaGet" value="http://127.0.0.1:8080/v3/index.json" />
</packageSources>
</configuration>
EOF
cat projects-to-build.txt | while IFS='|' read -r PDIR PNAME; do
PDIR=$(echo "$PDIR" | xargs)
PNAME=$(echo "$PNAME" | xargs)
test -z "$PNAME" && continue
test ! -d "$PDIR" && continue
echo -n "git.modwad.pl/fa/" > /tmp/tag.txt
echo "$PNAME" | tr 'A-Z' 'a-z' | tr -d '\n' >> /tmp/tag.txt
echo "$PNAME" > /tmp/pname.txt
echo "$PDIR" | sed 's|^\./||' > /tmp/pdir.txt
cat > "Dockerfile.temp" <<'ENDOFDOCKERFILE'
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 "%%PROJECTDIR%%/%%PROJECTNAME%%.csproj"
RUN dotnet publish "%%PROJECTDIR%%/%%PROJECTNAME%%.csproj" -c Release -o /app/publish /p:UseAppHost=false --no-restore
FROM base AS final
WORKDIR /app
COPY --from=build /app/publish .
ENV ASPNETCORE_URLS=http://+:8080
ENTRYPOINT ["dotnet", "%%PROJECTNAME%%.dll"]
ENDOFDOCKERFILE
REAL_PNAME=$(cat /tmp/pname.txt)
REAL_PDIR=$(cat /tmp/pdir.txt)
sed "s|%%PROJECTNAME%%|$REAL_PNAME|g; s|%%PROJECTDIR%%|$REAL_PDIR|g" "Dockerfile.temp" > "Dockerfile.final"
echo "=== Budowanie obrazu ==="
DOCKER_BUILDKIT=0 docker build \
--network=host \
-t "$(cat /tmp/tag.txt):${CI_COMMIT_SHA}" \
-t "$(cat /tmp/tag.txt):latest" \
-f "Dockerfile.final" \
.
echo "=== Pushing SHA tag ==="
docker push "$(cat /tmp/tag.txt):${CI_COMMIT_SHA}"
echo "=== Pushing latest tag ==="
docker push "$(cat /tmp/tag.txt):latest"
echo "=== SUCCESS: $(cat /tmp/tag.txt) ==="
rm -f "Dockerfile.temp" "Dockerfile.final"
done
echo "=== WSZYSTKIE PROJEKTY ZAKONCZONE ==="
depends_on: [select-projects-for-container]
cleanup-docker:
image: docker:27-cli
commands:
- |
echo "=== Czyszczenie starych obrazów ==="
docker image prune -af --filter "until=24h"
echo "=== Czyszczenie nieużywanych kontenerów ==="
docker container prune -f
echo "=== Czyszczenie build cache ==="
docker builder prune -af --filter "until=24h"
echo "=== Status po czyszczeniu ==="
docker system df
depends_on: [containerize-apps]
when:
status: [success, failure]