WIP1: (TODO: guidelines) #2394
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: 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 * * *" | |
jobs: | |
build-fs: | |
name: Build F# | |
# TODO: upgrade to 24.04->24.04 (because LTS) as soon as it's available, instead of 22.04->23.10 | |
runs-on: ubuntu-22.04 | |
container: | |
image: "ubuntu:23.10" | |
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 dotnet6 | |
- 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 | |
# TODO: upgrade to 24.04->24.04 (because LTS) as soon as it's available, instead of 22.04->23.10 | |
runs-on: ubuntu-22.04 | |
container: | |
image: "ubuntu:23.10" | |
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 dotnet6 | |
- name: Run tests to validate F# scripts | |
run: dotnet test src/FileConventions.Test/FileConventions.Test.fsproj | |
build-ts: | |
name: Build TypeScript | |
# TODO: upgrade to 24.04->24.04 (because LTS) as soon as it's available, instead of 22.04->23.10 | |
runs-on: ubuntu-22.04 | |
container: | |
image: "ubuntu:23.10" | |
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 | |
# TODO: upgrade to 24.04->24.04 (because LTS) as soon as it's available, instead of 22.04->23.10 | |
runs-on: ubuntu-22.04 | |
container: | |
image: "ubuntu:23.10" | |
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 | |
# TODO: upgrade to 24.04->24.04 (because LTS) as soon as it's available, instead of 22.04->23.10 | |
runs-on: ubuntu-22.04 | |
container: | |
image: "ubuntu:23.10" | |
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 dotnet6 | |
- 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 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 |