GitHub-CI: Add MSVC runners #1
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: continuous build | |
on: [push, pull_request] | |
permissions: | |
contents: read # to fetch code (actions/checkout) | |
jobs: | |
msvc: | |
runs-on: windows-latest | |
strategy: | |
# Allow other runners in the matrix to continue if some fail | |
fail-fast: false | |
matrix: | |
library: [shared, static] | |
include: | |
- library: shared | |
library-flags: -DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=OFF | |
- library: static | |
library-flags: -DBUILD_SHARED_LIBS=OFF -DBUILD_STATIC_LIBS=ON | |
defaults: | |
run: | |
# Use bash as default shell | |
shell: bash -el {0} | |
env: | |
CHERE_INVOKING: 1 | |
steps: | |
- name: get CPU name | |
shell: pwsh | |
run : | | |
Get-CIMInstance -Class Win32_Processor | Select-Object -Property Name | |
- name: checkout repository | |
uses: actions/checkout@v3 | |
- uses: conda-incubator/setup-miniconda@v2 | |
with: | |
auto-update-conda: true | |
- name: cache conda packages | |
id: conda-cache | |
uses: actions/cache/restore@v3 | |
with: | |
path: C:/Miniconda/envs/test | |
key: conda:msvc | |
- name: install packages with conda | |
if: ${{ steps.conda-cache.outputs.cache-hit != 'true' }} | |
run: | | |
echo ${{ steps.conda-cache.outputs.cache-hit }} | |
conda info | |
conda list | |
conda install -y -c conda-forge --override-channels ccache | |
- name: save conda cache | |
if: ${{ steps.conda-cache.outputs.cache-hit != 'true' }} | |
uses: actions/cache/save@v3 | |
with: | |
path: C:/Miniconda/envs/test | |
key: ${{ steps.conda-cache.outputs.cache-primary-key }} | |
- name: Prepare ccache | |
# Get cache location of ccache | |
# Create key that is used in action/cache/restore and action/cache/save steps | |
id: ccache-prepare | |
run: | | |
echo "ccachedir=$(cygpath -m $(ccache -k cache_dir))" >> $GITHUB_OUTPUT | |
# We include the commit sha in the cache key, as new cache entries are | |
# only created if there is no existing entry for the key yet. | |
echo "key=ccache-msvc-${{ matrix.library }}-${{ github.ref }}-${{ github.sha }}" >> $GITHUB_OUTPUT | |
- name: Restore ccache | |
uses: actions/cache/restore@v3 | |
with: | |
path: ${{ steps.ccache-prepare.outputs.ccachedir }} | |
key: ${{ steps.ccache-prepare.outputs.key }} | |
# Restore a matching ccache cache entry. Prefer same branch. | |
restore-keys: | | |
ccache-msvc-${{ matrix.library }}-${{ github.ref }} | |
ccache-msvc-${{ matrix.library }} | |
ccache-msvc | |
- name: Configure ccache | |
# Limit the maximum size and switch on compression to avoid exceeding the total disk or cache quota. | |
run: | | |
which ccache | |
test -d ${{ steps.ccache-prepare.outputs.ccachedir }} || mkdir -p ${{ steps.ccache-prepare.outputs.ccachedir }} | |
echo "max_size = 250M" > ${{ steps.ccache-prepare.outputs.ccachedir }}/ccache.conf | |
echo "compression = true" >> ${{ steps.ccache-prepare.outputs.ccachedir }}/ccache.conf | |
ccache -p | |
ccache -s | |
echo $HOME | |
cygpath -w $HOME | |
- name: setup MSVC toolchain | |
uses: ilammy/msvc-dev-cmd@v1 | |
- name: Configure OpenBLAS | |
run: | | |
mkdir build && cd build | |
cmake -G"Ninja Multi-Config" \ | |
-DCMAKE_BUILD_TYPE=Release \ | |
${{ matrix.library-flags }} \ | |
-DNOFORTRAN=ON \ | |
-DC_LAPACK=ON \ | |
-DUSE_OPENMP=ON \ | |
-DNUM_THREADS=64 \ | |
-DTARGET=CORE2 \ | |
-DCMAKE_C_COMPILER_LAUNCHER=ccache \ | |
-DCMAKE_Fortran_COMPILER_LAUNCHER=ccache \ | |
.. | |
- name: Build OpenBLAS | |
run: cd build && cmake --build . --config Release | |
- name: Show ccache status | |
continue-on-error: true | |
run: ccache -s | |
- name: Save ccache | |
# Save the cache after we are done (successfully) building | |
uses: actions/cache/save@v3 | |
with: | |
path: ${{ steps.ccache-prepare.outputs.ccachedir }} | |
key: ${{ steps.ccache-prepare.outputs.key }} | |
- name: Run tests | |
id: run-ctest | |
timeout-minutes: 60 | |
run: cd build && PATH="${GITHUB_WORKSPACE}/build/lib/RELEASE;${PATH}" ctest -C Release | |
- name: Re-run tests | |
if: always() && (steps.run-ctest.outcome == 'failure') | |
timeout-minutes: 60 | |
run: | | |
cd build | |
echo "::group::Re-run ctest" | |
PATH="${GITHUB_WORKSPACE}/build/lib/RELEASE;${PATH}" ctest -C Release --rerun-failed --output-on-failure || true | |
echo "::endgroup::" | |
echo "::group::Log from these tests" | |
[ ! -f Testing/Temporary/LastTest.log ] || cat Testing/Temporary/LastTest.log | |
echo "::endgroup::" |