非官方的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如何创建一个储蓄银行系统,程序在余额翻倍后停止循环   java给定两个链表,找到其中一个链表是另一个链表的子链表的索引   双常量的java比较   java如何从扩展同一类的多个类调用函数   mysql通过Java的GUI将数据添加到数据库表中。   int在java中从点后的数字中提取值   java搜索中的正则表达式   如果没有更改,java将跳过DLL编译   java getSentenceInstance和空白   java ASM(来自ObjectWeb)未正确计算MaxStack,即使已设置ClassWriter(COMPUTE_MAX+COMPUTE_STACK)   java Android:图像处理库(openCV的替代品)   java JXCollapsiblePane切换未正确处理   java我们可以从一个maven依赖项到另一个maven依赖项拥有不同的类路径位置吗?   java更改绘制的椭圆形的颜色   如何使用正则表达式或其他方法删除java字符串中的额外“\r\n”   java非易失性变量是否需要同步?   java Android下载管理器将同一文件下载两次