build on amd64

This commit is contained in:
2025-08-03 10:30:15 -05:00
parent c4204822e0
commit 07207f6e82
6 changed files with 90 additions and 28 deletions

29
Jenkinsfile vendored
View File

@@ -1,9 +1,9 @@
pipeline { pipeline {
agent none agent none
stages { stages {
stage('Build Matrix') { stage('Build Docker Image Matrix') {
matrix { matrix {
agent { label "linux" } agent { label "linux && amd64" }
axes { axes {
axis { axis {
name 'DISTRO' name 'DISTRO'
@@ -12,8 +12,31 @@ pipeline {
} }
} }
stages { stages {
stage('Build') { stage('Build Docker Image') {
steps { steps {
sh "./scripts/docker_build_image.sh ${DISTRO}"
sh "./scripts/docker_save_image.sh ${DISTRO}"
stash includes: "gitignore/docker/${DISTRO}.tar.zst", name: "${DISTRO}-stash"
}
}
}
}
}
stage('Run Docker Image Matrix') {
matrix {
agent { label "linux && arm64" }
axes {
axis {
name 'DISTRO'
values 'debian:bookworm', 'ubuntu:24.04', 'ubuntu:22.04',
'archlinux:latest', 'fedora:42'
}
}
stages {
stage('Run Docker Image') {
steps {
unstash "${DISTRO}-stash"
sh "./scripts/docker_load_image.sh ${DISTRO}"
sh "./scripts/docker_run_amd64_image_on_arm64.sh ${DISTRO}" sh "./scripts/docker_run_amd64_image_on_arm64.sh ${DISTRO}"
} }
} }

View File

@@ -1,5 +1,12 @@
#!/usr/bin/env bash #!/usr/bin/env bash
VALID_DOCKER_IMAGES=(
'ubuntu:22.04' 'ubuntu:24.04'
'fedora:41' 'fedora:42'
'archlinux:latest'
'debian:bookworm'
)
check_docker() { check_docker() {
if missing_cmd docker; then if missing_cmd docker; then
echo_info "install docker" echo_info "install docker"
@@ -7,37 +14,38 @@ check_docker() {
fi fi
} }
safe_docker_image_name() {
local image_tag="${1}"
# echo "${image_tag//:/-}"
echo "${image_tag}"
}
docker_image_archive_name() {
local image_tag="${1}"
echo "$(safe_docker_image_name "${image_tag}").tar.zst"
}
validate_selected_image() { validate_selected_image() {
local selectedImage="${1:-}" local selectedImage="${1:-}"
local validImages=( for distro in "${VALID_DOCKER_IMAGES[@]}"; do
'ubuntu:22.04' 'ubuntu:24.04'
'fedora:41' 'fedora:42'
'archlinux:latest'
'debian:bookworm'
)
for distro in "${validImages[@]}"; do
if [[ ${selectedImage} == "${distro}" ]]; then if [[ ${selectedImage} == "${distro}" ]]; then
DISTROS+=("${distro}") DISTROS+=("${distro}")
fi fi
done done
if [[ ${DISTROS[*]} == '' ]]; then if [[ ${DISTROS[*]} == '' ]]; then
echo_fail "${selectedImage} is not valid" echo_fail "${selectedImage} is not valid"
echo_info "valid images:" "${validImages[@]}" echo_info "valid images:" "${VALID_DOCKER_IMAGES[@]}"
return 1 return 1
fi fi
} }
# shellcheck disable=SC2154
FB_FUNC_NAMES+=('docker_build_image') FB_FUNC_NAMES+=('docker_build_image')
# FB_FUNC_DESCS used externally
# shellcheck disable=SC2034
FB_FUNC_DESCS['docker_build_image']='build docker image with required dependencies pre-installed' FB_FUNC_DESCS['docker_build_image']='build docker image with required dependencies pre-installed'
FB_FUNC_COMPLETION['docker_build_image']="${VALID_DOCKER_IMAGES[*]}"
docker_build_image() { docker_build_image() {
validate_selected_image "$@" || return 1 validate_selected_image "$@" || return 1
check_docker || return 1 check_docker || return 1
DOCKERFILE_DIR="${IGN_DIR}/Dockerfiles" test -d "${DOCKER_DIR}" || mkdir -p "${DOCKER_DIR}"
test -d "${DOCKERFILE_DIR}" && rm -rf "${DOCKERFILE_DIR}"
mkdir -p "${DOCKERFILE_DIR}" || return 1
local platform="${PLATFORM:-linux/amd64}" local platform="${PLATFORM:-linux/amd64}"
for distro in "${DISTROS[@]}"; do for distro in "${DISTROS[@]}"; do
image_tag="ffmpeg_builder_${distro}" image_tag="ffmpeg_builder_${distro}"
@@ -46,7 +54,7 @@ docker_build_image() {
# distro without problematic characters # distro without problematic characters
distroFmt="${distro//:/-}" distroFmt="${distro//:/-}"
# specific file for evaluated package manager info # specific file for evaluated package manager info
distroFmtPkgMgr="${DOCKERFILE_DIR}/${distroFmt}-pkg_mgr" distroFmtPkgMgr="${DOCKER_DIR}/${distroFmt}-pkg_mgr"
# get package manager info # get package manager info
docker run --rm \ docker run --rm \
--platform "${platform}" \ --platform "${platform}" \
@@ -58,7 +66,7 @@ docker_build_image() {
cat "${distroFmtPkgMgr}" cat "${distroFmtPkgMgr}"
source "${distroFmtPkgMgr}" source "${distroFmtPkgMgr}"
dockerfile="${DOCKERFILE_DIR}/Dockerfile_${distroFmt}" dockerfile="${DOCKER_DIR}/Dockerfile_${distroFmt}"
{ {
echo "FROM ${distro}" echo "FROM ${distro}"
echo 'SHELL ["/bin/bash", "-c"]' echo 'SHELL ["/bin/bash", "-c"]'
@@ -84,13 +92,43 @@ docker_build_image() {
done done
} }
# shellcheck disable=SC2154 FB_FUNC_NAMES+=('docker_save_image')
FB_FUNC_DESCS['docker_save_image']='save docker image into tar.zst'
FB_FUNC_COMPLETION['docker_save_image']="${VALID_DOCKER_IMAGES[*]}"
docker_save_image() {
validate_selected_image "$@" || return 1
check_docker || return 1
local platform="${PLATFORM:-linux/amd64}"
for distro in "${DISTROS[@]}"; do
image_tag="ffmpeg_builder_${distro}"
echo_info "saving docker image for ${image_tag}"
docker save --platform "${platform}" "${image_tag}" |
zstd -T0 >"${DOCKER_DIR}/$(docker_image_archive_name "${image_tag}")" ||
return 1
done
}
FB_FUNC_NAMES+=('docker_load_image')
FB_FUNC_DESCS['docker_load_image']='load docker image from tar.zst'
FB_FUNC_COMPLETION['docker_load_image']="${VALID_DOCKER_IMAGES[*]}"
docker_load_image() {
validate_selected_image "$@" || return 1
check_docker || return 1
local platform="${PLATFORM:-linux/amd64}"
for distro in "${DISTROS[@]}"; do
image_tag="ffmpeg_builder_${distro}"
echo_info "loading docker image for ${image_tag}"
local archive="${DOCKER_DIR}/$(docker_image_archive_name "${image_tag}")"
test -f "$archive" || return 1
zstdcat -T0 "$archive" |
docker load || return 1
done
}
FB_FUNC_NAMES+=('docker_run_image') FB_FUNC_NAMES+=('docker_run_image')
# FB_FUNC_DESCS used externally
# shellcheck disable=SC2034
FB_FUNC_DESCS['docker_run_image']='run docker image to build ffmpeg' FB_FUNC_DESCS['docker_run_image']='run docker image to build ffmpeg'
FB_FUNC_COMPLETION['docker_run_image']="${VALID_DOCKER_IMAGES[*]}"
docker_run_image() { docker_run_image() {
docker_build_image "$@" || return 1
check_docker || return 1 check_docker || return 1
local platform="${PLATFORM:-linux/amd64}" local platform="${PLATFORM:-linux/amd64}"
for distro in "${DISTROS[@]}"; do for distro in "${DISTROS[@]}"; do
@@ -105,11 +143,9 @@ docker_run_image() {
done done
} }
# shellcheck disable=SC2154
FB_FUNC_NAMES+=('docker_run_amd64_image_on_arm64') FB_FUNC_NAMES+=('docker_run_amd64_image_on_arm64')
# FB_FUNC_DESCS used externally
# shellcheck disable=SC2034
FB_FUNC_DESCS['docker_run_amd64_image_on_arm64']='run docker image to build ffmpeg for amd64 on arm64' FB_FUNC_DESCS['docker_run_amd64_image_on_arm64']='run docker image to build ffmpeg for amd64 on arm64'
FB_FUNC_COMPLETION['docker_run_amd64_image_on_arm64']="${VALID_DOCKER_IMAGES[*]}"
docker_run_amd64_image_on_arm64() { docker_run_amd64_image_on_arm64() {
if missing_cmd qemu-x86_64-static; then if missing_cmd qemu-x86_64-static; then
determine_pkg_mgr || return 1 determine_pkg_mgr || return 1

View File

@@ -13,7 +13,8 @@ TMP_DIR="${IGN_DIR}/tmp"
DL_DIR="${IGN_DIR}/downloads" DL_DIR="${IGN_DIR}/downloads"
BUILD_DIR="${IGN_DIR}/builds" BUILD_DIR="${IGN_DIR}/builds"
CCACHE_DIR="${IGN_DIR}/ccache" CCACHE_DIR="${IGN_DIR}/ccache"
export REPO_DIR IGN_DIR TMP_DIR DL_DIR BUILD_DIR CCACHE_DIR DOCKER_DIR="${IGN_DIR}/docker"
export REPO_DIR IGN_DIR TMP_DIR DL_DIR BUILD_DIR CCACHE_DIR DOCKER_DIR
# function names, descriptions, completions # function names, descriptions, completions
unset FB_FUNC_NAMES FB_FUNC_DESCS FB_FUNC_COMPLETION unset FB_FUNC_NAMES FB_FUNC_DESCS FB_FUNC_COMPLETION

View File

@@ -0,0 +1 @@
entry.sh

View File

@@ -0,0 +1 @@
entry.sh

View File

@@ -3,6 +3,6 @@ cd "$(dirname "$(readlink -f $0)")/.."
export FB_RUNNING_AS_SCRIPT=1 export FB_RUNNING_AS_SCRIPT=1
. main.sh . main.sh
scr_name="$(bash_basename $0)" scr_name="$(bash_basename $0)"
cmd="${scr_name//.sh}" cmd="${scr_name//.sh/}"
set -x set -x
$cmd $@ $cmd $@