< 返回版块

EAHITechnology 发表于 2023-05-03 23:02

Tags:rust, 日报

pavex,一个新的 Rust web 框架

Pavex 是一个用 Rust 构建 API 的新框架。它非常不同:我们可以将 Pavex 视为用于构建 Rust API 的专用编译器。它将应用程序应该做什么的高级描述作为输入,一个 Blueprint 描述示例:

pub fn app_blueprint() -> Blueprint {
    let mut bp = Blueprint::new();
    bp.constructor(f!(crate::http_client), Lifecycle::Singleton);
    bp.constructor(f!(crate::extract_path), Lifecycle::RequestScoped);
    bp.constructor(f!(crate::logger), Lifecycle::Transient);
    bp.route(GET, "/home", f!(crate::stream_file));
    bp
}

它生成一个完整的网络服务器的源代码作为输出,根据您的规范运行,准备启动。Pavex 旨在拥有这一切:出色的人体工程学和高性能,让其 Rails、Django 或 ASP.NET Core 一样易于使用并且与剥离所有抽象的手写解决方案一样快!

  • https://github.com/LukeMathWalker/pavex

GitHub Actions in Rust

  Rust 是创建 GitHub Action 的绝佳语言。在本文中,作者将介绍如何创建 ngerakines/pr-has-issues-action GitHub Action。

  对于某些上下文,我想要一种轻量级的方法来验证 PR 的内容,特别是确保标题和正文都不为空并且至少包含 on issue 前缀。例如,如果我要创建一个标题为“Support account creation”的 PR,我想确保标题至少包含一个问题前缀,例如“ISSUE-1 Support account creation”。

  有几种不同的方法可以使用输入、输出和环境变量来实现 github action。 我想让它尽可能简单,所以我只查看与触发事件关联的 GitHub action 上下文。 期望此 action 与 pull_request 事件一起使用,因此我正在寻找该有效负载的编号、pull_request.title 和 pull_request.body 值。

  该事件数据作为挂载文件传递到上下文,并且 GITHUB_EVENT_PATH 环境变量提供该 JSON 文件的位置。 因为该操作只是与文件系统交互,所以我可以保持较低的依赖项数量和较小的生成的二进制文件。   接下来是存储库根目录中的操作描述符文件。

name: 'PR Has Issues'
description: 'Checks for issues references in pull requests.'
inputs:
  prefixes:
    description: A comma separated list of key prefixes.
    required: true
runs:
  using: 'docker'
  image: 'ghcr.io/ngerakines/pr-has-issues-action:v3'
  args:
    - ${{ inputs.prefixes }}

  你会在这里注意到几件事。 首先,runs.image: ... value 并不像 GitHub 文档所说的那样只是 Dockerfile ,而是对容器映像的引用。 当我发布一个版本时,我首先进行构建并推送到 ghcr.io。 如果我不这样做,每次引用操作时,它都会从头开始构建。 这使它减少到 2-3 秒而不是 2-3 分钟。

  另一件需要做的事情可能不是很明显,那就是确保你发布的 ghcr 包是公开的。 您需要从存储库导航到包并将可见性从私有(默认)更改为公共。 如果您不这样做,您将在使用该操作时收到容器不存在的错误。

  • https://blog.ngerakines.me/posts/github-actions-in-rust/

From 日报小组 侯盛鑫 mock

社区学习交流平台订阅:

评论区

写评论

还没有评论

1 共 0 条评论, 1 页