@bylocico/ testcontainers-rustfs (英语)
一个小 测试容器 包装 RustFS 红外线,用 Rust 书写的 S3 兼容对象商店.
软件包是故意的依赖灯光,形状像正式的TestContainers模块,因此可以上游到 testcontainers/testcontainers-node 等会.
版本
Npm 包版本跟踪它所瞄准的 RustFS Docker 图像版本.
譬如说, @bylocico/[email protected] 默认为:
rustfs/rustfs:1.0.0-beta.1
仅用 Wrapper 的修改应该保持小幅并随下个 RustFS 目标版本在实用之处发布. 如果在 RustFS 移动前需要紧急包装修复,则发布补丁版本,并在发布注释中记录例外.
CI在拉出请求后自动运行并推出. 更新工作流程还查询了Docker Hub的进度表,找到每一个新的 semver RustFS 图像标签,按照上升顺序对每个标签进行测试,并打开一个自动并发的PR,将软件包重新瞄准最新的通过标记. 诸如 -glibc 被忽略用于包版本,因为它们是图像口味,而不是 RustFS 发布版本.
消费者仍然可以拉出任何有效的 RustFS 图像版本,而不等待这个包重新瞄准:
await new RustfsContainer('rustfs/rustfs:1.0.0-beta.1').start()
await new RustfsContainer('rustfs/rustfs:latest').start()
安装
npm install --save-dev @bylocico/testcontainers-rustfs @aws-sdk/client-s3
@aws-sdk/client-s3 是一种对等依赖,因为大多数消费者已经拥有其SDK版本.
使用量
import { PutObjectCommand, S3Client } from '@aws-sdk/client-s3'
import { RustfsContainer } from '@bylocico/testcontainers-rustfs'
const rustfs = await new RustfsContainer().start()
try {
await rustfs.ensureBucket('my-bucket')
const s3 = new S3Client({
endpoint: rustfs.getEndpoint(),
region: 'us-east-1',
credentials: {
accessKeyId: rustfs.accessKey,
secretAccessKey: rustfs.secretKey,
},
forcePathStyle: true,
})
try {
await s3.send(
new PutObjectCommand({
Bucket: 'my-bucket',
Key: 'hello.txt',
Body: 'world',
}),
)
} finally {
s3.destroy()
}
} finally {
await rustfs.stop()
}
API 密码
new RustfsContainer(image?: string)
创建未启动的 RustFS 容器 。 默认情况下,它使用与包版本相匹配的RustFS图像版本.
通过一个清晰的图像来测试不同的 RustFS 发布 :
new RustfsContainer('rustfs/rustfs:latest')
new RustfsContainer('rustfs/rustfs:1.0.0-beta.1')
.withCredentials(user, password)
覆盖默认的根用户/密码字.
默认 :
rustfsadmin / rustfsadmin
示例
const rustfs = await new RustfsContainer()
.withCredentials('test-user', 'test-password')
.start()
都一样 GenericContainer 通过继承,包括 withEnvironment, (中文(简体) ), withCommand,以及 withNetwork。 。 。 .
StartedRustfsContainer
开始的容器暴露:
getEndpoint(): string- 说吧http://<host>:<port>用于 S3 APIgetHost(): stringgetPort(): numberaccessKey: stringsecretKey: stringensureBucket(name): Promise<void>stop(): Promise<void>
ensureBucket() 是天分和容忍的 BucketAlreadyOwnedByYou 财务报告和审定财务报表 BucketAlreadyExists。 。 。 .
S3 客户端说明
使用 getEndpoint() 而不是硬编码端口。 测试容器映射容器端口 9000 到随机主机端口.
使用 AWS SDK 的路径式地址 :
forcePathStyle: true
虚拟托管的地址需要测试容器不提供的DNS条目.
发展
所需经费:
- 节点.js 18+
- 无
- 夹克
安装依赖性 :
npm install
运行检查 :
npm run typecheck
npm run build
npm test
针对特定的 RustFS 图像进行测试 :
RUSTFS_IMAGE=rustfs/rustfs:latest npm test
列表 RustFS 发布图像标记比软件包目标更新 :
node scripts/update-rustfs-version.mjs --list-newer
将软件包重新设定为特定的 RustFS 版本 :
node scripts/update-rustfs-version.mjs --version 1.0.0-beta.1
npm install --package-lock-only
发布前检查包内容 :
npm pack --dry-run
出版
出版由 .github/workflows/publish.yml。 。 。 .
仓库设置 :
- 创建 npm 自动化令牌, 并发布访问权限到
@bylocico/testcontainers-rustfs。 。 。 . - 添加到 GitHub 寄存器
NPM_TOKEN。 。 。 . - 确保 GitHub 动作有权限为 npm 出处请求 OIDC 令牌 .
释放流量 :
-
确认目标 RustFS 标记存在 :
docker manifest inspect rustfs/rustfs:1.0.0-beta.1 -
更新
package.json财务报告和审定财务报表DEFAULT_RUSTFS_VERSION改为同一版本. -
运行
npm install这样package-lock.json记录新软件包版本. -
运行
npm run typecheck && npm run build && npm test && npm pack --dry-run。 。 。 . -
推动
main。 。 。 . -
例如, 为同一版本创建 GitHub 发布
v1.0.0-beta.1。 。 。 . -
出版工作流程进行测试并发布 npm出处:
npm publish --access public --provenance
上游
让公众API接近正式的Testcontainers模块样式:
- 一个容器类别延伸
GenericContainer - 一个开始集装箱类扩展
AbstractStartedContainer - 没有特定应用程序的依赖性
- 没有 Bylocico 或 Ema 特定的运行时间行为
今后上游对 testcontainers/testcontainers-node 小而可审.