Use docker only on GitHub Actions

I don't know how to fix the build breakage on GitHub, so let's keep
using Docker there.
This commit is contained in:
Rui Ueyama committed 2024-12-26 19:56:26 +09:00
1 parent bcce7091e7
commit ec1d7120aa
2 files changed
+39 -26

No files matched your search

+11 -6
View File
@@ -23,13 +23,18 @@ jobs:
- name: Checkout Repository
uses: actions/checkout@v2
- name: Install Podman and QEMU
run: |
sudo apt-get update
sudo apt-get install -y podman qemu-user-static
- name: Login to GitHub Container Registry
run: podman login ghcr.io -u ${{ github.repository_owner }} -p ${{ secrets.GITHUB_TOKEN }}
uses: docker/login-action@v1
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build a tarball
run: ./dist.sh ${{ matrix.target }}
+28 -20
View File
@@ -60,26 +60,11 @@ case $# in
usage
esac
echo "$arch" | grep -Eq '^(x86_64|aarch64|arm|riscv64|ppc64le|s390x)$' || usage
version=$(sed -n 's/^project(mold VERSION \(.*\))/\1/p' CMakeLists.txt)
dest=mold-$version-$arch-linux
if [ "$GITHUB_REPOSITORY" = '' ]; then
image=mold-builder-$arch
image_build="podman build --arch $arch -t $image -"
else
# If this script is running on GitHub Actions, we want to cache
# the created Docker image in GitHub's Docker repostiory.
image=ghcr.io/$GITHUB_REPOSITORY/mold-builder-$arch
image_build="podman build --arch $arch -t $image --push --cache-to type=inline --cache-from type=registry,ref=ghcr.io/$GITHUB_REPOSITORY/mold-builder-$arch -"
fi
# Create a Docker image.
case $arch in
x86_64)
# Debian 8 (Jessie) released in April 2015
cat <<EOF | $image_build
script=$(cat <<EOF
FROM debian:jessie-20210326@sha256:32ad5050caffb2c7e969dac873bce2c370015c2256ff984b70c1c08b3a2816a0
ENV DEBIAN_FRONTEND=noninteractive TZ=UTC
RUN sed -i -e '/^deb/d' -e 's/^# deb /deb [trusted=yes] /g' /etc/apt/sources.list && \
@@ -142,6 +127,7 @@ RUN mkdir /build && \
cmake --install . --strip && \
rm -rf /build
EOF
)
;;
aarch64 | arm | ppc64le | s390x)
# Debian 10 (Bullseye) released in July 2019
@@ -149,7 +135,7 @@ aarch64 | arm | ppc64le | s390x)
# We don't want to build Clang for these targets with Qemu becuase
# that'd take extremely long time. Also I believe old build machines
# are usually x86-64.
cat <<EOF | $image_build
script=$(cat <<EOF
FROM debian:bullseye-20240904@sha256:8ccc486c29a3ad02ad5af7f1156e2152dff3ba5634eec9be375269ef123457d8
ENV DEBIAN_FRONTEND=noninteractive TZ=UTC
RUN sed -i -e '/^deb/d' -e 's/^# deb /deb [trusted=yes] /g' /etc/apt/sources.list && \
@@ -160,9 +146,10 @@ RUN sed -i -e '/^deb/d' -e 's/^# deb /deb [trusted=yes] /g' /etc/apt/sources.lis
ln -sf /usr/bin/clang++-16 /usr/bin/clang++ && \
rm -rf /var/lib/apt/lists
EOF
)
;;
riscv64)
cat <<EOF | $image_build
script=$(cat <<EOF
FROM docker.io/riscv64/debian:unstable-20240926@sha256:25654919c2926f38952cdd14b3300d83d13f2d820715f78c9f4b7a1d9399bf48
ENV DEBIAN_FRONTEND=noninteractive TZ=UTC
RUN sed -i -e '/^URIs/d' -e 's/^# http/URIs: http/' /etc/apt/sources.list.d/debian.sources && \
@@ -173,9 +160,28 @@ RUN sed -i -e '/^URIs/d' -e 's/^# http/URIs: http/' /etc/apt/sources.list.d/debi
ln -sf /usr/bin/clang++-18 /usr/bin/clang++ && \
rm -rf /var/lib/apt/lists
EOF
)
;;
*)
usage
;;
esac
if [ "$GITHUB_REPOSITORY" = '' ]; then
cmd="podman run --userns=host"
image=mold-builder-$arch
echo "$script" | podman build --arch $arch -t $image -
else
# If this script is running on GitHub Actions, we want to cache
# the created container image in GitHub's container repostiory.
cmd="docker run"
image=ghcr.io/$GITHUB_REPOSITORY/mold-builder-$arch
echo "$script" | docker buildx build --platform linux/$arch -t $image --push --cache-to type=inline --cache-from type=registry,ref=$image -
fi
version=$(sed -n 's/^project(mold VERSION \(.*\))/\1/p' CMakeLists.txt)
dest=mold-$version-$arch-linux
# Source tarballs available on GitHub don't contain .git history.
# Clone the repo if missing.
[ -d .git ] || git clone --branch v$version --depth 1 --bare https://github.com/rui314/mold .git
@@ -185,8 +191,7 @@ esac
timestamp="$(git log -1 --format=%ci)"
# Build mold in a container.
podman run --platform linux/$arch --userns=host -i --rm -v "$(pwd):/mold" $image \
bash -c "
$cmd --platform linux/$arch -i --rm -v "$(pwd):/mold" $image bash -c "
set -e
mkdir /build
cd /build
@@ -200,5 +205,8 @@ cmake --install . --prefix $dest --strip
find $dest -print | xargs touch --no-dereference --date='$timestamp'
find $dest -print | sort | tar -cf - --no-recursion --files-from=- | gzip -9nc > /mold/$dest.tar.gz
cp mold /mold
if [ \"\$container\" != podman ]; then
chown $(id -u):$(id -g) /mold/$dest.tar.gz /mold/mold
fi
sha256sum /mold/$dest.tar.gz
"