name: Build and Test on: # Manual trigger workflow_dispatch: # Run CI for all pushes to main push: branches: ["main"] # Run CI for pull requests to all branches, but only if code changed pull_request: paths: - ".github/workflows/ci-*.yml" - "*.sln" - "*.props" - "Makefile" - "global.json" - "package.json" - "package-lock.json" - "src/**" - "tests/**" - "samples/**" - "docs/**" permissions: contents: read jobs: build: strategy: matrix: os: [ubuntu-latest, windows-latest, macos-latest] configuration: [Debug, Release] fail-fast: false runs-on: ${{ matrix.os }} steps: - name: ๐Ÿ“ฅ Clone the repo uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis - name: ๐Ÿ”ง Set up .NET uses: actions/setup-dotnet@baa11fbfe1d6520db94683bd5c7a3818018e4309 # v5.1.0 with: dotnet-version: | 10.0.x 9.0.x - name: ๐Ÿ”ง Set up Node.js uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0 with: node-version: '20' - name: ๐Ÿ“ฆ Install pinned npm dependencies for tests run: npm ci - name: ๐Ÿ—๏ธ Build run: make build CONFIGURATION=${{ matrix.configuration }} - name: ๐Ÿงช Test run: make test CONFIGURATION=${{ matrix.configuration }} - name: ๐Ÿงช AOT Compatibility if: matrix.configuration == 'Release' run: make test-aot CONFIGURATION=${{ matrix.configuration }} - name: ๐Ÿ“ฆ Pack if: matrix.configuration == 'Release' run: make pack CONFIGURATION=${{ matrix.configuration }} - name: ๐Ÿ“š Generate docs run: make generate-docs CONFIGURATION=${{ matrix.configuration }} - name: ๐Ÿ“ค Upload test results artifact if: always() uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 with: name: testresults-${{ matrix.os }}-${{ matrix.configuration }} path: artifacts/testresults/** publish-coverage: if: github.actor != 'dependabot[bot]' needs: build uses: ./.github/workflows/ci-code-coverage.yml secrets: inherit