Files
celenity 221059475c feat: Clean-up/re-organize CI (notably, CI now uses its own dedicated separate scripts for jobs, to improve control and portability, and also quality as they are subject to our linting)
This also reduces reliance on GitLab-specific CI env vars/functionality in general, and adds logic to ensure our CI scripts are only called from CI (translation: when `IRONFOX_CI` is set to `1`), as well as ensures external CI env vars are properly set

Signed-off-by: celenity <celenity@celenity.dev>
2026-08-13 05:31:04 +00:00

191 lines
8.4 KiB
Bash
Executable File

#!/bin/bash
# IronFox environment variables
set -euo pipefail
if [[ ! -f "$(dirname $0)/env_local.sh" ]]; then
readonly ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
readonly ENV_LOCAL="${ROOT}/scripts/env_local.sh"
# Write env_local.sh
echo "Writing ${ENV_LOCAL}..."
cat > "${ENV_LOCAL}" << EOF
# shellcheck shell=bash
readonly IRONFOX_ROOT="${ROOT}"
export IRONFOX_ROOT
source "\${IRONFOX_ROOT}/scripts/env_common.sh"
EOF
fi
# Set-up the full IronFox PATH
function setup_path() {
"${IRONFOX_RM}" -rf "${IRONFOX_PATH}"
"${IRONFOX_MKDIR}" -p "${IRONFOX_PATH}"
"${IRONFOX_LN}" -sf "${IRONFOX_ADB}" "${IRONFOX_PATH}/adb"
"${IRONFOX_LN}" -sf "${IRONFOX_ANDROGUARD}" "${IRONFOX_PATH}/androguard"
"${IRONFOX_LN}" -sf "${IRONFOX_APKSIGNER}" "${IRONFOX_PATH}/apksigner"
"${IRONFOX_LN}" -sf "${IRONFOX_AR}" "${IRONFOX_PATH}/ar"
"${IRONFOX_LN}" -sf "${IRONFOX_ASSEMBLER}" "${IRONFOX_PATH}/as"
"${IRONFOX_LN}" -sf "${IRONFOX_AWK}" "${IRONFOX_PATH}/awk"
"${IRONFOX_LN}" -sf "${IRONFOX_AWK}" "${IRONFOX_PATH}/gawk"
"${IRONFOX_LN}" -sf "${IRONFOX_BASENAME}" "${IRONFOX_PATH}/basename"
"${IRONFOX_LN}" -sf "${IRONFOX_BUNDLETOOL}" "${IRONFOX_PATH}/bundletool"
"${IRONFOX_LN}" -sf "${IRONFOX_CARGO}" "${IRONFOX_PATH}/cargo"
"${IRONFOX_LN}" -sf "${IRONFOX_CAT}" "${IRONFOX_PATH}/cat"
"${IRONFOX_LN}" -sf "${IRONFOX_CBINDGEN}" "${IRONFOX_PATH}/cbindgen"
"${IRONFOX_LN}" -sf "${IRONFOX_CC}" "${IRONFOX_PATH}/cc"
"${IRONFOX_LN}" -sf "${IRONFOX_CHMOD}" "${IRONFOX_PATH}/chmod"
"${IRONFOX_LN}" -sf "${IRONFOX_CLANG}" "${IRONFOX_PATH}/clang"
"${IRONFOX_LN}" -sf "${IRONFOX_CMAKE}" "${IRONFOX_PATH}/cmake"
"${IRONFOX_LN}" -sf "${IRONFOX_CMP}" "${IRONFOX_PATH}/cmp"
"${IRONFOX_LN}" -sf "${IRONFOX_CP}" "${IRONFOX_PATH}/cp"
"${IRONFOX_LN}" -sf "${IRONFOX_CPLUSPLUS}" "${IRONFOX_PATH}/c++"
"${IRONFOX_LN}" -sf "${IRONFOX_CURL}" "${IRONFOX_PATH}/curl"
"${IRONFOX_LN}" -sf "${IRONFOX_CUT}" "${IRONFOX_PATH}/cut"
"${IRONFOX_LN}" -sf "${IRONFOX_DATE}" "${IRONFOX_PATH}/date"
"${IRONFOX_LN}" -sf "${IRONFOX_DATE}" "${IRONFOX_PATH}/gdate"
"${IRONFOX_LN}" -sf "${IRONFOX_DIFF}" "${IRONFOX_PATH}/diff"
"${IRONFOX_LN}" -sf "${IRONFOX_DIRNAME}" "${IRONFOX_PATH}/dirname"
"${IRONFOX_LN}" -sf "${IRONFOX_ECHO}" "${IRONFOX_PATH}/echo"
"${IRONFOX_LN}" -sf "${IRONFOX_EGREP}" "${IRONFOX_PATH}/egrep"
"${IRONFOX_LN}" -sf "${IRONFOX_EXPR}" "${IRONFOX_PATH}/expr"
"${IRONFOX_LN}" -sf "${IRONFOX_FIND}" "${IRONFOX_PATH}/find"
"${IRONFOX_LN}" -sf "${IRONFOX_GIT}" "${IRONFOX_PATH}/git"
"${IRONFOX_LN}" -sf "${IRONFOX_GIT_LFS}" "${IRONFOX_PATH}/git-lfs"
"${IRONFOX_LN}" -sf "${IRONFOX_GRADLE}" "${IRONFOX_PATH}/gradle"
"${IRONFOX_LN}" -sf "${IRONFOX_GREP}" "${IRONFOX_PATH}/grep"
"${IRONFOX_LN}" -sf "${IRONFOX_GZIP}" "${IRONFOX_PATH}/gzip"
"${IRONFOX_LN}" -sf "${IRONFOX_HEAD}" "${IRONFOX_PATH}/head"
"${IRONFOX_LN}" -sf "${IRONFOX_HOSTNAME}" "${IRONFOX_PATH}/hostname"
"${IRONFOX_LN}" -sf "${IRONFOX_JAVA}" "${IRONFOX_PATH}/java"
"${IRONFOX_LN}" -sf "${IRONFOX_JQ}" "${IRONFOX_PATH}/jq"
"${IRONFOX_LN}" -sf "${IRONFOX_LD}" "${IRONFOX_PATH}/ld"
"${IRONFOX_LN}" -sf "${IRONFOX_LIBTOOL}" "${IRONFOX_PATH}/libtool"
"${IRONFOX_LN}" -sf "${IRONFOX_LLVM_PROFDATA}" "${IRONFOX_PATH}/llvm-profdata"
"${IRONFOX_LN}" -sf "${IRONFOX_LN}" "${IRONFOX_PATH}/ln"
"${IRONFOX_LN}" -sf "${IRONFOX_LS}" "${IRONFOX_PATH}/ls"
"${IRONFOX_LN}" -sf "${IRONFOX_MACH}" "${IRONFOX_PATH}/mach"
"${IRONFOX_LN}" -sf "${IRONFOX_MAKE}" "${IRONFOX_PATH}/gmake"
"${IRONFOX_LN}" -sf "${IRONFOX_MAKE}" "${IRONFOX_PATH}/make"
"${IRONFOX_LN}" -sf "${IRONFOX_MD5SUM}" "${IRONFOX_PATH}/md5sum"
"${IRONFOX_LN}" -sf "${IRONFOX_MKDIR}" "${IRONFOX_PATH}/mkdir"
"${IRONFOX_LN}" -sf "${IRONFOX_MKTEMP}" "${IRONFOX_PATH}/mktemp"
"${IRONFOX_LN}" -sf "${IRONFOX_M4}" "${IRONFOX_PATH}/m4"
"${IRONFOX_LN}" -sf "${IRONFOX_MV}" "${IRONFOX_PATH}/mv"
"${IRONFOX_LN}" -sf "${IRONFOX_NASM}" "${IRONFOX_PATH}/nasm"
"${IRONFOX_LN}" -sf "${IRONFOX_NINJA}" "${IRONFOX_PATH}/ninja"
"${IRONFOX_LN}" -sf "${IRONFOX_NODEJS}" "${IRONFOX_PATH}/node"
"${IRONFOX_LN}" -sf "${IRONFOX_NM}" "${IRONFOX_PATH}/nm"
"${IRONFOX_LN}" -sf "${IRONFOX_NPM}" "${IRONFOX_PATH}/npm"
"${IRONFOX_LN}" -sf "${IRONFOX_OTOOL}" "${IRONFOX_PATH}/otool"
"${IRONFOX_LN}" -sf "${IRONFOX_PATCH}" "${IRONFOX_PATH}/gpatch"
"${IRONFOX_LN}" -sf "${IRONFOX_PATCH}" "${IRONFOX_PATH}/patch"
"${IRONFOX_LN}" -sf "${IRONFOX_PERL}" "${IRONFOX_PATH}/perl"
"${IRONFOX_LN}" -sf "${IRONFOX_PIP}" "${IRONFOX_PATH}/pip"
"${IRONFOX_LN}" -sf "${IRONFOX_PWD}" "${IRONFOX_PATH}/pwd"
"${IRONFOX_LN}" -sf "${IRONFOX_PYTHON}" "${IRONFOX_PATH}/python"
"${IRONFOX_LN}" -sf "${IRONFOX_PYTHON}" "${IRONFOX_PATH}/python3"
"${IRONFOX_LN}" -sf "${IRONFOX_PYTHON}" "${IRONFOX_PATH}/python3.14"
"${IRONFOX_LN}" -sf "${IRONFOX_REALPATH}" "${IRONFOX_PATH}/realpath"
"${IRONFOX_LN}" -sf "${IRONFOX_RM}" "${IRONFOX_PATH}/rm"
"${IRONFOX_LN}" -sf "${IRONFOX_RMDIR}" "${IRONFOX_PATH}/rmdir"
"${IRONFOX_LN}" -sf "${IRONFOX_RUSTC}" "${IRONFOX_PATH}/rustc"
"${IRONFOX_LN}" -sf "${IRONFOX_RUSTDOC}" "${IRONFOX_PATH}/rustdoc"
"${IRONFOX_LN}" -sf "${IRONFOX_RUSTUP}" "${IRONFOX_PATH}/rustup"
"${IRONFOX_LN}" -sf "${IRONFOX_S3CMD}" "${IRONFOX_PATH}/s3cmd"
"${IRONFOX_LN}" -sf "${IRONFOX_SED}" "${IRONFOX_PATH}/gsed"
"${IRONFOX_LN}" -sf "${IRONFOX_SED}" "${IRONFOX_PATH}/sed"
"${IRONFOX_LN}" -sf "${IRONFOX_SH}" "${IRONFOX_PATH}/sh"
"${IRONFOX_LN}" -sf "${IRONFOX_SHASUM}" "${IRONFOX_PATH}/shasum"
"${IRONFOX_LN}" -sf "${IRONFOX_SLEEP}" "${IRONFOX_PATH}/sleep"
"${IRONFOX_LN}" -sf "${IRONFOX_SORT}" "${IRONFOX_PATH}/sort"
"${IRONFOX_LN}" -sf "${IRONFOX_STRIP}" "${IRONFOX_PATH}/strip"
"${IRONFOX_LN}" -sf "${IRONFOX_SYSCTL}" "${IRONFOX_PATH}/sysctl"
"${IRONFOX_LN}" -sf "${IRONFOX_TAIL}" "${IRONFOX_PATH}/tail"
"${IRONFOX_LN}" -sf "${IRONFOX_TAR}" "${IRONFOX_PATH}/gtar"
"${IRONFOX_LN}" -sf "${IRONFOX_TAR}" "${IRONFOX_PATH}/tar"
"${IRONFOX_LN}" -sf "${IRONFOX_TEE}" "${IRONFOX_PATH}/tee"
"${IRONFOX_LN}" -sf "${IRONFOX_TOUCH}" "${IRONFOX_PATH}/touch"
"${IRONFOX_LN}" -sf "${IRONFOX_TR}" "${IRONFOX_PATH}/tr"
"${IRONFOX_LN}" -sf "${IRONFOX_UNAME}" "${IRONFOX_PATH}/uname"
"${IRONFOX_LN}" -sf "${IRONFOX_UNZIP}" "${IRONFOX_PATH}/unzip"
"${IRONFOX_LN}" -sf "${IRONFOX_UV}" "${IRONFOX_PATH}/uv"
"${IRONFOX_LN}" -sf "${IRONFOX_WC}" "${IRONFOX_PATH}/wc"
"${IRONFOX_LN}" -sf "${IRONFOX_WHOAMI}" "${IRONFOX_PATH}/whoami"
"${IRONFOX_LN}" -sf "${IRONFOX_XARGS}" "${IRONFOX_PATH}/xargs"
"${IRONFOX_LN}" -sf "${IRONFOX_XZ}" "${IRONFOX_PATH}/xz"
"${IRONFOX_LN}" -sf "${IRONFOX_YES}" "${IRONFOX_PATH}/yes"
"${IRONFOX_LN}" -sf "${IRONFOX_YQ}" "${IRONFOX_PATH}/yq"
if [[ "${IRONFOX_PLATFORM}" == 'darwin' ]]; then
# OS X-specific
"${IRONFOX_LN}" -sf "${IRONFOX_DOT_CLEAN}" "${IRONFOX_PATH}/dot_clean"
"${IRONFOX_LN}" -sf "${IRONFOX_XCRUN}" "${IRONFOX_PATH}/xcrun"
"${IRONFOX_LN}" -sf "${IRONFOX_SW_VERS}" "${IRONFOX_PATH}/sw_vers"
else
# Linux-specific
"${IRONFOX_LN}" -sf "${IRONFOX_GCC}" "${IRONFOX_PATH}/gcc"
"${IRONFOX_LN}" -sf "${IRONFOX_NPROC}" "${IRONFOX_PATH}/nproc"
fi
"${IRONFOX_LN}" -sf '/bin/bash' "${IRONFOX_PATH}/bash"
PATH="${IRONFOX_PATH}"
export PATH
}
# Set-up a minimal PATH for linting
function setup_lint_path() {
"${IRONFOX_RM}" -rf "${IRONFOX_LINT_PATH}"
"${IRONFOX_MKDIR}" -p "${IRONFOX_LINT_PATH}"
"${IRONFOX_LN}" -sf "${IRONFOX_GIT}" "${IRONFOX_LINT_PATH}/git"
"${IRONFOX_LN}" -sf "${IRONFOX_SHELLCHECK}" "${IRONFOX_LINT_PATH}/shellcheck"
"${IRONFOX_LN}" -sf "${IRONFOX_SHFMT}" "${IRONFOX_LINT_PATH}/shfmt"
readonly PATH="${IRONFOX_LINT_PATH}"
export PATH
}
# For CI, ensure external environment variables are set
function setup_ci() {
# Get our current branch
if [[ -z "${CI_COMMIT_REF_NAME+x}" ]]; then
echo_red_text 'ERROR: Missing current branch! Please set CI_COMMIT_REF_NAME.'
exit 1
else
readonly IRONFOX_CURRENT_BRANCH="${CI_COMMIT_REF_NAME}"
export IRONFOX_CURRENT_BRANCH
fi
# Ensure our branches are set
if [[ -z "${IRONFOX_DEV_BRANCH+x}" ]]; then
echo_red_text 'ERROR: Missing developer branch! Please set IRONFOX_DEV_BRANCH.'
exit 1
fi
if [[ -z "${IRONFOX_PROD_BRANCH+x}" ]]; then
echo_red_text 'ERROR: Missing production branch! Please set IRONFOX_PROD_BRANCH.'
exit 1
fi
}
if [[ -z "${IRONFOX_SET_ENVS+x}" ]]; then
# Handle CI-specific logic
if [[ -n "${IRONFOX_CI+x}" ]]; then
setup_ci
fi
source "$(dirname $0)/env_local.sh"
# Set-up our PATH
if [[ -n "${IRONFOX_LINTING+x}" ]]; then
setup_lint_path
else
setup_path
fi
fi