name: Build Docker Images on: push: branches: - main workflow_dispatch: {} concurrency: group: build-${{ github.ref }} cancel-in-progress: false jobs: test: runs-on: ubuntu-latest steps: - name: Checkout uses: https://github.com/actions/checkout@v4 - name: Setup .NET 10 uses: https://github.com/actions/setup-dotnet@v4 with: dotnet-version: 10.0.x - name: Restore dependencies working-directory: src/Backend run: | dotnet restore DiunaBI.API/DiunaBI.API.csproj dotnet restore DiunaBI.UI.Web/DiunaBI.UI.Web.csproj dotnet restore DiunaBI.Plugins.Morska/DiunaBI.Plugins.Morska.csproj dotnet restore DiunaBI.Tests/DiunaBI.Tests.csproj - name: Build solution and prepare plugins working-directory: src/Backend run: | set -e # Build only required projects — skip DiunaBI.UI.Mobile dotnet build DiunaBI.API/DiunaBI.API.csproj --configuration Release dotnet build DiunaBI.UI.Web/DiunaBI.UI.Web.csproj --configuration Release dotnet build DiunaBI.Plugins.Morska/DiunaBI.Plugins.Morska.csproj --configuration Release mkdir -p DiunaBI.Tests/bin/Release/net10.0/Plugins cp DiunaBI.Plugins.Morska/bin/Release/net10.0/DiunaBI.Plugins.Morska.dll DiunaBI.Tests/bin/Release/net10.0/Plugins/ || true ls -la DiunaBI.Tests/bin/Release/net10.0/Plugins/ || true - name: Run Tests working-directory: src/Backend run: | dotnet test DiunaBI.Tests/DiunaBI.Tests.csproj \ --configuration Release \ --no-restore \ --logger "trx;LogFileName=test-results.trx" \ --collect:"XPlat Code Coverage" \ --filter "Category!=LocalOnly" || true - name: Publish Test Results uses: https://github.com/actions/upload-artifact@v3 if: success() || failure() with: name: test-results path: | src/Backend/DiunaBI.Tests/TestResults/*.trx src/Backend/DiunaBI.Tests/TestResults/**/coverage.cobertura.xml retention-days: 7 build-and-push: runs-on: ubuntu-latest needs: test if: success() || failure() steps: - name: Debug secrets run: | echo "User length: ${#REGISTRY_USER}" echo "Token length: ${#REGISTRY_TOKEN}" env: REGISTRY_USER: ${{ secrets.REGISTRY_USER }} REGISTRY_TOKEN: ${{ secrets.REGISTRY_TOKEN }} - name: Checkout code uses: https://github.com/actions/checkout@v4 - name: Set up Docker Buildx uses: https://github.com/docker/setup-buildx-action@v3 - name: Log in to Gitea Container Registry run: | echo "${{ secrets.REGISTRY_TOKEN }}" | docker login code.bim-it.pl -u "${{ secrets.REGISTRY_USER }}" --password-stdin - name: Build and push API image working-directory: src/Backend run: | docker buildx build \ --platform linux/amd64 \ --label "org.opencontainers.image.source=https://code.bim-it.pl/mz/DiunaBI" \ -f DiunaBI.API/Dockerfile \ -t code.bim-it.pl/mz/diunabi-api:latest \ -t code.bim-it.pl/mz/diunabi-api:build-${{ github.run_id }} \ --push \ . - name: Build and push UI image working-directory: src/Backend run: | docker buildx build \ --platform linux/amd64 \ --label "org.opencontainers.image.source=https://code.bim-it.pl/mz/DiunaBI" \ -f DiunaBI.UI.Web/Dockerfile \ -t code.bim-it.pl/mz/diunabi-ui:latest \ -t code.bim-it.pl/mz/diunabi-ui:build-${{ github.run_id }} \ --push \ . - name: Output build info run: | echo "## 🐳 Docker Images Built" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY echo "**Build ID:** ${{ github.run_id }}" >> $GITHUB_STEP_SUMMARY echo "**Commit:** ${{ github.sha }}" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY echo "### Images pushed:" >> $GITHUB_STEP_SUMMARY echo '```bash' >> $GITHUB_STEP_SUMMARY echo "# Latest (for release)" >> $GITHUB_STEP_SUMMARY echo "docker pull code.bim-it.pl/mz/diunabi-api:latest" >> $GITHUB_STEP_SUMMARY echo "docker pull code.bim-it.pl/mz/diunabi-ui:latest" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY echo "# Specific build (for rollback)" >> $GITHUB_STEP_SUMMARY echo "docker pull code.bim-it.pl/mz/diunabi-api:build-${{ github.run_id }}" >> $GITHUB_STEP_SUMMARY echo "docker pull code.bim-it.pl/mz/diunabi-ui:build-${{ github.run_id }}" >> $GITHUB_STEP_SUMMARY echo '```' >> $GITHUB_STEP_SUMMARY