Skip to content

Commit b7f2625

Browse files
committed
ci: add fixture compiler image
Add a dedicated image for compiling e2e fixtures with the toolchains used in CI. Include gcc/g++, clang-18, Rust 1.88.0, make, and binutils.
1 parent aa42d72 commit b7f2625

2 files changed

Lines changed: 96 additions & 0 deletions

File tree

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
name: Build Fixture Compiler Image
2+
3+
on:
4+
workflow_dispatch:
5+
6+
permissions:
7+
contents: read
8+
packages: write
9+
10+
jobs:
11+
build-and-push:
12+
runs-on: ubuntu-22.04
13+
steps:
14+
- uses: actions/checkout@v4
15+
16+
- name: Set up QEMU
17+
uses: docker/setup-qemu-action@v3
18+
19+
- name: Set up Docker Buildx
20+
uses: docker/setup-buildx-action@v3
21+
22+
- name: Login to GHCR
23+
uses: docker/login-action@v3
24+
with:
25+
registry: ghcr.io
26+
username: ${{ github.actor }}
27+
password: ${{ secrets.GITHUB_TOKEN }}
28+
29+
- name: Docker metadata
30+
id: meta
31+
uses: docker/metadata-action@v5
32+
with:
33+
images: ghcr.io/swananan/ghostscope-fixture-compiler
34+
tags: |
35+
type=raw,value=ubuntu24.04-clang18-rust1.88
36+
type=sha
37+
38+
- name: Build and push
39+
uses: docker/build-push-action@v6
40+
with:
41+
context: .
42+
file: docker/fixture-compiler/Dockerfile
43+
push: true
44+
tags: ${{ steps.meta.outputs.tags }}
45+
labels: ${{ steps.meta.outputs.labels }}
46+
platforms: linux/amd64
47+
cache-from: type=gha,scope=fixture-compiler
48+
cache-to: type=gha,mode=max,scope=fixture-compiler

docker/fixture-compiler/Dockerfile

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
FROM ubuntu:24.04
2+
3+
ENV DEBIAN_FRONTEND=noninteractive
4+
ENV TZ=UTC
5+
ENV LANG=C.UTF-8
6+
ENV LC_ALL=C.UTF-8
7+
8+
ARG LLVM_MAJOR=18
9+
ARG RUST_TOOLCHAIN=1.88.0
10+
11+
RUN apt-get update && apt-get install -y --no-install-recommends \
12+
bash \
13+
binutils \
14+
ca-certificates \
15+
curl \
16+
g++ \
17+
gcc \
18+
gnupg \
19+
make \
20+
tar \
21+
xz-utils \
22+
&& rm -rf /var/lib/apt/lists/*
23+
24+
RUN set -eux; \
25+
curl -fsSL https://apt.llvm.org/llvm-snapshot.gpg.key -o /etc/apt/trusted.gpg.d/apt.llvm.org.asc; \
26+
echo "deb http://apt.llvm.org/noble/ llvm-toolchain-noble-${LLVM_MAJOR} main" > /etc/apt/sources.list.d/llvm.list; \
27+
apt-get update; \
28+
apt-get install -y --no-install-recommends \
29+
clang-${LLVM_MAJOR}; \
30+
rm -rf /var/lib/apt/lists/*
31+
32+
RUN ln -sf /usr/bin/clang-${LLVM_MAJOR} /usr/local/bin/clang && \
33+
ln -sf /usr/bin/clang++-${LLVM_MAJOR} /usr/local/bin/clang++
34+
35+
RUN set -eux; \
36+
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain none; \
37+
export PATH="/root/.cargo/bin:$PATH"; \
38+
rustup set profile minimal; \
39+
rustup toolchain install "${RUST_TOOLCHAIN}"; \
40+
rustup default "${RUST_TOOLCHAIN}"; \
41+
cargo --version; \
42+
rustc --version
43+
44+
ENV PATH=/root/.cargo/bin:$PATH
45+
46+
WORKDIR /workspace
47+
48+
CMD ["/bin/bash"]

0 commit comments

Comments
 (0)