Skip to content

Merge PR #786 from knocte/wip/improveReadme #1529

Merge PR #786 from knocte/wip/improveReadme

Merge PR #786 from knocte/wip/improveReadme #1529

name: CI
on:
pull_request:
workflow_dispatch:
# to execute once a day (more info see https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#schedule )
schedule:
- cron: '0 0 * * *'
push:
tags:
- 'v*'
branches:
- '**'
jobs:
buildAndTest:
strategy:
matrix:
os:
- ubuntu-latest
- windows-latest
- macOS-latest
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- name: Restore dependencies
run: dotnet restore
- name: Build
run: make
- name: Run tests
run: make check
- name: Run FSharpLint on itself
run: make selfcheck
deployReleaseBinaries:
needs: buildAndTest
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Restore tools
run: dotnet tool restore
- name: Build
run: dotnet fsi build.fsx
- name: Pack
run: dotnet fsi build.fsx -t Pack
- name: Publish binaries as artifact
uses: actions/upload-artifact@v4
with:
name: binaries
path: ./out/*.nupkg
- name: Get Changelog Entry
id: changelog_reader
uses: mindsers/changelog-reader-action@v1
with:
version: ${{ github.ref }}
path: ./CHANGELOG.md
- name: Upload binaries to nuget (if nugetKey present)
env:
nuget-key: ${{ secrets.NUGET_KEY }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: dotnet fsi build.fsx -t Push
- name: Create Release (if tag)
if: startsWith(github.ref, 'refs/tags/')
id: create_release
uses: actions/create-release@latest
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token
with:
tag_name: ${{ github.ref }}
release_name: ${{ github.ref }}
body: ${{ steps.changelog_reader.outputs.log_entry }}
draft: false
prerelease: false
- name: Upload binaries to release (if tag)
if: startsWith(github.ref, 'refs/tags/')
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: out/*.nupkg
tag: ${{ github.ref }}
overwrite: true
file_glob: true
deployReleaseDocs:
needs: deployReleaseBinaries
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Restore tools
run: dotnet tool restore
- name: Restore dependencies
run: dotnet restore
- name: Run Fornax
run: make docs
- name: Deploy (if tag)
if: startsWith(github.ref, 'refs/tags/')
uses: peaceiris/actions-gh-pages@v3
with:
personal_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./docs/_public
publish_branch: gh-pages
force_orphan: true
testReleaseBinariesInDotNet8Container:
needs: deployReleaseBinaries
runs-on: ubuntu-latest
container:
image: mcr.microsoft.com/dotnet/sdk:8.0
steps:
- uses: actions/checkout@v4
- name: Download artifact
uses: actions/download-artifact@v4
with:
name: binaries
path: ./artifacts
- name: Remove global.json to allow .NET 8 SDK
run: rm -f global.json
- name: Create local NuGet.config
run: |
cat > NuGet.config <<EOF
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<add key="local" value="./artifacts" />
</packageSources>
<disabledPackageSources>
<add key="nuget.org" value="true" />
</disabledPackageSources>
</configuration>
EOF
- name: Install FSharpLint from downloaded binaries
run: dotnet tool install --global dotnet-fsharplint --prerelease --framework net8.0
- name: Add .NET tools to PATH
run: echo "$HOME/.dotnet/tools" >> $GITHUB_PATH
- name: Lint FSharpLint.Console project (net8.0 only)
run: dotnet fsharplint lint ./src/FSharpLint.Console/FSharpLint.Console.fsproj --framework net8.0
testReleaseBinariesWithDotNet10:
needs: deployReleaseBinaries
runs-on: ubuntu-latest
steps:
- run: dotnet --list-sdks
- uses: actions/checkout@v4
- name: Download artifact
uses: actions/download-artifact@v4
with:
name: binaries
path: ./artifacts
- name: Remove global.json to allow .NET 10 SDK
run: rm -f global.json
- name: Create local NuGet.config
run: |
cat > NuGet.config <<EOF
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<add key="local" value="./artifacts" />
</packageSources>
<disabledPackageSources>
<add key="nuget.org" value="true" />
</disabledPackageSources>
</configuration>
EOF
- name: Install FSharpLint from downloaded binaries
run: dotnet tool install --global dotnet-fsharplint --prerelease
- name: Add .NET tools to PATH
run: echo "$HOME/.dotnet/tools" >> $GITHUB_PATH
- name: Lint FSharpLint.Console project
run: dotnet fsharplint lint ./src/FSharpLint.Console/FSharpLint.Console.fsproj