非官方的Github动作开发包
gadk的Python项目详细描述
GADK:编写Github操作工作流
非常非官方的Github动作开发工具包。在
GADK可用于:
- 将Github操作工作流定义为Python代码并将它们同步到
.github/workflows/
。在 - 共享常见的工作流模式,如构建-测试-部署。在
- 抽象特征,如人工制品。在
gadk
镜像Github操作工作流支持的选项,以便您可以生成
来自Python代码的工作流。从gadk
模块导出的类
应该足以复制现有的工作流,并具有
使用Python的抽象机制。在
安装
可以使用pip
安装GADK。在
pip install gadk
说明书
设置
- 在项目的根目录中创建一个名为
actions.py
的文件。在 - 使用import输入以下简单工作流: ^{pr2}$ 在
- 运行
gadk
。在 - 现在应该有一个名为
.github/workflows/my_workflow.yml
的文件,其中包含内容 你的工作流程。在
创建工作流
创建工作流从Workflow
类开始。在
Workflow
类是表示Github操作工作流的顶级元素。你会的
在创建新的GADK项目时,创建一个扩展Workflow
的新类,或者
测试/部署新的服务或子项目。在这个新类的构造函数中,您将指定
当工作流被触发时,其作业、所需的环境变量等
初始化Workflow
类时,需要指定一个短名称
用作.github/workflows/
中的文件名。另外,你可以加上一个可读的人名。在
何时运行工作流
工作流实例的on
方法可用于指定何时运行工作流。
当前,gadk
支持在请求请求或推/合并时触发工作流。每个
事件可以限制为对文件或目录的更改,以及在推送到分支时。
请参见On
类中的两个选项。在
fromgadkimport*classMyWorkflow(Workflow):def__init__(self)->None:super().__init__("my_workflow","my workflow")# Run when:# * for pull requests, a file under `src/` changes,# * for merge/push to master.self.on(pull_request=On(paths=["src/**"]),push=On(branches=["master"]))
请注意,必须指定工作流的on
部分。目前还没有
正在验证gadk.
添加作业
工作流实例的self.jobs
属性可用于将作业添加到工作流中。
每个作业必须是Job
的实例或其子类。在
一个作业有几个选项要指定:
- 何时运行作业:
Job(condition="..."")
指定运行 工作。例如,"github.ref == 'refs/heads/master'"
只在 当前分支是主分支。默认情况下,此条件为空,以始终运行作业。在 - 在哪个容器上运行作业:
Job(runs_on="...")
指定容器的名称。 默认情况下是ubuntu-18.04
。在 - 要运行的步骤:
Job(steps=[...])
指定要为此作业执行的步骤。 每个步骤必须是RunStep
或UsesStep
实例或其子类。默认情况下gadk
添加签出v2步骤并将其添加到步骤列表中。这是一个有用的 大多数作业的默认值,但可以通过指定Job(default_checkout=False)
禁用。在 - 要向作业的步骤公开哪些环境变量:
Job(env={...})
指定 其他环境变量。默认情况下,不指定环境变量。在 - 在此作业之前需要运行哪些作业:
Job(needs=[...])
指定作业的名称 应该在这项工作之前运行。将此列表留空或未指定意味着作业将 总是运行,这也是默认设置。在
fromgadkimport*classMyWorkflow(Workflow):def__init__(self)->None:super().__init__("my_workflow","my workflow")# Specify 2 jobs to be run, one after the other..self.jobs["test"]=Job(steps=[RunStep("pytest"),RunStep("mypy")],# Run 2 shell commands, one after the other.# condition="" # No condition specified to run always.# runs_on="ubuntu-18.04" # Run on the default container as specified by gadk.env={"PYTHONPATH":"."},# Add 1 additional environment variable.# needs=None # No other jobs need to be executed before this job.# default_checkout=True # Prepend an additional step to checkout the repository.)self.jobs["build"]=Job(needs=["test"],# The "test" job specified above must have finished running before this job can start.steps=[RunStep("tar ...")],# Run a single fictional command (excluding the default checkout command).)
伪影
工件是由于作业而创建的文件或目录。它们通常用于共享资源 在作业之间,例如为部署构建代码并在部署前验证代码工件时, 最后部署所述工件。它们也可以用于调试,因为Github操作公开了工件 由工作流创建。在
工件的默认实现使用actions/upload-artifact@v2
操作来上传工件
然后使用actions/download-artifact@v2
操作在下游下载工件
工作。在
gadk
提供了一个称为Artifact
的工件的简单抽象。为了使用它,你创造了一个人工制品
在作业之外,将artifact.as_upload()
添加到创建工件的作业步骤中,
最后将artifact.as_download()
添加到需要工件的作业步骤中。在
fromgadkimport*classMyWorkflow(Workflow):def__init__(self)->None:super().__init__("my_workflow","my workflow")# Create a code archive as an artifact.code=Artifact(name="code-archive",path="build/code.zip")# Specify 2 jobs to be run in parallel.self.jobs["build"]=Job(steps=[# Build code archive somehow:RunStep("build_code_archive"),# Send off the archive for others to use.code.as_upload(),])self.jobs["verify"]=Job(needs=["build"],# Needed to ensure the artifact is ready.steps=[# Get the artifact.code.as_download(),# Use somehow...],)
路线图
- 特性完整性:创建
gadk
的第一个版本是为了解决一个有限的问题。 下一步是表示所有可能的工作流。在 - 验证:配置没有被验证,但是需要像
workflow.on
这样的元素。 将来可以使用Yaml模式验证器和运行时检查来验证这一点,例如指定job.needs
中不存在的作业。在
- 项目
标签: