digdag に PR を送ったものの、まだマージされていない or マージされたけどリリースされていない、がすぐ使いたいということはよくありますよね。
そういう時にどうしているか。特に公開しても困らなそうな内容になったので public internet にあげておきます。
大方針または心構え
- あくまでも一時しのぎ。
- 社内専用の private なパッチは当てない。技術的負債になるので絶対にしない。
- 本家にマージされてリリースされたら可及的速やかに本家に切り替える。
- 本家に切り替えられるように、本家にマージされるまで根気強く頑張る。
方針
github で本家を public fork して Releases に jar を置く。
- public なパッチしか当ててないので public fork で OK
- public repo なら認証不要で簡単にダウンロードしてインストールできる
パッケージの作り方
ビルドについては digdag の自前ビルド を参照。
実例として v0.9.33 に #994 の PR をマージしてビルドしたい場合を、著者の所属会社orgである github.com/st-tech で解説。
$ VERSION=v0.9.33
$ PR=944
$ BRANCH=${VERSION}-patched-${PR}
$ git clone git@github.com:treasure-data/digdag
$ cd digdag
$ git remote add fork git@github.com:st-tech/digdag
$ git checkout -b ${BRANCH} refs/tags/${VERSION}
$ git fetch origin "+refs/pull/${PR}/head:refs/remotes/pull/${PR}/head'"
取り込みたい commit を cherry-pick していく。TODO: もう少し楽にならんですかね
$ git cherry-pick 08db8efd2e0ce88f98a6226ae515d954bee11319
$ git cherry-pick e9574a00c236446100a8a416ded9bf8957a53cd5
$ git cherry-pick c7fba0dcd1aac83284a139497381f17a5c4995a8
version をいじる
diff --git a/build.gradle b/build.gradle
index adf1384281..583cc8bce4 100644
--- a/build.gradle
+++ b/build.gradle
@@ -12,7 +12,7 @@ apply plugin: 'maven'
allprojects {
group = 'io.digdag'
- version = '0.9.33'
+ version = '0.9.33-patched-994'
ext {
isSnapshotRelease = version.endsWith('-SNAPSHOT')
diff --git a/digdag-client/src/main/resources/io/digdag/client/version.txt b/digdag-client/src/main/resources/io/digdag/client/version.txt
index 2e665126a5..68cebab229 100644
--- a/digdag-client/src/main/resources/io/digdag/client/version.txt
+++ b/digdag-client/src/main/resources/io/digdag/client/version.txt
@@ -1 +1 @@
-0.9.33
+0.9.33-patched-994
コミットして push しておく
$ git commit build.gradle digdag-client -m ${BRANCH}
$ git push fork ${BRANCH}
ビルド
$ ./gradlew cli
pkg/v0.9.33-patched-994.jar ができるので GitHub の Releases タブから release を作ってアップロードする。
すると
$ curl -o ~/bin/digdag --create-dirs -L https://github.com/st-tech/digdag/releases/download/v0.9.33-patched-994/digdag-0.9.33-patched-994.jar
$ chmod +x ~/bin/digdag
のようにインストールできるようになる。
おわりに
頻繁にやるなら CI 化とかしたくなるかもしれないが、あくまで一時しのぎなのでだいぶ手動感あります。