Web制作・開発会社 プレスマンのスタッフブログ

PRESSMAN*Tech

GitHub Actionsを使ってSubversionを使わずにWordPress公式プラグインのバージョン管理をやってみた

公式プラグインをGitHubで管理していると、svnとgitを交互に使わなければならないのが面倒だなと常々思っていたのですが、GitHub Actionsでちょうど良いものを見つけたのでそんな話です。

GitHub Actions

GitHubの各イベントをトリガーとしたワークフローを起動させるものです。
当初はBeta版利用の申し込み制だったんですが、いつの間にか正式リリースされてました。
https://github.co.jp/features/actions

やること

今回は、10upが公開しているGitHub Actionsのワークフローを使って、
新しいバージョンのタグをpushしたときに公式のSVNリポジトリにも反映させる、ということをやっていきます。 実際にGitHub上で管理しているプラグインでやってみます。
https://wordpress.org/plugins/change-wp-cron-request-url/
GitHub: https://github.com/pressmaninc/change-wp-cron-request-url

新しいバージョンのタグをpushしたときに公式のSVNリポジトリにも反映させる

新しいバージョンのタグをpushしたときに公式リポジトリにアップするactionを使います。
GitHub: https://github.com/marketplace/actions/wordpress-plugin-deploy
以下の順序でやっていきます。
  1. assetsディレクトリを作る
  2. secretsを用意する
  3. バージョン管理から除外するファイルの設定をする
  4. yamlを用意する
  5. タグ付けしてpushしてみる

assetsディレクトリを作る

assets配下のファイルは指定されたディレクトリに移動する必要があります。
デフォルトでは.wordpress-org ですが、ASSETS_DIR で指定することもできます。
今回はそのまま .wordpress-orgにしてます。
https://github.com/pressmaninc/change-wp-cron-request-url/tree/master/.wordpress-org
ここに、看板画像やアイコンを配置すると、公式リポジトリのassets配下に配置されます。

secretsを用意する

公式リポジトリのアクセス情報を用意するんですが、GitHubアクションから参照できるようにsectretsに設定しておきます。
該当のGitHubリポジトリから、Settingsタブへ移動して、追加しておきます。

バージョン管理から除外するファイルの設定をする

ビルドには使用するけど公式リポジトリのバージョン管理には載せたくないファイルがいくつか存在するかと思います。
例えば、以下のようなものが挙げられます。
  • gitに関連するファイル (.gitignoreとか)
  • テストモジュール
  • composerやnpm, yarnなどのビルドに必要なファイル
これらのファイルは .gitattributesに記載することで除外出来ます。
# Directories
/.wordpress-org export-ignore
/.github export-ignore
/bin export-ignore
/tests export-ignore

# Files
/.gitattributes export-ignore
/.gitignore export-ignore
/.phpcs.xml.dist export-ignore
/.travis.yml export-ignore
/phpunit.xml.dist export-ignore

yamlを用意する

.github/workflows配下にワークフローを記述したyamlファイルを配置してあげます。
name: Deploy to WordPress.org
on:
  push:
    tags:
      - "*"
jobs:
  tag:
    name: New tag
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@master
    - name: WordPress Plugin Deploy
      uses: 10up/action-wordpress-plugin-deploy@1.5.0
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        SVN_PASSWORD: ${{ secrets.SVN_PASSWORD }}
        SVN_USERNAME: ${{ secrets.SVN_USERNAME }}
yamlの例は公式を見たほうが早いかも。
https://github.com/10up/action-wordpress-plugin-deploy/tree/master

タグ付けしてpushしてみる

あとはタグ付けしてpushすれば動作するはずです。
Actionsタブからログを確認して動作確認をしてみます。
2020-06-14T07:10:15.9641686Z ##[group]Run 10up/action-wordpress-plugin-deploy@1.5.0
2020-06-14T07:10:15.9641846Z with:
2020-06-14T07:10:15.9641982Z   generate-zip: false
2020-06-14T07:10:15.9643230Z env:
2020-06-14T07:10:15.9643814Z   GITHUB_TOKEN: ***
2020-06-14T07:10:15.9643968Z   SVN_PASSWORD: ***
2020-06-14T07:10:15.9644119Z   SVN_USERNAME: ***

(略)

2020-06-14T07:10:25.3950966Z Committing transaction...
2020-06-14T07:10:25.3951242Z Committed revision 2323779.
2020-06-14T07:10:25.4097265Z Generating zip file...
2020-06-14T07:10:25.4109657Z   adding: admin/ (stored 0%)
2020-06-14T07:10:25.4113118Z   adding: admin/admin.php (deflated 71%)
2020-06-14T07:10:25.4113360Z   adding: classes/ (stored 0%)
2020-06-14T07:10:25.4114274Z   adding: classes/class-field-validator-interface.php (deflated 21%)
2020-06-14T07:10:25.4114632Z   adding: classes/class-domain-validator.php (deflated 44%)
2020-06-14T07:10:25.4114969Z   adding: classes/class-port-validator.php (deflated 44%)
2020-06-14T07:10:25.4118352Z   adding: README.md (stored 0%)
2020-06-14T07:10:25.4120369Z   adding: readme.txt (deflated 40%)
2020-06-14T07:10:25.4120848Z   adding: change-wp-cron-request-url.php (deflated 65%)
2020-06-14T07:10:25.4121236Z ✓ Zip file generated!
2020-06-14T07:10:25.4121550Z ✓ Plugin deployed!
Plugin deployed!となっているので成功です。
失敗しているときは大体ここのログを漁っていれば原因がつかめます。

次回予告?

assetsの修正や最新バージョンのWordPressに追従するために Tested up toを修正するなどは、プラグインをバージョンアップするまでもなかったりします 。
その場合に便利なactionも用意されているので、気が向いたら書くかもしれません。。

参考