25 个版本
新版本 0.4.11 | 2024 年 8 月 21 日 |
---|---|
0.4.9 | 2024 年 8 月 21 日 |
0.4.7 | 2024 年 7 月 26 日 |
0.4.2 | 2024 年 5 月 27 日 |
0.1.4 | 2024 年 3 月 26 日 |
#302 in 开发工具
每月 505 次下载
175KB
3.5K SLoC
FluentCI Engine
如果你喜欢 FluentCI,请 ★ 星星这个仓库以示支持 💚。需要支持?加入我们的 Discord。
FluentCI Engine 是一个可编程的 CI/CD 引擎(由 FluentCI 使用),旨在简单、灵活且易于使用。它应该在主机机器上运行,无需容器化或虚拟化,并设计用于与 Nix、Pkgx、Devbox、Flox、Devenv、Hermit、EnvHub、Pixi 和 Mise 一起使用。
[!注意] 项目状态:🐲 不稳定,类似 alpha 的质量。 该项目仍处于开发的早期阶段,尚未准备好用于生产。它不是功能完整的,也不够稳定。使用风险自负。
✨ 功能
- 简单易用
- 灵活
- 无需容器化或虚拟化
- 内置对 Nix、Hermit、Pkgx、Devbox、Flox、Devenv、Envhub、Mise 和 Pixi 的支持
- 内置对 Secrets 的支持(后端:Google Secret Manager、AWS Secrets Manager、Azure Key Vault 和 HashiCorp Vault)
- 内置对服务的支持
- 缓存支持(后端:本地、S3、GCS、R2)
- 用于在 TypeScript、Gleam、Rescript 和 Purescript 中编写管道的 SDK,请参阅 @fluentci/sdk
- GraphQL API,请参阅API 文档
- OpenTelemetry 跟踪
- WebAssembly 中的插件系统,请参阅示例
🚀 快速开始
# Clone the repository
git clone https://github.com/fluentci-io/fluentci-engine.git
# Go to the project directory
cd fluentci-engine
# Install dependencies
nix develop
cargo run -p fluentci-engine -- serve
# Open the browser and go to https://127.0.0.1:6880/graphiql
# See ./fixtures for some GraphQL queries examples
[!TIP] 使用 DeterminateSystems Nix 安装程序 快速在您的机器上设置 Nix
📦 下载
Mac
: arm64: fluentci-engine_v0.4.11_aarch64-apple-darwin.tar.gz intel: fluentci-engine_v0.4.11_x86_64-apple-darwin.tar.gzLinux
: intel: fluentci-engine_v0.4.11_x86_64-unknown-linux-gnu.tar.gz arm64: fluentci-engine_v0.4.11_aarch64-unknown-linux-gnu.tar.gz
📚 文档
🧩 插件
FluentCI Engine 支持在 WebAssembly 中使用插件。您可以使用 Rust 或任何可以编译为 WebAssembly 的其他语言编写自己的插件。有关更多信息,请参阅 示例
🦀 Rust 插件示例
创建一个新的 Rust 项目
cargo new nix --lib
安装 extism_pdk
、fluentci_types
和 fluentci_pdk
包
cargo add extism_pdk fluentci_types fluentci_pdk
将以下代码保存到 src/lib.rs
use extism_pdk::*;
use fluentci_pdk::dag;
use fluentci_types::nix::NixArgs;
#[plugin_fn]
pub fn exec(command: String) -> FnResult<String> {
let stdout = dag()
.nix(NixArgs {
impure: true
})?
.with_exec(command.split_whitespace().collect())?
.stdout()?;
Ok(stdout)
}
在您的 Cargo.toml
中设置以下内容
[lib]
crate-type = ["cdylib"]
将插件编译为 WebAssembly
cargo build --release --target wasm32-unknown-unknown
运行插件
fluentci-engine call -m ./target/wasm32-unknown-unknown/release/nix.wasm -- exec nix --version
📑 可用插件
- android
- ansible-lint
- ansible
- apko
- atlas
- base
- bazel
- biome
- black
- buf
- buildx
- bun
- checkmake
- chromatic
- clojure
- cloudflare
- codecov
- cue
- cypress
- dagger
- deno
- depot
- dotnet
- elixir
- fastlane
- firebase
- flakestry
- flipt
- fly
- flutter
- github
- gleam
- go
- gradle
- grype
- heroku
- microcks
- netlify
- nixpacks
- nodejs
- pkl
- playwright
- pulumi
- oxc
- railway
- ruby
- ruff
- rust
- rye
- shuttle
- sonar
- spin
- ssh
- supabase
- syft
- symfony
- terraform
- zig
- wasmer
🌈 内置函数
FluentCI 插件开发工具包 (fluentci_pdk) 提供了一些内置函数,您可以在插件中使用
devbox
设置 Devbox 环境。
示例
dag()
.devbox()?
.with_exec(vec!["devbox", "version"])?
.stdout()?;
devenv
设置 Devenv 环境。
示例
dag()
.devenv()?
.with_exec(vec!["devenv", "version"])?
.stdout()?;
directory
在指定路径加载目录。
示例
dag()
.directory(".")?
.with_exec(vec!["ls", "-la"])?
.stdout()?;
envhub
设置 EnvHub 环境。
示例
dag()
.envhub()?
.with_exec(vec!["envhub", "--version"])?
.stdout()?;
file
在指定路径加载文件。
示例
dag()
.file("Cargo.toml")?
.path()?;
flox
设置 Flox 环境。
示例
dag()
.flox()?
.with_exec(vec!["flox", "--version"])?
.stdout()?;
git
在指定 URL 加载 Git 仓库。
示例
dag()
.git("https://github.com/tsirysndr/me")?
.branch("main")?
.tree()?
.entries()?;
http
在指定 URL 加载 HTTP 资源。
示例
dag()
.http("https://example.com")?
.path()?;
mise
设置 Mise 环境。
示例
dag()
.mise()?
.with_exec(vec!["mise", "--version"])?
.stdout()?;
nix
设置 Nix 环境。
示例
dag()
.nix(NixArgs {
impure: true
})?
.with_exec(vec!["nix", "--version"])?
.stdout()?;
pipeline
创建一个新的流水线。
示例
dag()
.pipeline("example")?
.with_exec(vec!["echo", "Hello, World!"])?
.stdout()?;
pixi
设置 Pixi 环境。
示例
dag()
.pixi()?
.with_exec(vec!["pixi", "--version"])?
.stdout()?;
pkgx
设置 Pkgx 环境。
示例
dag()
.pkgx()?
.with_exec(vec!["pkgx", "--version"])?
.stdout()?;
🌱 GitHub Actions
FluentCI 引擎旨在与 Github Actions 配合使用。您可以使用 fluentci-io/setup-fluentci@v5
操作来运行您的流水线。更多信息请见 fluentci-io/setup-fluentci。
name: Hello
on:
push:
branches:
- main
jobs:
setup-fluentci:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup FluentCI
uses: fluentci-io/setup-fluentci@v5
with:
wasm: true # set to true so WebAssembly plugins can be used
plugin: base # Name of the Wasm Plugin to use without the .wasm extension,
# will be downloaded from the registry https://pkg.fluentci.io
# Arguments to pass to the plugin: function_name args
args: |
hello Hello, World!
⚡ 缓存
FluentCI 引擎支持缓存。要启用它,设置以下环境变量:
FLUENTCI_CACHE_GCS_BUCKET
- GCS 存储桶名称,如果您使用的是 Google Cloud StorageFLUENTCI_CACHE_S3_ENDPOINT
- S3 端点,如果您使用的是兼容 S3 的存储FLUENTCI_CACHE_S3_BUCKET
- S3 存储桶名称,如果您使用的是兼容 S3 的存储FLUENTCI_CACHE_CDN_ENDPOINT
- CDN 端点,如果您使用 CDN(可选)下载缓存
[!NOTE] 使用 GCS 或 S3 缓存时,您需要设置
GOOGLE_APPLICATION_CREDENTIALS
或AWS_ACCESS_KEY_ID
和AWS_SECRET_ACCESS_KEY
环境变量。
🔭 OpenTelemetry 追踪
FluentCI 引擎支持 OpenTelemetry 追踪。要启用它,将 OTEL_EXPORTER_OTLP_ENDPOINT
或 OTEL_EXPORTER_ZIPKIN_ENDPOINT(如果您想使用 Zipkin)
环境变量设置为您希望的目标端点。
📑 日志记录
FluentCI 引擎支持将日志发送到 Baselime。要启用它,将 BASELIME_API_KEY
环境变量设置为您希望的目标 API 密钥。
依赖关系
~107MB
~2M SLoC