Sakura: Azure Pipelines で HTML help のビルドに失敗する

Created on 14 May 2019  ·  33Comments  ·  Source: sakura-editor/sakura

問題/バグ内容

Azure Pipelines で HTML help のビルドに失敗する

再現手順



Azure Pipelines で HTML help のビルドを行う

再現頻度



最近高確率。以前は全く発生していなかった。

環境情報

Azure Pipelines

現状

967 によってビルドしないようにしている。

追記

master でビルドに失敗するのは #921 で対処できた。
しかし、文字コードを UTF8 (#807) にしたときにビルドに失敗する問題がある。

CI IMPORTANT appveyor azure pipelines document

Most helpful comment

上のリンク先に長いパスが問題だったという投稿が有りました。

https://github.com/sakura-editor/sakura/pull/920#issuecomment-493733366
長いパスではなく _RESOURCE というパス名が問題なのかもしれません。

res というパスに変更したらビルド通りました。

All 33 comments

失敗
https://dev.azure.com/sakuraeditor/sakura/_build/results?buildId=389

→ PR だと失敗するのかもしれない

https://dev.azure.com/sakuraeditor/sakura/_build/results?buildId=387 は↑ と同じコミットのビルドだが成功している

ブランチのビルドだと成功するが
PR のビルドだと失敗するのは確実みたい。

907 用に作成したブランチで、通常のブランチビルドだと成功するが、

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)

この件に関しては「バグ」とは少し意味合いが違う気がしました。

914 を作成してみました。

ついでにカテゴリーを足してみました。

https://social.msdn.microsoft.com/Forums/ie/en-US/2a3ba231-db44-445f-89f1-b927527f1d89/hhcexe-error-1073741819?forum=windowsdesktopsearchhelp

上のリンク先に長いパスが問題だったという投稿が有りました。

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 を作成しました。

921 のマージ後に #807 の対応を検討していたが、

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. 他に原因になってそうな部分を探す。
  2. _RESOURCE ⇒ resの変更を戻す。
  3. CIでHTMLヘルプをビルドすることを一旦諦める(=ローカルでビルドする)

個人的には 1. がいいです。思い当たるフシ、ないんですけど :smile:

sakura のヘルプ以下を UTF-8 に変換すると失敗した。

どうしたいですか?(即答の必要はありません

  1. 他に原因になってそうな部分を探す。
  2. _RESOURCE ⇒ resの変更を戻す。
  3. 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設定っぽい。どう組み込むかはまだまだ検討中。

967 の対応によって、現在はビルドは無効化されている。

(このissueでいいのかな?)
英語環境でhhcを動かすとヘルプのキーワードが化ける件ですが、ヘルプの Compatibility1.1 or later から 1.0 に変えてみたら、文字化けは起きないようです。1.1 に依存するような機能を使っていなければ、1.0 に変えるのも手かもしれません。

(このissueでいいのかな?)
英語環境でhhcを動かすとヘルプのキーワードが化ける件ですが、ヘルプの Compatibility1.1 or later から 1.0 に変えてみたら、文字化けは起きないようです。1.1 に依存するような機能を使っていなければ、1.0 に変えるのも手かもしれません。

ありがとうございます。
https://github.com/sakura-editor/sakura/pull/1269
投げました。

英語環境でhhcを動かすとヘルプのキーワードが化ける件ですが、ヘルプの Compatibility1.1 or later から 1.0 に変えてみたら、文字化けは起きないようです。

情報源はどこですか?

ローカルでいろいろ試していて発見しました。

1271 をマージしたので閉じます。再発するようならreopenしてください。

Was this page helpful?
0 / 5 - 0 ratings