メインコンテンツまでスキップ

オートメーション

Firmixには、API経由でプロジェクトを投稿/更新する機能があります。
プロジェクトのソースコードをGithubで管理している場合に、Github ActionsとAPI経由の投稿機能を組み合わせることで、ソースコードをリポジトリにプッシュ(orマージ)したときに、自動でFirmixに反映することができます。

アクセスキーの発行

設定画面でAPIのアクセスキーを生成します。

Workflowの構成

Github ActionsのWorkflowを作成します。

こちらのファイルを例参考にWorkflowの構成例を解説します。

name: Publish blink_xiao_rp2040

on:
push:
branches: [main]
paths:
- ".github/workflows/blink_xiao_rp2040.yaml"
- "firmix/blink_xiao_rp2040/**"

defaults:
run:
working-directory: firmix/blink_xiao_rp2040

jobs:
release:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v3
- uses: actions/cache@v3
with:
path: |
~/.cache/pip
~/.platformio/.cache
key: ${{ runner.os }}-pio
- uses: actions/setup-python@v4
with:
python-version: "3.9"
- name: Install PlatformIO Core
run: pip install --upgrade platformio

- name: Build PlatformIO Project
run: pio run

- name: Upload to Firmix
run: |
curl --fail-with-body -X POST -H "Authorization: token ${{secrets.FIRMIX_TOKEN}}" \
-F readme=@./readme.md -F thumbnail=@./thumbnail.png \
-F project=@./firmix.project.json \
-F firmware=@./.pio/build/generic/firmware.uf2 \
https://firmix.nector.me/api/project/upload

PythonとPlatformIOをインストールして、pio runでプロジェクトをビルドした後、curlでFirmixのエンドポイントを指定してコンテンツを送信しています。

アップロードAPIの詳細

エンドポイント

POST https://firmix.nector.me/api/project/uploads

ヘッダ

キー
Authorizationtoken APIアクセスキー
Content-Typemultipart/form-data

AuthorizationヘッダでAPIキーを指定します。

リクエストボディ

multipart/form-dataで各アセットのファイルを指定します。

識別子
readmereadmeファイルのパス
thumbnailサムネイルファイルのパス
projectメタデータファイルのパス
firmwareファームウェアファイルのパス

curlの書式

curl -X POST -H "Authorization: token <APIアクセスキー>" \
-F readme=@<readmeファイルのパス> -F thumbnail=@<サムネイルファイルのパス> \
-F project=@<メタデータファイルのパス> \
-F firmware=@<ファームウェアのパス> \

APIの動作

アップロードAPIは対象のプロジェクトをメタデータに含まれるGUIDによって識別しています。 APIではメタデータからGUIDを抽出し、そのGUIDを持つプロジェクトがすでにDBに存在する場合には、これを更新する動作となります。対象のプロジェクトが存在しない場合は新規投稿として扱います。GUIDが一致するプロジェクトがあり、所有者が自分以外の場合にはエラーとなります。