此 GitHub Action 将为您配置 Nushell 运行环境。
在大多数情况下,你只需要在工作流程中通过 version
字段指定要使用的 Nushell 的版本即可。比如下面的例子将会安装 Nushell 的v0.80
版本。然后你可以在后续步骤中配置你想运行的命令,最后别忘了设置shell: nu {0}
以使命令被nu
执行:
- uses: hustcer/setup-nu@v3
with:
version: "0.90" # 不要使用 0.90, 它会被认为是一个浮点数并转换为 0.9, 你可以使用 v0.90/0.90.0 或者 '0.90'(加了引号变成字符串)
- run: print $'Nu version info:(char nl)'; version
shell: nu {0}
- name: Default shell will be `nu`
shell: nu {0}
run: |
print $'Nu path:(which nu)(char nl)'
def greeting [name: string] {
print $'Hello ($name)'
}
greeting hustcer
当然,更简洁的办法是通过设置 defaults.run.shell
来让您的脚本或者命令默认由 nu
来执行,如下:
name: basic
on: push
defaults:
run:
shell: nu {0}
jobs:
basic-usage:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4.1.7
- uses: hustcer/setup-nu@main
with:
version: "*"
- run: version; print $"(char nl)Dir contents:(char nl)"; ls ((which nu).path.0 | path dirname)
- run: |
print $'Current env:(char nl)'
print $env
- name: You can run bash commands, too
run: pwd && ls -la
shell: bash
若想在 Nu
中使用模块, 可以参考如下示例:
- 通过
nu -c
使用模块
- name: Setup nu
uses: hustcer/setup-nu@v3
with:
version: 0.95.0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Use Your Nu Modules
shell: nu {0}
run: |
nu -c "use nu/module.nu *; print (get-env 'ABC-XYZ' 'DEFAULT-ABC-XYZ')"
你需要将 nu
代码包裹在 nu -c ""
中并执行, 而且要求你使用的 Nu 版本在 0.69
及以上。
- 通过绝对路径使用模块
- name: Setup nu
uses: hustcer/setup-nu@v3
with:
version: 0.95.0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Use Your Nu Modules by Absolute Path
shell: nu {0}
run: |
use ${{ github.workspace }}/nu/module.nu *
print 'Use module from: ${{ github.workspace }}/nu/module.nu'
print (get-env 'ABC-XYZ' 'DEFAULT-ABC-XYZ-ABSOLUTE-PATH')
同样,要求你使用的 Nu 版本在 0.69
及以上。
- 将你的 Nu Modules 拷贝到
$env.NU_LIB_DIRS
的任意一个目录里面
- name: Setup nu@latest
uses: hustcer/setup-nu@v3
with:
version: 0.95.0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Prepare Nu Modules
shell: nu {0}
run: |
let LIB_DIR = [$nu.default-config-dir 'scripts'] | path join
if not ($LIB_DIR | path exists) { mkdir $LIB_DIR }
cp -r nu/* $LIB_DIR
- name: Use Your Nu Modules
shell: nu {0}
run: |
use module.nu *
print (get-env 'ABC-XYZ' 'DEFAULT-ABC-XYZ')
要想通过这种方式使用 Nu Modules 请确保你的 Nu 版本不低于 0.85
。
这些方式并不完美, 不过确实可用,如果你有更好的办法(我相信一定有的)请告诉我,或者如果能提个 PR 就更好啦!
Nushell
目前正处于活跃开发期,如果你想使用最新的特性也可以通过将版本设置为 nightly
获得,比如下面的例子:
- uses: hustcer/setup-nu@v3
with:
version: nightly # Will download and setup the latest nightly version of Nushell
- run: print $'Nu version info:(char nl)'; version
shell: nu {0}
- name: Default shell will be `nu`
shell: nu {0}
run: |
print $'Nu path:(which nu)(char nl)'
def greeting [name: string] {
print $'Hello ($name)'
}
greeting hustcer
Warning 请谨慎使用
Nushell
nightly
版本: nu 的二进制文件每天都可能发生变化,可能会导致你的工作流无法正常工作。 而且只有最新的nightly
版本会被下载并配置好, 同时它的版本只能被指定为nightly
而不能是其它值。
或者你也可以查看下面几个例子:
- run-test.yaml
- run-matrix.yaml
- 进阶使用: 看看 Nushell 是如何发版的吧 工作流, 脚本
如果你想使用最新版本的 Nushell,你可以通过设置 check-latest
为 true
来做到(它与version: '*'
配置的效果相同,但更易读)。例如,以下将会安装最新版本的 Nushell:
- uses: hustcer/setup-nu@v3
with:
check-latest: true
- run: print $'Nu version info:(char nl)'; version
备注: 在 Nushell 1.0 发布之前,每个版本可能会有较大的变化,所以建议您使用指定的 Nushell 版本。
名称 | 必填 | 描述 | 类型 | 默认值 |
---|---|---|---|---|
version |
否 | 合法的 NPM 风格的 semver 版本,such as 0.86.0 也可以为nightly . |
string | * |
check-latest |
否 | 可以设置为 true 如果你想使用最新的 Nushell 版本 |
bool | false |
enable-plugins |
否 | 可以设置为 true 如果你需要注册二进制包内的插件或者逗号分隔的插件名称字符串:nu_plugin_polars,nu_plugin_query , 需要 Nu 版本 >= v0.86 |
bool|string | false |
features |
否 | 可选项: default ,full , 设置为 full 将包含 extra 和 dataframe 中的命令, full 仅支持 Nu v0.86 ~ v0.93 , 之后版本中默认版本将包含所有特性 |
string | default |
github-token |
否 | 你的 GitHub Token 或者 PAT token | string | ${{ github.token }} |
您在 version
字段指定的 semver 版本 会直接传递给 NPM 的 semver 包。此 GitHub Action 将安装最新的匹配版本。
Licensed under:
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)