This commit is contained in:
2025-08-05 18:37:23 -05:00
parent 407213af8c
commit 1dbd1e781f
7 changed files with 26 additions and 44 deletions

28
Jenkinsfile vendored
View File

@@ -1,31 +1,27 @@
pipeline {
agent none
environment { DEBUG = "1" }
stages {
stage('Build Docker Image Matrix') {
stage('Build in Docker') {
matrix {
axes {
axis {
name 'DISTRO'
values 'debian-bookworm', 'ubuntu-24.04', 'ubuntu-22.04',
'archlinux-latest', 'fedora-42'
values 'ubuntu-22.04', 'ubuntu-24.04',
'debian-bookworm', 'fedora-42'
// 'archlinux-latest'
}
axis {
name 'ARCH'
values 'amd64', 'arm64'
}
}
stages {
stage('Build Docker Image') {
agent { label "linux && amd64" }
stage('Build/Run') {
agent { label "linux && ${ARCH}" }
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') {
agent { label "linux && arm64" }
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_image.sh ${DISTRO}"
}
}
}

View File

@@ -24,10 +24,11 @@ echo_if_fail() {
local cmd=("$@")
local out="${TMP_DIR}/.stdout-${RANDOM}"
local err="${TMP_DIR}/.stderr-${RANDOM}"
test -d "${TMP_DIR}" || mkdir -p "${TMP_DIR}"
# set trace to the cmdEvalTrace and open file descriptor
local cmdEvalTrace="${TMP_DIR}/.cmdEvalTrace-${RANDOM}"
touch "${cmdEvalTrace}" || ${SUDO} rm -rf "${TMP_DIR}"
test -d "${TMP_DIR}" || mkdir -p "${TMP_DIR}"
exec 5>"${cmdEvalTrace}"
export BASH_XTRACEFD=5

View File

@@ -47,7 +47,6 @@ docker_build_image() {
validate_selected_image "$@" || return 1
check_docker || return 1
test -d "${DOCKER_DIR}" || mkdir -p "${DOCKER_DIR}"
local platform="${PLATFORM:-linux/amd64}"
for distro in "${DISTROS[@]}"; do
image_tag="$(set_distro_image_tag "${distro}")"
echo_info "sourcing package manager for ${image_tag}"
@@ -58,7 +57,6 @@ docker_build_image() {
distroPkgMgr="${DOCKER_DIR}/${distro}-pkg_mgr"
# get package manager info
docker run --rm \
--platform "${platform}" \
-v "${REPO_DIR}":/workdir \
-w /workdir \
"${dockerDistro}" \
@@ -86,7 +84,6 @@ docker_build_image() {
echo_info "building ${image_tag}"
docker build \
--platform "${platform}" \
-t "${image_tag}" \
-f "${dockerfile}" \
. || return 1
@@ -100,11 +97,10 @@ 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="$(set_distro_image_tag "${distro}")"
echo_info "saving docker image for ${image_tag}"
docker save --platform "${platform}" "${image_tag}" |
docker save "${image_tag}" |
zstd -T0 >"${DOCKER_DIR}/$(docker_image_archive_name "${image_tag}")" ||
return 1
done
@@ -116,7 +112,6 @@ 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="$(set_distro_image_tag "${distro}")"
echo_info "loading docker image for ${image_tag}"
@@ -134,28 +129,14 @@ FB_FUNC_COMPLETION['docker_run_image']="${VALID_DOCKER_IMAGES[*]}"
docker_run_image() {
validate_selected_image "$@" || return 1
check_docker || return 1
local platform="${PLATFORM:-linux/amd64}"
for distro in "${DISTROS[@]}"; do
image_tag="$(set_distro_image_tag "${distro}")"
echo_info "running ffmpeg build for ${image_tag}"
docker run --rm \
--platform "${platform}" \
-v "${REPO_DIR}":/workdir \
-w /workdir \
-e DEBUG="${DEBUG}" \
"${image_tag}" \
./scripts/build.sh || return 1
done
}
FB_FUNC_NAMES+=('docker_run_amd64_image_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() {
if missing_cmd qemu-x86_64-static; then
determine_pkg_mgr || return 1
${pkg_install} qemu-user-static || return 1
fi
check_docker || return 1
docker run --privileged --rm tonistiigi/binfmt --install all || return 1
docker_run_image "$@"
}

View File

@@ -96,6 +96,12 @@ print_pkg_mgr() {
echo "export req_pkgs=\"$(print_req_pkgs)\""
}
print_os() {
if [[ -f /etc/os-release ]]; then
source /etc/os-release ; echo "${ID}-${VERSION_ID}"
fi
}
check_for_req_pkgs() {
echo_info "checking for required packages"
local missing_pkgs=()

View File

@@ -41,7 +41,7 @@ export FB_RUNNING_AS_SCRIPT=1
. main.sh
scr_name="$(bash_basename $0)"
cmd="${scr_name//.sh}"
set -x
if [[ $DEBUG == 1 ]]; then set -x ; fi
$cmd $@' >"${ENTRY_SCRIPT}"
chmod +x "${ENTRY_SCRIPT}"
fi
@@ -76,9 +76,8 @@ test -f "${HOME}/.bashrc" && source "${HOME}/.bashrc"
src_scripts || return 1
determine_pkg_mgr || return 1
# pkg_mgr initialized in determine_pkg_mgr
# shellcheck disable=SC2154
test "${PREFIX}" == '' && PREFIX="${IGN_DIR}/${pkg_mgr}_sysroot"
test "${PREFIX}" == '' && PREFIX="${IGN_DIR}/$(print_os)_sysroot"
if [[ $FB_RUNNING_AS_SCRIPT -eq 0 ]]; then
print_cmds || return 1

View File

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

View File

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