Skip to content

Merge branch 'main' into refactor/tm-outside-of-engine #4522

Merge branch 'main' into refactor/tm-outside-of-engine

Merge branch 'main' into refactor/tm-outside-of-engine #4522

Workflow file for this run

name: Build
on:
workflow_dispatch:
push:
schedule:
- cron: '1 0 * * 1' # Mondays at 00:01
env:
DOTNET_VERSION: 9.0.x
PROJECT_NAME: Lynx
DOTNET_CLI_TELEMETRY_OPTOUT: 1
jobs:
make-build:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, macOS-latest, macOS-13]
fail-fast: false
steps:
- uses: actions/checkout@v4
- name: Inject slug/short variables
uses: rlespinasse/[email protected]
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: ${{ env.DOTNET_VERSION }}
- name: Nuget cache
uses: actions/cache@v4
with:
path:
~/.nuget/packages
key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }}
restore-keys: |
${{ runner.os }}-nuget-
- name: Build
run: make
build-and-publish:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macOS-latest, macOS-13]
include:
- os: ubuntu-latest
runtime-identifier: linux-x64
- os: windows-latest
runtime-identifier: win-x64
- os: macOS-latest
runtime-identifier: osx-arm64
- os: macOS-13
runtime-identifier: osx-x64
fail-fast: false
steps:
- uses: actions/checkout@v4
- name: Inject slug/short variables
uses: rlespinasse/[email protected]
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: ${{ env.DOTNET_VERSION }}
- name: Nuget cache
uses: actions/cache@v4
with:
path:
~/.nuget/packages
key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }}
restore-keys: |
${{ runner.os }}-nuget-
- name: Build
run: dotnet build -c Release src/Lynx.Cli/Lynx.Cli.csproj /p:DeterministicBuild=true
- name: Publish CLI
run: dotnet publish src/Lynx.Cli/Lynx.Cli.csproj -c Release --runtime ${{ matrix.runtime-identifier }} --self-contained /p:Optimized=true -o artifacts/${{ matrix.runtime-identifier }}
- name: Upload Lynx-${{ env.GITHUB_REF_SLUG }}-${{ github.run_number }}-${{ matrix.runtime-identifier }} artifact
uses: actions/upload-artifact@v4
with:
name: Lynx-${{ env.GITHUB_REF_SLUG }}-${{ github.run_number }}-${{ matrix.runtime-identifier }}
path: |
artifacts/${{ matrix.runtime-identifier }}/
!artifacts/**/*.pdb
if-no-files-found: error
- name: Publish library
if: matrix.os == 'ubuntu-latest'
run: dotnet pack -c Release --no-build src/Lynx/Lynx.csproj --include-symbols -o artifacts/nuget
- name: Upload Lynx-${{ env.GITHUB_REF_SLUG }}-${{ github.run_number }} NuGet package
if: matrix.os == 'ubuntu-latest'
uses: actions/upload-artifact@v4
with:
name: Lynx-${{ env.GITHUB_REF_SLUG }}-${{ github.run_number }}
path: |
artifacts/nuget/*.nupkg
artifacts/nuget/*.snupkg
if-no-files-found: error
fast-tests:
runs-on: ${{ matrix.os }}
strategy:
matrix:
configuration: [Debug, Release]
os: [ubuntu-latest, windows-latest, macOS-latest, macOS-13]
include:
- os: ubuntu-latest
runtime-identifier: linux-x64
- os: windows-latest
runtime-identifier: win-x64
- os: macOS-latest
runtime-identifier: osx-arm64
- os: macOS-13
runtime-identifier: osx-x64
fail-fast: false
steps:
- uses: actions/checkout@v4
- name: Inject slug/short variables
uses: rlespinasse/[email protected]
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: ${{ env.DOTNET_VERSION }}
- name: Nuget cache
uses: actions/cache@v4
with:
path:
~/.nuget/packages
key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }}
restore-keys: |
${{ runner.os }}-nuget-
- name: Build
run: dotnet build -c ${{ matrix.configuration }} /p:DeterministicBuild=true
- name: Run ${{ matrix.category }} tests
run: dotnet test -c ${{ matrix.configuration }} --no-build --collect:"XPlat Code Coverage" --settings tests/runsettings.xml -v normal --logger "GitHubActions;summary.includePassedTests=true;summary.includeSkippedTests=true"
- name: '[Ubuntu] Generate test coverage report'
if: matrix.os == 'ubuntu-latest' && matrix.configuration == 'Release'
uses: danielpalme/ReportGenerator-GitHub-Action@v5
with:
reports: 'tests/**/*.cobertura.xml'
targetdir: 'coveragereport'
reporttypes: 'HtmlInline_AzurePipelines_Dark;SonarQube;Cobertura'
assemblyfilters: '+*'
classfilters: '+*;-*Exception;-*ConstantGenerator;-*MagicNumberGenerator'
filefilters: '+*'
verbosity: 'Info'
title: '${{ env.PROJECT_NAME }} #${{ github.run_number }} (${{ env.GITHUB_REF_SLUG }})'
tag: '${{ github.run_number }}_${{ github.run_id }}'
customSettings: 'numberOfReportsParsedInParallel=3;numberOfReportsMergedInParallel=3'
- name: '[Ubuntu] Upload test coverage report'
if: matrix.os == 'ubuntu-latest' && matrix.configuration == 'Release'
uses: actions/upload-artifact@v4
with:
name: ${{ env.PROJECT_NAME }}-build-coverage-ci-${{ github.run_number }}
path: coveragereport/
if-no-files-found: error
long-running-tests:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macOS-latest, macOS-13]
category: [LongRunning]
fail-fast: false
steps:
- uses: actions/checkout@v4
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: ${{ env.DOTNET_VERSION }}
- name: Nuget cache
uses: actions/cache@v4
with:
path:
~/.nuget/packages
key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }}
restore-keys: |
${{ runner.os }}-nuget-
- name: Build
run: dotnet build -c Release
- name: Run ${{ matrix.category }} tests
run: dotnet test -c Release --no-build --filter "TestCategory=${{ matrix.category }}" -v normal --collect:"XPlat Code Coverage" --settings tests/runsettings.xml --logger "GitHubActions;summary.includePassedTests=true;summary.includeSkippedTests=true"
perft-tests:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macOS-latest] # disabled for macOS-latest since that's always the CI bottleneck due to runners availability
category: [Perft]
fail-fast: false
steps:
- uses: actions/checkout@v4
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: ${{ env.DOTNET_VERSION }}
- name: Nuget cache
uses: actions/cache@v4
with:
path:
~/.nuget/packages
key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }}
restore-keys: |
${{ runner.os }}-nuget-
- name: Build
run: dotnet build -c Release
- name: Run ${{ matrix.category }} tests
run: dotnet test -c Release --no-build --filter "TestCategory=${{ matrix.category }}" -v normal --logger "GitHubActions;summary.includePassedTests=true;summary.includeSkippedTests=true"
# --collect:"XPlat Code Coverage" causes too long test runs (>20 min) https://github.com/coverlet-coverage/coverlet/issues/1192
other-tests:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macOS-latest, macOS-13]
category: [Configuration]
fail-fast: false
steps:
- uses: actions/checkout@v4
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: ${{ env.DOTNET_VERSION }}
- name: Nuget cache
uses: actions/cache@v4
with:
path:
~/.nuget/packages
key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }}
restore-keys: |
${{ runner.os }}-nuget-
- name: Build
run: dotnet build -c Release
- name: Run ${{ matrix.category }} tests
run: dotnet test -c Release --no-build --filter "TestCategory=${{ matrix.category }}" -v normal --collect:"XPlat Code Coverage" --settings tests/runsettings.xml --logger "GitHubActions;summary.includePassedTests=true;summary.includeSkippedTests=true"
winning-at-chess:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest]
category: [WinningAtChess_FixedTime]
fail-fast: false
steps:
- uses: actions/checkout@v4
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: ${{ env.DOTNET_VERSION }}
- name: Nuget cache
uses: actions/cache@v4
with:
path:
~/.nuget/packages
key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }}
restore-keys: |
${{ runner.os }}-nuget-
- name: Build
run: dotnet build -c Release
- name: Run ${{ matrix.category }} tests
run: dotnet test -c Release --no-build --filter "TestCategory=${{ matrix.category }}" -v normal --logger "GitHubActions;summary.includePassedTests=true;summary.includeSkippedTests=true"
continue-on-error: true
# --collect:"XPlat Code Coverage" --settings tests/runsettings.xml https://github.com/coverlet-coverage/coverlet/issues/1192
#unify-coverage-reports:
# needs: [build, non-parallelizable-tests] # long-running-tests
# runs-on: 'ubuntu-latest'
# env:
# PROJECT_NAME: Lynx
# steps:
# - name: Download build coverage
# uses: actions/download-artifact@v2
# with:
# name: ${{ env.PROJECT_NAME }}-build-coverage-ci-${{ github.run_number }}
# path: artifacts/partial-coverage/build/
# - name: Download non-parallelizable coverage
# uses: actions/download-artifact@v2
# with:
# name: ${{ env.PROJECT_NAME }}-non-parallelizable-coverage-ci-${{ github.run_number }}
# path: artifacts/partial-coverage/non-parallelizable/
# #Coverlet issue https://github.com/coverlet-coverage/coverlet/issues/1192
# #- name: Download long-running coverage
# # uses: actions/download-artifact@v2
# # with:
# # name: ${{ env.PROJECT_NAME }}-long-running-coverage-ci-${{ github.run_number }}
# # path: artifacts/partial-coverage/long-running/
# - name: '[Ubuntu] Generate test coverage report'
# uses: danielpalme/ReportGenerator-GitHub-Action@v5
# with:
# reports: 'artifacts/partial-coverage/**/Cobertura.xml;tests/**/*.cobertura.xml'
# targetdir: 'coveragereport'
# reporttypes: 'HtmlInline_AzurePipelines_Dark;SonarQube;Cobertura'
# assemblyfilters: '+*'
# classfilters: '+*;-*Exception;-*ConstantGenerator;-*MagicNumberGenerator'
# filefilters: '+*'
# verbosity: 'Info'
# title: '${{ env.PROJECT_NAME }} #${{ github.run_number }} (${{ env.GITHUB_REF_SLUG }})'
# tag: '${{ github.run_number }}_${{ github.run_id }}'
# customSettings: 'numberOfReportsParsedInParallel=3;numberOfReportsMergedInParallel=3'
# - name: '[Ubuntu] Upload unified test coverage report'
# uses: actions/upload-artifact@v4
# with:
# name: ${{ env.PROJECT_NAME }}-coverage-ci-${{ github.run_number }}
# path: coveragereport/
# if-no-files-found: error
#non-parallelizable-tests:
# runs-on: ${{ matrix.os }}
# strategy:
# matrix:
# os: [ubuntu-latest, windows-latest, macOS-latest, macOS-13]
# fail-fast: false
# env:
# DOTNET_CLI_TELEMETRY_OPTOUT: 1
# PROJECT_NAME: Lynx
# steps:
# - uses: actions/checkout@v4
# - name: Setup .NET
# uses: actions/setup-dotnet@v4
# with:
# dotnet-version: ${{ env.DOTNET_VERSION }}
# - name: Nuget cache
# uses: actions/cache@v4
# with:
# path:
# ~/.nuget/packages
# key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }}
# restore-keys: |
# ${{ runner.os }}-nuget-
# - name: Build
# run: dotnet build -c Release
# - name: Run non-parallelizable tests
# run: dotnet test -c Release --no-build -v=normal --filter "TestCategory=NonParallelizable" --collect:"XPlat Code Coverage" --settings tests/runsettings.xml --logger "GitHubActions;summary.includePassedTests=true;summary.includeSkippedTests=true"
# - name: '[Ubuntu] Generate test coverage report'
# if: matrix.os == 'ubuntu-latest'
# uses: danielpalme/ReportGenerator-GitHub-Action@5
# with:
# reports: 'tests/**/*.cobertura.xml'
# targetdir: 'coveragereport'
# reporttypes: 'HtmlInline_AzurePipelines_Dark;SonarQube;Cobertura'
# assemblyfilters: '+*'
# classfilters: '+*;-*Exception;-*ConstantGenerator;-*MagicNumberGenerator'
# filefilters: '+*'
# verbosity: 'Info'
# title: '${{ env.PROJECT_NAME }} #${{ github.run_number }} (${{ env.GITHUB_REF_SLUG }})'
# tag: '${{ github.run_number }}_${{ github.run_id }}'
# customSettings: 'numberOfReportsParsedInParallel=3;numberOfReportsMergedInParallel=3'
# - name: '[Ubuntu] Upload test coverage report'
# if: matrix.os == 'ubuntu-latest'
# uses: actions/upload-artifact@v4
# with:
# name: ${{ env.PROJECT_NAME }}-non-parallelizable-coverage-ci-${{ github.run_number }}
# path: coveragereport/
# if-no-files-found: error