diff --git a/Jenkinsfile b/Jenkinsfile index 3f196bf..9fdac14 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -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}" } } } diff --git a/lib/common.sh b/lib/common.sh index a135667..578cde7 100644 --- a/lib/common.sh +++ b/lib/common.sh @@ -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 diff --git a/lib/docker.sh b/lib/docker.sh index 29b2481..685beb4 100644 --- a/lib/docker.sh +++ b/lib/docker.sh @@ -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 "$@" -} diff --git a/lib/install_deps.sh b/lib/install_deps.sh index d5d3228..a5ab258 100644 --- a/lib/install_deps.sh +++ b/lib/install_deps.sh @@ -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=() diff --git a/main.sh b/main.sh index d9059b9..b270efe 100755 --- a/main.sh +++ b/main.sh @@ -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 diff --git a/scripts/docker_run_amd64_image_on_arm64.sh b/scripts/docker_run_amd64_image_on_arm64.sh deleted file mode 120000 index 44b7711..0000000 --- a/scripts/docker_run_amd64_image_on_arm64.sh +++ /dev/null @@ -1 +0,0 @@ -entry.sh \ No newline at end of file diff --git a/scripts/entry.sh b/scripts/entry.sh index a6342f4..c21aad5 100755 --- a/scripts/entry.sh +++ b/scripts/entry.sh @@ -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 $@