aboutsummaryrefslogtreecommitdiffstats
path: root/qbs-resources
diff options
context:
space:
mode:
Diffstat (limited to 'qbs-resources')
-rw-r--r--qbs-resources/modules/docker/docker.qbs51
1 files changed, 51 insertions, 0 deletions
diff --git a/qbs-resources/modules/docker/docker.qbs b/qbs-resources/modules/docker/docker.qbs
new file mode 100644
index 000000000..422b1a8f5
--- /dev/null
+++ b/qbs-resources/modules/docker/docker.qbs
@@ -0,0 +1,51 @@
+import qbs
+import qbs.FileInfo
+import qbs.Probes
+import qbs.Utilities
+
+Module {
+ Probes.BinaryProbe {
+ id: dockercli
+ names: ["docker"]
+ platformPaths: qbs.hostOS.contains("unix") ? ["/usr/bin", "/usr/local/bin"] : []
+ }
+
+ property string dockerFilePath: dockercli.filePath
+ property string imageTag
+ property stringList buildFlags
+
+ FileTagger {
+ patterns: ["Dockerfile"]
+ fileTags: ["docker.dockerfile"]
+ }
+
+ Rule {
+ inputs: ["docker.dockerfile"]
+
+ Artifact {
+ // Let Docker handle the dependency management
+ filePath: FileInfo.joinPaths(product.buildDirectory,
+ Utilities.getHash(input.filePath), ".docker-image-dummy")
+ fileTags: ["docker.docker-image"]
+ }
+
+ prepare: {
+ var args = ["build"];
+ var tag = product.docker.imageTag;
+ if (tag)
+ args.push("-t", tag);
+ Array.prototype.push.apply(args, product.docker.buildFlags);
+ args.push(".");
+ var cmd = new Command(product.docker.dockerFilePath, args);
+ cmd.workingDirectory = FileInfo.path(input.filePath);
+ cmd.description = "building docker image "
+ + FileInfo.fileName(cmd.workingDirectory) + (tag ? " (" + tag + ")" : "");
+ return [cmd];
+ }
+ }
+
+ validate: {
+ if (!dockerFilePath)
+ throw ModUtils.ModuleError("Could not find Docker.");
+ }
+}