forked digdag パッケージを作ってダウンロードできるようにする


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 [email protected]:treasure-data/digdag
$ cd digdag
$ git remote add fork [email protected]: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 化とかしたくなるかもしれないが、あくまで一時しのぎなのでだいぶ手動感あります。