假设我有一个包含2个步骤的GitHub动作工作流程。
我的依存关系很少更改,并且可以安全地缓存已编译的依存关系,直到我下次更改指定其版本的锁文件为止。
是否可以保存第一步的结果,以便将来的工作流可以跳过该步骤?
我发现编译时警告非常有用,但我偶尔可能会错过它们,特别是如果它是在一个测试在CI服务器上运行的pull请求中.
理想情况下,我会在项目组合文件中指定一些会使编译器更严格的内容.
我希望这对所有混合任务都有效,我不想将标志传递给命令,因为这很容易忘记.
例如,对于带有编译器警告的项目,此命令应该失败
mix clean && mix compile
Run Code Online (Sandbox Code Playgroud)
应该是这个
mix clean && mix test
Run Code Online (Sandbox Code Playgroud) 我有一个宏,它创建一个模块,一个模块的结构,并实现该结构的协议.
在我的套件中,我有一个简单的测试模块,它调用宏,然后在生成的模块/结构/协议实现上进行断言.一个测试使用struct调用协议函数来断言它已经实现.在1.2之前,这有效,但现在它失败了,运行套件时我收到以下警告.
test/dogma/rule_builder_test.exs:7: warning: the Dogma.Rule \
protocol has already been consolidated, an implementation for \
Dogma.RuleBuilderTest.MagicTestRule has no effect
Run Code Online (Sandbox Code Playgroud)
我现在已经删除了这个测试,因为我相信我的套件的其余部分已经充分测试了这个功能,但是我很好奇是否有办法让这个功能再次运行,或者至少让警告静音.
我玩过Process.consilodate/2,但没有成功.
我想有一个匹配任何单个UTF-8字符的函数子句.
我可以匹配这样的特定字符
def foo("a") do
"It's an a"
end
Run Code Online (Sandbox Code Playgroud)
但我无法确定是否可以对任何单个UTF8字符执行相同操作.
我目前的解决方案是将字符串拆分为字符列表并进行模式匹配,但我很好奇是否可以跳过该步骤.
我正在编写的Elixir库有两个自定义混合任务,一个用于使我的库成为项目依赖项的用户使用,一个用于仅在我的项目中使用.
这里的问题是,在将我的项目添加为dep之后,两个混合任务都可供其项目中的用户使用.
我该如何防止这种情况?我试图package: [ files: [ etc ] ]在我的Mix配置中避免任务,但它仍然在我的测试项目中可用,它通过git将我的库指定为dep.
我想转到,MyMod以便%MyMod{}在我正在制作的库中保持与旧配置格式的向后兼容性.
该模块已经定义并调用defstruct宏.
我正在尝试创建一个基于 Dockerfile 的操作,该操作将一个程序添加到 中$PATH,以便以后的操作可以使用它。我的操作运行如下代码:
mkdir -p $GITHUB_WORKSPACE/bin\necho "echo Hello, world!" > $GITHUB_WORKSPACE/bin/hello-world\necho "::add-path::$GITHUB_WORKSPACE/bin"\nRun Code Online (Sandbox Code Playgroud)\n\n我的测试工作流程使用如下:
\n\njobs:\n test:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v1.0.0\n - name: Add program to path\n uses: ./\n - name: Use program\n run: hello-world\nRun Code Online (Sandbox Code Playgroud)\n\n这会失败,因为虽然程序已添加到操作中的$GITHUB_WORKSPACE/bin/hello-world值,但工作区步骤中的值不同。$GITHUB_WORKSPACE
在action中是\xc2\xa0 /github/workspace/,而在workflow中是/home/runner/work/setup-gleam/setup-gleam/,所以$PATHaction设置的加法不正确。
如何从基于 dockerfile 的 GitHub 操作将文件添加到目录,以便它位于工作流程其余部分的路径上?$PATHdockerfile 操作和非 dockerfile 操作之间似乎没有共享可写目录。
我希望能够在正在运行的进程中多次运行ExUnit测试,例如iex.
为此,我的代码看起来有点像这样:
def test do
# Unload test files
["test"]
|> Mix.Utils.extract_files("*")
|> Enum.map(&Path.expand/1)
|> Code.unload_files
# Reenable tasks
~w(loadpaths deps.loadpaths test)
|> Enum.map(&Mix.Task.reenable/1)
# Run the test suite
Mix.Task.run("test", args)
# Cleanup
:elixir_config.put(:at_exit, [])
end
Run Code Online (Sandbox Code Playgroud)
这可以,但打印test/my_app/foo_test.exs:1 warning: redefining module FooTest我的测试文件中定义的每个模块.
我认为,因为我从:elixir_code_server这些警告中卸载这些文件不会被提出,但事实并非如此.
如果不诉诸沉默stderr等方法,我怎么能沉默或避免这些警告呢?
似乎有一个编译器标志可以用来抑制这些警告,但是没有明确的公共API来设置这个标志.我们似乎可以禁用这些警告消息,没有明确的API可以这样做.
请参阅elixir_compiler:get_opt/1
https://github.com/elixir-lang/elixir/blob/master/lib/elixir/src/elixir_compiler.erl#L8-L13
查看elixir_module:check_module_availability/3它检查的位置elixir_compiler:get_opt(ignore_module_conflict)
https://github.com/elixir-lang/elixir/blob/master/lib/elixir/src/elixir_module.erl#L408-L418