2021年6月18日金曜日

iutest の CircleCI ワークフローにパスフィルターを適用した

ブログズミ: CircleCI でモノレポ上の指定パスに変更があったらテストを走らせる
こちらの続き

iutest にも組み込んでみた

個人開発している C++ テスティングフレームワークの iutest にも早速組み込みました。
iutest ではたくさんの CI サービスを利用しているので、他の CI サービスの YAML の更新などで CircleCI が回らないようにしてみました。

できた YAML はこちらです。
https://github.com/srz-zumix/iutest/blob/master/.circleci/config.yml
https://github.com/srz-zumix/iutest/blob/master/.circleci/ci.yml

前回ブログからの差分としては

noop ジョブを追加して、フィルターにマッチしなくてなにもすることがなくなると失敗扱いになってしまうのを回避しています。


前回からあまり変わりばえないですが、今回は以上。では。。

2021年6月9日水曜日

Blogger の投稿を Integromat でツイートする Ver.2

Ver.1 の紹介記事を書いた気がしてたのですがなかったので、
まずは概要を紹介します。
Integromat とは
Intergromat は IFTTT みたいなやつ(iPaaS/RPA)です。
様々サービスのイベントをトリガーに他サービスと連携することができるものです。
操作の自動化をする RPA ツールとはちょっと違うので注意してください。
詳しいことは拙著を見てね^^
「詳解Integromat iPaaS完全入門」

Blogger で記事公開したらツイートするシナリオ
Integromat を使って「ブログズミ」で更新があったら Twitter にツイートするシナリオを活用しています。
注意: 現在 Integromat の Twitter App は有料プランの登録が必要です
Blogger は RSS フィードがあるのでそれをトリガーにツイートするシナリオになっています。
私が使っているシナリオは間にいくつかステップがありますが、単純にツイートするだけであれば、RSS の情報からツイート本文を書くだけでシナリオが作れると思います。

Ver.2 で変わったところ
Blogger のラベルをツイートのタグに変換
ツイートにタグをつけるようにしました。
ラベル→タグ変換は以下の2つのモジュールで行いました。


最初の Tools モジュールでラベルの配列に「 #」を追加しつつ、1つの文字列にしています。
「{{replace("#" + join(1.labels; space + "#"); ":"; space)}}」
「#Re:VIEW」 のような記号を含むものは記号より後ろがタグとして認識されないので、ここで空白スペースに置換もしています。(「:」のみ対応)

次に Text parser モジュールでタグとタグの間のスペース以外のスペースを削除します。
「s/\s([^#])/$1/g」

これだけではわかりにくいので、実際に処理されたときの様子を見てみましょう。

入力されたラベルは以下の図の通りです。
ここでは「Re:VIEW Starter」のラベルに着目しましょう。

Tools モジュールによって「#Re View Starter」と変換されます。

最後に Text parser で「#ReViewStarter」となります。


あとは、加工済みのテキストを Twitter モジュールで使うだけです。
新規公開か追記かの判定
追記があった場合は RSS フィードの公開日と更新日が入ってるので、それぞれの時間を比較して判定しています。
まず、Tools モジュールで公開日・更新日に setSecond をして 0:00 の時刻に揃えます。
「{{setSecond(1.dateUpdated; 0)}}」

そして、公開日と更新日が同じなら新規投稿、更新日が新しい場合は追記として分岐します。
Blueprint
最後にシナリオの Blueprint を公開します。
※Blueprint は有償機能です
※インポートしてもコネクションは筆者 organization の ID になっているので付け替え必須


以上です。では。

2021年5月31日月曜日

Linux版 UnityHub の headless に対応した Docker image

Linux 版 Unity 使いたいので UnityHub CLI でインストールしようと思ったらめんどくさかったので備忘録。

Feedback - Headless Mode Isn't Really Headless - Unity Forum

なにが面倒だったというと、 headless モードが headless モードじゃなくて docker とか VM とかでディスプレイない環境だと起動ができないのです。

こんな感じのエラーで起動できません。

(unityhub-bin:919): Gtk-WARNING **: 08:08:17.580: cannot open display: 

で、xvfb で回避できるのですが、すでに回避策を講じた Docker image を同僚に教えてもらいました。このイメージを使ったら Unity のインストールとかの自動化も簡単にできそうです。
https://hub.docker.com/u/unityci

Dockerfile はこれ
https://github.com/game-ci/docker/blob/main/hub/Dockerfile

中身を読むとわかりますが、AppImage をばらして xvfb-run してます。
ちょっと気になるのは、ばらした AppImage が / に展開されることくらいですかねぇ。
Docker なら、まぁいいかもしれませんがどこかのインスタンスに入れるなら嫌だなぁと思ったので、自分なりに書き直してみました。

書き直し
イメージ

できあがったイメージと Dockerfile はこちらです。
https://hub.docker.com/r/srzzumix/unityhub
https://github.com/srz-zumix/docker-unityhub

書き直してわかったポイント

PR のコメントとして残してあります。

  • unityci/hub image は APPDIR が未定義なため / で実行されていた
  • zenity がないと unityhub-bin 起動後に進まなかった
  • ~/.config/Unity Hub/eulaAccepted ファイルを作成して EULA 確認をスキップ
  • unityhub.desktop ファイルにバージョンが書いてある
  • Mac 版だと -- --headless help のようにオプションを指定するが Linux 版で -- つけると先に進まない

以上、回避策など取らずに使えるようになってくれると嬉しいですね。では。