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 strategy: matrix: customer: - name: Morska plugin_project: DiunaBI.Plugins.Morska - name: PedrolloPL plugin_project: DiunaBI.Plugins.PedrolloPL 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: . run: | dotnet restore ${{ matrix.customer.plugin_project }}/${{ matrix.customer.plugin_project }}.csproj dotnet restore DiunaBI.API/DiunaBI.API.csproj dotnet restore DiunaBI.UI.Web/DiunaBI.UI.Web.csproj dotnet restore DiunaBI.Tests/DiunaBI.Tests.csproj - name: Build solution and prepare plugins working-directory: . run: | set -e # Build plugin first to avoid missing dependency issues dotnet build ${{ matrix.customer.plugin_project }}/${{ matrix.customer.plugin_project }}.csproj --configuration Release --no-restore # Skip automatic plugin copy in API build since we only have one plugin restored dotnet build DiunaBI.API/DiunaBI.API.csproj --configuration Release --no-restore -p:SkipPluginCopy=true dotnet build DiunaBI.UI.Web/DiunaBI.UI.Web.csproj --configuration Release --no-restore mkdir -p DiunaBI.Tests/bin/Release/net10.0/Plugins cp ${{ matrix.customer.plugin_project }}/bin/Release/net10.0/${{ matrix.customer.plugin_project }}.dll DiunaBI.Tests/bin/Release/net10.0/Plugins/ || true ls -la DiunaBI.Tests/bin/Release/net10.0/Plugins/ || true - name: Run Tests working-directory: . run: | dotnet test DiunaBI.Tests/DiunaBI.Tests.csproj \ --configuration Release \ --no-restore \ --logger "trx;LogFileName=test-results-${{ matrix.customer.name }}.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-${{ matrix.customer.name }} path: | DiunaBI.Tests/TestResults/*.trx DiunaBI.Tests/TestResults/**/coverage.cobertura.xml retention-days: 7 build-and-push: runs-on: ubuntu-latest needs: test if: success() || failure() strategy: matrix: customer: - name: Morska plugin_project: DiunaBI.Plugins.Morska image_suffix: morska - name: PedrolloPL plugin_project: DiunaBI.Plugins.PedrolloPL image_suffix: pedrollopl 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: . run: | docker buildx build \ --platform linux/amd64 \ --label "org.opencontainers.image.source=https://code.bim-it.pl/mz/DiunaBI" \ --build-arg PLUGIN_PROJECT=${{ matrix.customer.plugin_project }} \ -f DiunaBI.API/Dockerfile \ -t code.bim-it.pl/mz/diunabi-api-${{ matrix.customer.image_suffix }}:latest \ -t code.bim-it.pl/mz/diunabi-api-${{ matrix.customer.image_suffix }}:build-${{ github.run_id }} \ --push \ . - name: Build and push UI image working-directory: . 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-${{ matrix.customer.image_suffix }}:latest \ -t code.bim-it.pl/mz/diunabi-ui-${{ matrix.customer.image_suffix }}:build-${{ github.run_id }} \ --push \ . - name: Output build info run: | echo "## 🐳 Docker Images Built - ${{ matrix.customer.name }}" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY echo "**Build ID:** ${{ github.run_id }}" >> $GITHUB_STEP_SUMMARY echo "**Commit:** ${{ github.sha }}" >> $GITHUB_STEP_SUMMARY echo "**Customer:** ${{ matrix.customer.name }}" >> $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-${{ matrix.customer.image_suffix }}:latest" >> $GITHUB_STEP_SUMMARY echo "docker pull code.bim-it.pl/mz/diunabi-ui-${{ matrix.customer.image_suffix }}: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-${{ matrix.customer.image_suffix }}:build-${{ github.run_id }}" >> $GITHUB_STEP_SUMMARY echo "docker pull code.bim-it.pl/mz/diunabi-ui-${{ matrix.customer.image_suffix }}:build-${{ github.run_id }}" >> $GITHUB_STEP_SUMMARY echo '```' >> $GITHUB_STEP_SUMMARY