> ## Documentation Index
> Fetch the complete documentation index at: https://dify-6c0370d8-docs-new-agent-experience.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# PR によるプラグインの自動公開

> main へのプッシュごとに実行される GitHub Actions ワークフローで、プラグインのパッケージングとマーケットプレイス PR の作成を自動化します

> このドキュメントは AI によって自動翻訳されています。不正確な部分がある場合は、[英語版](/en/develop-plugin/publishing/marketplace-listing/plugin-auto-publish-pr) を参照してください。

## 背景

他のユーザーが活発に利用しているプラグインを手作業で更新するのは手間がかかります。リリースのたびに、コードの修正、バージョンの更新、変更のプッシュ、ブランチの作成、ファイルのパッケージング、PR の作成を行う必要があります。

**Plugin Auto-PR** は、この一連の作業全体を自動化する GitHub Actions ワークフローです。1 回のプッシュでプラグインをパッケージングしてマーケットプレイス PR を作成するため、開発そのものに集中できます。

## コンセプト

### GitHub Actions

GitHub Actions は、GitHub 上の開発タスクを自動化します。トリガー（例：コードのプッシュ）が発生すると、クラウドベースの仮想マシンでワークフローが実行され、ビルドからデプロイまでをすべて処理します。

<Frame>
  ![ワークフロー](https://assets-docs.dify.ai/2025/04/60534de8e220f860947b32a8329a8349.png)
</Frame>

GitHub Actions の利用制限：

* **パブリックリポジトリ**：無制限
* **プライベートリポジトリ**：月 2000 分

### Plugin Auto-PR

このワークフローは次のステップを実行します。

1. プラグインソースリポジトリの main ブランチにコードをプッシュするとトリガーされます。
2. `manifest.yaml` ファイルからプラグイン情報を読み取ります。
3. プラグインを `.difypkg` ファイルとしてパッケージングします。
4. パッケージングしたファイルを、フォークした `dify-plugins` リポジトリにプッシュします。
5. 新しいブランチを作成し、変更をコミットします。
6. 上流リポジトリへマージするための PR を作成します。

## 前提条件

### リポジトリ

* 自分のプラグインソースコードリポジトリ（例：`your-name/plugin-source`）。
* 自分がフォークしたプラグインリポジトリ（例：`your-name/dify-plugins`）。
* フォーク内にプラグインのディレクトリ構造がすでに用意されていること：

```text theme={null}
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 のタイトルと内容**：プラグイン名とバージョンから生成。

## ステップバイステップガイド

<Steps>
  <Step title="リポジトリの準備">
    公式の `dify-plugins` リポジトリをフォーク済みで、自分のプラグインソースリポジトリがあることを確認してください。
  </Step>

  <Step title="シークレットの設定">
    プラグインソースリポジトリで **Settings** > **Secrets and variables** > **Actions** > **New repository secret** を開き、シークレットを作成します。

    * **Name**：`PLUGIN_ACTION`
    * **Value**：ターゲットリポジトリ（`your-name/dify-plugins`）への書き込み権限を持つ GitHub Personal Access Token (PAT)

    <Frame>
      ![シークレットを作成](https://assets-docs.dify.ai/2025/04/8abd72b677dd24752910c304c76f1c26.png)
    </Frame>
  </Step>

  <Step title="ワークフローファイルの作成">
    リポジトリに `.github/workflows/` ディレクトリを作成し、`plugin-publish.yml` という名前のファイルを追加して、以下のワークフローを貼り付けます。

    このワークフローは、概要としては `main` へのプッシュごとに実行され、Dify プラグイン CLI をダウンロードし、マニフェストからプラグインをパッケージングし、自分の `dify-plugins` フォークをチェックアウトして、新しい `.difypkg` を含む PR を `langgenius/dify-plugins` に対して作成します。

    <Accordion title="完全なワークフロー YAML" defaultOpen={false}>
      ```yaml theme={null}
      # .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
      ```
    </Accordion>
  </Step>

  <Step title="manifest.yaml の更新">
    以下のフィールドが正しく設定されていることを確認してください。

    ```yaml theme={null}
    version: 0.0.x  # Version number
    author: your-github-username  # GitHub username/Author name
    name: your-plugin-name  # Plugin name
    ```
  </Step>
</Steps>

## 使用ガイド

### 初回セットアップ

最初の自動リリースの前に、以下を確認してください。

1. 公式の `dify-plugins` リポジトリをフォークしている。
2. プラグインソースリポジトリの構造が正しい。
3. プラグインソースリポジトリに `PLUGIN_ACTION` シークレットが設定されている。
4. ワークフローファイル `.github/workflows/plugin-publish.yml` が存在する。
5. `manifest.yaml` の `name` と `author` フィールドが正しく設定されている。

### その後の更新

セットアップ後に新しいバージョンを公開するには：

1. コードを修正します。

2. `manifest.yaml` の `version` フィールドを更新します。

   <Frame>
     ![リリース](https://assets-docs.dify.ai/2025/04/9eed2b9110e91e18008b399e58198f03.png)
   </Frame>

3. すべての変更を main ブランチにプッシュします。

4. GitHub Actions がパッケージング、ブランチ作成、PR 送信を完了するのを待ちます。

## 結果

プラグインソースリポジトリの main ブランチにコードをプッシュすると、GitHub Actions が公開プロセスを自動的に実行します。

* プラグインを `{plugin-name}-{version}.difypkg` 形式でパッケージングします。
* パッケージングしたファイルをターゲットリポジトリにプッシュします。
* フォークリポジトリへマージするための PR を作成します。

<Frame>
  ![結果](https://assets-docs.dify.ai/2025/04/60d5de910c6ce2482c67ddec3320311f.png)
</Frame>

## サンプルリポジトリ

動作する設定とベストプラクティスについては、[サンプルリポジトリ](https://github.com/Yevanchen/exa-in-dify) を参照してください。
