-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDockerfile
More file actions
60 lines (47 loc) · 2.23 KB
/
Copy pathDockerfile
File metadata and controls
60 lines (47 loc) · 2.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# syntax=docker/dockerfile:1
# hadolint global ignore=DL3007
FROM archlinux:latest AS build
SHELL ["/bin/bash", "-euo", "pipefail", "-c"]
RUN --mount=type=cache,target=/var/cache/pacman/pkg,sharing=locked \
pacman -Syu --noconfirm --needed \
base-devel \
cmake \
curl \
git \
ninja \
python \
spirv-tools \
vulkan-headers \
vulkan-icd-loader
ARG SLANG_RELEASE=latest
RUN release_endpoint="latest"; \
if [ "${SLANG_RELEASE}" != "latest" ]; then release_endpoint="tags/${SLANG_RELEASE}"; fi; \
release="$(curl --fail --silent --show-error --location \
--header "X-GitHub-Api-Version: 2022-11-28" \
"https://api.github.com/repos/shader-slang/slang/releases/${release_endpoint}")"; \
printf '%s' "${release}" | python -c 'import json, sys; release = json.load(sys.stdin); asset = next(asset for asset in release["assets"] if asset["name"].endswith("-linux-x86_64.tar.gz")); print("{} {}".format(asset["browser_download_url"], asset["digest"].removeprefix("sha256:")))' > /tmp/slang-asset; \
read -r asset_url asset_digest < /tmp/slang-asset; \
curl --fail --silent --show-error --location --retry 5 --output /tmp/slang.tar.gz "${asset_url}"; \
printf '%s %s\n' "${asset_digest}" /tmp/slang.tar.gz | sha256sum --check --status; \
mkdir --parents /opt/slang; \
tar --extract --gzip --file /tmp/slang.tar.gz --directory /opt/slang
ENV PATH="/opt/slang/bin:${PATH}"
WORKDIR /src
COPY --link . .
RUN cmake -S . -B build -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_COMPILER=gcc \
-DCMAKE_CXX_COMPILER=g++ \
-DSPECTRA_BUILD_UI=OFF \
&& cmake --build build --parallel \
&& cmake --install build --prefix /opt/spectra --component Spectra
FROM archlinux:latest AS runtime
RUN --mount=type=cache,target=/var/cache/pacman/pkg,sharing=locked \
pacman -Syu --noconfirm --needed gcc-libs vulkan-icd-loader \
&& groupadd --gid 10001 spectra \
&& useradd --uid 10001 --gid 10001 --home-dir /opt/spectra --shell /usr/bin/nologin spectra
COPY --from=build --chown=10001:10001 --link /opt/spectra/ /opt/spectra/
USER 10001:10001
ENV HOME=/opt/spectra
WORKDIR /opt/spectra
ENTRYPOINT ["/opt/spectra/bin/spectra"]