Skip to content

Commit b13bc07

Browse files
vitoyucepitoots
andauthored
refactor: Optimize dockerfiles for production images (#4302)
Co-authored-by: Romain Beauxis <[email protected]>
1 parent cde4dad commit b13bc07

9 files changed

+180
-149
lines changed

.github/docker/Dockerfile.production

-37
This file was deleted.

.github/docker/Dockerfile.production-alpine

-18
This file was deleted.

.github/docker/alpine.dockerfile

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
FROM alpine:edge AS downloader
2+
3+
ARG APK_FILE
4+
5+
COPY $APK_FILE /downloads/liquidsoap.apk
6+
7+
FROM alpine:edge
8+
9+
RUN --mount=type=bind,from=downloader,source=/downloads,target=/downloads \
10+
set -eux; \
11+
echo 'https://dl-cdn.alpinelinux.org/alpine/edge/testing' >> /etc/apk/repositories; \
12+
apk add --allow-untrusted --no-cache \
13+
/downloads/liquidsoap.apk \
14+
;
15+
16+
USER liquidsoap
17+
18+
RUN liquidsoap --cache-stdlib
19+
20+
ENTRYPOINT ["/usr/bin/liquidsoap"]

.github/docker/debian.dockerfile

+55
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
FROM debian:12-slim AS downloader
2+
3+
ARG DEB_FILE
4+
ARG DEB_DEBUG_FILE
5+
COPY $DEB_FILE /downloads/liquidsoap.deb
6+
COPY $DEB_DEBUG_FILE /downloads/liquidsoap-debug.deb
7+
8+
ARG DEB_MULTIMEDIA_KEYRING="https://www.deb-multimedia.org/pool/main/d/deb-multimedia-keyring/deb-multimedia-keyring_2024.9.1_all.deb"
9+
ARG DEB_MULTIMEDIA_KEYRING_SHA256SUM="8dc6cbb266c701cfe58bd1d2eb9fe2245a1d6341c7110cfbfe3a5a975dcf97ca"
10+
11+
RUN set -eux; \
12+
apt-get update; \
13+
apt-get install -y --no-install-recommends \
14+
ca-certificates \
15+
wget \
16+
; \
17+
wget "$DEB_MULTIMEDIA_KEYRING" -O /downloads/deb-multimedia-keyring.deb; \
18+
echo "$DEB_MULTIMEDIA_KEYRING_SHA256SUM /downloads/deb-multimedia-keyring.deb" | sha256sum -c -;
19+
20+
FROM debian:12-slim
21+
22+
ARG DEBIAN_FRONTEND=noninteractive
23+
24+
# For ffmpeg with libfdk-aac
25+
RUN --mount=type=bind,from=downloader,source=/downloads,target=/downloads \
26+
set -eux; \
27+
apt-get update; \
28+
apt-get install -y --no-install-recommends \
29+
/downloads/deb-multimedia-keyring.deb \
30+
ca-certificates \
31+
; \
32+
echo 'deb https://www.deb-multimedia.org bookworm main non-free' > \
33+
/etc/apt/sources.list.d/deb-multimedia.list; \
34+
rm -rf \
35+
/var/lib/apt/lists \
36+
/var/lib/dpkg/status-old \
37+
;
38+
39+
RUN --mount=type=bind,from=downloader,source=/downloads,target=/downloads \
40+
set -eux; \
41+
apt-get update; \
42+
apt-get install -y --no-install-recommends \
43+
/downloads/liquidsoap.deb \
44+
/downloads/liquidsoap-debug.deb \
45+
; \
46+
rm -rf \
47+
/var/lib/apt/lists \
48+
/var/lib/dpkg/status-old \
49+
;
50+
51+
USER liquidsoap
52+
53+
RUN liquidsoap --cache-stdlib
54+
55+
ENTRYPOINT ["/usr/bin/liquidsoap"]
File renamed without changes.

.github/scripts/build-docker-alpine.sh

-31
This file was deleted.

.github/scripts/build-docker.sh

-35
This file was deleted.

.github/scripts/build-website.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ BASE_DIR=$(cd "${PWD}/../.." && pwd)
77

88
DOCKER_IMAGE=savonet/liquidsoap-github-actions-website
99

10-
docker build --no-cache --tag "${DOCKER_IMAGE}" --file "${BASE_DIR}/.github/docker/Dockerfile.website" .
10+
docker build --no-cache --tag "${DOCKER_IMAGE}" --file "${BASE_DIR}/.github/docker/website.dockerfile" .
1111

1212
id="$(docker create "${DOCKER_IMAGE}")"
1313
docker cp "$id:/tmp/liquidsoap-full/website/html" html/

.github/workflows/ci.yml

+104-27
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ jobs:
3131
is_release: ${{ steps.build_details.outputs.is_release }}
3232
is_rolling_release: ${{ steps.build_details.outputs.is_rolling_release }}
3333
is_fork: ${{ steps.build_details.outputs.is_fork }}
34+
publish_docker_image: ${{ steps.build_details.outputs.is_fork != 'true' && github.event_name != 'merge_group' }}
3435
build_os: ${{ steps.build_details.outputs.build_os }}
3536
build_platform: ${{ steps.build_details.outputs.build_platform }}
3637
build_include: ${{ steps.build_details.outputs.build_include }}
@@ -615,7 +616,6 @@ jobs:
615616
build_docker:
616617
runs-on: ${{ matrix.runs-on }}
617618
needs: [build_details, build_posix, fetch_s3_artifacts]
618-
if: needs.build_details.outputs.is_fork != 'true' && github.event_name != 'merge_group'
619619
strategy:
620620
fail-fast: false
621621
matrix:
@@ -638,15 +638,36 @@ jobs:
638638
run: |
639639
echo "deb-file=$(find artifacts/${{ needs.build_details.outputs.sha }} -type f | grep ${{ matrix.docker-debian-os }} | grep -v minimal | grep '${{ matrix.platform }}\.deb$' | grep dbgsym | grep deb)" >> "${GITHUB_OUTPUT}"
640640
id: debian_debug_package
641-
- name: Log in to the github registry
642-
run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin
643-
- name: Build docker image
644-
run: .github/scripts/build-docker.sh ${{ steps.debian_package.outputs.deb-file }} ${{ steps.debian_debug_package.outputs.deb-file }} ${{ needs.build_details.outputs.branch }} ${{ secrets.DOCKERHUB_USER }} ${{ secrets.DOCKERHUB_PASSWORD }} ${{ matrix.platform }}
641+
- name: Login to Docker Hub
642+
if: needs.build_details.outputs.publish_docker_image == 'true'
643+
uses: docker/login-action@v3
644+
with:
645+
username: ${{ secrets.DOCKERHUB_USER }}
646+
password: ${{ secrets.DOCKERHUB_PASSWORD }}
647+
- name: Login to GitHub Container Registry
648+
if: needs.build_details.outputs.publish_docker_image == 'true'
649+
uses: docker/login-action@v3
650+
with:
651+
registry: ghcr.io
652+
username: ${{ github.actor }}
653+
password: ${{ secrets.GITHUB_TOKEN }}
654+
- name: Build and push docker image
655+
uses: docker/build-push-action@v6
656+
with:
657+
build-args: |
658+
"DEB_FILE=${{ steps.debian_package.outputs.deb-file }}"
659+
"DEB_DEBUG_FILE=${{ steps.debian_debug_package.outputs.deb-file }}"
660+
context: .
661+
file: .github/docker/debian.dockerfile
662+
tags: |
663+
"savonet/liquidsoap-ci-build:${{ needs.build_details.outputs.branch }}_${{ matrix.platform }}"
664+
"ghcr.io/savonet/liquidsoap-ci-build:${{ needs.build_details.outputs.branch }}_${{ matrix.platform }}"
665+
push: ${{ needs.build_details.outputs.publish_docker_image }}
645666

646667
build_docker_alpine:
647668
runs-on: ${{ matrix.runs-on }}
648-
needs: [build_details, run_tests, build_posix, fetch_s3_artifacts]
649-
if: needs.build_details.outputs.is_fork != 'true' && github.event_name != 'merge_group'
669+
needs: [build_details, build_posix, fetch_s3_artifacts]
670+
if: needs.build_details.outputs.is_fork != 'true'
650671
strategy:
651672
fail-fast: false
652673
matrix:
@@ -665,15 +686,34 @@ jobs:
665686
run: |
666687
echo "apk-file=$(find artifacts/${{ needs.build_details.outputs.sha }} -type f | grep -v minimal | grep 'apk$' | grep -v dbg | grep ${{ matrix.alpine-arch }})" >> "${GITHUB_OUTPUT}"
667688
id: alpine_package
668-
- name: Log in to the github registry
669-
run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin
670-
- name: Build docker image
671-
run: .github/scripts/build-docker-alpine.sh ${{ steps.alpine_package.outputs.apk-file }} ${{ needs.build_details.outputs.branch }} ${{ secrets.DOCKERHUB_USER }} ${{ secrets.DOCKERHUB_PASSWORD }} ${{ matrix.platform }}
689+
- name: Login to Docker Hub
690+
if: needs.build_details.outputs.publish_docker_image == 'true'
691+
uses: docker/login-action@v3
692+
with:
693+
username: ${{ secrets.DOCKERHUB_USER }}
694+
password: ${{ secrets.DOCKERHUB_PASSWORD }}
695+
- name: Login to GitHub Container Registry
696+
if: needs.build_details.outputs.publish_docker_image == 'true'
697+
uses: docker/login-action@v3
698+
with:
699+
registry: ghcr.io
700+
username: ${{ github.actor }}
701+
password: ${{ secrets.GITHUB_TOKEN }}
702+
- name: Build and push docker image
703+
uses: docker/build-push-action@v6
704+
with:
705+
build-args: |
706+
"APK_FILE=${{ steps.alpine_package.outputs.apk-file }}"
707+
context: .
708+
file: .github/docker/alpine.dockerfile
709+
tags: |
710+
"savonet/liquidsoap-ci-build:${{ needs.build_details.outputs.branch }}_alpine_${{ matrix.platform }}"
711+
"ghcr.io/savonet/liquidsoap-ci-build:${{ needs.build_details.outputs.branch }}_alpine_${{ matrix.platform }}"
712+
push: ${{ needs.build_details.outputs.publish_docker_image }}
672713

673714
build_docker_minimal:
674715
runs-on: ${{ matrix.runs-on }}
675-
needs: [build_details, run_tests, build_posix, fetch_s3_artifacts]
676-
if: needs.build_details.outputs.is_fork != 'true' && github.event_name != 'merge_group'
716+
needs: [build_details, build_posix, fetch_s3_artifacts]
677717
strategy:
678718
fail-fast: false
679719
matrix:
@@ -696,15 +736,36 @@ jobs:
696736
run: |
697737
echo "deb-file=$(find artifacts/${{ needs.build_details.outputs.sha }} -type f | grep ${{ matrix.docker-debian-os }} | grep minimal | grep '${{ matrix.platform }}\.deb$' | grep dbgsym | grep deb)" >> "${GITHUB_OUTPUT}"
698738
id: debian_debug_package
699-
- name: Log in to the github registry
700-
run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin
701-
- name: Build docker image
702-
run: .github/scripts/build-docker.sh ${{ steps.debian_package.outputs.deb-file }} ${{ steps.debian_debug_package.outputs.deb-file }} ${{ needs.build_details.outputs.branch }}-minimal ${{ secrets.DOCKERHUB_USER }} ${{ secrets.DOCKERHUB_PASSWORD }} ${{ matrix.platform }}
739+
- name: Login to Docker Hub
740+
if: needs.build_details.outputs.publish_docker_image == 'true'
741+
uses: docker/login-action@v3
742+
with:
743+
username: ${{ secrets.DOCKERHUB_USER }}
744+
password: ${{ secrets.DOCKERHUB_PASSWORD }}
745+
- name: Login to GitHub Container Registry
746+
if: needs.build_details.outputs.publish_docker_image == 'true'
747+
uses: docker/login-action@v3
748+
with:
749+
registry: ghcr.io
750+
username: ${{ github.actor }}
751+
password: ${{ secrets.GITHUB_TOKEN }}
752+
- name: Build and push docker image
753+
uses: docker/build-push-action@v6
754+
with:
755+
build-args: |
756+
"DEB_FILE=${{ steps.debian_package.outputs.deb-file }}"
757+
"DEB_DEBUG_FILE=${{ steps.debian_debug_package.outputs.deb-file }}"
758+
context: .
759+
file: .github/docker/debian.dockerfile
760+
tags: |
761+
"savonet/liquidsoap-ci-build:${{ needs.build_details.outputs.branch }}-minimal_${{ matrix.platform }}"
762+
"ghcr.io/savonet/liquidsoap-ci-build:${{ needs.build_details.outputs.branch }}-minimal_${{ matrix.platform }}"
763+
push: ${{ needs.build_details.outputs.publish_docker_image }}
703764

704765
build_docker_alpine_minimal:
705766
runs-on: ${{ matrix.runs-on }}
706-
needs: [build_details, run_tests, build_posix, fetch_s3_artifacts]
707-
if: needs.build_details.outputs.is_fork != 'true' && github.event_name != 'merge_group'
767+
needs: [build_details, build_posix, fetch_s3_artifacts]
768+
if: needs.build_details.outputs.is_fork != 'true'
708769
strategy:
709770
fail-fast: false
710771
matrix:
@@ -723,14 +784,30 @@ jobs:
723784
run: |
724785
echo "apk-file=$(find artifacts/${{ needs.build_details.outputs.sha }} -type f | grep minimal | grep 'apk$' | grep -v dbg | grep ${{ matrix.alpine-arch }})" >> "${GITHUB_OUTPUT}"
725786
id: alpine_package
726-
- name: Get alpine debug package
727-
run: |
728-
echo "apk-file=$(find artifacts/${{ needs.build_details.outputs.sha }} -type f | grep minimal | grep 'apk$' | grep dbg | grep ${{ matrix.alpine-arch }})" >> "${GITHUB_OUTPUT}"
729-
id: alpine_dbg_package
730-
- name: Log in to the github registry
731-
run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin
732-
- name: Build docker image
733-
run: .github/scripts/build-docker-alpine.sh ${{ steps.alpine_package.outputs.apk-file }} ${{ steps.alpine_dbg_package.outputs.apk-file }} ${{ needs.build_details.outputs.branch }}-minimal ${{ secrets.DOCKERHUB_USER }} ${{ secrets.DOCKERHUB_PASSWORD }} ${{ matrix.platform }}
787+
- name: Login to Docker Hub
788+
if: needs.build_details.outputs.publish_docker_image == 'true'
789+
uses: docker/login-action@v3
790+
with:
791+
username: ${{ secrets.DOCKERHUB_USER }}
792+
password: ${{ secrets.DOCKERHUB_PASSWORD }}
793+
- name: Login to GitHub Container Registry
794+
if: needs.build_details.outputs.publish_docker_image == 'true'
795+
uses: docker/login-action@v3
796+
with:
797+
registry: ghcr.io
798+
username: ${{ github.actor }}
799+
password: ${{ secrets.GITHUB_TOKEN }}
800+
- name: Build and push docker image
801+
uses: docker/build-push-action@v6
802+
with:
803+
build-args: |
804+
"APK_FILE=${{ steps.alpine_package.outputs.apk-file }}"
805+
context: .
806+
file: .github/docker/alpine.dockerfile
807+
tags: |
808+
"savonet/liquidsoap-ci-build:${{ needs.build_details.outputs.branch }}-minimal_alpine_${{ matrix.platform }}"
809+
"ghcr.io/savonet/liquidsoap-ci-build:${{ needs.build_details.outputs.branch }}-minimal_alpine_${{ matrix.platform }}"
810+
push: ${{ needs.build_details.outputs.publish_docker_image }}
734811

735812
build_docker_release:
736813
runs-on: ubuntu-latest

0 commit comments

Comments
 (0)