#git-repository #git #public-api #env-var #git-forge #gemini-protocol

应用 git-gemini-forge

一个简单的Gemini服务器,从Git forge提供只读视图的公共仓库

5个版本 (3个重大更新)

新版本 0.4.0 2024年8月15日
0.3.0 2024年8月12日
0.2.0 2024年8月11日
0.1.1 2024年8月11日
0.1.0 2024年8月10日

#23HTTP客户端

Download history 19/week @ 2024-08-04 499/week @ 2024-08-11

每月518次下载

GPL-3.0-or-later

58KB
1K SLoC

git-gemini-forge

一个简单的Gemini胶囊(服务器),将Git forge的公共仓库桥接到Geminispace。受masalachai的gemini-git-browser启发。

使用Gemini浏览器(如Lagrange)在gemini://git.average.name查看项目演示。

建设中

[!警告] 此项目正在积极建设中,缺少基本功能。输入和环境变量可能会在任何时候更改,直到v1.0.0。

功能

此胶囊代理给定git forge的公共API,通常通过localhost。

支持的Forge

Forge支持愿望清单

路由

  • / -> 列出多个代码仓库,按最近活动排序。
  • /users -> 列出forge的多个用户。
  • /users/{username} -> 列出给定用户的代码仓库。
  • /users/{username}/{repository} -> 列出给定仓库的分支和代码树,以及HTTP视图的链接。
  • /users/{username}/{repository}/src/branch/{branch} -> 尚未实现。
  • /users/{username}/{repository}/src/branch/{branch}/{filename} -> 尚未实现。

待办事项

  • 显示仓库文件树的第1级。
  • 显示更多仓库元数据(描述等)。
  • 显示仓库的任意文件树。
  • 在主页上渲染仓库的README文件。
  • 分页长列表。
  • 解决GitLab集成的故障。

安装

见下文 了解如何配置环境变量。

Docker

创建一个如下的compose.yaml文件

services:
  git-gemini-forge:
    image: git.average.name/averagehelper/git-gemini-forge:latest
    container_name: git-gemini-forge
    restart: unless-stopped
    environment:
      - FORGE_TYPE=forgejo
      - FORGE_URL=http://localhost:3000
    volumes:
      - "./.certs:/app/.certs:ro"
    network_mode: "host"

还可以参考这里提供的示例compose.yaml文件。

如果您的git forge位于与主机不同的网络上,则省略network_mode并指定一个ports映射

services:
  git-gemini-forge:
    # [...]
    ports:
      - "1965:1965"

然后运行

docker compose pull
docker compose up -d

Cargo

这个crate已在我们自己的包注册处发布。安装cargo后,运行以下命令

cargo install --index sparse+https://git.average.name/api/packages/AverageHelper/cargo/ git-gemini-forge

也可从crates.io获取

cargo install git-gemini-forge

然后使用以下方式运行

FORGE_URL=http://localhost:3000 git-gemini-forge

从源码构建

使用git克隆此项目。然后,安装cargo后,使用以下命令运行项目

FORGE_URL=http://localhost:3000 cargo run --release

环境变量

  • CERTS_DIR:当二进制运行时的当前工作目录相对路径,其中git-gemini-forge应该检查key.pemcert.pem文件。有关如何生成和配置这些文件的说明,请参阅下面的内容。默认为.certs
  • FORGE_TYPE:描述被代理的forge类型,并定义调用API的预期形状。必须是forgejogiteagitlab之一,不区分大小写。默认为forgejo
  • FORGE_URL:forge的URL。如果提供的URL格式不正确,程序将立即停止。默认为http://localhost:3000Forgejo运行的常见端口)。
  • FORGE_AUTH_TOKEN:一个可选的token,可以授权访问某些特权路由,例如GitLab上的/metadata/users。如果省略,并且代理需要授权的forge,则不会发送授权,某些路由可能会响应Gemini 43 代理错误

证书

对于本地开发

创建TLS证书如下

mkdir -p .certs
cd .certs
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -sha256 -days 1103760 -nodes -subj '/CN=localhost'

[!IMPORTANT] 当在生产环境中使用时,将'/CN=localhost'部分更改为预期的域名。

请注意,上述命令中的-days参数将证书设置为在公元3024年左右到期。这对于使用Gemini胶囊或本地开发来说足够了,但除此之外并不多。

项目<project>/.certs目录必须包含key.pemcert.pem,否则服务器将崩溃。

免责声明

我对此工具的滥用不承担责任。目的是让Forgejo管理员在他们自己的Forgejo安装旁边托管此胶囊,通过localhostping forge的API。虽然支持通过HTTPS代理,但在未经许可的情况下代理外部git forge(您不拥有的)是非常无礼的。在使他人的服务器因代理流量而负载过重之前,请务必获得同意。

依赖项

~18–30MB
~497K SLoC