Azure Pipelines で HTML help のビルドに失敗する
Azure Pipelines で HTML help のビルドを行う
最近高確率。以前は全く発生していなかった。
Azure Pipelines
master でビルドに失敗するのは #921 で対処できた。
しかし、文字コードを UTF8 (#807) にしたときにビルドに失敗する問題がある。
失敗
https://dev.azure.com/sakuraeditor/sakura/_build/results?buildId=389
→ PR だと失敗するのかもしれない
https://dev.azure.com/sakuraeditor/sakura/_build/results?buildId=387 は↑ と同じコミットのビルドだが成功している
ブランチのビルドだと成功するが
PR のビルドだと失敗するのは確実みたい。
PR のビルドには失敗した。
どこに違いがあるのだろう。
本筋と関係ない指摘で申し訳ないのですが・・・
バグ内容
この件に関しては「バグ」とは少し意味合いが違う気がしました。
問題事象、解決したい課題、困りごと、etc...
https://github.com/sakura-editor/sakura/pull/912/files → OK (https://dev.azure.com/sakuraeditor/sakura/_build/results?buildId=403)
https://github.com/sakura-editor/sakura/pull/913/files → NG (https://dev.azure.com/sakuraeditor/sakura/_build/results?buildId=404)
この件に関しては「バグ」とは少し意味合いが違う気がしました。
ついでにカテゴリーを足してみました。
|結果|PR|ソースコード|ビルド URL|コメント||
|--|--|--|--|--|--|
|OK|https://github.com/sakura-editor/sakura/pull/912|https://github.com/sakura-editor/sakura/pull/912/files|https://dev.azure.com/sakuraeditor/sakura/_build/results?buildId=403|||
|NG|https://github.com/sakura-editor/sakura/pull/913|https://github.com/sakura-editor/sakura/pull/913/files|https://dev.azure.com/sakuraeditor/sakura/_build/results?buildId=404|||
|OK|https://github.com/test-m-tmatma/sakura/pull/3|https://github.com/test-m-tmatma/sakura/pull/3/files|https://dev.azure.com/test-m-tmatma/sakura/_build/results?buildId=4|ソースコード的には #913 と同一||
上のリンク先に長いパスが問題だったという投稿が有りました。
https://github.com/sakura-editor/sakura/issues/584#issuecomment-475155619
AppVeyorの時にも同じような問題が有ったようですね…。
上のリンク先に長いパスが問題だったという投稿が有りました。
有力情報!・・・appveyorとAzule Pipelinesのそれぞれでhtml helpのソースがどこに展開されるかを整理したら、解決への糸口をつかめるかも。
う~む、「長いパス」じゃなさそうに見える。
【成功時ログより】
2019-05-17T20:48:06.2080211Z Created d:\a\1\s\help\sakura\sakura.chm, 3,184,015 bytes
展開先パスは d:\a\1\s になってるっぽいです。
プレフィックスの長さがこの程度ならまず問題にならないと思ってます。
find-tools.batの呼び出しが「謎のcmdファイルのcall」に置き換えられているので、内部的にパス置換が行われている可能性もありますけど。
2019-05-17T20:47:52.3526109Z ##[command]"C:\windows\system32\cmd.exe" /D /E:ON /V:OFF /S /C "CALL "D:a_temp\f3e12cef-8e28-4b35-91b2-bf9b650a9cc6.cmd""
上のリンク先に長いパスが問題だったという投稿が有りました。
https://github.com/sakura-editor/sakura/pull/920#issuecomment-493733366
長いパスではなく _RESOURCE というパス名が問題なのかもしれません。
res というパスに変更したらビルド通りました。
上のリンク先に長いパスが問題だったという投稿が有りました。
#920 (comment)
長いパスではなく_RESOURCEというパス名が問題なのかもしれません。
resというパスに変更したらビルド通りました。
#921 を作成しました。
sakura のヘルプ以下を UTF-8 に変換すると失敗した。
https://github.com/m-tmatma/sakura/commit/4eb4554501aff7256bbb85303b673ca98ae915f1
https://m-tmatma.visualstudio.com/sakura/_build/results?buildId=322 → OK
https://m-tmatma.visualstudio.com/sakura/_build/results?buildId=323 → NG
sakura のヘルプ以下を UTF-8 に変換すると失敗した。
どうしたいですか?(即答の必要はありません
個人的には 1. がいいです。思い当たるフシ、ないんですけど :smile:
sakura のヘルプ以下を UTF-8 に変換すると失敗した。
どうしたいですか?(即答の必要はありません
- 他に原因になってそうな部分を探す。
- _RESOURCE ⇒ resの変更を戻す。
- CIでHTMLヘルプをビルドすることを一旦諦める(=ローカルでビルドする)
1 です。でも今のところアイデアはありません。
古い情報ですが、HHC.exe 呼ぶ前に、utf-8 を ANSI(MBCS) に置き換えて、そして AppLocale 経由で LCID を適切な (1041 ?) ものに設定して HHC.exe を呼び出す、という手があるようです。
https://blogs.msdn.microsoft.com/sandcastle/2007/09/29/chm-localization-and-unicode-issues-dbcsfix-exe/
https://vjedogonia.blogspot.com/2010/05/sandcastleshfb-chm.html
まぁでも HHC.exe 自体がOSSではないし、chm 化しないでオンラインで見てもらえば良いんじゃないかなぁと個人的には思います。オフラインでヘルプが見たい人には zip を落としてもらうのが良いと思いますね。。検索機能が欲しい場合は JavaScript で何とかしないといけませんが…。
古い情報ですが、HHC.exe 呼ぶ前に、utf-8 を ANSI(MBCS) に置き換えて、そして AppLocale 経由で LCID を適切な (1041 ?) ものに設定して HHC.exe を呼び出す、という手があるようです。
HHC.exeを起動する前にスレッドロケールを ja-jp に変更する起動ラッパーを書いたらいいのかな?(プログラムのスレッドロケールは呼出し元スレッドの影響を受けるから。)
git管理上の都合で、ソースコードはutf-8にしとくのが都合良さそうなので、実行直前にwindows-31Jに逆変換するような機構を作ったらいい気がしてきました。utf-8⇒windows-31Jだと変換できない文字が出てくるので、そういうのは文字実態参照に巻き換える感じかな。
sakura-editor/help/CMakeLists.txt を作って、HHC.exeの起動ラッパーのビルドと文字コード逆変換を行うスクリプトを用意してみるプランはそれなりにイケてそう。
起動ラッパーを書かなくても chcp 932 でイケるんじゃないか?とか
文字コード逆変換するくらいなら Shift_JIS のままで登録しとけばよくね?とか
モメそうなネタ満載ですが、とりあえず試してみることができる代案が出てきたな、と思ています。
https://github.com/sakura-editor/sakura/pull/807#issuecomment-495916408
sakura_core/sakura.hh の日本語コメントを削除したら、UTF-8 にしてもビルド通った。
https://dev.azure.com/sakuraeditor/sakura/_build/results?buildId=490 (acd80b3) → OK
↑ 正規表現で一括削除したので、 acd80b3 では無効化している定義も一括で削除されています。
sakura_core/sakura.hh の日本語コメントを削除したら、UTF-8 にしてもビルド通った
うわ、微妙・・・。
以前 help/sakura.hhを削る を対応したんですが、sakura_core/sakura.hhを元にビルド時にhelp/sakura.hhを生成するのもありなのかも。
chcp 932 をやってみたがうまくいかなかった・・・。
---- start build-chm.bat ----
Invalid code page ← chcp 932 した結果
Microsoft HTML Help Compiler 4.74.8702
マジか...orz
appveyorのデフォルトcodepageは437になってるっぽい。
windows1252じゃなくてcp437(OEM)なのね。
AppLocaleはWindows10では使えないようですが、
https://pooi.moe/Locale-Emulator/
というのがあるようです。ただしExplorerのContext Menuから使うUIになっていてコマンドラインから使うやり方はサイトを見てもよくわかりません…。
追記:コマンドラインでも使えるようです。
https://github.com/xupefei/Locale-Emulator/blob/0bb4a81091d294166aa7a29955378b0e5aa38f8b/LEProc/Program.cs#L56
日本語環境でLEProcを使い、言語をen-USにしてみたら文字化けした。
いけてそうだが使い方が微妙に分からない。
CIではGUI設定を触るのは不可能なので、コマンドラインのみで何とかしたい。
C:\work\sakura\help\sakura>LEProc.exe -manage "C:\Program Files (x86
)\HTML Help Workshop\hhc.exe"
(GUIが表示されたのでLacaleを英語にしてSave)
C:\work\sakura\help\sakura>LEProc.exe -run "C:\Program Files (x86)\H
TML Help Workshop\hhc.exe" "C:\work\sakura\help\sakura\sakura.hhp"
(hhc.exeが実行され、生成されたhhc.exeのキーワードは化けていた)
chocolateyでインストールすると C:\ProgramData\chocolatey\lib\locale-emulator\tools\LEConfig.xml が生成されるのだが、これがどうもglobal設定っぽい。どう組み込むかはまだまだ検討中。
(このissueでいいのかな?)
英語環境でhhcを動かすとヘルプのキーワードが化ける件ですが、ヘルプの Compatibility を 1.1 or later から 1.0 に変えてみたら、文字化けは起きないようです。1.1 に依存するような機能を使っていなければ、1.0 に変えるのも手かもしれません。
(このissueでいいのかな?)
英語環境でhhcを動かすとヘルプのキーワードが化ける件ですが、ヘルプのCompatibilityを1.1 or laterから1.0に変えてみたら、文字化けは起きないようです。1.1 に依存するような機能を使っていなければ、1.0 に変えるのも手かもしれません。
ありがとうございます。
https://github.com/sakura-editor/sakura/pull/1269
投げました。
英語環境でhhcを動かすとヘルプのキーワードが化ける件ですが、ヘルプの
Compatibilityを1.1 or laterから1.0に変えてみたら、文字化けは起きないようです。
情報源はどこですか?
ローカルでいろいろ試していて発見しました。
Most helpful comment
https://github.com/sakura-editor/sakura/pull/920#issuecomment-493733366
長いパスではなく
_RESOURCEというパス名が問題なのかもしれません。resというパスに変更したらビルド通りました。