Arduinoライブラリの自動リリースアクション作成

概要

Arduinoライブラリを作っていると開発やPRのマージをするのは問題ないのですが、リリース作業が微妙に面倒です。難易度的には低いのですが地味に手間がかかるのでリリースが面倒なので更新しないでコミットだけする状態にたまに陥ります。

そこでGitHub Actionsを利用して、画面上からポチッと押すことでリリースできるスクリプトを作ってみました。

生成物

GitHub - tanakamasayuki/arduino-library-release-toolkit
Contribute to tanakamasayuki/arduino-library-release-toolkit development by creating an account on GitHub.

いろいろなやり方がありますが、個別の管理用リポジトリを作ってこのスクリプトをコピーして他でも再利用することにしました。

bump_version.py

GitHub Actionsから実際の呼び出されるスクリプトです。

name=TestProject
version=1.0.4
author=TANAKA Masayuki
maintainer=TANAKA Masayuki
sentence=TestProject
paragraph=TestProject
category=Communication
url=https://github.com/tanakamasayuki/
architectures=esp32

内容はlibrary.propertiesからライブラリ名や最終バージョンを取得して、そのバージョン番号をアップしてから各種ファイルに反映しています。

# Changelog / 変更履歴

## Unreleased

## 1.0.4
- (EN) Release workflow now pushes to the repository default branch (main/master/etc.) and docs reflect the change
- (JA) リリースワークフローをリポジトリのデフォルトブランチ(mainやmasterなど)に対応させ、ドキュメントも更新

CHANGELOG.mdは開発中にはUnreleasedの項目に変更点を追記していきます。bump_version.pyでリリースバージョンの行を追記することでリリース対象のチェンジログがわかるようになっています。

profiles:
  esp32:
    fqbn: esp32:esp32:esp32:DebugLevel=debug
    platforms:
      - platform: esp32:esp32 (3.3.4)
        platform_index_url: https://espressif.github.io/arduino-esp32/package_esp32_index.json
    libraries:
      - dir: ../../

sketch.yamlはArduino CLIを使うときに利用するプロジェクトファイルなります。スケッチ例のビルドをするときに開発中はdir指定をしてローカルのsrcフォルダを読み込んで利用しています。リリースした場合にはリリースバージョンに置換して最新バージョンを明示的に利用しているスケッチ例に変更しています。

/* Auto-generated by tools/bump_version.py - do not edit manually */
#ifndef TESTPROJECT_VERSION_H
#define TESTPROJECT_VERSION_H

#define TESTPROJECT_VERSION_MAJOR 1
#define TESTPROJECT_VERSION_MINOR 0
#define TESTPROJECT_VERSION_PATCH 4
#define TESTPROJECT_VERSION_STR "1.0.4"

#endif // TESTPROJECT_VERSION_H

($project)_version.hのファイル名でsrc配下にライブラリのバージョン番号を自動埋め込みしたファイルを生成しています。特に利用することはないのですが、あっても問題にならないので自動生成をすることにしました。

sync_release_assets.py

ちょっと特殊なスクリプトで、親のディレクトリを検索してbump_version.pyを利用しているプロジェクトを探して、あれば自動更新しています。本来はもう少しgit側の共有機能などを使ったほうが便利だとは思いますが、ローカルでコピーしてから個別にコミットしています。

そこまで変更しないのと、過去のライブラリは更新しなくても問題ないものが多いのでこれでまずは運用しています。

release.yml

こちらがGitHub Actionsの実際の設定ファイルとなります。ubuntu-latestにPython 3.11を入れてからbump_version.pyを実行しています。Arduinoライブラリの場合にはプロジェクトのファイルをZIPに圧縮してからリリースに貼り付ける運用が必要なのですがそこも自動化してあります。

ただし、Arduino IDEなどで利用するファイルはこのリリースに添付されているZIPファイルではないのがわかりました。リリースに添付されているファイルは無視してリリースタグのリポジトリを利用して自動生成しているようです。

今回sketch.yamlはローカル開発用にmainリポジトリではdirのローカル指定で、リリースのときだけバージョン指定に変更している変則的な運用を行っています。最初はZIPファイルの中身だけ修正していたのですがどうも反映されていなかったので、いろいろ調べたらタグを見ていたのでリリース用のブランチを作成してそこでリリース用の変更をしてからリリースタグを打つように変更してあります。

リリース手順

該当ライブラリのリポジトリでActionsの中にあるリリース用のアクションを手動実行することでリリースを行っております。やり方的にはタグをプッシュすると自動リリースとかも出来ますが私は手動が便利でした。

ちなみにGitHub Actionsは分単位の課金なので1分を超えそうになったらスクリプトの見直しをおすすめします。基本的には超えないのと、Arduinoライブラリの場合にはパブリックリポジトリなのであまり気にしなくても大丈夫だと思います。

まとめ

リリースなどは絶対的にGithub Actionsが楽です。これならちょっとした変更もリリースしてみるかとなれるのでおすすめです。ただリリーススクリプトとかは人によってかなり好みがでますのでAIコーディングとかで自分にあったスクリプトを作成するのがよいと思います!

コメント