2020年7月28日火曜日

iutest v1.17.1 をリリースしました

C++ テスティングフレームワーク iutest v1.17.1 をリリースしました。
Github: https://github.com/srz-zumix/iutest/releases
OSDN: https://osdn.net/projects/iutest/releases/p12829

変更点は以下の通りです。

* New
* GTEST_SKIP 対応
* IUTEST_*_NE_RANGE アサーションを追加
* IUTEST_*_NE_COLLECTIONS アサーションを追加

* Improved
* ::std::wstring_view / ::std::u16string_view / ::std::u32string_view 対応
* Variadic Templates 非対応コンパイラーでの型パラメータの型表示を改善

* Changes
* アサーションに operator << したときの出力を PrintToString したものと同じになるように変更
* iuwandbox: Wandbox 向けにサイズ圧縮したヘッダーをデフォルトで使用するように変更
* iuwandbox: 上記に伴いフルバージョンのヘッダーを使うオプション(--no-iutest-use-wandbox-min)を追加
* deprecated: iuwandbox: --iutest-use-wandbox-min
* Python2 のサポート終了

* Bug fixes
* C++20 で削除された basic_ostream::operator << に対応
* IUTEST_AP が同じ名前空間に複数定義できない問題を修正
* Google Test 旧バージョンとの互換性を修正
* その他いくつかの不具合を修正



では。

2020年7月21日火曜日

[技術書] 画像のフォーマットチェックを GitHub Actions でしてみた

技術書典8 で書いた本では結局電子書籍になったことと、スクリーンショットはあまり使わなかったことで、あまり画像のフォーマットは気にしてなかったのですが、次の執筆を始めてスクリーンショットを増やすつもりなので、ちゃんとするようにしました(特に DPI かな)。

というわけで、指定のディレクトリ配下の画像ファイルのフォーマット、DPI、ピクセル数をチェックする Action をリリースしました。


以下のように使用します。

name: GitHub Actions
on:
  pull_request:

jobs:
  example:
    runs-on: ubuntu-latest
    steps:
    - name: clone
      uses: actions/checkout@master
    - uses: srz-zumix/actions-book-image-check@master
      with:
        path: ./test/format
        formats: "JPEG, PNG" # default JPEG
        dpi: 300 # default 350
        pixel_limit: 1000000 # default 4000000

他にチェックしてほしい項目があれば PR なり issue なりいただければと思います。






2020年7月15日水曜日

[Travis CI] Segmentation fault したときにスタックトレースを出力する設定

テストがクラッシュして失敗したときの調査が手間だなーということで対応しました。

対応したときの PR がこちらです。
差分で見ると、なにを追加したか見やすいと思います。
[Travis CI] core dump by srz-zumix · Pull Request #288 · srz-zumix/iutest

以下、ポイントを説明していきます。

導入

gdb のインストール


コアダンプファイルの出力設定


まず、コアダンプファイルが出力されるように ulimit の設定をします。
また、iutest ではテスト時に複数の実行ファイルを実行するため、コアダンプファイル名に実行ファイルの名前もつけるようにしています。
(コアダンプファイルの中身から取れる気もするけど、これで十分)

クラッシュしたらスタックトレースを出力する


実行ファイルの名前解決
linux - Core dump file name truncated - Stack Overflow
%e だと 15 文字で truncate されてしまい、実行ファイル名が正しく取れなかったので以下のような対応をしました。
gdb で coredump 開くと実行ファイルがなんだったのか出力されるので、それを取得してます。


      for f in `find . -maxdepth 1 -name "core_x_*"`; do
        COREFILE=${f}
        EXECFILE=${f##*/core_x_}
        if [ ! -f "${EXECFILE}" ]; then
          EXECFILE=`gdb -c "${COREFILE}" -batch | grep -o -e "\./[A-Za-z_]*"`
        fi
        gdb -c "${COREFILE}" ${EXECFILE} -ex "thread apply all bt" -ex "set pagination 0" -batch
      done


出力例




最後に
最近はローカル環境で実行確認することも減ってきたので CI 上でデバッグできるようにしておくのは便利でいいですね。

今回は以上です。
では。