我正在上编码课,学生可以使用个人私人存储库将答案上传到我们的测验中。所以这是我组织的存储库结构的样子:
my_organization/student_1_project
my_organization/student_2_project
my_organization/...
my_organization/student_n_project
我想在学生存储库中的任何push
上运行一个私有GitHub Action。该动作将对学生的工作进行部分审查,并通知我一些东西。当然,学生必须无法访问的代码,否则将提供提示和解决方案。
我有三个问题:
my_organization/student_2_project
是使用私人行动my_organization/my_private_action
吗?感谢actions/checkout@v2
(请参阅here),但似乎可以肯定,这涉及到使用键,令牌或机密-我对此不太放心,尽管确实存在错误,但目前仍会出现错误:Error: fatal: repository 'https://github.com/my_organization/my_private_action' not found
是否可以阻止学生(my_organization/student_2_project
的所有者/管理员)看到my_organization/my_private_action
中的代码?
在相同的约束下,可以将私人诉讼托管在另一个组织中吗?
非常感谢您的帮助!
答案 0 :(得分:1)
这就是我对限制的理解:
当前不直接支持使用私有/内部存储库中的操作,请参见路线图上的this issue。一种可能的解决方法是添加一个个人访问令牌,该令牌可以访问包含该操作的私有存储库,然后像这样进行检出:
- name: Get private repo with action
uses: actions/checkout@v2
with:
repository: yourorg/privateactionrepo
ref: master
token: ${{ secrets.PAT_TOKEN }}
path: .github/actions
然后您可以在另一步骤中使用该操作,例如
uses: ./.github/actions/actionname
PAT可能是组织级别的秘密,因此您不必将其添加到每个学生回购中。
由于学生的存储库可以访问PAT,因此他们可以使用它来创建工作流程,以检出私有存储库并执行所需的任何操作-上传其内容,打印每个文件等。
只要PAT有权签出包含操作的存储库,该操作就可以存在于任何地方,包括在另一个组织中。
或者,如果您想阻止学生看到自己的动作,则可以向学生的存储库中添加一个工作流,该工作流发送一个request to the GitHub API,然后在对repository_dispatch
的操作中触发一个触发器事件。