feat(codeberg-mcp): token via sops template (plus de placeholder en clair)
Le token Codeberg (CODEBERG_ACCOUNTS) est désormais injecté via un .env généré par sops.templates et sourcé par le wrapper, au lieu d'un placeholder en dur dans l'option env= (visible dans le nix store).
This commit is contained in:
@@ -0,0 +1,16 @@
|
||||
codeberg_token: ENC[AES256_GCM,data:mRUmsINN1Paq5S7f4sC2sPCoH2//jVYU4b7/SG87o3iI6zyGsAmZ,iv:sPZOonhgduZQQ95N+1yTqBalb20VJhDP3CqB0nh+W6o=,tag:cO12ott6sRnXFjoKPSDaAQ==,type:str]
|
||||
sops:
|
||||
age:
|
||||
- enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBzN0RKbyt5NUNHYUljdXlp
|
||||
a1hFSlJBeDFCZHNabC9lOXFOMXo0SWpsbUJVCnhiWXpBMGprSmhwOE1UbUtJYVNr
|
||||
OE5PVElIY3dJRGlYT09yR2c3azV5alkKLS0tIGZUVFFYVjhyZXZaRnRnOTExZHoz
|
||||
TDBUVGlWSkp5TnpabEF5RjlUZ1RRMEkKQGblvT7N5W+Ur9VjRe3s0zY+dZack3IY
|
||||
6imfbJp9ddbnlx2NnZMQaaUPXO9uatpZ73VNuijCzvSP71GnvkusrA==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
recipient: age1usm3v0ugducrzcwud60dda7xfnj49fdhecj7kcsfm7dzwzrzeyqq2jc2hm
|
||||
lastmodified: "2026-09-27T23:31:11Z"
|
||||
mac: ENC[AES256_GCM,data:ot2NbIHdLchUWNK9vAhJBPpTqYi2iBHnVePfXt8xYXKsGtqgOkHwex1wTioGMLV8kdNaJgaRD7/H/oLV3ZmYhWv1jJKLwtyI3PNtmTeEzTODv2Fl8XXPltRjuBAWG8IpIWzHZ5+QWfJoXRNQ+iVyE6h5yW1iw7adSqdlV0KConI=,iv:6rFTTLO2Wq1f9d7jKoxm5iYnkf9EfhXMb8A/qISynV0=,tag:7vQBBxU/W50NwG1CN/nJ1Q==,type:str]
|
||||
unencrypted_suffix: _unencrypted
|
||||
version: 3.13.3
|
||||
@@ -1,8 +1,19 @@
|
||||
# services/codeberg-mcp/default.nix
|
||||
# Serveur MCP Codeberg (effecet/codeberg-mcp) : 49 outils.
|
||||
# Le package est créé ici ; le mcpServers est configuré dans services/hermes/default.nix.
|
||||
{ pkgs, lib, ... }:
|
||||
let
|
||||
# Le package est créé ici ; le mcpServers est configuré dans
|
||||
# services/hermes/default.nix (ou ici, l'option est la même).
|
||||
#
|
||||
# Le token Codeberg n'est JAMAIS en clair dans le nix store : il vit dans
|
||||
# secrets/codeberg.yml (sops), est injecté dans un .env généré (sops.templates),
|
||||
# et le wrapper le "source" avant d'exec le serveur.
|
||||
# Créer le token : https://codeberg.org/user/settings/applications
|
||||
# (scopes read/write:repository, read/write:issue, read:user).
|
||||
{
|
||||
pkgs,
|
||||
lib,
|
||||
config,
|
||||
...
|
||||
}: let
|
||||
python = pkgs.python312;
|
||||
srcRepo = pkgs.fetchFromGitHub {
|
||||
owner = "effecet";
|
||||
@@ -12,22 +23,40 @@ let
|
||||
# de type et fait échouer TOUTE l'évaluation de la config tower.
|
||||
hash = "sha256-ElfVEkftD02XHQ6Cu6viaIRvSuw+kFvvmGzvzUPnnb4=";
|
||||
};
|
||||
|
||||
# .env généré depuis sops (contient CODEBERG_ACCOUNTS avec le vrai token),
|
||||
# lisible par hermes uniquement.
|
||||
envFile = config.sops.templates."codeberg-mcp.env".path;
|
||||
|
||||
# Package Python manuel : le repo n'a pas de build-system valide.
|
||||
# On crée un binaire qui lance server.py avec le bon python.
|
||||
# Le wrapper "source" le .env sops puis lance server.py.
|
||||
codeberg-mcp-bin = pkgs.writeShellScriptBin "codeberg-mcp" ''
|
||||
set -a
|
||||
. ${envFile}
|
||||
set +a
|
||||
exec ${python.interpreter} ${srcRepo}/server.py "$@"
|
||||
'';
|
||||
in {
|
||||
sops.templates."codeberg-mcp.env" = {
|
||||
content = ''
|
||||
CODEBERG_ACCOUNTS={"default": "${config.sops.placeholder."codeberg-mcp/token"}"}
|
||||
MCP_TRANSPORT=stdio
|
||||
'';
|
||||
owner = "hermes";
|
||||
mode = "0400";
|
||||
};
|
||||
|
||||
sops.secrets."codeberg-mcp/token" = {
|
||||
key = "codeberg_token";
|
||||
sopsFile = ../../secrets/codeberg.yml;
|
||||
owner = "hermes";
|
||||
};
|
||||
|
||||
# Le binaire est disponible sur le PATH.
|
||||
environment.systemPackages = [ codeberg-mcp-bin ];
|
||||
environment.systemPackages = [codeberg-mcp-bin];
|
||||
|
||||
services.hermes-agent.mcpServers.codeberg = {
|
||||
command = "${codeberg-mcp-bin}/bin/codeberg-mcp";
|
||||
env = {
|
||||
# Remplacer par le JSON du token Codeberg.
|
||||
CODEBERG_ACCOUNTS = "{\"default\": \"tok_PLACEHOLDER\"}";
|
||||
MCP_TRANSPORT = "stdio";
|
||||
};
|
||||
timeout = 60;
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user