Help us understand the problem. What is going on with this article?

D言語でdubを使ってビルド時に、最新のコミットのハッシュをバイナリに組み込む

More than 3 years have passed since last update.

こんにちは。
タイトル通りですが、D言語でビルド時のコミットのハッシュをバイナリに組み込みたいという事になった場合に、どうすればいいか、ということについて書きます。

dubには様々なオプションが存在します。ここで使うのはpreGenerateCommandsを使います。
これは、dubでビルドする前にシェルのコマンドを叩くことができるオプションです。
これを使います。
また、最新のコミットのハッシュを得るにはgit rev-parse --short HEAD > versionというコマンドを用います。
したがって、イメージとしてはビルドに際して

  1. preGenerateCommandsを用いてgit rev-parse --short HEAD > versionを実行する。
  2. D言語にはstring importと言うものが有り、それを用いてversionというファイルを読み込む。
  3. これでバイナリにハッシュを組み込める!!!

という感じになります。

string importとは(これが正しい名前だったかは忘れてしまったのですが)、ビルド時に、string value = import("filepath");とすることで、filepathのファイルの中身をvalueに読み込むことができる機能です(なお、これを使うにはdmdでビルドする時に-Jオプションで、filepathのあるパスを指定する必要があります。)

以上をまとめると、次のようなコードで組み込む事ができます。

dub.json
{
  "name": "test_git",
  "authors": [
    "Akihiro Shoji"
  ],
  "description": "A minimal D application.",
  "copyright": "Copyright (c) 2017, Akihiro Shoji",
  "license": "MIT",
  "preGenerateCommands": ["bash getLatestCommitHash.sh"],
  "dflags":["-J."]
}
source/app.d
import std.stdio;

enum string _version = import("./version");

void main() {
  writeln("version : ", _version);
}
getLatestCommitHash.sh
git rev-parse --short HEAD > version

このようにして書くと、ビルド時にバイナリに、最新のコミットのハッシュを埋め込むことが出来ます。

alpha_kai_NET
D/C/Ruby/Haskell/TypeScript GitHub: https://github.com/alphaKAI Twitter: https://twitter.com/alpha_kai_NET
http://alpha-kai-net.info
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした