sbgisen / .github

GitHub meta repository for sbgisen.
0 stars 4 forks source link

package.xmlのformat="3"に対応 #78

Closed MikhailBertrand closed 2 years ago

MikhailBertrand commented 2 years ago

概要

ROS Noeticの導入に当たって、pythonのバージョンによってrosdep installするaptパッケージを切り替えるために、一部のpackage.xmlにてformat="3"を導入したい。

package.xml変更例 https://github.com/sbgisen/autoware_common/commit/3c286f8ac03cd7874a847226ad2bae68a37965b4

そのため、Linterについてもformat="3"に対応できるようにしたい。 https://github.com/sbgisen/.github/blob/2403c3ae904adf3f60902138839bf0e19212932a/.github/workflows/linter_ros_package.yaml#L207-L219

MikhailBertrand commented 2 years ago

@Tacha-S

こんな感じで1回format2でlint走らせて、最初の一行でフォーマット違いによるエラーが発生していたらformat3で走らせようと思うんですがいかがです?

        run: |
          files=`echo ${{ needs.changes.outputs.xml_files }} | xargs -n 1 | grep -E ".*package.xml" || true`
          if [ -z ${files} ]; then
            echo "There are no package.xml files."
          else
            wget http://download.ros.org/schema/package_format2.xsd
            xmllint --noout --schema package_format2.xsd package.xml 2>/tmp/format2            
            line=$(head -1 /tmp/format2)
            if [[ "${line}" = *"Schemas validity error : Element 'package', attribute 'format'"* ]]; then
              wget http://download.ros.org/schema/package_format3.xsd
              xmllint --noout --schema package_format3.xsd ${files} 2>&1 1>/dev/null |\
              reviewdog -name="xmllint" -reporter=github-pr-review -efm='%f:%l:%m' -filter-mode=file -fail-on-error
            else
              cat /tmp/format2 |\
              reviewdog -name="xmllint" -reporter=github-pr-review -efm='%f:%l:%m' -filter-mode=file -fail-on-error
            fi
          fi
Tacha-S commented 2 years ago

xmlのヘッダ <?xml version="1.0"?> の書き方がおかしいなど、packageのelementより先にerrorが出ることもあると思うのと、 メタパッケージを含むリポジトリ等で複数のpackage.xmlが存在するときに、あまりないとは思いますがformat 2とformat 3が混在しているとformat 3が強要されるのが気になります。

MikhailBertrand commented 2 years ago

確かに…

xmlのヘッダ <?xml version="1.0"?> の書き方がおかしい

この場合はどちらにしても(format2でも3でもlintを走らせると)エラーが発して指摘されそうなんで無視で良い気もします。

メタパッケージを含むリポジトリ等で複数のpackage.xmlが存在するとき

for文で回すようにすれば良さそうですね。

ところで上記のように/tmp/hogeファイルに1回標準エラーを記述したい場合にCIエラー落ちしないようにするにはどうすれば良いですか?

Tacha-S commented 2 years ago

この場合はどちらにしても(format2でも3でもlintを走らせると)エラーが発して指摘されそうなんで無視で良い気もします。

確かにそうですね。

ところで上記のように/tmp/hogeファイルに1回標準エラーを記述したい場合にCIエラー落ちしないようにするにはどうすれば良いですか?

error statusを返すコマンドに | true をつけるとかですかね。

forで回すのであれば sed とかでformat="n"のnの部分だけ取ってこれば--schema package_format${version}.xsdみたいにできそうじゃないですか?該当行がないとエラー落ちするだけになってしまいそうですが。

MikhailBertrand commented 2 years ago

forで回すのであれば sed とかでformat="n"のnの部分だけ取ってこれば--schema package_format${version}.xsdみたいにできそうじゃないですか?該当行がないとエラー落ちするだけになってしまいそうですが。

for文回さなきゃいけないならその方が素直なのでそれでいきますかね。 該当行がない場合にエラーで落ちるのは正しいので問題なさそうですね。