AlexaDeWit/Ecluse
GitHub: AlexaDeWit/Ecluse
Écluse 是一个用 Haskell 编写的 npm 供应链弹性代理,在依赖项到达构建之前以默认拒绝策略对其实施准入审查。
Stars: 0 | Forks: 0
# Écluse

一个用于 package registries 的供应链弹性代理,使用 Haskell 编写。这个名字是法语中的“运河船闸”——每个依赖项在到达你的构建之前都必须经过的受控通道。
## 概述
`ecluse` 位于你的开发环境(或 CI)与 npm registry 之间,在任何 package 进入构建之前强制执行可配置的弹性策略。它首先通过私有的 upstream 代理请求,在应用规则后备追溯到公共 npm registry,并异步镜像已批准的 package——而其本身并不托管 package。
完整设计请参阅 [`docs/architecture.md`](docs/architecture.md):三 registry 模型、默认拒绝规则引擎、镜像队列以及配置参考。
## 开发说明
完整的贡献者指南请参阅 [`CONTRIBUTING.md`](CONTRIBUTING.md)——包含代码库规范、测试策略以及 CI / 仓库要求。以下是快速入门。
### 前置条件
启用 flakes 的 [Nix](https://nixos.org/) 会通过 dev shell 提供所有构建工具。只有集成测试套件(通过 `testcontainers` / `ministack` 启动临时 container)才需要运行中的 Docker daemon;单元测试和属性测试除了 dev shell 之外不需要任何其他东西。
### 快速开始
每项任务都通过 `make` 运行,且工具会自动从 Nix dev shell 中获取——当你尚未处于其中时,每个目标都会自动将自己包裹在 `nix develop` 中,因此可以直接在纯终端中运行:
```
make build # build library, executable, and tests
make test # fast, gating unit suite
make check # build + test + format + lint + sast (what the CI gate runs)
make run # run the proxy
make help # list every target
```
更喜欢交互式 shell?`nix develop`(或 direnv)可以让你进入其中,然后同样的 `make` 目标将直接运行这些工具。要进行封闭的、可复现的构建/检查——即沙盒化、你最终要发布的内容——请使用 `make nix-build` 和 `make nix-check`。
### 持续集成
每次推送和 pull request 都会运行 [`.github/workflows/ci.yml`](.github/workflows/ci.yml):构建、单元和集成测试、格式化与 lint,以及 Semgrep 静态分析,所有这些都会汇入一个 `gate` 作业(即那个必需的状态检查)。冒烟测试套件(live-registry 检查)也会运行,但允许失败,并且不会作为门槛。CI 使用与本地开发相同的 Nix dev shell(由 `flake.lock` 锁定),因此它会针对完全相同的工具链进行验证。详情请参阅 [`CONTRIBUTING.md`](CONTRIBUTING.md)。
## 项目结构
| 路径 | 用途 |
|------|---------|
| `app/` | 可执行入口点——仅包含简单的逻辑连接 |
| `src/` | 库——所有业务逻辑 |
| `test/` | 单元测试与集成测试 |
| `docs/` | 架构决策记录与设计文档 |
| `flake.nix` | Nix dev shell(GHC 9.6、cabal、HLS、ghcid)**以及** package 构建(`nix build`)+ 封闭检查(`nix flake check`) |
标签:Cilium, Haskell, NPM, 依赖管理, 请求拦截, 默认拒绝策略