このドキュメントは AI によって自動翻訳されています。不正確な部分がある場合は、英語版 を参照してください。
他のユーザーが活発に利用しているプラグインを手作業で更新するのは手間がかかります。リリースのたびに、コードの修正、バージョンの更新、変更のプッシュ、ブランチの作成、ファイルのパッケージング、PR の作成を行う必要があります。
Plugin Auto-PR は、この一連の作業全体を自動化する GitHub Actions ワークフローです。1 回のプッシュでプラグインをパッケージングしてマーケットプレイス PR を作成するため、開発そのものに集中できます。
コンセプト
GitHub Actions
GitHub Actions は、GitHub 上の開発タスクを自動化します。トリガー(例:コードのプッシュ)が発生すると、クラウドベースの仮想マシンでワークフローが実行され、ビルドからデプロイまでをすべて処理します。
GitHub Actions の利用制限:
- パブリックリポジトリ:無制限
- プライベートリポジトリ:月 2000 分
Plugin Auto-PR
このワークフローは次のステップを実行します。
- プラグインソースリポジトリの main ブランチにコードをプッシュするとトリガーされます。
manifest.yaml ファイルからプラグイン情報を読み取ります。
- プラグインを
.difypkg ファイルとしてパッケージングします。
- パッケージングしたファイルを、フォークした
dify-plugins リポジトリにプッシュします。
- 新しいブランチを作成し、変更をコミットします。
- 上流リポジトリへマージするための PR を作成します。
前提条件
リポジトリ
- 自分のプラグインソースコードリポジトリ(例:
your-name/plugin-source)。
- 自分がフォークしたプラグインリポジトリ(例:
your-name/dify-plugins)。
- フォーク内にプラグインのディレクトリ構造がすでに用意されていること:
dify-plugins/
└── your-author-name
└── plugin-name
フォークしたリポジトリにコードをプッシュし、上流リポジトリに PR を作成できる GitHub Personal Access Token (PAT) を作成します。
パラメータと設定
セットアップ要件
自動公開には 2 つの準備が必要です。
manifest.yaml ファイルが自動化を駆動します。
name:プラグインの名前(パッケージ名とブランチ名に影響します)。
version:セマンティックバージョン番号(リリースごとに増やします)。
author:自分の GitHub ユーザー名(リポジトリのパスを決定します)。
プラグインソースリポジトリの PLUGIN_ACTION シークレットが認証情報を保持します。
- 値:十分な権限を持つ Personal Access Token (PAT)。
- 権限:フォークしたリポジトリへのブランチのプッシュと、上流リポジトリへの PR の作成。
自動生成されるパラメータ
セットアップが完了すると、ワークフローは以下のパラメータを自動的に導出します。
- GitHub ユーザー名:
manifest.yaml の author フィールドから読み取り。
- 作者フォルダ名:
author フィールドと一致。
- プラグイン名:
manifest.yaml の name フィールドから読み取り。
- ブランチ名:
bump-{plugin-name}-plugin-{version}。
- パッケージファイル名:
{plugin-name}-{version}.difypkg。
- PR のタイトルと内容:プラグイン名とバージョンから生成。
ステップバイステップガイド
リポジトリの準備
公式の dify-plugins リポジトリをフォーク済みで、自分のプラグインソースリポジトリがあることを確認してください。
シークレットの設定
プラグインソースリポジトリで Settings > Secrets and variables > Actions > New repository secret を開き、シークレットを作成します。
- Name:
PLUGIN_ACTION
- Value:ターゲットリポジトリ(
your-name/dify-plugins)への書き込み権限を持つ GitHub Personal Access Token (PAT)
ワークフローファイルの作成
リポジトリに .github/workflows/ ディレクトリを作成し、plugin-publish.yml という名前のファイルを追加して、以下のワークフローを貼り付けます。このワークフローは、概要としては main へのプッシュごとに実行され、Dify CLI をダウンロードし、マニフェストからプラグインをパッケージングし、自分の dify-plugins フォークをチェックアウトして、新しい .difypkg を含む PR を langgenius/dify-plugins に対して作成します。
# .github/workflows/plugin-publish.yml
name: Auto Create PR on Main Push
on:
push:
branches: [ main ] # main へのプッシュでトリガー
workflow_dispatch: # Actions タブからの手動実行を許可
jobs:
create_pr: # 分かりやすくするためにジョブ名を変更
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Print working directory # デバッグ用に保持
run: |
pwd
ls -la
- name: Download CLI tool
run: |
# ランナーの一時ディレクトリに bin ディレクトリを作成
mkdir -p $RUNNER_TEMP/bin
cd $RUNNER_TEMP/bin
# CLI ツールをダウンロード
wget https://github.com/langgenius/dify-plugin-daemon/releases/latest/download/dify-plugin-linux-amd64
chmod +x dify-plugin-linux-amd64
# ダウンロード先とファイルを表示
echo "CLI tool location:"
pwd
ls -la dify-plugin-linux-amd64
- name: Get basic info from manifest # ステップ名と内容を変更
id: get_basic_info
run: |
PLUGIN_NAME=$(grep "^name:" manifest.yaml | cut -d' ' -f2)
echo "Plugin name: $PLUGIN_NAME"
echo "plugin_name=$PLUGIN_NAME" >> $GITHUB_OUTPUT
VERSION=$(grep "^version:" manifest.yaml | cut -d' ' -f2)
echo "Plugin version: $VERSION"
echo "version=$VERSION" >> $GITHUB_OUTPUT
# author の名前が自分の github ユーザー名でない場合は、ここで author を変更できます
AUTHOR=$(grep "^author:" manifest.yaml | cut -d' ' -f2)
echo "Plugin author: $AUTHOR"
echo "author=$AUTHOR" >> $GITHUB_OUTPUT
- name: Package Plugin
id: package
run: |
# ダウンロードした CLI ツールでパッケージング
cd $GITHUB_WORKSPACE
# パッケージ名に変数を使用
PACKAGE_NAME="${{ steps.get_basic_info.outputs.plugin_name }}-${{ steps.get_basic_info.outputs.version }}.difypkg"
# ランナーの一時ディレクトリの CLI を使用
$RUNNER_TEMP/bin/dify-plugin-linux-amd64 plugin package . -o "$PACKAGE_NAME"
# パッケージング結果を表示
echo "Package result:"
ls -la "$PACKAGE_NAME"
echo "package_name=$PACKAGE_NAME" >> $GITHUB_OUTPUT
# ファイルのフルパスとディレクトリ構造を表示(デバッグ用に保持)
echo "\\nFull file path:"
pwd
echo "\\nDirectory structure:"
tree || ls -R
- name: Checkout target repo
uses: actions/checkout@v3
with:
# リポジトリに author 変数を使用
repository: ${{steps.get_basic_info.outputs.author}}/dify-plugins
path: dify-plugins
token: ${{ secrets.PLUGIN_ACTION }}
fetch-depth: 1 # チェックアウトを高速化するため最後のコミットのみ取得
persist-credentials: true # 後続の git 操作のために認証情報を保持
- name: Prepare and create PR
run: |
# デバッグ情報(保持)
echo "Debug: Current directory $(pwd)"
# パッケージ名に変数を使用
PACKAGE_NAME="${{ steps.get_basic_info.outputs.plugin_name }}-${{ steps.get_basic_info.outputs.version }}.difypkg"
echo "Debug: Package name: $PACKAGE_NAME"
ls -la
# 変数を使用してパッケージングしたファイルをターゲットディレクトリに移動
mkdir -p dify-plugins/${{ steps.get_basic_info.outputs.author }}/${{ steps.get_basic_info.outputs.plugin_name }}
mv "$PACKAGE_NAME" dify-plugins/${{ steps.get_basic_info.outputs.author }}/${{ steps.get_basic_info.outputs.plugin_name }}/
# ターゲットリポジトリのディレクトリに移動
cd dify-plugins
# git を設定
git config user.name "GitHub Actions"
git config user.email "actions@github.com"
# 最新の main ブランチにいることを確認
git fetch origin main
git checkout main
git pull origin main
# 変数と新しい命名規則を使用して新しいブランチを作成し切り替え
BRANCH_NAME="bump-${{ steps.get_basic_info.outputs.plugin_name }}-plugin-${{ steps.get_basic_info.outputs.version }}"
git checkout -b "$BRANCH_NAME"
# 変更を追加してコミット(git add . を使用)
git add .
git status # デバッグ用
# コミットメッセージに変数を使用
git commit -m "bump ${{ steps.get_basic_info.outputs.plugin_name }} plugin to version ${{ steps.get_basic_info.outputs.version }}"
# リモートにプッシュ(失敗した実行でブランチが既存だった場合に備えて force を使用)
git push -u origin "$BRANCH_NAME" --force
# ブランチがプッシュされたことを確認し同期を待つ(GitHub API には少し時間が必要な場合があります)
git branch -a
echo "Waiting for branch to sync..."
sleep 10 # ブランチ同期のため 10 秒待機
- name: Create PR via GitHub API
env:
GH_TOKEN: ${{ secrets.PLUGIN_ACTION }} # 認証に指定したトークンを使用
run: |
gh pr create \
--repo langgenius/dify-plugins \
--head "${{ steps.get_basic_info.outputs.author }}:${{ steps.get_basic_info.outputs.plugin_name }}-${{ steps.get_basic_info.outputs.version }}" \
--base main \
--title "bump ${{ steps.get_basic_info.outputs.plugin_name }} plugin to version ${{ steps.get_basic_info.outputs.version }}" \
--body "bump ${{ steps.get_basic_info.outputs.plugin_name }} plugin package to version ${{ steps.get_basic_info.outputs.version }}
Changes:
- Updated plugin package file" || echo "PR already exists or creation skipped." # PR が既に存在する場合を処理
- name: Print environment info # デバッグ用に保持
run: |
echo "GITHUB_WORKSPACE: $GITHUB_WORKSPACE"
echo "Current directory contents:"
ls -R
manifest.yaml の更新
以下のフィールドが正しく設定されていることを確認してください。version: 0.0.x # Version number
author: your-github-username # GitHub username/Author name
name: your-plugin-name # Plugin name
使用ガイド
初回セットアップ
最初の自動リリースの前に、以下を確認してください。
- 公式の
dify-plugins リポジトリをフォークしている。
- プラグインソースリポジトリの構造が正しい。
- プラグインソースリポジトリに
PLUGIN_ACTION シークレットが設定されている。
- ワークフローファイル
.github/workflows/plugin-publish.yml が存在する。
manifest.yaml の name と author フィールドが正しく設定されている。
その後の更新
セットアップ後に新しいバージョンを公開するには:
-
コードを修正します。
-
manifest.yaml の version フィールドを更新します。
-
すべての変更を main ブランチにプッシュします。
-
GitHub Actions がパッケージング、ブランチ作成、PR 送信を完了するのを待ちます。
プラグインソースリポジトリの main ブランチにコードをプッシュすると、GitHub Actions が公開プロセスを自動的に実行します。
- プラグインを
{plugin-name}-{version}.difypkg 形式でパッケージングします。
- パッケージングしたファイルをターゲットリポジトリにプッシュします。
- フォークリポジトリへマージするための PR を作成します。
サンプルリポジトリ
動作する設定とベストプラクティスについては、サンプルリポジトリ を参照してください。Last modified on June 25, 2026