-
Notifications
You must be signed in to change notification settings - Fork 163
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
HTMLヘルプのビルドステップをpowershellに移植してエラー耐性を上げる #1509
HTMLヘルプのビルドステップをpowershellに移植してエラー耐性を上げる #1509
Conversation
✅ Build sakura 1.0.3351 completed (commit 925bf6d81e by @berryzplus) |
趣旨としては賛成です。 一目では判断できなかったのであとで見直します。 |
hhc.exe の終了を直接的に待つ方法があるといいんですけどねぇ。そうすれば、ファイルがロックされているかを確認する処理も不要になるのですが。
missing と locked のログが毎秒出るのはちょっと邪魔のような気もしましたが、まあそのままでもいいでしょう。 元のbatでは、コンパイルが30秒以内に終了しなかった場合(=おそらくhhc.exeがクラッシュ)は1回だけやり直すようにしてありましたが、今回のスクリプトではコンパイルが成功するまで何回でも繰り返すことになるのでしょうか。 元のbatではログファイルのロックが解除されたのをもってhhc.exeの処理が終わったとみなしています。これはhhc.exeの動作を確認したところ、chmの書き込みが終わってからログの書き込みが行われていたからです。今回のスクリプトでは、ログではなくchmの方のロック確認を行っていますが、変更した理由はありますか? |
なにかあったときに、時間がかかってると判断する材料になるかと考えて残しました。
変更は意図的ですが、確信はないです。
これは明確に意図があったわけではないです。 |
Lines 43 to 53 in 3e59ee3
ここの部分でchmをコピーした後、logもコピーしていますが、chmのみのロック確認で済ませてしまうと、タイミングによってはlogのコピーで失敗する可能性があります。 |
了解しました。 変更内容はこんな感じを予定しています。 変更前
変更後
|
3e59ee3
to
5cbc57c
Compare
Kudos, SonarCloud Quality Gate passed! |
✅ Build sakura 1.0.3352 completed (commit d23bb1af7a by @berryzplus) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
内容を把握しました。
とくにダメそうな気配はありませんでした。
|
||
# to run our custom scripts instead of automatic MSBuild | ||
build_script: | ||
- cmd: cup vswhere |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
何故削除?と思いましたが、上に移動してました。
pip install openpyxl --user | ||
cinst locale-emulator -y | ||
cup vswhere | ||
py.exe -m pip install openpyxl --user |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
PIP実行は、こういう書き方ができるんですね。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
PATH の設定にかかわらず、py.exe で実行されるデフォルトのバージョンの python に対してインストールしたい場合は、こう書くことになります。
py -3.8-64 -m pip
などのようにすれば、指定したバージョンに対して pip を実行できます。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
前にここで教えてもらいました 😃
|
||
artifacts: | ||
- path: 'sakura-*-Chm.zip*' | ||
|
||
# run only for Release |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
成果物アップロードはreleaseのみらしいです。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
はい、そういう設定になってます。
@@ -6,6 +6,7 @@ Makefile text eol=lf | |||
sakura_rc.h text eol=crlf | |||
*.rc text working-tree-encoding=utf-16le-bom eol=crlf | |||
*.rc2 text working-tree-encoding=utf-16le-bom eol=crlf | |||
*.ps1 text working-tree-encoding=utf-16le-bom eol=crlf |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
これの影響範囲がちょぴっとだけ気になりました。
シフトJISやUTF-8で書いたps1をコミットしようとすると怒られるようになりますよね?
別にいいですよね~と思ったのでスルーしちゃいますけど(笑)。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
従来UTF-8でコミットされていたps1がUTF-16でチェックアウトされるようになります。
失敗時はメッセージが出るので実害はないと思います。
(個人の主義に反する可能性はありますが。)
} | ||
|
||
# コンパイル済みHTMLのコピー処理 | ||
# Azure Pipelinesがたまにコピー失敗する対策として作成 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
この関数を使ってコピーしてるのはchmだけなので、
Azure PipelinesではCompiel.Logがたまにコピー失敗するだろうってことですよね。
Compile.Logは何に使うものなんですかね。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
単なる hhc.exe の実行ログです。Compile.log は artifact としてアップロードされるようになっているので、ログを見たい場合には artifact をダウンロードすることになります。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Azure PipelinesではCompiel.Logがたまにコピー失敗するだろうってことですよね。
はい、そうです。
Compile.Logは何に使うものなんですかね。
ビルドがうまく行かなかったときの原因調査に使えるかも知れません。使えないかも知れません。
基本的には使い道のないファイルである認識です。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
単なる hhc.exe の実行ログです。Compile.log は artifact としてアップロードされるようになっているので、ログを見たい場合には artifact をダウンロードすることになります。
あれ?10hours ago なのにさっき見たとき表示されていませんでした。
タイミングかなぁ・・・
ふと疑問に思ったのですが、今回のスクリプトで実際に hhc.exe のクラッシュをキャッチできるのでしょうか。(leproc.exe のクラッシュはキャッチできるのでしょうが。) もし hhc.exe のクラッシュをキャッチできないのであれば、結局タイムアウトの30秒を待ってからリトライすることになるので、バッチファイルからの実質的な変更点はリトライ回数を増やしただけということになってしまいますが…(あ、AppVeyorの構成変更もあったか) |
else | ||
{ | ||
#kick LEProc.exe for a legacy command. | ||
Start-Process $env:CMD_LEPROC "$env:COMSPEC /C `"$hhc $HtmlHelpProject`"" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ローカルでのテスト中にここで例外が起きてリトライすることは確認できました。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
それならOKです。
} | ||
catch [System.AccessViolationException] | ||
{ | ||
echo "LEProc.exe has crashed" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
https://github.com/sakura-editor/sakura/pull/1509/files#r560093658 で例外が起きるとここにきてリトライします。
とりあえず、発生した例外をキャッチして続行する挙動は確認しています。https://github.com/sakura-editor/sakura/pull/1509/files#r560093658 |
レビューありがとうございます。 |
このPRで行った変更が消えてしまっているようです。 おそらく、対応が必要。 |
PR の目的
#1271
Azure Pipelines/GitHub Actions で HTML Help をビルドできるようにする
で導入された「OS言語が英語であっても日本語ロケールでないと動作できないレガシープログラムを動かすための裏技(bat実装)」をpowershellに移植して、ビルドステップの実行中に発生するエラーに対する耐性を上げることが目的です。この変更により appveyor の疑似パイプラインが不要となるので、パイプラインを廃止して処理構造をシンプルにします。
カテゴリ
PR の背景
ちょっとめんどくさい変更なので、経緯を頭から説明します。
サクラエディタにはHTMLヘルプが付いています。
HTMLヘルプは、HTMLファイルを「コンパイル」して作るものです。
コンパイルには当然「コンパイラ」が必要なんですが、これがショボくて苦労しています。
HTMLヘルプコンパイラの何がショボいか?
サクラエディタのヘルプは日本語で書かれていますが、
このプロジェクトで使っているCIはすべて英語環境です。
つまり、サクラエディタのHTMLヘルプをCIで普通に実行すると、文字化けしてしまうわけです。
英語ロケールで動いているCIを使って、HTMLビルドを日本語ロケールで実行する方法は色々試してきました。
Set-WInSysLocale
で ロケールを日本語に変える。この方法にはOS再起動が必要なので、選択できるのはAppveyorのみ。
動作が不安定で、かつ、やたらと時間がかかり、たまにタイムアウトする。
この方法にはOS再起動が不要なので、どのCIでも対応できそう。
動作は不安定だが、起動時間は通常のプログラムと同等程度に改善、ただしたまにタイムアウトする。
Locale-Emulator で起動させた場合の hhc.exe がたまにアクセス違反を起こしていた。
今回修正では、従来バッチで実装していた hhc.exe 起動部分を powershell に移植し、
発生した例外をキャッチして続行できるようにしています。
PR のメリット
PR のデメリット (トレードオフとかあれば)
仕様・動作説明
アプリの仕様・動作に変更はありません。
ビルドステップの仕様も #1271 と殆ど変えていません。
明確に違う点
powershell の Start-Sleep はCIでも使えそうなのでそちらで実装しました。
PR の影響範囲
テスト内容
関連 issue, PR
#1271
参考資料
https://docs.microsoft.com/ja-jp/previous-versions/windows/desktop/htmlhelp/microsoft-html-help-downloads