如何在Github工作流程上运行Ruby脚本

时间:2020-03-26 18:10:48

标签: ruby github-actions

我有一个在创建请求请求时要运行的Ruby脚本。该请求请求验证了一系列条件,以确保可以合并请求请求。这是一个非常简单的脚本,没有外部的gem,只有标准的Ruby。

我正在尝试在运行步骤的作业上运行此脚本。问题是,我不确定文件的保存路径。

该脚本称为:validator.rb。在我的本地计算机上,我可以使用以下命令运行脚本:

ruby -r ./validator.rb -e "Validator.new.validate_something 'One parameter'"

这在本地工作正常,但是当我将其推送到GitHub时失败了。我将脚本另存为.github/workflows/ruby-scripts,因此我的工作如下:

jobs:
  title:
    name: "Title"
    runs-on: ubuntu-latest
    steps:
      - run: ruby -r ./ruby-scripts/validator.rb -e "Validator.new.validate_something '${{ github.event.pull_request.title}}'"

我得到:

Run ruby -r ./ruby-scripts/validator.rb -e "Validator.new.validate 'Create README.md'"
/usr/lib/ruby/vendor_ruby/rubygems/defaults/operating_system.rb:10: warning: constant Gem::ConfigMap is deprecated
/usr/lib/ruby/vendor_ruby/rubygems/defaults/operating_system.rb:10: warning: constant Gem::ConfigMap is deprecated
/usr/lib/ruby/vendor_ruby/rubygems/defaults/operating_system.rb:29: warning: constant Gem::ConfigMap is deprecated
/usr/lib/ruby/vendor_ruby/rubygems/defaults/operating_system.rb:30: warning: constant Gem::ConfigMap is deprecated
/usr/lib/ruby/vendor_ruby/rubygems/defaults/operating_system.rb:10: warning: constant Gem::ConfigMap is deprecated
/usr/local/lib/site_ruby/2.5.0/rubygems/core_ext/kernel_require.rb:92:in `require': cannot load such file -- ./ruby-scripts/validator.rb (LoadError)
  from /usr/local/lib/site_ruby/2.5.0/rubygems/core_ext/kernel_require.rb:92:in `require'
##[error]Process completed with exit code 1.

我尝试了所有可能的路径组合,但每次都会失败。

运行pwdls返回:

 - run: pwd => /home/runner/work/repo-name/repo-name
 - run: ls => shell: /bin/bash -e {0}

正确的方法是什么?

2 个答案:

答案 0 :(得分:1)

正如我在评论中提到的那样,您的工作流无法正常工作的原因是您忘记了检出存储库的关键步骤。默认情况下,除非您使用Checkout GitHub Action检出存储库,否则工作空间为空。

来自GitHub Action的自述文件:

此操作将检出$GITHUB_WORKSPACE下的存储库,以便您的工作流可以访问它。

这是一个例子:

- name: Checkout Repo
  uses: actions/checkout@v2

(就是这样)

(注意:您不必为步骤指定名称。)

答案 1 :(得分:0)

对我来说,问题还在于文件的位置。 ruby脚本在存储库的根目录中运行,而不是在与工作流YAML相同的路径中(正如我期望的那样)。

我正在运行run: ruby -r ./my-file.rb,其中my-file.rb在工作流yaml旁边。

我通过添加以下步骤来实现这一点:

- run: ruby -e 'p `ls`.split("\n")'

ls的输出打印在红宝石数组中。

我固定使用: run: ruby ./.github/workflows/my_file.rb