Skip to content

CI

CI #2529

Workflow file for this run

name: CI
on:
push:
pull_request:
workflow_dispatch:
# see https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#schedule
schedule:
- cron: "0 0 * * *"
# As we use .NET 8 now, to run tools compiled for .NET 6 we need to set roll-forward to major
env:
DOTNET_ROLL_FORWARD: Major
jobs:
build-fs:
name: Build F#
runs-on: ubuntu-24.04
container:
image: "ubuntu:24.04"
steps:
- uses: actions/checkout@v4
- name: Install required dependencies
run: |
apt update
apt install --yes sudo
sudo apt install --yes --no-install-recommends git
- name: Setup .NET
run: |
# We need to install `ca-certificates`, otherwise we get these errors in the CI:
# Unable to load the service index for source https://api.nuget.org/v3/index.json.
# The SSL connection could not be established, see inner exception.
# The remote certificate is invalid because of errors in the certificate chain: UntrustedRoot
apt install --yes --no-install-recommends ca-certificates
apt install --yes --no-install-recommends dotnet-sdk-8.0
- name: Compile the conventions solution
run: dotnet build --configuration Release conventions.sln
- name: Compile F# scripts
run: dotnet fsi scripts/compileFSharpScripts.fsx
file-conventions-tests:
name: Run FileConventions-lib unit tests
needs: build-fs
runs-on: ubuntu-24.04
container:
image: "ubuntu:24.04"
steps:
- uses: actions/checkout@v4
- name: Install required dependencies
run: |
apt update
apt install --yes sudo
- name: Setup .NET
run: |
# We need to install `ca-certificates`, otherwise we get these errors in the CI:
# Unable to load the service index for source https://api.nuget.org/v3/index.json.
# The SSL connection could not be established, see inner exception.
# The remote certificate is invalid because of errors in the certificate chain: UntrustedRoot
apt install --yes --no-install-recommends ca-certificates
apt install --yes --no-install-recommends dotnet-sdk-8.0
- name: Run tests to validate F# scripts
run: dotnet test src/FileConventions.Test/FileConventions.Test.fsproj
build-ts:
name: Build TypeScript
runs-on: ubuntu-24.04
container:
image: "ubuntu:24.04"
steps:
- uses: actions/checkout@v4
- name: Install required dependencies
run: |
apt update
apt install --yes sudo
sudo apt install --yes --no-install-recommends git ca-certificates
sudo apt install --yes --no-install-recommends npm curl
- name: Print versions
run: |
git --version
node --version
npm --version
- name: Install yarn
run: |
npm install --verbose --global yarn
yarn add --dev typescript
- name: Install commitlint dependencies
run: |
. commitlint/version.config
npm install --verbose @commitlint/types@$COMMITLINT_VERSION
- name: Print versions
run: |
git --version
node --version
npm --version
- name: Run typescript compiler
run: npx tsc
commitlint-plugins-tests:
name: Run commitlint-related tests
needs: build-ts
runs-on: ubuntu-24.04
container:
image: "ubuntu:24.04"
steps:
- uses: actions/checkout@v4
- name: Install required dependencies
run: |
apt update
apt install --yes sudo
sudo apt install --yes --no-install-recommends git ca-certificates
sudo apt install --yes --no-install-recommends npm curl
- name: Install yarn
run: |
npm install --verbose --global yarn
yarn add --dev typescript ts-node
- name: Install commitlint dependencies
run: |
. commitlint/version.config
npm install --verbose @commitlint/types@$COMMITLINT_VERSION
- name: Run typescript compiler
run: npx tsc
- name: Print versions
run: |
git --version
node --version
npm --version
yarn --version
npx tsc --version
- name: Install commitlint
run: ./commitlint.sh --version
- name: Run tests to validate our plugins
run: |
# remove *.js files so that the same tests don't run twice
rm ./commitlint/tests/*.js
yarn test
sanity-check:
name: Sanity check
needs:
- file-conventions-tests
- commitlint-plugins-tests
runs-on: ubuntu-24.04
container:
image: "ubuntu:24.04"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- name: Install required dependencies
run: |
apt update && apt install --yes sudo
sudo apt install --yes --no-install-recommends npm curl
sudo apt install --yes --no-install-recommends git
# workaround for https://github.com/actions/runner/issues/2033
git config --global --add safe.directory '*'
- uses: actions/checkout@v4
with:
submodules: recursive
# needed because of commit-lint, see https://github.com/conventional-changelog/commitlint/issues/3376
fetch-depth: 0
- name: Print versions
run: |
git --version
node --version
npm --version
- name: Validate current commit (last commit) with commitlint
if: github.event_name == 'push'
run: ./commitlint.sh --last --verbose
- name: Validate PR commits with commitlint
if: github.event_name == 'pull_request'
run: |
./commitlint.sh --verbose \
--from ${{ github.event.pull_request.head.sha }}~${{ github.event.pull_request.commits }} \
--to ${{ github.event.pull_request.head.sha }}
- name: Setup .NET
run: |
# We need to install `ca-certificates`, otherwise we get these errors in the CI:
# Unable to load the service index for source https://api.nuget.org/v3/index.json.
# The SSL connection could not be established, see inner exception.
# The remote certificate is invalid because of errors in the certificate chain: UntrustedRoot
apt install --yes --no-install-recommends ca-certificates
apt install --yes --no-install-recommends dotnet-sdk-8.0
- name: Check all files end with EOL
run: dotnet fsi scripts/eofConvention.fsx
- name: Check all .fsx scripts have shebang
run: dotnet fsi scripts/shebangConvention.fsx
- name: Check all F# scripts have execute permission
run: dotnet fsi scripts/executableConvention.fsx
- name: Check there are no mixed line-endings in any files
run: dotnet fsi scripts/mixedLineEndings.fsx
- name: Check there are no unpinned GitHubActions image versions
run: dotnet fsi scripts/unpinnedGitHubActionsImageVersions.fsx
- name: Check there are no unpinned nuget package reference versions in .NET project files
run: dotnet fsi scripts/unpinnedNugetPackageReferenceVersionsInProjects.fsx
- name: Check there are no unpinned nuget package reference versions in F# scripts
run: dotnet fsi scripts/unpinnedNugetPackageReferenceVersionsInFSharpScripts.fsx
- name: Check there are no unpinned versions in `dotnet tool install` commands
run: dotnet fsi scripts/unpinnedDotnetToolInstallVersions.fsx
- name: Check commits 1 by 1
if: github.event_name == 'pull_request'
run: dotnet fsi scripts/checkCommits1by1.fsx
- name: Check there are no inconsistent versions GitHubCI files
run: dotnet fsi scripts/inconsistentVersionsInGitHubCI.fsx
- name: Check there are no inconsistent versions in nuget package references of F# scripts
run: dotnet fsi scripts/inconsistentVersionsInFSharpScripts.fsx
- name: Check there are no non-verbose flags in scripts and CI YML files
run: dotnet fsi scripts/nonVerboseFlagsInGitHubCIAndScripts.fsx
- name: Sanity check nuget packages of .NET projects
run: |
dotnet restore
dotnet fsi scripts/sanityCheckNuget.fsx
- name: Install prettier
run: npm install --verbose prettier@2.8.3
- name: Change file permissions
# We need this step so we can change the files using `npx prettier --write` in the next step.
# Otherwise we get permission denied error in the CI.
run: sudo chmod 777 --recursive .
- name: Run "prettier" to check the style of our TypeScript and YML code
run: |
sudo npx prettier --quote-props=consistent --write './**/*.ts'
sudo npx prettier --quote-props=consistent --write './**/*.yml'
# Since we changed file modes in the previous step we need the following command to
# make git ignore mode changes in files and doesn't include them in the git diff command.
git config core.fileMode false
# Since after installing commitlint dependencies package.json file changes, we need to
# run the following command to ignore package.json file
git restore package.json
git diff --exit-code
- name: FSharpLint
run: |
dotnet new tool-manifest
dotnet tool install dotnet-fsharplint --version 0.23.7--date20240109-1215.git-a263185
dotnet build conventions.sln
dotnet dotnet-fsharplint lint conventions.sln
- name: fantomless
run: |
dotnet tool install fantomless-tool --version 4.7.997-prerelease
dotnet fantomless --recurse .
git diff --exit-code