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: Windows Test | ||
on: | ||
workflow_dispatch: | ||
pull_request: | ||
push: | ||
tags: | ||
- 'v*.*.*' | ||
branches: | ||
- master | ||
- develop | ||
- msys2env | ||
concurrency: | ||
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} | ||
cancel-in-progress: true | ||
jobs: | ||
windows-test: | ||
name: Windows MSVC Test | ||
runs-on: windows-2019 # TODO: Implement matrix with windows 2019 and 2022 | ||
strategy: | ||
fail-fast: false | ||
matrix: | ||
options: [ | ||
{build: debug, sanitizer: without-sanitizer}, | ||
{build: debug, sanitizer: address-sanitizer}, | ||
# TODO: Not supported yet by MSVC | ||
# {build: debug, sanitizer: thread-sanitizer}, | ||
# {build: debug, sanitizer: memory-sanitizer}, | ||
# TODO: https://github.com/metacall/core/issues/461 | ||
# {build: release, sanitizer: without-sanitizer} | ||
] | ||
steps: | ||
- name: Check out the repository | ||
uses: actions/checkout@v4 | ||
with: | ||
fetch-depth: 0 | ||
- name: Activate the Visual Studio Developer Prompt | ||
uses: ilammy/msvc-dev-cmd@v1 | ||
with: | ||
arch: amd64 | ||
- name: Set up the environment | ||
run: cmd.exe /c "powershell .\tools\metacall-environment.ps1 $Env:METACALL_INSTALL_OPTIONS" | ||
env: | ||
METACALL_INSTALL_OPTIONS: python nodejs java ruby typescript wasm rpc file # netcore5 java c cobol rust rapidjson funchook swig pack # clangformat v8rep51 coverage | ||
- name: Configure | ||
run: | | ||
$METACALL_PATH = $PWD | ||
md -Force "$METACALL_PATH\build" | ||
cd "$METACALL_PATH\build" | ||
cmd.exe /c "powershell ..\tools\metacall-configure.ps1 $Env:METACALL_BUILD_OPTIONS" | ||
env: | ||
METACALL_BUILD_OPTIONS: ${{ matrix.options.build }} ${{ matrix.options.sanitizer }} scripts ports tests python nodejs java ruby typescript wasm rpc file # netcore5 java c cobol rust examples install pack benchmarks # v8 coverage | ||
- name: Build | ||
working-directory: ./build | ||
run: cmd.exe /c "powershell ..\tools\metacall-build.ps1 $Env:METACALL_BUILD_OPTIONS" | ||
env: | ||
METACALL_BUILD_OPTIONS: ${{ matrix.options.build }} tests | ||
windows-mingw-test: | ||
name: Windows MinGW Test | ||
runs-on: windows-latest # Use the latest Windows environment | ||
strategy: | ||
fail-fast: false # Continue with other matrix runs even if one fails | ||
matrix: | ||
include: | ||
- { icon: '⬛', sys: mingw32 } # 32-bit MinGW environment | ||
- { icon: '🟦', sys: mingw64 } # 64-bit MinGW environment | ||
- { icon: '🟨', sys: ucrt64 } # UCRT-based 64-bit environment | ||
- { icon: '🟧', sys: clang64 } # Clang-based 64-bit environment | ||
name: 🚧${{ matrix.icon }} ${{ matrix.sys }} # Display custom icon for each environment | ||
defaults: | ||
run: | ||
shell: msys2 {0} # Use MSYS2 shell based on the selected environment | ||
steps: | ||
- name: '🧰 Checkout' | ||
uses: actions/checkout@v4 | ||
with: | ||
fetch-depth: 0 # Fetch full repository history for use | ||
- name: '${{ matrix.icon }} Setup MSYS2' | ||
uses: msys2/setup-msys2@v2 | ||
with: | ||
msystem: ${{matrix.sys}} # Select the MSYS2 environment (mingw32, mingw64, etc.) | ||
update: true # Update MSYS2's package database | ||
install: >- | ||
git # Install git | ||
make # Install make utility | ||
pacboy: >- | ||
toolchain:p # Install MSYS2 toolchain (GCC, Clang, etc.) | ||
cmake:p # Install CMake tool | ||
ninja:p # Install Ninja build system | ||
- name: '🚧 Build TOOL' | ||
run: | | ||
cmake -G Ninja -B build -DCMAKE_BUILD_TYPE=Release # Configure build with Ninja | ||
cmake --build build # Build the project using Ninja | ||
windows-distributable: | ||
name: Windows Distributable Dispatch | ||
needs: windows-test | ||
runs-on: ubuntu-latest | ||
if: startsWith(github.ref, 'refs/tags/') || github.ref == 'refs/heads/master' | ||
steps: | ||
- name: Windows Workflow Dispatch | ||
uses: convictional/[email protected] | ||
with: | ||
owner: metacall | ||
repo: distributable-windows | ||
github_token: ${{ secrets.G_PERSONAL_ACCESS_TOKEN }} | ||
workflow_file_name: ci.yml | ||
wait_workflow: true | ||
client_payload: '{"ref": "${{ github.head_ref || github.ref_name }}"}' | ||
ref: master |