Merge pull request #553 from bensuperpc/Update_scripts

Update script and CI
This commit is contained in:
Bensuperpc 2021-08-09 08:39:05 +02:00 committed by GitHub
commit 0a5eeacfdb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
16 changed files with 95 additions and 78 deletions

View File

@ -9,8 +9,8 @@ jobs:
- uses: actions/stale@v4 - uses: actions/stale@v4
with: with:
repo-token: ${{ secrets.GITHUB_TOKEN }} repo-token: ${{ secrets.GITHUB_TOKEN }}
exempt-issue-milestones: 'future,alpha,beta,release' exempt-issue-milestones: 'future,alpha,beta,release,bugfix,improvement,enhancement,help wanted'
exempt-pr-milestones: 'bugfix,improvement' exempt-pr-milestones: 'bugfix,improvement,enhancement,help wanted'
exempt-all-pr-assignees: true exempt-all-pr-assignees: true
stale-issue-message: 'This issue is stale because it has been open 120 days with no activity. Remove stale label or comment or this will be closed in 30 days.' stale-issue-message: 'This issue is stale because it has been open 120 days with no activity. Remove stale label or comment or this will be closed in 30 days.'
stale-pr-message: 'This PR is stale because it has been open 120 days with no activity. Remove stale label or comment or this will be closed in 30 days.' stale-pr-message: 'This PR is stale because it has been open 120 days with no activity. Remove stale label or comment or this will be closed in 30 days.'

View File

@ -226,7 +226,7 @@ purge: clean
# Check bash syntax # Check bash syntax
bash-check: bash-check:
find . -type f \( -name "*.sh" -o -name "*.bash" \) -print0 | xargs -0 -P"$(shell nproc)" -I{} \ find . -type f \( -name "*.sh" -o -name "*.bash" \) -print0 | xargs -0 -P"$(shell nproc)" -I{} \
$(SHELLCHECK) --check-sourced --color=auto --format=gcc --severity=error --shell=bash --enable=all "{}" $(SHELLCHECK) --check-sourced --color=auto --format=gcc --severity=warning --shell=bash --enable=all "{}"
# #
# testing implicit rule # testing implicit rule

View File

@ -14,33 +14,25 @@ Cross compiling toolchains in Docker images.
- Clean separation of build tools, source code, and build artifacts. - Clean separation of build tools, source code, and build artifacts.
- Commands in the container are run as the calling user, so that any - Commands in the container are run as the calling user, so that any
created files have the expected ownership, (i.e. not root). created files have the expected ownership, (i.e. not root).
- Make variables ([CC]{.title-ref}, [LD]{.title-ref} etc) are set to - Make variables **CC**, **CXX**, **LD** etc) are set to
point to the appropriate tools in the container. point to the appropriate tools in the container.
- Recent [CMake](https://cmake.org) and ninja are precompiled. - Recent [CMake](https://cmake.org) and ninja are precompiled.
- [Conan.io](https://www.conan.io) can be used as a package manager. - [Conan.io](https://www.conan.io) can be used as a package manager.
- Toolchain files configured for CMake. - Toolchain files configured for CMake.
- Current directory is mounted as the container\'s workdir, `/work`. - Current directory is mounted as the container\'s workdir, `/work`.
- Works with the [Docker for - Works with the [Docker for Mac](https://docs.docker.com/docker-for-mac/) and [Docker for Windows](https://docs.docker.com/docker-for-windows/).
Mac](https://docs.docker.com/docker-for-mac/) and [Docker for - Support using alternative container executor by setting **OCI_EXE** environment variable. By default, it searches
Windows](https://docs.docker.com/docker-for-windows/).
- Support using alternative container executor by setting
[OCI_EXE]{.title-ref} environment variable. By default, it searches
for [docker]{.title-ref} and [podman](https://podman.io) executable. for [docker]{.title-ref} and [podman](https://podman.io) executable.
## Examples ## Examples
1. `dockcross make`: Build the *Makefile* in the current directory. 1. `dockcross make`: Build the *Makefile* in the current directory.
2. `dockcross cmake -Bbuild -H. -GNinja`: Run CMake with a build 2. `dockcross cmake -Bbuild -H. -GNinja`: Run CMake with a build directory `./build` for a *CMakeLists.txt* file in the current directory and generate `ninja` build configuration files.
directory `./build` for a *CMakeLists.txt* file in the current
directory and generate `ninja` build configuration files.
3. `dockcross ninja -Cbuild`: Run ninja in the `./build` directory. 3. `dockcross ninja -Cbuild`: Run ninja in the `./build` directory.
4. `dockcross bash -c '$CC test/C/hello.c -o hello'`: Build the 4. `dockcross bash -c '$CC test/C/hello.c -o hello'`: Build the *hello.c* file with the compiler identified with the `CC` environmental variable in the build environment.
*hello.c* file with the compiler identified with the `CC`
environmental variable in the build environment.
5. `dockcross bash`: Run an interactive shell in the build environment. 5. `dockcross bash`: Run an interactive shell in the build environment.
Note that commands are executed verbatim. If any shell processing for Note that commands are executed verbatim. If any shell processing for environment variable expansion or redirection is required, please use
environment variable expansion or redirection is required, please use
```bash ```bash
bash -c "<command args>" bash -c "<command args>"
``` ```

View File

@ -25,7 +25,7 @@ if ! command -v git &> /dev/null; then
exit 1 exit 1
fi fi
if [[ "${CMAKE_VERSION}" == "" ]]; then if [[ -z "${CMAKE_VERSION}" ]]; then
echo >&2 'error: CMAKE_VERSION env. variable must be set to a non-empty value' echo >&2 'error: CMAKE_VERSION env. variable must be set to a non-empty value'
exit 1 exit 1
fi fi
@ -33,16 +33,16 @@ fi
cd /usr/src cd /usr/src
# If the first link doesn't work, it will use the mirror on github # If the first link doesn't work, it will use the mirror on github
git clone "$CMAKE_URL" CMake -b v$CMAKE_VERSION --depth 1 \ git clone "$CMAKE_URL" CMake -b "v$CMAKE_VERSION" --depth 1 \
|| git clone "$CMAKE_MIRROR_URL" CMake -b v$CMAKE_VERSION --depth 1 || git clone "$CMAKE_MIRROR_URL" CMake -b "v$CMAKE_VERSION" --depth 1
mkdir /usr/src/CMake-build mkdir /usr/src/CMake-build
cd /usr/src/CMake-build cd /usr/src/CMake-build
${WRAPPER} /usr/src/CMake/bootstrap \ ${WRAPPER} /usr/src/CMake/bootstrap \
--parallel=$(nproc) \ --parallel="$(nproc)" \
-- -DCMAKE_USE_OPENSSL=OFF -- -DCMAKE_USE_OPENSSL=OFF
${WRAPPER} make -j$(nproc) ${WRAPPER} make -j"$(nproc)"
mkdir /usr/src/CMake-ssl-build mkdir /usr/src/CMake-ssl-build
@ -55,7 +55,7 @@ ${WRAPPER} /usr/src/CMake-build/bin/cmake \
-DCMAKE_USE_OPENSSL:BOOL=ON \ -DCMAKE_USE_OPENSSL:BOOL=ON \
-DOPENSSL_ROOT_DIR:PATH=/usr/local/ssl \ -DOPENSSL_ROOT_DIR:PATH=/usr/local/ssl \
../CMake ../CMake
${WRAPPER} make -j$(nproc) install ${WRAPPER} make -j"$(nproc)" install
# Cleanup install tree # Cleanup install tree
cd /usr/src/cmake-$CMAKE_VERSION cd /usr/src/cmake-$CMAKE_VERSION

View File

@ -18,7 +18,7 @@ function do_curl_build {
# We do this shared to avoid obnoxious linker issues where git couldn't # We do this shared to avoid obnoxious linker issues where git couldn't
# link properly. If anyone wants to make this build statically go for it. # link properly. If anyone wants to make this build statically go for it.
LIBS=-ldl CFLAGS=-Wl,--exclude-libs,ALL ./configure --with-ssl --disable-static > /dev/null LIBS=-ldl CFLAGS=-Wl,--exclude-libs,ALL ./configure --with-ssl --disable-static > /dev/null
make -j$(nproc) > /dev/null make -j"$(nproc)" > /dev/null
make install > /dev/null make install > /dev/null
} }

View File

@ -12,7 +12,7 @@ if ! command -v tar &> /dev/null; then
exit 1 exit 1
fi fi
if [[ "${GIT_VERSION}" == "" ]]; then if [[ -z "${GIT_VERSION}" ]]; then
echo >&2 'error: GIT_VERSION env. variable must be set to a non-empty value' echo >&2 'error: GIT_VERSION env. variable must be set to a non-empty value'
exit 1 exit 1
fi fi
@ -32,18 +32,18 @@ curl --connect-timeout 20 \
--retry-max-time 40 \ --retry-max-time 40 \
-# -LO $url -# -LO $url
tar xvzf git-${GIT_VERSION}.tar.gz --no-same-owner tar xvzf "git-${GIT_VERSION}.tar.gz" --no-same-owner
rm -f git-${GIT_VERSION}.tar.gz rm -f "git-${GIT_VERSION}.tar.gz"
pushd git-${GIT_VERSION} pushd "git-${GIT_VERSION}"
./configure --prefix=/usr/local --with-curl ./configure --prefix=/usr/local --with-curl
make -j$(nproc) make -j"$(nproc)"
make install make install
popd popd
ldconfig ldconfig
rm -rf git-${GIT_VERSION} rm -rf "git-${GIT_VERSION}"
# turn the detached message off # turn the detached message off
git config --global advice.detachedHead false git config --global advice.detachedHead false

View File

@ -59,7 +59,7 @@ PERL_DOWNLOAD_URL=https://www.cpan.org/src/5.0
function do_perl_build { function do_perl_build {
${WRAPPER} sh Configure -des -Dprefix=/opt/perl > /dev/null ${WRAPPER} sh Configure -des -Dprefix=/opt/perl > /dev/null
${WRAPPER} make -j$(nproc) > /dev/null ${WRAPPER} make -j"$(nproc)" > /dev/null
${WRAPPER} make install > /dev/null ${WRAPPER} make install > /dev/null
} }
@ -84,7 +84,7 @@ function build_perl {
function do_openssl_build { function do_openssl_build {
${WRAPPER} ./config no-shared -fPIC $CONFIG_FLAG --prefix=/usr/local/ssl --openssldir=/usr/local/ssl > /dev/null ${WRAPPER} ./config no-shared -fPIC $CONFIG_FLAG --prefix=/usr/local/ssl --openssldir=/usr/local/ssl > /dev/null
${WRAPPER} make -j$(nproc) > /dev/null ${WRAPPER} make -j"$(nproc)" > /dev/null
${WRAPPER} make install_sw > /dev/null ${WRAPPER} make install_sw > /dev/null
} }

View File

@ -25,13 +25,13 @@ while [ $# -gt 0 ]; do
done done
# Download # Download
wget https://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tgz wget "https://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tgz"
tar xvf Python-${PYTHON_VERSION}.tgz tar xvf "Python-${PYTHON_VERSION}.tgz"
# Configure, build and install # Configure, build and install
cd Python-${PYTHON_VERSION} cd "Python-${PYTHON_VERSION}" || exit 1
# Disable --enable-shared --enable-optimizations --prefix=/usr/local/python-${PYTHON_VERSION} # Disable --enable-shared --enable-optimizations --prefix=/usr/local/python-${PYTHON_VERSION}
./configure --with-ensurepip=install ./configure --with-ensurepip=install
make -j$(nproc) make -j"$(nproc) "
make install #altinstall make install #altinstall
ln -s /usr/local/bin/python3 /usr/local/bin/python ln -s /usr/local/bin/python3 /usr/local/bin/python
@ -39,4 +39,4 @@ ln -s /usr/local/bin/pip3 /usr/local/bin/pip
# Clean # Clean
cd .. cd ..
rm -rf Python-${PYTHON_VERSION} rm -rf "Python-${PYTHON_VERSION}"

View File

@ -41,20 +41,20 @@ command:update-image() {
} }
help:update-image() { help:update-image() {
echo Pull the latest $FINAL_IMAGE . echo "Pull the latest $FINAL_IMAGE ."
} }
command:update-script() { command:update-script() {
if cmp -s <( $OCI_EXE run --rm $FINAL_IMAGE ) $0; then if cmp -s <( $OCI_EXE run --rm $FINAL_IMAGE ) $0; then
echo $0 is up to date echo "$0 is up to date"
else else
echo -n Updating $0 '... ' echo -n "Updating $0 ... "
$OCI_EXE run --rm $FINAL_IMAGE > $0 && echo ok $OCI_EXE run --rm $FINAL_IMAGE > $0 && echo ok
fi fi
} }
help:update-image() { help:update-image() {
echo Update $0 from $FINAL_IMAGE . echo "Update $0 from $FINAL_IMAGE ."
} }
command:update() { command:update() {
@ -63,7 +63,7 @@ command:update() {
} }
help:update() { help:update() {
echo Pull the latest $FINAL_IMAGE, and then update $0 from that. echo "Pull the latest $FINAL_IMAGE, and then update $0 from that."
} }
command:help() { command:help() {

View File

@ -24,8 +24,8 @@ fi
# The dockcross script sets the BUILDER_UID and BUILDER_GID vars. # The dockcross script sets the BUILDER_UID and BUILDER_GID vars.
if [[ -n $BUILDER_UID ]] && [[ -n $BUILDER_GID ]]; then if [[ -n $BUILDER_UID ]] && [[ -n $BUILDER_GID ]]; then
groupadd -o -g $BUILDER_GID $BUILDER_GROUP 2> /dev/null groupadd -o -g "$BUILDER_GID" "$BUILDER_GROUP" 2> /dev/null
useradd -o -m -g $BUILDER_GID -u $BUILDER_UID $BUILDER_USER 2> /dev/null useradd -o -m -g "$BUILDER_GID" -u "$BUILDER_UID" "$BUILDER_USER" 2> /dev/null
export HOME=/home/${BUILDER_USER} export HOME=/home/${BUILDER_USER}
shopt -s dotglob shopt -s dotglob
cp -r /root/* $HOME/ cp -r /root/* $HOME/
@ -37,8 +37,8 @@ if [[ -n $BUILDER_UID ]] && [[ -n $BUILDER_GID ]]; then
fi fi
# Enable passwordless sudo capabilities for the user # Enable passwordless sudo capabilities for the user
chown root:$BUILDER_GID $(which gosu) chown root:$BUILDER_GID "$(which gosu)"
chmod +s $(which gosu); sync chmod +s "$(which gosu)"; sync
# Execute project specific pre execution hook # Execute project specific pre execution hook
if [[ -e /work/.dockcross ]]; then if [[ -e /work/.dockcross ]]; then

View File

@ -28,7 +28,7 @@ if ! command -v tar &> /dev/null; then
exit 1 exit 1
fi fi
if [[ "${CMAKE_VERSION}" == "" ]]; then if [[ -z "${CMAKE_VERSION}" ]]; then
echo >&2 'error: CMAKE_VERSION env. variable must be set to a non-empty value' echo >&2 'error: CMAKE_VERSION env. variable must be set to a non-empty value'
exit 1 exit 1
fi fi
@ -45,10 +45,10 @@ curl --connect-timeout 30 \
--retry-max-time 30 \ --retry-max-time 30 \
-# -LO $url -# -LO $url
tar -xzvf ${CMAKE_ROOT}.tar.gz tar -xzvf "${CMAKE_ROOT}.tar.gz"
rm -f ${CMAKE_ROOT}.tar.gz rm -f "${CMAKE_ROOT}.tar.gz"
cd ${CMAKE_ROOT} cd "${CMAKE_ROOT}"
rm -rf doc man rm -rf doc man
rm -rf bin/cmake-gui rm -rf bin/cmake-gui

View File

@ -89,7 +89,7 @@ BOOTSTRAP_PREFIX="${CTNG}/prefix"
./bootstrap ./bootstrap
./configure \ ./configure \
--prefix "${BOOTSTRAP_PREFIX}" --prefix "${BOOTSTRAP_PREFIX}"
make -j$(nproc) make -j"$(nproc)"
make install make install
## ##

View File

@ -14,7 +14,7 @@ if ! command -v gpg &> /dev/null; then
fi fi
GOSU_VERSION=1.12 GOSU_VERSION=1.12
dpkgArch=$(if test $(uname -m) = "x86_64"; then echo amd64; else echo i386; fi) dpkgArch=$(if test "$(uname -m)" = "x86_64"; then echo amd64; else echo i386; fi)
url="https://github.com/tianon/gosu/releases/download/${GOSU_VERSION}/gosu-${dpkgArch}" url="https://github.com/tianon/gosu/releases/download/${GOSU_VERSION}/gosu-${dpkgArch}"
url_key="https://github.com/tianon/gosu/releases/download/${GOSU_VERSION}/gosu-${dpkgArch}.asc" url_key="https://github.com/tianon/gosu/releases/download/${GOSU_VERSION}/gosu-${dpkgArch}.asc"

View File

@ -1,26 +0,0 @@
#!/bin/bash
set -euo pipefail
# More info: https://github.com/GoogleContainerTools/container-diff
if (( $# < 1 || $# > 2 )); then
echo "Need 1 or 2 arguments: <img1> <img2>"
exit 1
fi
if (( $# == 1 )); then
container-diff analyze $1 --type=history 2>&1 | tee -a analyze-history.txt
container-diff analyze $1 --type=file 2>&1 | tee -a analyze-file.txt
container-diff analyze $1 --type=size 2>&1 | tee -a analyze-size.txt
container-diff analyze $1 --type=apt 2>&1 | tee -a analyze-apt.txt
container-diff analyze $1 --type=pip 2>&1 | tee -a analyze-pip.txt
fi
if (( $# == 2 )); then
container-diff diff $1 $2 --type=history 2>&1 | tee -a diff-history.txt
container-diff diff $1 $2 --type=file 2>&1 | tee -a diff-file.txt
container-diff diff $1 $2 --type=size 2>&1 | tee -a diff-size.txt
container-diff diff $1 $2 --type=apt 2>&1 | tee -a diff-apt.txt
container-diff diff $1 $2 --type=pip 2>&1 | tee -a diff-pip.txt
fi

24
tools/dockcross-builder.sh Executable file
View File

@ -0,0 +1,24 @@
#!/usr/bin/env bash
if (( $# >= 1 )); then
image=$1
build_file=build-${image%:*}
shift 1
cmake_arg=$*
echo "cmake arg: $cmake_arg"
#echo "Pulling dockcross/$image"
#docker pull dockcross/"$image"
echo "Make script dockcross-$image"
docker run --rm dockcross/"$image" > ./dockcross-"$image"
chmod +x ./dockcross-"$image"
echo "Build $build_file"
./dockcross-"$image" cmake -B "$build_file" -S . -G Ninja "$cmake_arg"
./dockcross-"$image" ninja -C "$build_file"
else
echo "Usage: ${0##*/} <docker imag (ex: linux-x64/linux-x64-clang/linux-arm64/windows-shared-x64/windows-static-x64...)> <cmake arg.>"
exit 1
fi

View File

@ -0,0 +1,27 @@
#!/usr/bin/env bash
# More info: https://github.com/GoogleContainerTools/container-diff
if (( $# < 1 || $# > 2 )); then
echo "Need 1 or 2 arguments: <img1> <img2>"
echo "For local image: daemon://<img>"
echo "For remote image: remote://<img>"
exit 1
fi
if (( $# == 1 )); then
container-diff analyze "$1" --type=history 2>&1 | tee -a analyze-history.txt
container-diff analyze "$1" --type=file 2>&1 | tee -a analyze-file.txt
container-diff analyze "$1" --type=size 2>&1 | tee -a analyze-size.txt
container-diff analyze "$1" --type=apt 2>&1 | tee -a analyze-apt.txt
container-diff analyze "$1" --type=pip 2>&1 | tee -a analyze-pip.txt
fi
if (( $# == 2 )); then
container-diff diff "$1" "$2" --type=history 2>&1 | tee -a diff-history.txt
container-diff diff "$1" "$2" --type=file 2>&1 | tee -a diff-file.txt
container-diff diff "$1" "$2" --type=size 2>&1 | tee -a diff-size.txt
container-diff diff "$1" "$2" --type=apt 2>&1 | tee -a diff-apt.txt
container-diff diff "$1" "$2" --type=pip 2>&1 | tee -a diff-pip.txt
fi