mirror of
https://github.com/levogevo/ffmpeg-builder.git
synced 2026-01-15 19:06:17 +00:00
build on amd64
This commit is contained in:
29
Jenkinsfile
vendored
29
Jenkinsfile
vendored
@@ -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}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
3
main.sh
3
main.sh
@@ -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
|
||||||
|
|||||||
1
scripts/docker_load_image.sh
Symbolic link
1
scripts/docker_load_image.sh
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
entry.sh
|
||||||
1
scripts/docker_save_image.sh
Symbolic link
1
scripts/docker_save_image.sh
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
entry.sh
|
||||||
@@ -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 $@
|
||||||
|
|||||||
Reference in New Issue
Block a user