Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions .config/dotnet-tools.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,6 @@
"reportgenerator"
]
},
"paket": {
"version": "10.3.1",
"commands": [
"paket"
]
},
"fcswatch-cli": {
"version": "0.7.14",
"commands": [
Expand All @@ -37,6 +31,12 @@
"commands": [
"fantomas"
]
},
"fsdocs-tool": {
"version": "18.1.0",
"commands": [
"fsdocs"
]
}
}
}
1 change: 0 additions & 1 deletion .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
"ionide.ionide-fsharp",
"ms-dotnettools.csharp",
"editorconfig.editorconfig",
"ionide.ionide-paket",
"ionide.ionide-fake"
]
}
Expand Down
44 changes: 44 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -11,16 +11,60 @@ root = true
insert_final_newline = true
indent_style = space
indent_size = 4
trim_trailing_whitespace = true
end_of_line = lf

[*.{fs,fsi,fsx,config}]
# https://fsprojects.github.io/fantomas/docs/end-users/Configuration.html
charset = utf-8
trim_trailing_whitespace = true
max_line_length=100
fsharp_multiline_bracket_style = stroustrup
fsharp_keep_max_number_of_blank_lines=2
fsharp_max_array_or_list_number_of_items=1
fsharp_array_or_list_multiline_formatter=number_of_items
fsharp_max_infix_operator_expression=10
fsharp_multi_line_lambda_closing_newline=true

# Visual Studio Solution Files
[*.slnx]
indent_size = 2

# XML project files
[*.{csproj,vbproj,vcxproj,vcxproj.filters,proj,projitems,shproj,sfproj}]
indent_size = 2

# XML config files
[*.{props,targets,ruleset,config,nuspec,resx,vsixmanifest,vsct}]
indent_size = 2

# Markdown Files
[*.{md,mdx}]
trim_trailing_whitespace = false

# Bash Files
[*.{sh}]
end_of_line = lf

# Batch Files
[*.{cmd,bat}]
end_of_line = crlf

# Powershell Files
[*.{ps1, psm1}]
end_of_line = crlf

# Paket files
[paket.*]
trim_trailing_whitespace = true
indent_size = 2

[*.paket.references]
trim_trailing_whitespace = true
indent_size = 2


# YAML Files
[*.{yml,yaml}]
indent_size = 2
indent_style = space
2 changes: 2 additions & 0 deletions .fantomasignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Ignore AssemblyInfo files
AssemblyInfo.fs
6 changes: 6 additions & 0 deletions .git-blame-ignore-revs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# This file contains a list of git hashes of revisions to be ignored by git
# These revisions are considered "unimportant" in
# that they are unlikely to be what you are interested in when blaming.
# Like formatting with Fantomas
# https://docs.github.com/en/repositories/working-with-files/using-files/viewing-a-file#ignore-commits-in-the-blame-view
# Add formatting commits here
112 changes: 95 additions & 17 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -1,27 +1,105 @@
# Auto detect text files
# Normalize line endings for all text files
* text=auto

# Custom for Visual Studio
*.cs diff=csharp text=auto eol=lf
*.vb diff=csharp text=auto eol=lf
*.fs diff=csharp text=auto eol=lf
*.fsi diff=csharp text=auto eol=lf
*.fsx diff=csharp text=auto eol=lf
*.sln text eol=crlf merge=union
*.csproj merge=union
*.vbproj merge=union
*.fsproj merge=union
*.dbproj merge=union
###############################
# .NET Language Files
###############################
# Force LF for source code files to ensure consistency across platforms
*.cs diff=csharp text eol=lf
*.vb diff=csharp text eol=lf
*.fs diff=csharp text eol=lf
*.fsi diff=csharp text eol=lf
*.fsx diff=csharp text eol=lf

###############################
# .NET Project Files
###############################
# Force LF for cross-platform compatibility
*.sln text eol=lf merge=union
*.csproj text eol=lf merge=union
*.vbproj text eol=lf merge=union
*.fsproj text eol=lf merge=union
*.dbproj text eol=lf merge=union
*.props text eol=lf
*.targets text eol=lf

###############################
# Windows Scripts
###############################
# Force CRLF for Windows batch files and scripts
*.cmd text eol=crlf
*.bat text eol=crlf

###############################
# Unix/Linux Scripts
###############################
# Force LF for shell scripts
*.sh text eol=lf

# Standard to msysgit
*.doc diff=astextplain
###############################
# Configuration Files
###############################
# Configuration and data files should use LF
*.json text eol=lf
*.yml text eol=lf
*.yaml text eol=lf
*.xml text eol=lf
*.config text eol=lf
*.md text eol=lf
*.html text eol=lf
*.css text eol=lf
*.js text eol=lf
*.ts text eol=lf

###############################
# Binary Files - Git LFS
###############################
# Images
*.png filter=lfs diff=lfs merge=lfs -text
*.jpg filter=lfs diff=lfs merge=lfs -text
*.jpeg filter=lfs diff=lfs merge=lfs -text
*.gif filter=lfs diff=lfs merge=lfs -text
*.bmp filter=lfs diff=lfs merge=lfs -text
*.ico filter=lfs diff=lfs merge=lfs -text
*.svg text eol=lf

# Documents
*.pdf filter=lfs diff=lfs merge=lfs -text
*.doc filter=lfs diff=lfs merge=lfs -text
*.docx filter=lfs diff=lfs merge=lfs -text
*.xls filter=lfs diff=lfs merge=lfs -text
*.xlsx filter=lfs diff=lfs merge=lfs -text
*.ppt filter=lfs diff=lfs merge=lfs -text
*.pptx filter=lfs diff=lfs merge=lfs -text

# Archives
*.zip filter=lfs diff=lfs merge=lfs -text
*.tar filter=lfs diff=lfs merge=lfs -text
*.gz filter=lfs diff=lfs merge=lfs -text
*.rar filter=lfs diff=lfs merge=lfs -text
*.7z filter=lfs diff=lfs merge=lfs -text

# Native Libraries (excluding .NET build artifacts)
*.so filter=lfs diff=lfs merge=lfs -text
*.dylib filter=lfs diff=lfs merge=lfs -text
*.lib filter=lfs diff=lfs merge=lfs -text
*.a filter=lfs diff=lfs merge=lfs -text

# Media Files
*.mp4 filter=lfs diff=lfs merge=lfs -text
*.avi filter=lfs diff=lfs merge=lfs -text
*.mov filter=lfs diff=lfs merge=lfs -text
*.mp3 filter=lfs diff=lfs merge=lfs -text
*.wav filter=lfs diff=lfs merge=lfs -text

###############################
# Legacy Binary Handling
###############################
# Fallback for document types that might not use LFS
*.DOC diff=astextplain
*.docx diff=astextplain
*.DOCX diff=astextplain
*.dot diff=astextplain
*.DOT diff=astextplain
*.pdf diff=astextplain
*.PDF diff=astextplain
*.rtf diff=astextplain
*.RTF diff=astextplain
*.rtf diff=astextplain
74 changes: 50 additions & 24 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -1,35 +1,61 @@
name: Build
name: Build master

on: [push, pull_request]

env:
DISABLE_COVERAGE: 0
DOTNET_NOLOGO: 1
on:
push:
branches:
- main
pull_request:
branches:
- main

jobs:
build:
strategy:
matrix:
configuration: [Debug, Release]
os: [ubuntu-latest, windows-latest, macOS-latest]
runs-on: ${{ matrix.os }}

steps:
- uses: actions/checkout@v4
# Not specifying a version will attempt to install via global.json
- name: Setup .NET SDK
uses: actions/setup-dotnet@v4
with:
dotnet-version: '10.x'
- uses: actions/checkout@v5
- name: Setup necessary dotnet SDKs
uses: actions/setup-dotnet@v4
with:
dotnet-version: |
10.x
- name: Build via Bash
if: runner.os != 'Windows'
run: |
chmod +x ./build.sh
./build.sh
env:
CI: true
CONFIGURATION: ${{ matrix.configuration }}
ENABLE_COVERAGE: true
- name: Build via Windows
if: runner.os == 'Windows'
run: ./build.cmd
env:
CI: true
CONFIGURATION: ${{ matrix.configuration }}
ENABLE_COVERAGE: true
- name: Test Report
uses: dorny/test-reporter@v1
if: always()
with:
name: Test Results (${{ matrix.os }}-${{ matrix.configuration }})
path: '**/TestResults/testResults*.trx'
reporter: dotnet-trx
# Builds the project in a dev container
build-devcontainer:
runs-on: ubuntu-latest
steps:

- uses: actions/checkout@v5

- name: Build
if: runner.os != 'Windows'
run: |
chmod +x ./build.sh
./build.sh
env:
CI: true
- name: Build
if: runner.os == 'Windows'
run: ./build.cmd
env:
CI: true
- name: Build and run dev container task
uses: devcontainers/ci@v0.3
with:
runCmd: |
chmod +x ./build.sh
./build.sh
58 changes: 58 additions & 0 deletions .github/workflows/fsdocs-gh-pages.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
name: Deploy Docs

on:
# Runs on pushes targeting the default branch
push:
branches: ["main"]

# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:

# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
permissions:
contents: read
pages: write
id-token: write

# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
concurrency:
group: "pages"
cancel-in-progress: false

jobs:
# Build job
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v5
- name: Setup Pages
uses: actions/configure-pages@v5
- name: Setup necessary dotnet SDKs
uses: actions/setup-dotnet@v4
with:
global-json-file: global.json
dotnet-version: |
10.x
- name: Build Docs
run: |
chmod +x ./build.sh
./build.sh builddocs

- name: Upload artifact
uses: actions/upload-pages-artifact@v4
with:
path: docs/

# Deployment job
deploy:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
needs: build
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
Loading