#nix #devops #environment #ci #wasm

应用 fluentci-engine

无需容器的可编程 CI/CD 引擎,基于 Nix 构建 ❄️

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 开发工具

Download history 197/week @ 2024-05-02 114/week @ 2024-05-09 24/week @ 2024-05-16 157/week @ 2024-05-23 21/week @ 2024-05-30 5/week @ 2024-06-06 2/week @ 2024-06-13 283/week @ 2024-07-04 180/week @ 2024-07-11 22/week @ 2024-07-18 142/week @ 2024-07-25 6/week @ 2024-08-01 340/week @ 2024-08-15

每月 505 次下载

MPL-2.0 许可协议

175KB
3.5K SLoC

Cover

FluentCI Engine

FlakeHub built with nix flakestry.dev downloads crates GitHub Downloads (all assets, all releases) ci discord

如果你喜欢 FluentCI,请 ★ 星星这个仓库以示支持 💚。需要支持?加入我们的 Discord

FluentCI Engine 是一个可编程的 CI/CD 引擎(由 FluentCI 使用),旨在简单、灵活且易于使用。它应该在主机机器上运行,无需容器化或虚拟化,并设计用于与 NixPkgxDevboxFloxDevenvHermitEnvHubPixiMise 一起使用。

Made with VHS

[!注意] 项目状态:🐲 不稳定,类似 alpha 的质量。 该项目仍处于开发的早期阶段,尚未准备好用于生产。它不是功能完整的,也不够稳定。使用风险自负。

Cover

✨ 功能

🚀 快速开始

# 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

📦 下载

📚 文档

🧩 插件

FluentCI Engine 支持在 WebAssembly 中使用插件。您可以使用 Rust 或任何可以编译为 WebAssembly 的其他语言编写自己的插件。有关更多信息,请参阅 示例

🦀 Rust 插件示例

创建一个新的 Rust 项目

cargo new nix --lib

安装 extism_pdkfluentci_typesfluentci_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

📑 可用插件

🌈 内置函数

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 Storage
  • FLUENTCI_CACHE_S3_ENDPOINT - S3 端点,如果您使用的是兼容 S3 的存储
  • FLUENTCI_CACHE_S3_BUCKET - S3 存储桶名称,如果您使用的是兼容 S3 的存储
  • FLUENTCI_CACHE_CDN_ENDPOINT - CDN 端点,如果您使用 CDN(可选)下载缓存

[!NOTE] 使用 GCS 或 S3 缓存时,您需要设置 GOOGLE_APPLICATION_CREDENTIALSAWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY 环境变量。

🔭 OpenTelemetry 追踪

FluentCI 引擎支持 OpenTelemetry 追踪。要启用它,将 OTEL_EXPORTER_OTLP_ENDPOINTOTEL_EXPORTER_ZIPKIN_ENDPOINT(如果您想使用 Zipkin) 环境变量设置为您希望的目标端点。

jaeger zipkin honeycomb

📑 日志记录

FluentCI 引擎支持将日志发送到 Baselime。要启用它,将 BASELIME_API_KEY 环境变量设置为您希望的目标 API 密钥。

baselime

依赖关系

~107MB
~2M SLoC