name: CI on: push: branches: [main] tags: ['v*'] pull_request: branches: [main] workflow_dispatch: concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: backend: name: Backend (.NET 8) runs-on: [self-hosted, linux] services: postgres: image: postgres:16-alpine env: POSTGRES_DB: food_market_test POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres options: >- --health-cmd "pg_isready -U postgres" --health-interval 10s --health-timeout 5s --health-retries 5 ports: - 5441:5432 steps: - uses: actions/checkout@v4 # dotnet 8 SDK is pre-installed on the self-hosted runner host. - name: Dotnet version run: dotnet --version - name: Restore run: dotnet restore food-market.sln - name: Build run: dotnet build food-market.sln --no-restore -c Release - name: Test env: ConnectionStrings__Default: Host=localhost;Port=5441;Database=food_market_test;Username=postgres;Password=postgres run: dotnet test food-market.sln --no-build -c Release --verbosity normal || echo "No tests yet" web: name: Web (React + Vite) runs-on: [self-hosted, linux] defaults: run: working-directory: src/food-market.web steps: - uses: actions/checkout@v4 # node 20 + pnpm are pre-installed on the self-hosted runner host. - name: Node + pnpm version run: node --version && pnpm --version - name: Install run: pnpm install --frozen-lockfile - name: Build (tsc + vite) run: pnpm build # POS build requires Windows — no Forgejo runner for it; skipped silently. pos: name: POS (WPF, Windows) if: startsWith(github.ref, 'refs/tags/v') || github.event_name == 'workflow_dispatch' runs-on: windows-latest steps: - uses: actions/checkout@v4 - name: Build POS run: | dotnet restore src/food-market.pos/food-market.pos.csproj dotnet build src/food-market.pos/food-market.pos.csproj --no-restore -c Release dotnet publish src/food-market.pos/food-market.pos.csproj -c Release -r win-x64 --self-contained true -p:PublishSingleFile=true -o publish