name: Lower null checks on: workflow_dispatch: concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: build: runs-on: ubuntu-latest env: MAIN_BRANCH: main strategy: matrix: node-version: [20.x] steps: - name: Checkout current branch uses: actions/checkout@v4 with: path: current - name: Checkout main branch uses: actions/checkout@v4 with: ref: ${{ env.MAIN_BRANCH }} path: main - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v4 with: node-version: 20.x cache: 'yarn' cache-dependency-path: | current/yarn.lock main/yarn.lock - name: Compare errors if enabling strictNullChecks env: URL: ${{ github.event.pull_request.comments_url }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | comment () { curl -X POST $URL \ -H "Content-Type: application/json" \ -H "Authorization: token $GITHUB_TOKEN" \ --data "{ \"body\": \"${1}\" }" } YARN_1="yarn --mutex network --cwd ./current" YARN_2="yarn --mutex network --cwd ./main" $YARN_1 install --ignore-scripts &> /dev/null && $YARN_1 build:backend --strictNullChecks true 2> .stderr-current > .out-current & pid1=$! $YARN_2 install --ignore-scripts &> /dev/null && $YARN_2 build:backend --strictNullChecks true 2> .stderr-main > .out-main & pid2=$! # wait for the processes that are expected to fail set +e wait $pid1 wait $pid2 set -e CURRENT=$(grep "Found [0-9]* errors" .out-current | sed 's/Found \(.*\) errors in .* files./\1/') MAIN=$(grep "Found [0-9]* errors" .out-main | sed 's/Found \(.*\) errors in .* files./\1/') if [ $CURRENT -gt $MAIN ]; then comment "After enabling [\`strictNullChecks\`](https://www.typescriptlang.org/tsconfig#strictNullChecks) this PR would be **increasing** the number of null check errors from ${MAIN} to ${CURRENT}.
Make sure your branch is up-to-date with ${MAIN_BRANCH} and **check the diff in the console output** to pinpoint the offending files." diff .out-current .out-main exit 1 else echo "The PR has $CURRENT null check errors against $MAIN in main. You're good to go!" fi