Skip to content

Commit

Permalink
✨ add a nu-check verification CI (nushell#771)
Browse files Browse the repository at this point in the history
I made a `toolkit.nu` with a very bare bones struct, this is called via
[`setup-nu`](https://github.com/hustcer/setup-nu) action, and generates
the `check-files.nu` file. After that, another nu instance run that
script to check files one by one. The folder `before_v0.60/` is
excluded.
  • Loading branch information
AucaCoyan committed Mar 12, 2024
1 parent 45f5310 commit c2ef662
Show file tree
Hide file tree
Showing 4 changed files with 128 additions and 0 deletions.
29 changes: 29 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
on:
pull_request:

env:
NUSHELL_CARGO_PROFILE: ci
NU_LOG_LEVEL: DEBUG

jobs:
nu-check:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4
- name: 'Fetch main branch'
run: |
git fetch origin main --depth 1
- uses: hustcer/[email protected]
with:
version: '*'
check-latest: true
features: full # dataframe and extra included
- name: toolkit check pr
shell: nu {0}
run: |
nu -c "use toolkit.nu *; check pr"
- name: run nu-check on modified files
shell: nu {0}
run: |
nu ./check-files.nu
33 changes: 33 additions & 0 deletions .github/workflows/daily.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
on:
push:
branches:
- main
schedule:
- cron: '30 0 * * *' # every day at 00:30 AM UTC

env:
NUSHELL_CARGO_PROFILE: ci
NU_LOG_LEVEL: DEBUG

jobs:
nu-check:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4
- name: 'Fetch main branch'
run: |
git fetch origin main --depth 1
- uses: hustcer/[email protected]
with:
version: '*'
check-latest: true
features: full # dataframe and extra included
- name: toolkit generate-file-list --full
shell: nu {0}
run: |
nu -c "use toolkit.nu *; generate-file-list --full"
- name: run nu-check on all files
shell: nu {0}
run: |
nu ./check-files.nu
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,5 @@

# ignore the git mailmap file
.mailmap

check-files.nu
64 changes: 64 additions & 0 deletions toolkit.nu
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
# this module regroups a bunch of development tools to make the development
# process easier for anyone.
#
# the main purpose of `toolkit` is to offer an easy to use interface for the
# developer during a PR cycle.


# check that all the tests pass
export def test [
] {
print "toolkit test: not implemented!"
}

# run all the necessary checks and tests to submit a perfect PR
export def "check pr" [
] {
generate-file-list
test
}

export def main [] { help toolkit }

export def generate-file-list [ --full ] {
let start = "let files = ["

mut files = [""]

if $full {
# all the *.nu files in the repo
# exept for `before_v0.60`
print "checking all files..."
mut $files = glob **/*.nu --exclude [before_v0.60/**]
} else {
# only the *.nu files changed in comparison with origin/main
$files = (git diff --name-only origin/main | lines | filter { str ends-with '.nu'} | each { path expand })
}


let new_list = $files | str join ",\n" | append "]"

let final = "
mut exit_code = 0
for file in $files {
let diagnostics_table = nu --ide-check 10 $file | to text | ['[', $in, ']'] | str join | from json
let result = $diagnostics_table | where type == \"diagnostic\" | is-empty
if $result {
print $\"✔ ($file) is ok\"
} else {
print $\"❌ ($file) has errors:\"
print ($diagnostics_table | where type == \"diagnostic\" | reject span)
$exit_code = 1
}
}
print $\"💚 All files checked!\"
exit $exit_code
"

$start
| append $new_list
| append $final
| save "check-files.nu" --force
}

0 comments on commit c2ef662

Please sign in to comment.