blob: 668639221b45a9862d5a81feda729a9ed45a2c0c [file] [log] [blame]
Sergiusz Bazanski48050572020-05-10 21:34:10 +02001"""
2Automatically download, package, containerize and push Factorio server images.
3
4For each version defined, the following will be declared:
5 - @factorio-headless-${version}: a repository containing the factorio server tarball
6 - //third_party/factorio:${version}-1: a container_image rule to build a docker container running a factorio server
7 - //third_party/factorio:push_${version}-1: a container_push rule to push that container image to registry.k0.hswaw.net/app/factorio:${version}-1
8
9In addition, a //third_party/factorio:push_latest rule will also be created for the highest versioned server version. This is for convenience.
10
11To add a new version of Factorio, just update the _versions map with the new version number and the sha256 sum of its tarball.
12"""
13
14load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_file")
15load("@io_bazel_rules_docker//container:container.bzl", "container_image", "container_push")
16
17# version -> sha256 of server tarball
18_versions = {
19 "0.16.51": "6cb09f5ac87f16f8d5b43cef26c0ae26cc46a57a0382e253dfda032dc5bb367f",
20 "0.17.41": "bf2d16b23c3bbd97e41889d3e27670b6d958fa3d50f0befb41d234f735e8e6d1",
21 "0.17.52": "24458a4e16875b0b63677b7e7a068ce2e5b298c110381d17c6f596fd1406db0e",
22 "0.17.79": "9ace12fa986df028dc1851bf4de2cb038044d743e98823bc1c48ba21aa4d23df",
23 "0.18.12": "e0c6a46d66cfc02cba294a5fd34265e7e7a5168b8c8a7b16ad8dbac31470ed33",
24 "0.18.17": "42adce9fddde393023afb0aae19dd030a32ca0810191c0e7b9b7c55556e9bbce",
25 "0.18.22": "d90e349b61182c1e48bd34797faedc2f9b5b4e349d218ef3d987ae9d90762f7f",
Serge Bazanski1773f322020-08-01 22:02:38 +020026 "0.18.40": "696fe660fea945f38d12d49cf0b4737522d061fab5b3afd59467c4b2e375711a",
Serge Bazanski791ab6d2020-08-14 10:34:29 +000027 "1.0.0": "81d9e1aa94435aeec4131c8869fa6e9331726bea1ea31db750b65ba42dbd1464",
Sergiusz Bazanski48050572020-05-10 21:34:10 +020028}
29
30def factorio_repository(version, sha256):
31 http_file(
32 name = "factorio-headless-%s" % (version),
33 urls = [
34 "https://factorio.com/get-download/%s/headless/linux64" % (version),
35 ],
36 sha256 = sha256,
37 downloaded_file_path = "factorio.tar.xz",
38 )
39
40def factorio_repositories():
41 for v, sha256 in _versions.items():
42 factorio_repository(v, sha256)
43
44def factorio_image(version, revision):
45 image_name = "%s-%d" % (version, revision)
46 container_image(
47 name = image_name,
48 base = "@prodimage-bionic//image",
49 tars = ["@factorio-headless-%s//file" % (version)],
50 files = [":entrypoint.sh"],
51 directory = "/",
52 entrypoint = ["/entrypoint.sh"],
53 )
54 container_push(
55 name = "push_%s-%d" % (version, revision),
56 image = ":%s" % (image_name),
57 format = "Docker",
58 registry = "registry.k0.hswaw.net",
59 repository = "app/factorio",
60 tag = "%s-%d" % (version, revision),
61 )
62
63def _sort_by_version(v):
64 return [int(el) for el in v.split(".")]
65
66def factorio_images():
67 revision_overrides = {
68 "0.18.12": 2,
69 }
70 for v in _versions.keys():
71 revision = revision_overrides.get(v, 1)
72 factorio_image(v, revision)
73
74 highest_version = sorted(_versions.keys(), key=_sort_by_version, reverse=True)[0]
75 revision = revision_overrides.get(highest_version, 1)
76 container_push(
77 name = "push_latest",
78 image = ":%s-%d" % (highest_version, revision),
79 format = "Docker",
80 registry = "registry.k0.hswaw.net",
Serge Bazanski970b7682020-08-04 20:33:17 +020081 repository = "q3k/factorio",
Sergiusz Bazanski48050572020-05-10 21:34:10 +020082 tag = "%s-%d" % (highest_version, revision),
83 )