非官方的Github动作开发包

gadk的Python项目详细描述


GADK:编写Github操作工作流

PyPI version

非常非官方的Github动作开发工具包。在

GADK可用于:

  • 将Github操作工作流定义为Python代码并将它们同步到.github/workflows/。在
  • 共享常见的工作流模式,如构建-测试-部署。在
  • 抽象特征,如人工制品。在

gadk镜像Github操作工作流支持的选项,以便您可以生成 来自Python代码的工作流。从gadk模块导出的类 应该足以复制现有的工作流,并具有 使用Python的抽象机制。在

安装

可以使用pip安装GADK。在

pip install gadk

说明书

设置

  1. 在项目的根目录中创建一个名为actions.py的文件。在
  2. 使用import输入以下简单工作流: ^{pr2}$ 在
  3. 运行gadk。在
  4. 现在应该有一个名为.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=[...])指定要为此作业执行的步骤。 每个步骤必须是RunStepUsesStep实例或其子类。默认情况下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中不存在的作业。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
空字符串检查在java中未按预期工作   JavaSpringWebClient:自动计算主体的HMAC签名并将其作为头传递   foreach是否有一个Java等效的foreach循环和一个引用变量?   java如何在Eclipse中导入jar   使用特定第三方或java时lombok触发错误。*方法或构造函数   安卓 java将对象数组转换为int数组   java使一定百分比的JUnit测试通过   java Android:将Seekbar的一个值与另一个值进行比较   java将int数组(图像数据)写入文件的最佳方式是什么   java取代了系统。yml的构造函数内的getProperty   sqlite Java将公钥和私钥转换为字符串,然后再转换回字符串   安卓获取白色像素并将其保存到java opencv中的数组中   java为什么是ServerSocket。setSocketFactory静态?   Java数组似乎在不直接修改的情况下更改值