Selaa lähdekoodia

Add Actions CI

CartBlanche 2 kuukautta sitten
vanhempi
sitoutus
4d809a7ef7
1 muutettua tiedostoa jossa 114 lisäystä ja 0 poistoa
  1. 114 0
      .github/workflows/build-samples.yml

+ 114 - 0
.github/workflows/build-samples.yml

@@ -0,0 +1,114 @@
+name: Build Samples
+
+on:
+  workflow_dispatch:
+  push:
+    branches: [ main, develop ]
+  pull_request:
+    branches: [ main, develop ]
+  schedule:
+    - cron: "0 3 * * 1"   # Weekly (Mon) build to keep artifacts fresh
+
+permissions:
+  contents: read
+
+env:
+  DOTNET_NOLOGO: true
+  CONFIGURATION: Release
+
+jobs:
+  discover:
+    runs-on: ubuntu-latest
+    outputs:
+      projects: ${{ steps.collect.outputs.projects }}
+    steps:
+      - name: Checkout
+        uses: actions/checkout@v4
+
+      - name: Collect Desktop platform project files
+        id: collect
+        shell: bash
+        run: |
+          set -e
+          # Find all Desktop platform csproj files: **/Platforms/Desktop/*.csproj
+          mapfile -t desktop_projects < <(find . -type f -path "*/Platforms/Desktop/*.csproj" | sort)
+          if [ ${#desktop_projects[@]} -eq 0 ]; then
+            echo "No Desktop platform projects found."
+            echo "projects=[]" >> "$GITHUB_OUTPUT"
+            exit 0
+          fi
+          echo "Discovered Desktop projects:"
+          printf '  %s\n' "${desktop_projects[@]}"
+          # Build JSON array
+          json=$(printf '%s\n' "${desktop_projects[@]}" | jq -R . | jq -s .)
+          echo "projects=$json" >> "$GITHUB_OUTPUT"
+
+  build:
+    needs: discover
+    if: ${{ needs.discover.outputs.projects != '[]' && needs.discover.outputs.projects != '' }}
+    runs-on: ubuntu-latest
+    strategy:
+      fail-fast: false
+      matrix:
+        project: ${{ fromJson(needs.discover.outputs.projects) }}
+
+    steps:
+      - name: Checkout
+        uses: actions/checkout@v4
+
+      - name: Setup .NET 8
+        uses: actions/setup-dotnet@v4
+        with:
+          dotnet-version: |
+            8.0.x
+
+      - name: Restore (solution-wide)
+        run: dotnet restore
+
+      - name: Publish sample
+        id: publish
+        shell: bash
+        run: |
+          set -e
+          PROJ="${{ matrix.project }}"
+          NAME=$(basename "$PROJ" .csproj)
+          OUTDIR="publish/$NAME"
+          echo "Publishing $PROJ -> $OUTDIR"
+          dotnet publish "$PROJ" -c "$CONFIGURATION" -o "$OUTDIR"
+          echo "Published files:"
+          find "$OUTDIR" -maxdepth 2 -type f -printf '  %P\n'
+          echo "outdir=$OUTDIR" >> "$GITHUB_OUTPUT"
+          echo "name=$NAME" >> "$GITHUB_OUTPUT"
+
+      - name: Zip artifact
+        id: zip
+        shell: bash
+        run: |
+          set -e
+          NAME="${{ steps.publish.outputs.name }}"
+          OUTDIR="${{ steps.publish.outputs.outdir }}"
+          ZIP="artifact-${NAME}.zip"
+          (cd "$OUTDIR" && zip -rq "../../$ZIP" .)
+          echo "zip=$ZIP" >> "$GITHUB_OUTPUT"
+
+      - name: Upload artifact
+        uses: actions/upload-artifact@v4
+        with:
+          name: sample-${{ steps.publish.outputs.name }}
+          path: artifact-${{ steps.zip.outputs.zip || steps.publish.outputs.name }}.zip
+          if-no-files-found: error
+          retention-days: 14
+
+  summary:
+    needs: [discover, build]
+    if: always()
+    runs-on: ubuntu-latest
+    steps:
+      - name: Build Summary
+        run: |
+          echo "Desktop sample build summary:" >> $GITHUB_STEP_SUMMARY
+          if [ "${{ needs.discover.outputs.projects }}" = "[]" ] || [ -z "${{ needs.discover.outputs.projects }}" ]; then
+            echo "- No Desktop platform projects were found." >> $GITHUB_STEP_SUMMARY
+          else
+            echo "- Projects built: ${{ needs.discover.outputs.projects }}" >> $GITHUB_STEP_SUMMARY
+            echo "- Individual zipped artifacts are available under the workflow run artifacts section." >> $GITHUB_STEP_SUMMARY