name: Build, Test & Publish DataModels + Apps on: push: branches: - master create: # nowe tagi tags: - 'v*' pull_request: types: [opened, synchronize, reopened, closed] workflow_dispatch: # ręczne uruchomienie jobs: restore-and-test: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 with: fetch-depth: 0 # potrzebne do MinVer i git describe repository: FA/FA_WEB # ← nazwa repozytorium (organizacja/repo) ref: ${{ github.ref }} # lub ${{ gitea.ref }} – w Gitea obie działają # Najważniejsze – nadpisz domyślny URL url: http://srv51.mikr.us:20120/git/FA/FA_WEB.git - name: Setup .NET uses: actions/setup-dotnet@v4 with: dotnet-version: '8.0.x' # zmień na swoją wersję jeśli inna - name: Restore all projects run: | echo "=== Restore wszystkich projektów ===" find . -name "*.csproj" -type f -exec dotnet restore "{}" \; - name: Run tests run: | echo "=== Uruchamianie testów ===" dotnet test --no-restore --configuration Release --logger "trx" pack-datamodels: runs-on: ubuntu-latest needs: restore-and-test steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - uses: actions/setup-dotnet@v4 with: dotnet-version: '8.0.x' - name: Install MinVer CLI run: dotnet tool install --global minver-cli - name: Pack DataModel projects env: MINVER_AUTO_INCREMENT: patch MINVER_MINIMUM_MAJOR_MINOR: 2.0 MINVER_DEFAULT_PRE_RELEASE_IDENTIFIERS: alpha.0 run: | echo "=== Obliczona wersja przez MinVer ===" MINVER_VERSION=$(minver --verbosity detailed) echo "Wersja: $MINVER_VERSION" mkdir -p nupkg echo "=== Pełniejsze fetch git (tags) ===" git fetch --prune --tags --force echo "=== Dostępne tagi ===" git tag -l echo "=== Aktualny opis commitu ===" git describe --tags --always --dirty || echo "Brak tagów" echo "=== Pakowanie projektów z PackageId ===" find . -name "*.csproj" -type f | while read -r csproj; do if grep -q '' "$csproj"; then PROJECT_NAME=$(basename "$csproj" .csproj) echo "→ Pakuję $PROJECT_NAME" dotnet pack "$csproj" \ --no-restore \ --configuration Release \ -o "./nupkg" \ /p:PackageVersion="$MINVER_VERSION" else echo "→ Pomijam $(basename "$csproj" .csproj) – brak PackageId" fi done ls -la nupkg/ || echo "Brak wygenerowanych pakietów" - name: Upload NuGet packages as artifact uses: actions/upload-artifact@v4 with: name: nuget-packages path: nupkg/*.nupkg retention-days: 3 publish-to-baget: runs-on: ubuntu-latest needs: pack-datamodels steps: - uses: actions/checkout@v4 # potrzebne tylko jeśli chcesz logować coś z repo - uses: actions/setup-dotnet@v4 with: dotnet-version: '8.0.x' - name: Download built packages uses: actions/download-artifact@v4 with: name: nuget-packages path: nupkg/ - name: Create custom NuGet.config (allow HTTP) run: | cat > NuGet.Config < EOF - name: Publish packages to BaGet env: BAGET_API_KEY: ${{ secrets.BAGET_API_KEY }} run: | echo "=== Publikacja do BaGet ===" find nupkg -name "*.nupkg" -type f | while read -r pkg; do echo "→ Push $(basename "$pkg")" dotnet nuget push "$pkg" \ --source "BaGet" \ --api-key "$BAGET_API_KEY" \ --skip-duplicate done build-and-publish-apps: runs-on: ubuntu-latest needs: publish-to-baget steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - uses: actions/setup-dotnet@v4 with: dotnet-version: '8.0.x' - name: Restore (with latest DataModels) run: | echo "=== Restore z najnowszymi pakietami z BaGet ===" dotnet restore - name: Publish selected applications run: | echo "=== Publish aplikacji z DeployToCentral ===" find . -name "*.csproj" -type f | while read -r 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 "→ Publishing $PROJECT_NAME" dotnet publish "$csproj" \ --no-restore \ --configuration Release \ -o "./publish-$PROJECT_NAME" # Tutaj możesz dodać deployment (np. rsync, scp, docker build+push itp.) # Przykład (zakomentowany): # rsync -avz --delete ./publish-$PROJECT_NAME/ user@server:/path/to/app/ else echo "Pomijam $PROJECT_NAME (nie Api/Blazor)" fi done echo "Pipeline zakończony"