Skip to content

Fixes #3500

Fixes #3500 #1476

Workflow file for this run

name: build
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
permissions:
id-token: write
security-events: write
jobs:
# Separate job that verifies if all code was formatted correctly
# Run `dotnet fantomas .` to format all code.
verify-linting:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup .NET
uses: actions/setup-dotnet@v3
- name: Restore tools
run: dotnet tool restore
- name: Check F# code
run: dotnet fantomas . --check
# Verify that Fable.sln can be restored
# See: https://github.com/fable-compiler/Fable/issues/3687
restore-project:
name: Check that solution can be restored
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup .NET
uses: actions/setup-dotnet@v3
- name: Restore project
run: dotnet restore Fable.sln
# Separate build job for JavaScript
build-javascript:
strategy:
matrix:
platform: [ubuntu-latest, windows-latest]
runs-on: ${{ matrix.platform }}
steps:
- uses: actions/checkout@v2
- name: Setup .NET
uses: actions/setup-dotnet@v1
with:
dotnet-version: '8.0.x'
- name: Setup Node.js environment
uses: actions/setup-node@v2.4.1
- name: Fable Tests - JavaScript (linux)
if: matrix.platform == 'ubuntu-latest'
run: ./build.sh test javascript
- name: Fable Tests - JavaScript (Windows)
if: matrix.platform == 'windows-latest'
run: .\build.bat test javascript
# Separate build job for TypeScript
build-typescript:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup .NET
uses: actions/setup-dotnet@v1
with:
dotnet-version: '8.0.x'
- name: Setup Node.js environment
uses: actions/setup-node@v2.4.1
- name: Fable Tests - TypeScript
run: ./build.sh test typescript
# - name: Fable Tests - TypeScript
# run: dotnet fsi build.fsx test-ts
# Separate build job for Integration
build-integration:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup .NET
uses: actions/setup-dotnet@v1
with:
dotnet-version: '8.0.x'
- name: Setup Node.js environment
uses: actions/setup-node@v2.4.1
- name: Fable Tests
run: ./build.sh test integration
# Separate build job for Standalone
build-standalone:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup .NET
uses: actions/setup-dotnet@v1
with:
dotnet-version: '8.0.x'
- name: Setup Node.js environment
uses: actions/setup-node@v2.4.1
- name: Fable Tests
run: ./build.sh test standalone
# Separate build job for Python since we use a test matrix (will run in parallell)
build-python:
strategy:
matrix:
platform: [ubuntu-latest, windows-latest]
python-version: ["3.10", 3.11, 3.12]
runs-on: ${{ matrix.platform }}
steps:
- uses: actions/checkout@v2
- name: Setup .NET
uses: actions/setup-dotnet@v1
with:
dotnet-version: '8.0.x'
- name: Setup dotnet tools
run: dotnet tool restore
# - name: Check F# formatting (fantomas)
# run: dotnet fantomas src/Fable.Transforms/Python --check
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
- name: Install poetry
run: |
pip install poetry
- name: Fable Library - Python (linux)
if: matrix.platform == 'ubuntu-latest'
run: ./build.sh fable-library --python
- name: Fable Library - Python (Windows)
if: matrix.platform == 'windows-latest'
run: .\build.bat fable-library --python
- name: Fable Tests - Python (linux)
if: matrix.platform == 'ubuntu-latest'
run: ./build.sh test python --skip-fable-library
- name: Fable Tests - Python (Windows)
if: matrix.platform == 'windows-latest'
run: .\build.bat test python --skip-fable-library
# Separate build job for Rust (will run in parallel)
build-rust:
runs-on: ubuntu-latest
strategy:
matrix:
test: ["default", "no_std", "threaded"]
steps:
- uses: actions/checkout@v2
- name: Setup .NET
uses: actions/setup-dotnet@v1
with:
dotnet-version: '8.0.x'
- name: Setup Node.js environment
uses: actions/setup-node@v2.4.1
- name: Setup Rust toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: stable
- name: Fable Library - Rust
run: ./build.sh fable-library --rust
- name: Fable Tests - Rust
run: ./build.sh test rust --skip-fable-library --${{ matrix.test }}
# Separate build job for Dart
build-dart:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup .NET
uses: actions/setup-dotnet@v1
with:
dotnet-version: '8.0.x'
- name: Setup Dart SDK
uses: dart-lang/setup-dart@v1.3
- name: Fable Tests - Dart
run: ./build.sh test dart
# Separate job to run F# analyzers
analyzers:
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
- name: Setup .NET
uses: actions/setup-dotnet@v4
- name: Restore tools
run: dotnet tool restore
- name: Build solution
run: dotnet build -c Release Fable.sln
- name: Run analyzers for Fable.AST
run: dotnet msbuild /t:AnalyzeFSharpProject src/Fable.AST/Fable.AST.fsproj
continue-on-error: true
- name: Run analyzers for Rust.AST
run: dotnet msbuild /t:AnalyzeFSharpProject src/Fable.Transforms/Rust/AST/Rust.AST.fsproj
continue-on-error: true
- name: Run analyzers Fable.Transforms
run: dotnet msbuild /t:AnalyzeFSharpProject src/Fable.Transforms/Fable.Transforms.fsproj
continue-on-error: true
- name: Run analyzers Fable.Compiler
run: dotnet msbuild /t:AnalyzeFSharpProject src/Fable.Compiler/Fable.Compiler.fsproj
continue-on-error: true
- name: Upload SARIF files
uses: github/codeql-action/upload-sarif@v2
with:
sarif_file: src/reports