From 60450491f9f3ff10a0d0f4e597091d3c13f7ca4a Mon Sep 17 00:00:00 2001 From: Wolfgang Walther Date: Fri, 9 May 2025 21:59:49 +0200 Subject: [PATCH] workflows/check-nixf-tidy: drop The workflow has been disabled for 9 months. Except for the Eval workflow, this is the most complex, yet unused, workflow. As discussed in #332695, this needs a proper wrapper first. Chances are high, that once a good CLI tool is available, the workflow would be implemented entirely different: We could easily run it via treefmt as well, so that we get the same results locally as in CI. --- .github/workflows/check-nixf-tidy.yml | 132 -------------------------- 1 file changed, 132 deletions(-) delete mode 100644 .github/workflows/check-nixf-tidy.yml diff --git a/.github/workflows/check-nixf-tidy.yml b/.github/workflows/check-nixf-tidy.yml deleted file mode 100644 index 1bb43c746bc5..000000000000 --- a/.github/workflows/check-nixf-tidy.yml +++ /dev/null @@ -1,132 +0,0 @@ -name: Check changed Nix files with nixf-tidy (experimental) - -on: - pull_request_target: - types: [opened, synchronize, reopened, edited] - -permissions: {} - -jobs: - nixos: - name: exp-nixf-tidy-check - runs-on: ubuntu-24.04 - if: "!contains(github.event.pull_request.title, '[skip treewide]')" - steps: - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - with: - ref: refs/pull/${{ github.event.pull_request.number }}/merge - # Fetches the merge commit and its parents - fetch-depth: 2 - - - name: Checking out target branch - run: | - target=$(mktemp -d) - targetRev=$(git rev-parse HEAD^1) - git worktree add "$target" "$targetRev" - echo "targetRev=$targetRev" >> "$GITHUB_ENV" - echo "target=$target" >> "$GITHUB_ENV" - - - name: Get Nixpkgs revision for nixf - run: | - # pin to a commit from nixpkgs-unstable to avoid e.g. building nixf - # from staging - # This should not be a URL, because it would allow PRs to run arbitrary code in CI! - rev=$(jq -r .rev ci/pinned-nixpkgs.json) - echo "url=https://github.com/NixOS/nixpkgs/archive/$rev.tar.gz" >> "$GITHUB_ENV" - - - uses: cachix/install-nix-action@526118121621777ccd86f79b04685a9319637641 # v31 - with: - extra_nix_config: sandbox = true - nix_path: nixpkgs=${{ env.url }} - - - name: Install nixf and jq - # provided jq is incompatible with our expression - run: "nix-env -f '' -iAP nixf jq" - - - name: Check that Nix files pass nixf-tidy - run: | - # Filtering error messages we don't like - nixf_wrapper(){ - nixf-tidy --variable-lookup < "$1" | jq -r ' - [ - "sema-escaping-with" - ] - as $ignored_errors|[.[]|select(.sname as $s|$ignored_errors|index($s)|not)] - ' - } - - failedFiles=() - - # Don't report errors to file overview - # to avoid duplicates when editing title and description - if [[ "${{ github.event.action }}" == 'edited' ]] && [[ -z "${{ github.event.edited.changes.base }}" ]]; then - DONT_REPORT_ERROR=1 - else - DONT_REPORT_ERROR= - fi - # TODO: Make this more parallel - - # Loop through all Nix files touched by the PR - while readarray -d '' -n 2 entry && (( ${#entry[@]} != 0 )); do - type=${entry[0]} - file=${entry[1]} - case $type in - A*) - source="" - dest=$file - ;; - M*) - source=$file - dest=$file - ;; - C*|R*) - source=$file - read -r -d '' dest - ;; - *) - echo "Ignoring file $file with type $type" - continue - esac - - if [[ -n "$source" ]] && [[ "$(nixf_wrapper ${{ env.target }}/"$source")" != '[]' ]] 2>/dev/null; then - echo "Ignoring file $file because it doesn't pass nixf-tidy in the target commit" - echo # insert blank line - else - nixf_report="$(nixf_wrapper "$dest")" - if [[ "$nixf_report" != '[]' ]]; then - echo "$dest doesn't pass nixf-tidy. Reported by nixf-tidy:" - errors=$(echo "$nixf_report" | jq -r --arg dest "$dest" ' - def getLCur: "line=" + (.line+1|tostring) + ",col=" + (.column|tostring); - def getRCur: "endLine=" + (.line+1|tostring) + ",endColumn=" + (.column|tostring); - def getRange: "file=\($dest)," + (.lCur|getLCur) + "," + (.rCur|getRCur); - def getBody: . as $top|(.range|getRange) + ",title="+ .sname + "::" + - (.message|sub("{}" ; ($top.args.[]|tostring))); - def getNote: "\n::notice " + (.|getBody); - def getMessage: "::error " + (.|getBody) + (if (.notes|length)>0 then - ([.notes.[]|getNote]|add) else "" end); - .[]|getMessage - ') - if [[ -z "$DONT_REPORT_ERROR" ]]; then - echo "$errors" - else - # just print in plain text - echo "${errors/::/}" - echo # add one empty line - fi - failedFiles+=("$dest") - fi - fi - done < <(git diff -z --name-status ${{ env.targetRev }} -- '*.nix') - - if [[ -n "$DONT_REPORT_ERROR" ]]; then - echo "Edited the PR but didn't change the base branch, only the description/title." - echo "Not reporting errors again to avoid duplication." - echo # add one empty line - fi - - if (( "${#failedFiles[@]}" > 0 )); then - echo "Some new/changed Nix files don't pass nixf-tidy." - echo "See ${{ github.event.pull_request.html_url }}/files for reported errors." - echo "If you believe this is a false positive, ping @Aleksanaa and @inclyc in this PR." - exit 1 - fi