mcpField
Y
YAP — Yet Another Packager

YAP — Yet Another Packager

ローカル
github.com開発ツール212 日前に更新

YAP — Yet Another Packager について

YAP は共通の PKGBUILD 仕様から複数の GNU/Linux ディストリビューション向けネイティブパッケージをビルドします。分離された複数形式のビルドを必要とするパッケージメンテナー向けで、クロスコンパイル、署名、SBOM 生成にも対応します。

主な機能

  1. 01DEB、RPM、APK、TAR.ZST のビルド
  2. 02Docker または Podman による分離ビルド
  3. 03別アーキテクチャ向けクロスコンパイル
  4. 04パッケージ署名と SBOM 生成
  5. 05依存関係の解決とビルド順序管理
  6. 06OpenArtifact への成果物公開

活用シーン

  1. 01複数ディストリビューション向けのビルド
  2. 02別アーキテクチャ向け成果物の作成
  3. 03リリースへの署名と SBOM 添付

MCP 対応

付属の yap-mcp バイナリは、YAP のビルドパイプラインを MCP 対応クライアントに公開します。リリースバイナリまたはスタンドアロン OCI イメージで実行できます。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"m0rf30-yap": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"YAP_VERBOSE",
"ghcr.io/m0rf30/yap-mcp:2.8.0"
],
"env": {
"YAP_VERBOSE": "<YAP_VERBOSE>"
}
}
}
}
起動コマンドdocker run -i --rm -e YAP_VERBOSE ghcr.io/m0rf30/yap-mcp:2.8.0
設定が必要な環境変数
YAP_VERBOSESet to 1 for debug-level JSON-RPC frame logging on stderr.

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
ocighcr.io/m0rf30/yap-mcp:2.8.0

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

YAP — Yet Another Packager

yap-logo



評価レポート サンプルを見る ライセンス:GPL v3 GitHub リリース

YAP は、単一の PKGBUILD 仕様から複数の GNU/Linux ディストリビューション向けのネイティブパッケージをビルドします。パッケージを一度作成すれば、.deb、.rpm、.apk、.pkg.tar.zst を生成できます。すべてのビルドは、分離された OCI コンテナー(Docker または Podman)内で実行されます。

特長

  • 複数形式での出力:DEB(Debian/Ubuntu)、RPM(Fedora/RHEL/Rocky/openSUSE)、APK(Alpine)、TAR.ZST(Arch)
  • コンテナーによる分離:再現可能なビルド、ホスト環境への影響なし、Docker と Podman に対応
  • PKGBUILD ベース:使い慣れた Arch Linux の構文を、ディストリビューションとアーキテクチャのオーバーライドに対応するよう拡張
  • クロスコンパイル:ホストとは異なるアーキテクチャ向けにビルド
  • 依存関係を考慮したビルド:デフォルトでは順次実行、--parallel を指定するとオプトインで並列トポロジカルソート
  • パッケージ署名:APK RSA + DEB/RPM/Pacman GPG(gpg バイナリは不要)
  • SBOM 生成:CycloneDX 1.5 と SPDX 2.3 のサイドカーファイル
  • 公開:yap publish により、DEB/RPM(および APK/Pacman は未加工ファイルとして)を OpenArtifact リポジトリにアップロード
  • 形式ごとの圧縮:DEB と RPM で zstd/gzip/xz に対応
  • 変更履歴に対応:PKGBUILD の changelog フィールドを、ディストリビューションごとのネイティブ形式に変換
  • Pacman スクリプトレット:6 つのフックによるライフサイクル全体に対応(インストール前/後、アップグレード前/後、削除前/後)
  • 構造化ログ:slog ベース、長い行はツリー形式で表示、外部 UI 依存関係なし

インストール

ワンライナー(Linux/macOS、amd64/arm64):

curl -fsSL https://raw.githubusercontent.com/M0Rf30/yap/main/scripts/install.sh | sh

バージョンを固定するか、ツールを 1 つだけインストールする場合:

curl -fsSL https://raw.githubusercontent.com/M0Rf30/yap/main/scripts/install.sh \
  | sh -s -- --version v2.1.3 --tool yap

手動ダウンロード:

wget https://github.com/M0Rf30/yap/releases/latest/download/yap_Linux_x86_64.tar.gz
tar -xzf yap_Linux_x86_64.tar.gz
sudo mv yap /usr/local/bin/
yap version
ソースからビルド
git clone https://github.com/M0Rf30/yap.git
cd yap
make build
sudo mv yap /usr/local/bin/

Docker または Podman が必要です:

# Docker
sudo systemctl enable --now docker && sudo usermod -aG docker $USER

# Podman
sudo systemctl enable --now podman

クイックスタート

1. プロジェクト構成

yap.json を作成します:

{
  "name": "My Package",
  "description": "A sample package built with YAP",
  "buildDir": "/tmp/yap-build",
  "output": "artifacts",
  "projects": [
    { "name": "my-package" }
  ]
}
2. PKGBUILD

my-package/PKGBUILD を作成します:

pkgname=my-package
pkgver=1.0.0
pkgrel=1
pkgdesc="My awesome application"
arch=('x86_64')
license=('GPL-3.0')
url="https://github.com/user/my-package"
makedepends=('gcc' 'make')
source=("https://github.com/user/my-package/archive/v${pkgver}.tar.gz")
sha256sums=('SKIP')

build() {
    cd "${srcdir}/${pkgname}-${pkgver}"
    make
}

package() {
    cd "${srcdir}/${pkgname}-${pkgver}"
    install -Dm755 my-package "${pkgdir}/usr/bin/my-package"
    install -Dm644 README.md "${pkgdir}/usr/share/doc/${pkgname}/README.md"
}
3. ビルド
# Auto-detect host distro from /etc/os-release
yap build .

# Specific distribution
yap build ubuntu-jammy .
yap build fedora-38 /path/to/project
yap build --cleanbuild --no-makedeps ubuntu-jammy .
4. 出力
artifacts/
├── my-package_1.0.0-1_amd64.deb
├── my-package-1.0.0-1.x86_64.rpm
├── my-package-1.0.0-r1.apk
└── my-package-1.0.0-1-x86_64.pkg.tar.zst

プロジェクト設定(yap.json)

{
  "name": "My Multi-Package Project",
  "description": "Project description",
  "buildDir": "/tmp/yap-builds",
  "output": "dist",
  "projects": [
    { "name": "package-one", "install": true },
    { "name": "package-two" }
  ]
}
フィールド必須デフォルト説明
nameはい—プロジェクトコレクション名
descriptionはい—プロジェクトコレクションの説明
buildDirはい—ビルド/作業ディレクトリ
outputはい—ビルド済みパッケージの出力ディレクトリ
projectsはい—ビルドするパッケージの順序付き配列
projects[].nameはい—パッケージの PKGBUILD を含むサブディレクトリ
projects[].installいいえfalse後続のパッケージが依存できるよう、ビルド直後にインストールする
compressionDeb / compressionRpmいいえzstd形式ごとの圧縮:zstd/gzip/xz
signingいいえ—署名設定(パッケージ署名を参照)
reposいいえ—依存関係を解決する前に設定する追加のパッケージリポジトリ
skipDepsいいえ—makedepends から除外するパッケージ名
targetArchいいえホストクロスコンパイルのターゲットアーキテクチャ
parallelいいえfalse独立したパッケージを並列でビルド(トポロジカルソート)
sbomいいえfalseSBOM サイドカーファイルを生成
sbomFormatいいえbothcyclonedx/spdx/both
publishいいえ—yap publish のデフォルト設定(OpenArtifact への公開を参照)。トークンは保持しません

パッケージ間のビルド順序は、install フラグと各 PKGBUILD の depends/makedepends によって決まります。yap.json レベルの depends フィールドはありません。完全な仕様については、yap.schema.json を参照してください。

エディターでの検証(JSON Schema)

yap.json 用の JSON Schema がリポジトリのルートに含まれています:yap.schema.json。 圧縮、署名、リポジトリ、SBOM、クロスコンパイルなど、サポートされているすべてのフィールドを記述しています。JSON Schema に対応したエディターで自動補完とインライン検証を行うには、yap.json からこのスキーマを参照してください。

{
  "$schema": "https://www.schemastore.org/yap.json",
  "name": "My Multi-Package Project",
  "...": "..."
}

このスキーマは SchemaStore で公開されているため、エディター(VS Code、JetBrains、Neovim など)ではファイル名に基づいて任意の yap.json が自動的に検証されます。$schema 行は不要です。

PKGBUILD 拡張機能

ディストリビューション固有の変数

__(アンダースコア 2 つ)を使うと、ディストリビューションごとに任意の変数を上書きできます。優先順位は次のとおりです(数値が大きいほど優先されます)。

優先順位構文例
4+アーキテクチャ + ディストリビューションdepends_x86_64__ubuntu_noble
4アーキテクチャのみdepends_x86_64
3ディストリビューション + コードネームdepends__ubuntu_noble
2ディストリビューションdepends__ubuntu
1パッケージマネージャーdepends__apt
0基本(フォールバック)depends
pkgdesc="My application"
pkgdesc__debian="My application for Debian/Ubuntu"
pkgdesc__ubuntu_noble="My application optimized for Ubuntu 24.04"

makedepends=('gcc' 'make')
makedepends__apt=('build-essential' 'cmake')
makedepends__yum=('gcc-c++' 'cmake3')
makedepends__ubuntu_noble=('build-essential' 'cmake' 'pkg-config' 'libtool')
アーキテクチャ固有の変数
depends=('glibc' 'gcc')
depends_x86_64=('glibc' 'gcc' 'lib32-glibc')
depends_aarch64=('glibc' 'gcc' 'aarch64-linux-gnu-gcc')

source=('https://example.com/generic-source.tar.gz')
source_x86_64=('https://example.com/x86_64-optimized.tar.gz')
source_aarch64=('https://example.com/aarch64-source.tar.gz')

sha256sums=('generic_hash')
sha256sums_x86_64=('x86_64_specific_hash')
sha256sums_aarch64=('aarch64_specific_hash')

サポートされているアーキテクチャ:x86_64、i686、aarch64、armv7h、armv6h、armv5、ppc64、ppc64le、s390x、mips、mipsle、riscv64、pentium4、any。

チェックサムの種類

サポートされている種類(強度の高い順、処理の速い順):b2sums、sha512sums、sha384sums、sha256sums、sha224sums、cksums。

# BLAKE2b (recommended)
b2sums=('2f240f2a3d2f8d8f...')

# CRC32 (format: checksum filesize)
cksums=('1234567890 2048576')
変更履歴
changelog=CHANGELOG.md
  • DEB:usr/share/doc/<pkgname>/changelog.Debian.gz(Lintian 準拠)
  • RPM:パッケージメタデータにネイティブの %changelog エントリーを埋め込み
  • Pacman:アーカイブ内の .CHANGELOG
  • APK:無視(Alpine の慣例がないため)
Pacman スクリプトレット
pre_install()  { echo "Before install"; }
post_install() { systemctl daemon-reload; }
pre_upgrade()  { systemctl stop myservice; }
post_upgrade() { systemctl start myservice; }
pre_remove()   { systemctl disable myservice; }
post_remove()  { systemctl daemon-reload; }

少なくとも 1 つのフックが定義されている場合にのみ、<pkgname>.install に出力されます。pre/post_upgrade がない場合は、pre/post_install にフォールバックします。

パッケージマネージャー固有のフィールド
# DEB
section=utils
priority=optional

# RPM
group="Applications/System"
requires_pre=('shadow-utils')

# APK
maintainer="John Doe <[email protected]>"

サポートされているディストリビューション

ディストリビューション ID形式パッケージマネージャー
almalinux.rpmyum
alpine.apkapk
amzn.rpmyum
arch.pkg.tar.zstpacman
centos.rpmyum
debian.debapt
fedora.rpmyum
linuxmint.debapt
opensuse-leap.rpmzypper
opensuse-tumbleweed.rpmzypper
ol.rpmyum
pop.debapt
rhel.rpmyum
rocky.rpmyum
ubuntu.debapt

Model Context Protocol(MCP)

YAP には、同じビルドパイプラインを Model Context Protocol 経由で公開するコンパニオンバイナリ yap-mcp が含まれています。そのため、MCP 対応の LLM クライアント(Claude Desktop、opencode、Cursor、Zed、Continue、Goose など)から yap を直接操作できます。

リリースバイナリを使ったクイックスタート:

curl -fsSL https://raw.githubusercontent.com/M0Rf30/yap/main/scripts/install.sh | sh
# then add { "mcpServers": { "yap": { "command": "yap-mcp" } } } to your client config

または、スタンドアロン OCI イメージを取得してください(MCP レジストリにも io.github.M0Rf30/yap として掲載されています)。

docker pull ghcr.io/m0rf30/yap-mcp:latest
# client config:
# { "mcpServers": { "yap": { "command": "docker",
#   "args": ["run","-i","--rm","ghcr.io/m0rf30/yap-mcp:latest"] } } }
Claude Code プラグイン(サーバーとスキルを一体化)
/plugin marketplace add M0Rf30/claude-plugins
/plugin install yap@M0Rf30
Smithery
npx @smithery/cli install io.github.M0Rf30/yap --client claude

すべてのツール、クライアントごとの設定例、セキュリティモデル、トラブルシューティングについては、MCP.md をご覧ください。同梱のスキルカード skills/yap/SKILL.md は Anthropic Agent Skills のレイアウトに準拠しており、エージェント向けのワークフロー早見表を無料で提供します。配布チャンネルとリリース手順については、PUBLISHING.md に記載されています。

CLI リファレンス

コマンド
yap build [distro[-release]] <path>   # Build packages (distro auto-detected if omitted)
yap zap [distro] <path>               # Clean build environment
yap prepare [distro[-release]]        # Prepare host build environment
yap pull <distro>                     # Pull pre-built container images
yap install <artifact-file>           # Install a built artifact
yap publish [artifact-or-dir]...      # Upload built packages to an OpenArtifact repository
yap graph [path]                      # Show dependency graph
yap list-distros                      # List supported distributions
yap status                            # Show host status and runtime detection
yap version                           # Show version information
yap completion <shell>                # Generate shell completion (bash/zsh/fish/powershell)
ビルドフラグ
# Build behavior
--cleanbuild, -c            # Clean srcdir before build
--no-build, -o              # Download sources only
--zap, -z                   # Deep clean staging directory
--skip-hash-check, -H       # Skip source checksum verification
--no-container              # Build natively on the host (skip container dispatch)

# Dependencies
--no-makedeps, -d           # Skip makedeps installation
--skip-sync, -s             # Skip package manager sync
--skip-deps pkg1,pkg2       # Omit specific packages from makedeps
--parallel, -P              # Enable parallel topo-sort (opt-in)

# Version
--pkgver 1.2.3, -w          # Override package version
--pkgrel 2, -r              # Override release number

# Range / filter
--from package1             # Start from specific package
--to package5               # Stop at specific package
--only pkg1,pkg2            # Build only listed packages
--skip pkg1,pkg2            # Skip listed packages

# Source access
--ssh-password pass, -p     # Password for SSH source access
--source-retries <n>        # Retries after first attempt for source/gensum/toolchain downloads (default 3; env: YAP_SOURCE_MAX_RETRIES)

# Cross-compilation
--target-arch arm64, -t     # Cross-compile for target architecture
--skip-toolchain-validation, -T

# Repositories / trust
--repo "<spec>"             # Add an extra package repository (repeatable)
--allow-unverified-repos, -U  # Allow apt sources without a verifiable Signed-By key

# Signing
--sign, -K                  # Enable artifact signing
--sign-key /path/to/key     # Private key path
--sign-passphrase pass      # Passphrase (prefer env: YAP_SIGN_PASSPHRASE)
--sign-key-name mykey       # APK key name

# SBOM
--sbom, -S                  # Generate SBOM sidecars
--sbom-format cyclonedx     # CycloneDX 1.5 only
--sbom-format spdx          # SPDX 2.3 only
--sbom-format both          # Both (default)

# Compression
--compression-deb gzip      # DEB: zstd|gzip|xz (default: zstd)
--compression-rpm xz        # RPM: zstd|gzip|xz (default: zstd)

# Debug / output
--debug-dir /path, -D       # Emit split debug info
--verbose                   # Verbose logging
--no-color                  # Disable colored output
シェル補完
yap completion bash > /etc/bash_completion.d/yap
yap completion zsh > /usr/share/zsh/site-functions/_yap
yap completion fish > ~/.config/fish/completions/yap.fish
yap completion powershell > yap.ps1

パッケージ署名

形式アルゴリズム出力
APKRSA PKCS#1 v1.5 SHA1埋め込みストリーム .SIGN.RSA.<keyname>.rsa.pub
DEBOpenPGP<package>.deb.asc(ASCII アーマー形式の分離署名)
RPMOpenPGP<package>.rpm.asc + rpmpack による RPM 内への任意の署名
PacmanOpenPGP<package>.pkg.tar.zst.sig(バイナリ形式の分離署名)

署名には github.com/ProtonMail/go-crypto/openpgp を使用するため、gpg バイナリは不要です。

キーの解決順序(優先度の高い順)
  1. --sign-key <path> CLI フラグ
  2. 形式別環境変数:YAP_APK_KEY、YAP_DEB_KEY、YAP_RPM_KEY、YAP_PACMAN_KEY
  3. グローバル環境変数:YAP_SIGN_KEY
  4. yap.json のフィールド signing.keyPath
  5. ~/.config/yap/keys/<format>.{rsa,gpg}、次に ~/.config/yap/keys/default.{rsa,gpg}

パスフレーズの解決順序も、_PASSPHRASE サフィックスを付けて、キーの解決順序に準じます。

yap.json の署名設定
{
  "signing": {
    "enabled": true,
    "keyPath": "~/.config/yap/keys/release.gpg",
    "keyName": "release"
  }
}
署名済みパッケージの検証
# APK (after distributing the public key to /etc/apk/keys/)
apk add my-package.apk

# DEB
gpg --verify my-package_1.0.0_amd64.deb.asc my-package_1.0.0_amd64.deb

# RPM
rpm -K my-package-1.0.0-1.x86_64.rpm

# Pacman
pacman-key --verify my-package-1.0.0-1-x86_64.pkg.tar.zst.sig

OpenArtifact への公開

yap publish は、ホスト型の OpenArtifact リポジトリにビルド済みパッケージをアップロードします。このリポジトリは apt/dnf インデックス(Release、Packages、repomd.xml)を自ら提供します。

形式使用するルート備考
DEBPOST {url}/api/v1/repositories/{deb-repo}/debsfile、distribution、component のマルチパート
RPMPOST {url}/api/v1/repositories/{rpm-repo}/packagesfile のマルチパート
APKPUT {url}/repos/raw/{apk-repo}/{apk-path}/{file}ホスト型の raw リポジトリです。OpenArtifact はまだ apk インデックスに対応していません
PacmanPUT {url}/repos/raw/{pacman-repo}/{pacman-path}/{file}raw リポジトリです。パッケージと同じ場所にある .sig/.asc サイドカーファイルもアップロードされます
export YAP_OA_URL=https://oa.example.com
export YAP_OA_TOKEN_FILE=~/.config/yap/oa-token        # or YAP_OA_TOKEN
export YAP_OA_DEB_REPO=debs YAP_OA_RPM_REPO=rpms

yap build ubuntu-jammy .
yap publish --distribution jammy --component main ./dist   # or a single file
yap publish --dry-run ./dist                               # list only, no network

設定は次の順に解決されます(後の設定が優先されます):yap.json の publish オブジェクト、YAP_OA_* 環境変数、コマンドラインフラグ。

{
  "output": "dist",
  "publish": {
    "url": "https://oa.example.com",
    "debRepo": "debs",
    "rpmRepo": "rpms",
    "distribution": "jammy",
    "component": "main"
  }
}
設定yap.json環境変数フラグ
サーバー URLurlYAP_OA_URL--url
API トークン—YAP_OA_TOKEN、YAP_OA_TOKEN_FILE--token-file
DEB リポジトリdebRepoYAP_OA_DEB_REPO--deb-repo
RPM リポジトリrpmRepoYAP_OA_RPM_REPO--rpm-repo
APK raw リポジトリ/パスapkRepo / apkPathYAP_OA_APK_REPO / YAP_OA_APK_PATH--apk-repo / --apk-path
Pacman raw リポジトリ/パスpacmanRepo / pacmanPathYAP_OA_PACMAN_REPO / YAP_OA_PACMAN_PATH--pacman-repo / --pacman-path
apt ディストリビューション/コンポーネントdistribution / componentYAP_OA_DISTRIBUTION / YAP_OA_COMPONENT--distribution / --component

その他のフラグ:--config <yap.json|dir>(デフォルトは ./yap.json)、--retries <n> (リクエストごとの試行回数。デフォルトは 3)、--timeout <duration>(リクエストごとのタイムアウト。デフォルトは 30m)、--insecure-http、--dry-run。

動作:

  • トークン:対象リポジトリへの書き込み権限を持つ OpenArtifact API トークン(deploy トークンの oa_dep_… で十分です)。Authorization: Bearer … として送信され、yap.json やフラグの値からは受け付けられません(そのため、プロセス一覧に表示されません)。ログやエラーではマスキングされます。トークンは https 経由、または --insecure-http を指定しない場合はループバックホストへの http 経由でのみ送信されます。
  • 引数:パッケージファイルおよび/またはディレクトリです。引数を指定しない場合は、yap.json の output ディレクトリが公開されます。ディレクトリのスキャン中に見つかったパッケージの形式に対応するリポジトリが設定されていない場合、そのパッケージは警告を出してスキップされます。この状況でファイルを明示的に指定した場合はエラーになります。
  • 検証:サーバーから返される SHA-256(raw ファイルの場合は X-Checksum-Sha256)がローカルファイルの値と一致しない場合、公開は失敗します。
  • 再試行:接続エラーおよび HTTP 408/429/5xx は、指数バックオフとジッターを使って再試行されます。それ以外の 4xx 応答(不正なトークン、誤ったリポジトリ、無効なパッケージ)は直ちに失敗します。
  • 冪等性:DEB/RPM パッケージはサーバー上で不変であり、サーバーは 409 を返します。その後 yap はリポジトリ一覧で SHA-256 を確認します。同一のバイト列は成功(「変更なし」)と見なされます。同じ名前とバージョンで異なるバイト列の場合は失敗します。raw ファイルは X-Checksum-Sha256 がすでに一致していればスキップされ、一致しない場合は置き換えられます(リポジトリが不変のリリースを強制している場合は公開に失敗します)。
  • 署名:OpenArtifact はリポジトリの インデックス に署名します。DEB/RPM では、yap のパッケージごとの .asc ファイルはアップロードされません。APK/Pacman の raw リポジトリでは、.sig/.asc サイドカーファイルがパッケージと同じ場所にアップロードされます。

いずれかのパッケージで失敗した場合、終了ステータスは 0 以外になります。残りのパッケージの処理は引き続き試みられます。

SBOM の生成

yap build --sbom .                        # Both formats (default)
yap build --sbom --sbom-format cyclonedx .
yap build --sbom --sbom-format spdx .

各アーティファクトと同じ場所に出力:

artifacts/
└── my-package_1.0.0-1_amd64.deb
    my-package_1.0.0-1_amd64.deb.cdx.json   ← CycloneDX 1.5
    my-package_1.0.0-1_amd64.deb.spdx.json  ← SPDX 2.3

取得される情報:名前、バージョン、ライセンス、ランタイム/ビルド依存関係、ソース URL とチェックサム、ファイルハッシュ、DESCRIBES/DEPENDS_ON 関係。

高度な使い方

クロスコンパイル
yap build --target-arch=aarch64 ubuntu-jammy .
yap build --target-arch=armv7 fedora-38 .
yap build --target-arch=i686 alpine .
yap build --target-arch=ppc64le arch .

YAP は必要なクロスコンパイルツールチェーンをインストールし、ビルド環境を自動的に設定します。

マルチパッケージプロジェクト
{
  "name": "My Suite",
  "projects": [
    { "name": "core-library", "install": true },
    { "name": "main-application", "install": true },
    { "name": "plugins", "install": false }
  ]
}

"install": true が指定されたパッケージはビルド直後にインストールされるため、後続のパッケージはビルド時の依存関係として利用できます。

# Sequential (default) — explicit ordering via "install" field
yap build .

# Parallel — topo-sort + worker pool
yap build --parallel .
ビルド環境の準備
yap prepare                    # Auto-detect host distro
yap prepare ubuntu-jammy
yap prepare fedora-38
yap prepare --golang arch
yap prepare --skip-sync rocky-9
CI/CD との統合
GitHub Actions
name: Build Packages
on: [push, pull_request]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Install YAP
        run: |
          wget https://github.com/M0Rf30/yap/releases/latest/download/yap_Linux_x86_64.tar.gz
          tar -xzf yap_Linux_x86_64.tar.gz
          sudo mv yap /usr/local/bin/

      - name: Build Packages
        run: yap build

      - name: Upload Artifacts
        uses: actions/upload-artifact@v4
        with:
          name: packages
          path: artifacts/
GitLab CI
build-packages:
  stage: build
  image: ubuntu:22.04
  before_script:
    - apt-get update && apt-get install -y wget docker.io
    - wget https://github.com/M0Rf30/yap/releases/latest/download/yap_Linux_x86_64.tar.gz
    - tar -xzf yap_Linux_x86_64.tar.gz && mv yap /usr/local/bin/
  script:
    - yap build
  artifacts:
    paths:
      - artifacts/
    expire_in: 1 week

例

examples ディレクトリには、すぐにビルドできる完全なプロジェクトが含まれています。

例説明
circular-deps循環依存の検出 — YAP は明確なエラーを表示して失敗します
dependency-orchestration依存関係の自動解決とビルド順序制御を行う 5 パッケージのプロジェクト
yapYAP 自体のパッケージ化 — インストールスクリプト付きの Go アプリケーション
split-packageディストリビューションごとのオーバーライドを使い、1 回のビルドで複数のインストール可能なパッケージを生成
multi-architectureアーキテクチャ固有のソース、依存関係、チェックサム

PKGBUILD の例

シンプルな C アプリケーション
pkgname=hello-world
pkgver=1.0.0
pkgrel=1
pkgdesc="A simple Hello World program"
arch=('x86_64')
license=('MIT')
makedepends=('gcc')
source=("hello.c")
sha256sums=('SKIP')

build() { gcc -o hello hello.c; }

package() { install -Dm755 hello "${pkgdir}/usr/bin/hello"; }
Python アプリケーション
pkgname=python-myapp
pkgver=2.1.0
pkgrel=1
pkgdesc="My Python application"
arch=('any')
license=('Apache-2.0')
depends=('python3')
makedepends__apt=('python3-dev' 'python3-setuptools')
makedepends__yum=('python3-devel' 'python3-setuptools')
source=("https://pypi.io/packages/source/m/myapp/myapp-${pkgver}.tar.gz")
sha256sums=('...')

build() {
    cd "${srcdir}/myapp-${pkgver}"
    python3 setup.py build
}

package() {
    cd "${srcdir}/myapp-${pkgver}"
    python3 setup.py install --root="${pkgdir}" --optimize=1
}
systemd を使用する Web サービス
pkgname=web-service
pkgver=1.5.0
pkgrel=1
pkgdesc="My web service"
arch=('x86_64')
license=('GPL-3.0')
depends=('systemd')
backup=('etc/web-service/config.yml')
source=("web-service-${pkgver}.tar.gz" "web-service.service")
sha256sums=('...' 'SKIP')

build() {
    cd "${srcdir}/web-service-${pkgver}"
    make build
}

package() {
    cd "${srcdir}/web-service-${pkgver}"
    install -Dm755 web-service "${pkgdir}/usr/bin/web-service"
    install -Dm644 ../web-service.service \
        "${pkgdir}/usr/lib/systemd/system/web-service.service"
    install -Dm644 config.yml "${pkgdir}/etc/web-service/config.yml"
    install -dm755 "${pkgdir}/var/lib/web-service"
    install -dm755 "${pkgdir}/var/log/web-service"
}

開発

Make ターゲット
make all              # clean, deps, fmt, lint, test, doc, build
make build            # build the yap binary
make build-all        # build for linux/darwin/windows, amd64/arm64
make clean            # clean build artifacts
make deps             # download and tidy Go modules
make fmt              # gofmt
make lint             # golangci-lint
make lint-md          # markdownlint
make test             # run all tests (-p 1 -v, sequential required)
make test-coverage    # tests with coverage report (coverage.html)
make release          # create release packages

make doc              # view all package documentation
make doc-serve        # start pkgsite on localhost:8080
make doc-generate     # generate static docs in docs/api/
make doc-package PKG=./pkg/builders/apk

make docker-build DISTRO=ubuntu
make docker-build-all
make docker-list-distros

make i18n-check       # verify localization file integrity
make i18n-stats       # localization statistics
テスト

テストは逐次実行する必要があります(-p 1)。

make test
go test ./pkg/source -v
go test ./pkg/builders/deb -v
go test ./pkg/graph -v
go test -race ./pkg/builders/...
go test -timeout 30s ./pkg/download/...
国際化

対応言語:英語(en)、イタリア語(it)。

言語は LANG/LC_ALL/LC_MESSAGES/LANGUAGE から自動検出されます。--language/-l で上書きできます。

yap --language=it build .

言語を追加するには、pkg/i18n/locales/en.yaml を pkg/i18n/locales/{code}.yaml にコピーして翻訳し、pkg/i18n/i18n.go の SupportedLanguages にコードを追加して、プルリクエストを送信してください。

トラブルシューティング

コンテナランタイム
systemctl status docker       # or podman
docker run --rm hello-world   # test access
sudo usermod -aG docker $USER # fix permissions (re-login required)
ビルドの失敗
yap build --verbose
yap zap ubuntu-jammy /path/to/project
yap status
権限の問題
sudo chown -R $USER:$USER artifacts/
setsebool -P container_manage_cgroup true   # SELinux (Red Hat family)
パフォーマンス
yap build --skip-sync     # skip package manager sync
yap build --cleanbuild    # clean source before build

貢献

  1. リポジトリをフォークします
  2. 機能ブランチを作成します:git checkout -b feature/my-feature
  3. 変更を加えてテストを追加します
  4. make fmt lint test を実行します
  5. コミットしてプルリクエストを作成します

コミュニティのガイドラインについては、CODE_OF_CONDUCT.md を参照してください。

ライセンス

GNU General Public License v3.0。LICENSE.md を参照してください。

クレジット

  • YAP の着想元となったプロジェクト Pacur への貢献について、Zachary Huff
  • PKGBUILD 形式を提供する Arch Linux コミュニティ
  • すべてのコントリビューター

Go、Cobra、Docker/Podman で構築されています。


問題を報告 · ディスカッション · Wiki

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。