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
社区学习交流平台订阅:
Rust.cc 论坛: 支持 rss
微信公众号:Rust 语言中文社区