Files
FA_WEB/.gitea/workflows/build-and-publish.yml

193 lines
6.1 KiB
YAML
Raw Permalink 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.
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 '<PackageId>' "$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
<?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" protocolVersion="3" allowInsecureConnections="true" />
</packageSources>
</configuration>
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"