diff --git a/.gitea/workflows/build-and-publish.yml b/.gitea/workflows/build-and-publish.yml new file mode 100644 index 0000000..d97cba3 --- /dev/null +++ b/.gitea/workflows/build-and-publish.yml @@ -0,0 +1,188 @@ +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 + + - 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"