-
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
インストーラーパッケージ作成運用たたき台 #121
Comments
バージョン番号がソースとか インストーラ用の設定ファイルとか |
@m-tmatma さん、私の拙作ソフトでは、VBS(GetFileVersion)でexeからバージョン番号取得してインストーラーの定義ファイル更新と圧縮するzipファイルのファイル名を修正してました。 |
そうか一度ローカルに持ってくるからそこで一発動かせばいいのかな。 |
たたき台作成お疲れ様です。 なんとなく、リリース専用のブランチがあったらいいなと思っています。
こうしておけばリリースブランチに Push すると勝手にパッケージされますよね。 一筋縄ではいかないような気もしますけど、できたらいいな (^-^; |
うーん、リリースはタグ管理が良いんじゃないですかね。hotfix出す必要があるときだけブランチ切るくらいで良いかなと思ってます。 |
release_2_3_3じゃなくて、releaseを切る感じで考えてました。 ポイントは、トリガ発動したら git clone~ビルド~パッケージ作成が一連動作として走るようにできたらいいね、です。できるかどうかは、現段階で不明 😢 |
@kobake さん
ブランチ切らないということは、PRしないということ? 手順としては、含めるものが決まった前提で、 1.リポジトリをチェックアウト、 appveyorの自動化が難しい場合、3.ではローカルで、インストーラーを生成して、どっかへアップロードって感じかなと。 |
基本的に PR は作りますが、あくまでも master へのマージ用 PR を想定しています。 master へのマージを確認した後、その最新状態の master をパッケージ化したい場合には git-tag 機能 によりタグを打って push という流れが良いかな、と。 現在リリース済みのパッケージ(これは手動アップロードです)はタグに紐づける形にしています。 Git のタグって Svn のタグとは違って枝分かれさせるものではなく、特定コミットにラベルを付けるような概念なんです。枝分かれが無い分、管理が楽です。 |
タグをpushしたときにAppVeyorを走らせることも可能です。なので、タグの場合だけパッケージを作るということも可能です。 |
vim-win32-installer では、インストーラ作成用のリポジトリは vim 本体とは別にしてあり、本体は git の submodule で取り込んであります。メンバーの個人サーバー上で cron で1日1回 vim 本体のリポジトリの更新を監視して、更新があればインストーラも更新を行っています。 |
@kobake さん、 @k-takata さん ただ全自動でビルドはないかなと思っております。 |
正式リリースのパッケージ内容・タイミングは人間の判断で良いと思います!(というかそれしか無い) いろんなプロジェクトで目にする Nightly Build みたいなやつは、実行ファイル単体に限ってはもう既に組み込まれているという認識です。 https://ci.appveyor.com/project/sakuraeditor/sakura/branch/master これがそれにあたります。Nightly というよりは Latest ですね(むしろ Nightly よりもさらに迅速)。
tag の場合は PR 作る感じではないです。 このあたりはホワイトボードとかで説明できればパパパっとすぐ説明できるんですが、テキストベースで伝えるの難しいw まだ次リリースまで時間ありますし、このあたりはゆっくり習得していきましょう。 |
>まだ次リリースまで時間ありますし、このあたりはゆっくり習得していきましょう。 ですね。とりあえず目先の技術的課題と、iss他のバージョン情報を一括メンテするvbsでもこしらえます。 |
ちなみに今、とあるプロジェクトで考えているリリース方法はこんな感じです。
|
pre-release 方式良いですね! |
appveyorのトリガはまだちょっと気が早かったかな・・・。 やれそうな雰囲気がバシバシあるのは、すごくいい感じ 😄 |
できるところからゆっくりやっていきましょう。 |
#124 で技術的にインストーラを appveyor でビルドできるところまで確認しました。 |
英語用のリソースはまだ入れてませんが、簡単に追加可能だと思います。 |
a84fac8 で確認しました。 |
iss ファイルだけを分けたらいけそうです。 |
exe より取得するよりは、スクリプト等で複数箇所に存在するバージョンを一括で こんな感じでスクリプトを実行したら必要な箇所をすべて書き換えるというやり方です。
必要に応じてバージョン番号の各桁を別のコマンド引数で渡してもいいです。
こうすれば例えば CI の中で、インストーラや EXE の末尾のバージョンに build 番号を |
#67 にも書きましたが、innosetup-5.6.1-unicode.exe だと、issがエラーはいちゃたのでappveyor がバージョンアップしたらなにがしか対応が必要になるかも。 |
Python ってappveyor でも動くのかしら、もし動くのなら、Version情報が決まったらそれ用のファイルにリリースVersion記載するか、exeから自動取得するか別にして「update_version.py」らしきものを動かせば、ローカルPC作業じゃなくてもいけるっすね。 |
EXE の中のバージョン番号自体複数箇所に存在していると思うので バージョン番号の更新自体はどうせ手動でしないといけないので |
なるほど、Devチーム責任でバージョン番号が影響するリソースを全部書き換え要って作戦ですね。 |
はい。過去に別件で使ったことがあります。 また好きなバージョンを選べます。 別に python でなくとも速く簡単に書ける言語であれば |
#124 で使ったブランチから分岐すればすぐに試せます。 |
あれ、なんか書いたのが消えてるような・・・
これ書いたのが消えてる??? |
C#はコンパイル必要なのであんまりやりたくないですねぇ。 |
そうですね。
最近急激に流行りだしているみたいですよ。 私も最初心理的にハードルがありましたが、 |
とりあえず、innosetup-5.5.9のGetWindowsVersionExをWin10で動かすとちゃんとメジャーバージョンに10って返ってくる\(^_^)/ Windows10かどうか判断するfunction作ってIconsでCheck判定してショートカットをOn/Offするところまでは出来たのですが、スタートメニュー直下に作る指定ではまり中。。。 |
それと、issはバージョン情報書き換え対象にしなくてもよさそうです。 #define MyAppVer GetFileVersion("sakura.exe") でバージョン情報が取得できます。 #define MyAppVerH StringChange(MyAppVer, ".", "-") とやると2.3.0.0を2-3-0-0に置き換えられそうです。 |
とりあえず、ショートカットは相対指定でできるの確認したので、これで一応一通り技術的なところはクリアできたような。 |
あ、あかん。 |
https://github.com/forexample/github-binary-release できそうですよ。 |
@m-tmatma さん、了解です、ありがとうございます。 |
Sandbox のリポジトリとかで練習してみたらいいと思います |
とりあえず、個々の課題のおさらい。 1)Inatallerの一部ファイルがリポジトリ上zipで圧縮されている。 #41 |
インストーラーパッケージはAppveyorで自動作成されることが確認できたので、 |
とりあえずたたき台を作成。思いつくまま書いてしまったので多々突っ込みよろしくお願いします。
■インストーラーパッケージ作成運用手順(理想)
1)コミッターのリクエストを受けリリース用Issue作成
2)バージョン番号の決定
3)ダイナミックコンテンツ選定(exe,dll,ヘルプ)
4)スタティックコンテンツの追加、変更選定(キーワードファイル他)、リリースノート更新。
5)リリースパッケージ用ブランチ作成しPR
→ブランチは作成せず、masterに直接コミット?
6)問題なければメインへコミットしインストーラー生成(Appveyor自動)
→タグ付を契機にAppveyorにてインストーラー生成。
7)インストーラー動作確認(ローカルにインストール・アンインストール素振り実施?)
8)必要・可能ならリリースモジュールのダウンリードサイトへの自動反映(?必要)
9)関連ドキュメントWebサイト等の自動修正
■インストーラーパッケージ作成運用手順(暫定手動)
理想形の1)~5)まで同じ、6)のインストーラー作成をローカルで実施してコミット
8)、9)を手動で実施。
■現状課題メモ
zipを展開する。 ライセンスの話 #41
各バイナリ(exe,dll,ヘルプ)もチェックインする?
このプロジェクトで生成するバイナリはチェックインせず、インストーラ作成時にダイナミックに取り込む?
外部DLLファイルはチェックインしておく。 外部モジュール(bregonig.dll とか)の管理方法を検討する #81
フォルダ名を適切なものにしたほうがいいか?
フォルダ名を変えた場合上書きインストールでファイル重複してしまう。
フォルダにいれてワイルドカードで取り込むと今後増えたときにメンテが楽、漏れがなくなる。
DLLの場合フォルダが変わる場合にプログラムで呼び出せなくなる?
・installとは別リポジトリにするか、同じリポジトリで管理するか。
リポジトリを分けた場合、双方同じリソースを二重メンテにならない工夫が必要。
一つのリポジトリで管理する場合、同じファイル名で32bitと64bitで変わるDLL等がある場合別のフォルダに入れるなど一考要。外部モジュール(bregonig.dll とか)の管理方法を検討する #81
例)リポジトリ上は
installer
resource32
***.dll
***.txt
resource64
***.dll
***.txt
としておき、インストール時にファイルをインストール先直下に展開されるようにする。
ファイル名にかぶりが無いのであれば本件不要クローズ。
licenseファイル bregonig.dll に perl_license.txt と perl_license_jp.txt を同梱する #66
他keyword
Pascal使えると言った手前、課題の6)から手を付けようかなと。
リポジトリいじるのはフォルダ構成の方向性固まったら実施かなと思います。
64Bit版リリースの時に(暫定手動)運用発動するのがひとまず目標ですかね。
The text was updated successfully, but these errors were encountered: