Skip to main content
このドキュメントは AI によって自動翻訳されています。不正確な部分がある場合は、英語版 を参照してください。

背景

他のユーザーが活発に利用しているプラグインを手作業で更新するのは手間がかかります。リリースのたびに、コードの修正、バージョンの更新、変更のプッシュ、ブランチの作成、ファイルのパッケージング、PR の作成を行う必要があります。 Plugin Auto-PR は、この一連の作業全体を自動化する GitHub Actions ワークフローです。1 回のプッシュでプラグインをパッケージングしてマーケットプレイス PR を作成するため、開発そのものに集中できます。

コンセプト

GitHub Actions

GitHub Actions は、GitHub 上の開発タスクを自動化します。トリガー(例:コードのプッシュ)が発生すると、クラウドベースの仮想マシンでワークフローが実行され、ビルドからデプロイまでをすべて処理します。
ワークフロー
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)。
  • フォーク内にプラグインのディレクトリ構造がすでに用意されていること:
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.yamlauthor フィールドから読み取り。
  • 作者フォルダ名author フィールドと一致。
  • プラグイン名manifest.yamlname フィールドから読み取り。
  • ブランチ名bump-{plugin-name}-plugin-{version}
  • パッケージファイル名{plugin-name}-{version}.difypkg
  • PR のタイトルと内容:プラグイン名とバージョンから生成。

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

1

リポジトリの準備

公式の dify-plugins リポジトリをフォーク済みで、自分のプラグインソースリポジトリがあることを確認してください。
2

シークレットの設定

プラグインソースリポジトリで Settings > Secrets and variables > Actions > New repository secret を開き、シークレットを作成します。
  • NamePLUGIN_ACTION
  • Value:ターゲットリポジトリ(your-name/dify-plugins)への書き込み権限を持つ GitHub Personal Access Token (PAT)
シークレットを作成
3

ワークフローファイルの作成

リポジトリに .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
4

manifest.yaml の更新

以下のフィールドが正しく設定されていることを確認してください。
version: 0.0.x  # Version number
author: your-github-username  # GitHub username/Author name
name: your-plugin-name  # Plugin name

使用ガイド

初回セットアップ

最初の自動リリースの前に、以下を確認してください。
  1. 公式の dify-plugins リポジトリをフォークしている。
  2. プラグインソースリポジトリの構造が正しい。
  3. プラグインソースリポジトリに PLUGIN_ACTION シークレットが設定されている。
  4. ワークフローファイル .github/workflows/plugin-publish.yml が存在する。
  5. manifest.yamlnameauthor フィールドが正しく設定されている。

その後の更新

セットアップ後に新しいバージョンを公開するには:
  1. コードを修正します。
  2. manifest.yamlversion フィールドを更新します。
    リリース
  3. すべての変更を main ブランチにプッシュします。
  4. GitHub Actions がパッケージング、ブランチ作成、PR 送信を完了するのを待ちます。

結果

プラグインソースリポジトリの main ブランチにコードをプッシュすると、GitHub Actions が公開プロセスを自動的に実行します。
  • プラグインを {plugin-name}-{version}.difypkg 形式でパッケージングします。
  • パッケージングしたファイルをターゲットリポジトリにプッシュします。
  • フォークリポジトリへマージするための PR を作成します。
結果

サンプルリポジトリ

動作する設定とベストプラクティスについては、サンプルリポジトリ を参照してください。
Last modified on June 25, 2026