sbgisen / .github Goto Github PK
View Code? Open in Web Editor NEWGitHub meta repository for sbgisen.
GitHub meta repository for sbgisen.
概要
ROSパッケージ全てに適用できるLinterのworkflowを追加する
目的
提案内容
reviewdogのgithub actionを用いて各種Linterを用意
タスク
概要
xmllintで失敗しているときに-fail-on-error
オプションの影響なのか
reviewdog: input data has violations
でxmllintにエラーがあると原因を表示せずに変更を無視してしまう?
fail-on-error
(reviewdog/reviewdog#848 (comment) )
概要
libxml2-utilsのインストール時に404を返されるようになっている
https://github.com/sbgisen/cube_python_api/runs/5596170412?check_suite_focus=true
再現手順
linterの実行
修正案
apt updateを入れる
概要
ROSパッケージ用のlinterを追加する
目的
依存パッケージ等の記入漏れをチェックするため(catkin_lint)
c++の命名規則をチェックするため(clang-tidy)
提案内容
概要
flake8のチェックでF401(***
imported but unused)がignoreされてる。
特にignoreする理由がないのでignoreから外す。
(W503はW504と競合するためignoreする必要がある。)
目的
不要なimportのチェックを有効化するため
PR #49 でマージした結果以下の書き方ができなくなりました。個人的に前の書き方の方が見やすいと思いますので自動整理不可能であればisort使わずにこちらで整理した方がいいと思いますががいかがでしょうか?
通らない(前の書き方)
from geometry_msgs.msg import Pose, PoseStamped
from geometry_msgs.msg import Point
from geometry_msgs.msg import Quaternion
from geometry_msgs.msg import Vector3
from geometry_msgs.msg import Transform, TransformStamped
from move_base_msgs.msg import MoveBaseGoal
通る(isortをかけた後)
from geometry_msgs.msg import Point, Pose, PoseStamped, Quaternion, Transform, TransformStamped, Vector3
from move_base_msgs.msg import MoveBaseGoal
概要
docstringをまだ必須にしていないためコメントに現れると、
などが確認できたのでpr-reviewからpr-checkに変更する。
目的
概要
ROS Noetic on Ubuntu 20.04のテストを走らせようとした場合に、self hosted runnerにて走るtestフローにてUbuntuのバージョンが異なるため、トラブルが発生する。以下のいずれかの対策が必要となる。
概要
ドキュメントをCIで自動生成する仕組みが欲しい。イメージとしてsphinxでドキュメントを生成して、生成したファイルをgh_pages
など別ブランチでプッシュする
目的
提案内容
sphinxでドキュメントを生成する時に、モジュールのインポートが必要なため、環境を整える必要がある(ビルドや依存関係をインストール)。ここでドキュメントを生成するオプションを付ける方法について以下のどちらかを考えています:
あまりworkflowについて分からないことが多いので教えて欲しいところがありますが、ドキュメント生成する時はPRを投げる・commitする時で、生成したドキュメントを別ブランチにプッシュする時はdevelop/main/masterブランチにマージする時のみて可能でしょうか?
タスク
概要
クラス名はCamelCase、関数名はsnake_caseといったPEP8で定められている命名規則がreviewdogのflake8では引っかからない
例
#!/usr/bin/env python
# -*- coding:utf-8 -*-
class foo_bar(object):
def __init__(self):
pass
flake8 test.py
test.py:4:8: N801 class name 'foo_bar' should use CapWords convention
再現手順
命名規則のおかしいコミットをCIにチェックさせる
修正しないとどう困るか
命名規則を人力でチェックしないといけない
原因
reviewdogがpep8-namingを入れていない。
or
N***をスルーする
修正案
N***を拾ってreviewdog経由でreview commentつけるstepを追加する
or
reviewdogで拾えるようにする。
概要
github tokenがPR reviewに対するwrite権限がないといって、
reviewコメントにならずfilesにwarningが表示されるのみとなってしまう
https://github.com/sbgisen/cube/runs/4577628832?check_suite_focus=true
再現手順
現状の設定のままCIを動かす
修正しないとどう困るか
正常にレビューコメントで修正点が見えない
原因
GitHubの設定を変更してしまったか、PR review周りの仕様が変わってreviewdogをアップデートしないといけないか。
もしくは全く別の問題か
修正案
調査中
概要
cubeリポジトリやcube_demosリポジトリで、lint_after_build
内changed-file-filter
が失敗する
https://github.com/sbgisen/cube/runs/4532248885?check_suite_focus=true
修正案
push時にはlint_after_build
を走らせない
.github/.github/workflows/ros-test.yml
Line 98 in e799ce9
話題通り
現段階でnoetic distro/ubuntu 20.04上のドキュメント生成はまだ未検証なので今回はmelodicの場合ドキュメント生成する・noeticの場合ドキュメント生成しない形で大丈夫でしょうか
ではnoetic環境でのドキュメント生成のissue作っておいてください。
Originally posted by @Tacha-S in #83 (comment)
#83 で、melodic環境でsphinxを用いてドキュメントを自動生成する jobs を追加しましたが、noetic環境でドキュメント自動生成するjobsは追加していません。
Ubuntu 18.04とUbuntu20.04でインストールされるsphinx機能が異なるためドキュメント生成設定を検証する必要がある。
概要
CI環境においてgitのバージョンが更新され、reviewdog実行時にエラーが出るようになった。(reviewdog/reviewdog#1158)
そのため、各reviewdog環境にてパッチが当てられているため、それらの適応されたバージョンに更新する必要がある。
対応すべきaction
action-suggesterやaction-setupはissue, prが出ていない、かつCIも今の所エラーを吐いていないため更新不要と思われる。
再現手順
修正しないとどう困るか
yamllint がLintエラーに関係なく失敗する
原因
修正案
概要
xml formatの結果をdiff, patchに渡すとうまく差分が取れずCIが意図しないエラーを吐く
再現手順
不明
修正しないとどう困るか
フォーマットはあっているのにエラーとなる
原因
調査中
修正案
概要
タスク
概要
現状flake8-isortを用いて正しいかのチェックしかしていないが、
isortとreviewdogのsuggesterで変更内容をsuggestできるのでそちらに変更する。
目的
変更内容の明瞭化
提案内容
isort, action-suggesterを用いて書き直し
タスク
sbgisen/ros-package-template
sbgisen/basic-template
に置いていたissue, pull requestのテンプレートファイルをこのリポジトリに移動させる。
ビルドテストする時に、rosinstallに入っているレポジトリのsubmoduleは考慮しているが、元のレポジトリのsubmoduleは考慮していますか?
概要
python2のisortでは、以下のコードのように自身のパッケージ内のモジュールをimportしていても間違って3rd partyとして認識されていた。
cube_python_apiパッケージ内
...
from actionlib_msgs.msg import GoalStatusArray
from cube_python_api import utils
from geometry_msgs.msg import Point
from geometry_msgs.msg import PoseStamped
...
これが、python3のisortを用いると以下のように1st partyのモジュールとして正しく分類される。
...
from actionlib_msgs.msg import GoalStatusArray
from geometry_msgs.msg import Point
from geometry_msgs.msg import PoseStamped
...
from cube_python_api import utils
# local import (e.g. relative import)
...
ただし、python3のisortを用いる条件として、init.pyの書き方を工夫しなければいけません。
__init__.py
のimportを絶対パスで書く__init__.py
のimportを相対パスで書く(例: from . import ***
)補足として、python3からはimplicit relative importが禁止となり絶対パスか相対パスでのimportが必要となりpython3でimport pathを解釈できるようにする必要があるためです。
これらの書き方はpython2でも有効ですし、今後python3(noetic)をサポートしていくのであればpython2,3互換のある書き方にしていったほうがいいと思います。
isortのグループ分類を賢くしつつ、python3対応にも近づくのでできればisortをpython3で動かしていきたいです。
では__init__.py
の書き換えとして2つのうちどちらがいいかというと、
python的に相対パスはあまり推奨されない(PEPでも)ので絶対パスで書くようにするのがいいと思います。
目的
提案内容
isortをpython3で動作させる
タスク
rosdepはpipを使ったパッケージをインストールすることができるがpipを先にインストールする必要がある。
ros-build.ymlにpipインストール手順あるが、もっと初めの段階で行うべき
概要
現在、jobやstepにはtimeoutが設定されていないため、何らかの理由でジョブがフリーズしてしまった場合にデフォルトのtimeout時間である6時間が経過するまでフリーズした状態が続いてしまう。
https://dev.classmethod.jp/articles/must-set-timeout-on-actions-for-save-cost/
この対策として、timeoutの指定を行う。
概要
isortを使うことでpythonのimportの整理ができるようになりましたが、デフォルトでモジュールをに一行にまとめるため少し見にくいです。個人差があると思いますが行が長くなりすぎるのを避けたいのでもし大丈夫なら--force-single-line-imports
を付けて一行ごとに一つのモジュールにしたいです。
例:デフォルト
from geometry_msgs.msg import Point, Pose, PoseStamped, Quaternion, Transform, TransformStamped, Vector3
例:--force-single-line-imports
from geometry_msgs.msg import Pose
from geometry_msgs.msg import PoseStamped
from geometry_msgs.msg import Point
from geometry_msgs.msg import Quaternion
from geometry_msgs.msg import Vector3
from geometry_msgs.msg import Transform
from geometry_msgs.msg import TransformStamped
目的
--force-single-line-imports
を付ける提案内容
多分以下の行にforce_singl_line = True
を追加すれば行ける参考
Lines 11 to 12 in ab8cef3
概要
Release DrafterがPull Requestが更新されたときに、draftを生成してしまいmergeされていないPRの更新で
上書きされてしまう。
再現手順
Release Drafterが設定されているリポジトリでPRをなげる。
修正しないとどう困るか
Draftの更新がおもわぬところで発生する。
修正案
Release Drafterのoptionにdisable-releaser
があるので設定
公式ドキュメントには
issue, pull requestのテンプレートの配置場所に関して以下の記載がある。
In the repository, create one of the supported community health files. Issue templates and their configuration file must be in a folder called
.github/ISSUE_TEMPLATE
. All other supported files must be in the root of the repository. For more information, see "Creating new files."
これに従うと[repository_root]/.github/ISSUE_TEMPLATE
等に配置する必要がある。
概要
現状melodic(ubuntu 18.04)しか動かしていないため、
noetic(ubuntu 20.04)のブランチを同時進行でテストしようとするとubuntu 18.04上でテストしようとしてしまうため
両環境が壊れてしまうため、host runnerを18.04, 20.04両方用意する、タグなどでテスト実行先を適切に選ぶ必要がある。
目的
サポート環境の拡充
概要
D104では __init__.py
にそのパッケージを説明するdocstringが書かれているかのチェックを行うが、
__init__.py
にまでdocstringを書く必要があるか微妙なためignoreするかどうかを検討する。
目的
必要以上のチェックをしないようにし、開発者の負担を緩和するため
概要
https://github.com/sbgisen/ros-package-template やそれをテンプレートとして作成したような、
まだROSパッケージとして成形していないリポジトリでros-testがエラーとなる。(参考)
原因
リポジトリ名のパッケージが存在しないため
修正案
概要
wstool
と違って、vcstool
はgit clone --recursiveに対応するオプションがあるのでそちらを使う。
下位互換性もあり、従来の.rosinstallファイルも利用できる。
目的
提案内容
ROS周り設定を行うActionでwstoolを使っているところをvcstoolを使うように修正
概要
下記のエラーを取得したので調査した。
https://github.com/sbgisen/outdoor_navigation_tools/runs/4439795966?check_suite_focus=true
catkin_lint: cannot load rosdep database: No module named 'rosdep2'
catkin_lint: unknown dependencies will be ignored
catkin_lint: no path given and no package.xml in current directory
Error: Process completed with exit code 66.
catkin_lint: cannot load rosdep database: No module named 'rosdep2'
catkin_lint: no path given and no package.xml in current directory
catkin_lint **path**
で指定する必要がある再現手順
手元でcatkin_lint
を実行
修正しないとどう困るか
catkin_lintが正しく使えない。
原因
下記でPathを指定していない。
.github/.github/workflows/ros-test.yml
Lines 122 to 124 in 7306bae
修正案
catkin_lint path
を実行するようにする。
概要
package.xmlかlaunchファイルのいずれかのみが存在しているときに、ファイルが存在しない方のlinterがエラーを吐く。
修正しないとどう困るか
CIで本来エラーでないのにエラーと出てしまう。
原因
grepが一つもマッチせずerror codeを返すため。
修正案
grepがエラーを返さないようにしてマッチしたファイルが存在するか確認を入れる。
概要
travis CIでも採用していたccacheを採用し、ビルド時間を短縮する
目的
GitHub Actionsの時間節約のため
提案内容
ccacheによるcatkin buildの短縮
optionでON/OFFできるようにする?
概要
bashrcで環境変数を定義していても、それが読み込まれていないためtestを走らせるときなどに環境変数で躓く。
再現手順
修正しないとどう困るか
原因
bashrcを読みに行っていないため
修正案
https://github.community/t/self-hosted-not-using-bashrc/18358
概要
テンプレートがROS用のテスト項目を含んでいたり汎用的な内容でない。
#4 (comment)
目的
どのリポジトリに置いても使いやすいテンプレートにする。
提案内容
fix #*, close #*, resolve #*
で書かせるようにする概要
https://docs.github.com/ja/actions/learn-github-actions/creating-workflow-templates#creating-a-workflow-template
iconName必須になってますね。Originally posted by @h-wata in #10 (comment)
概要
意見の分かれそうなdocstringsやimport-orderなど何をチェックするかの決定
#46 (comment)
概要
ROSパッケージのビルド、テストを行えるworkflowを作成し、使いまわせるようにする。
目的
ROSパッケージのビルド可否、テスト通過の自動化を容易に導入できるようにするため。
提案内容
概要
ROS Noeticの導入に当たって、pythonのバージョンによってrosdep installするaptパッケージを切り替えるために、一部のpackage.xmlにてformat="3"
を導入したい。
package.xml変更例
sbgisen/autoware_common@3c286f8
そのため、Linterについてもformat="3"
に対応できるようにしたい。
.github/.github/workflows/linter_ros_package.yaml
Lines 207 to 219 in 2403c3a
概要
複数のxmlファイルに変更があった際に正常に動作せずにCIがエラーを返してしまう
再現手順
複数のxmlファイルに変更を加えた状態でCIを動かす
原因
file_list
がスペース区切りのリストを与えられたときに、リスト全体を文字列として受け取れていないため。
例
file_list=cube/package.xml cube_bringup/package.xml cube_description/package.xml cube_diagnostic/package.xml cube_expression/package.xml cube_gazebo/package.xml cube_hw_interface/package.xml cube_imu/package.xml cube_navigation/package.xml cube_server/package.xml cube_teleop/package.xml
概要
linterの通過を前提としてるが、pushではlinterが走らないので結果的にbuild等も走らない
修正しないとどう困るか
merge後のbuild, testがチェックできない
原因
sbgisen/cube#727 参照
修正案
概要
self hosted serverの環境では既存の環境をもとにしてセットアップするため、
apt upgradeでapt管理のパッケージを最新に更新したほうが良い。
目的
提案内容
タスク
概要
ROSパッケージをbuildする際に、wstool, rosdep, catkin buildのみで環境を整えられない場合が存在するため、
そういったパッケージのためにsetup scriptを走らせられるようにする。
目的
独自のセットアップが必須のパッケージに対応するため
提案内容
パッケージ直下に setup.sh(もしくはinputで指定した名前)
があればそれを実行するなど
以下のworkflowみたいにaptが失敗した場合どうしますか?
https://github.com/sbgisen/cube_python_api/runs/5688877921?check_suite_focus=true
概要
cube-webappのテストを作成していただいているがCIで走らせられて居ないので追加したい。
目的
レビューの効率化のため
提案内容
タスク
概要
-s
(strict)オプションをつけておらず、yamllintがwarningのみ出力している場合にチェックが通過してしまうため、
warning含めて修正させるには-s
が必要
提案内容
-s
のオプション追加
ついでにyamllintの設定見直し?(コメントつける際のスペースの数など)
概要
削除したファイルも dorny/paths-filter
によって取得されてしまっているため、
CIでファイルが存在しないとエラーが出る。
再現手順
ファイルを削除したコミットにてCIを回す
修正しないとどう困るか
[Errno 2] No such file or directory: ***
と出る上にCI通過してしまう。
原因
フィルタが正しく設定されていないため。
修正案
フィルタの設定でadded|modified:
を追加する。
概要
buildフロー及びtestフローのvcstoolによるcloneのステップにて、再帰的にrosinstallファイルを探すことにより、問題が発生する場合がある。
.github/.github/workflows/ros-build.yml
Lines 51 to 62 in b068bbe
今回、noeticブランチのテストをするに当たって
今回、それぞれフォーク先にてrosinstallファイルを削除することで対策を行ったが、build / testフローの再起処理の際に何かしらの対策が取れるのであれば取りたい。
概要
cubeリポジトリで下記のようにxmllint周辺でエラーが発生する。
https://github.com/sbgisen/cube/pull/717/checks?check_run_id=3878114530
linterがformat=3前提で動いていることによるエラー?
<package format="2">
[xmllint] reported by reviewdog dog
element package: Schemas validity error : Element 'package', attribute 'format': The value '2' does not match the fixed value constraint '3'.
概要
cube_speechのCMakeを変えた影響あり?
rodep install中に下記エラーにてbuildフローが失敗する。
ERROR: the following rosdeps failed to install
pip: command [/usr/bin/python -m pip install -U gTTS] failed
pip: Failed to detect successful installation of [gTTS]
https://github.com/sbgisen/cube_apps/runs/5671630954?check_suite_focus=true#step:7:7650
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.