diff --git a/.azure.yml b/.azure.yml index 82dc3020d..bf9f3a405 100644 --- a/.azure.yml +++ b/.azure.yml @@ -10,20 +10,20 @@ jobs: vmImage: 'ubuntu-16.04' strategy: matrix: - AMD64 (x64): - dockerTag: 'amd64' - dockerName: 'Debian Stretch (AMD64)' + x86_64: + dockerImage: 'x86_64' + dockerName: 'Debian Stretch (x86_64)' platform: 'x11' ARMv6hf (Raspberry Pi v1 & ZERO): - dockerTag: 'armv6hf' + dockerImage: 'armv6l' dockerName: 'Debian Stretch (Raspberry Pi v1 & ZERO)' platform: 'rpi' ARMv7hf (Raspberry Pi 2 & 3): - dockerTag: 'armv7hf' + dockerImage: 'armv7l' dockerName: 'Debian Stretch (Raspberry Pi 2 & 3)' platform: 'rpi' ARMv8 (Generic AARCH64): - dockerTag: 'aarch64' + dockerImage: 'aarch64' dockerName: 'ARMv8 (Generic AARCH64)' platform: 'amlogic' @@ -35,7 +35,8 @@ jobs: - bash: ./.ci/ci_build.sh displayName: 'Build $(dockerName) packages' env: - DOCKER_TAG: $(dockerTag) + DOCKER_IMAGE: $(dockerImage) + DOCKER_TAG: stretch DOCKER_NAME: $(dockerName) PLATFORM: $(platform) diff --git a/.ci/ci_build.sh b/.ci/ci_build.sh index 17ce79870..005382553 100755 --- a/.ci/ci_build.sh +++ b/.ci/ci_build.sh @@ -46,7 +46,9 @@ elif [[ $CI_NAME == *"mingw64_nt"* || "$CI_NAME" == 'windows_nt' ]]; then exit 0; exit 1 || { echo "---> Hyperion compilation failed! Abort"; exit 5; } elif [[ "$CI_NAME" == 'linux' ]]; then - echo "Compile Hyperion with DOCKER_TAG = ${DOCKER_TAG} and friendly name DOCKER_NAME = ${DOCKER_NAME}" + echo "Compile Hyperion with DOCKER_IMAGE = ${DOCKER_IMAGE}, DOCKER_TAG = ${DOCKER_TAG} and friendly name DOCKER_NAME = ${DOCKER_NAME}" + # set GitHub Container Registry url + REGISTRY_URL="ghcr.io/hyperion-project/${DOCKER_IMAGE}" # take ownership of deploy dir mkdir ${CI_BUILD_DIR}/deploy @@ -54,7 +56,7 @@ elif [[ "$CI_NAME" == 'linux' ]]; then docker run --rm \ -v "${CI_BUILD_DIR}/deploy:/deploy" \ -v "${CI_BUILD_DIR}:/source:ro" \ - hyperionproject/hyperion-ci:$DOCKER_TAG \ + $REGISTRY_URL:$DOCKER_TAG \ /bin/bash -c "mkdir hyperion && cp -r source/. /hyperion && cd /hyperion && mkdir build && cd build && cmake -DPLATFORM=${PLATFORM} -DCMAKE_BUILD_TYPE=${BUILD_TYPE} ../ || exit 2 && diff --git a/.ci/ci_install.sh b/.ci/ci_install.sh index 0e4a19d2c..1b2620340 100755 --- a/.ci/ci_install.sh +++ b/.ci/ci_install.sh @@ -38,12 +38,4 @@ if [[ $CI_NAME == 'osx' || $CI_NAME == 'darwin' ]]; then brew update dependencies=("qt5" "python" "libusb" "cmake" "doxygen") installAndUpgrade "${dependencies[@]}" -# github actions uname -> windows-2019 -> mingw64_nt-10.0-17763 -# TODO: Azure uname windows? -elif [[ $CI_NAME == *"mingw64_nt"* ]]; then - echo "Yes, we are Windows: $CI_NAME" -# Windows has no dependency manager -elif [[ $CI_NAME != 'linux' ]]; then - echo "Unsupported platform: $CI_NAME" - exit 5 fi diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index 7e93917c1..d8c40e2ba 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -15,18 +15,18 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - dockerTag: [ amd64, armv6hf, armv7hf, aarch64 ] + dockerImage: [ x86_64, armv6l, armv7l, aarch64 ] include: - - dockerTag: amd64 - dockerName: Debian Stretch (AMD64) + - dockerImage: x86_64 + dockerName: Debian Stretch (x86_64) platform: x11 - - dockerTag: armv6hf + - dockerImage: armv6l dockerName: Debian Stretch (Raspberry Pi v1 & ZERO) platform: rpi - - dockerTag: armv7hf + - dockerImage: armv7l dockerName: Debian Stretch (Raspberry Pi 2 & 3) platform: rpi - - dockerTag: aarch64 + - dockerImage: aarch64 dockerName: Debian Stretch (Generic AARCH64) platform: amlogic @@ -46,7 +46,8 @@ jobs: # Build packages - name: Build packages env: - DOCKER_TAG: ${{ matrix.dockerTag }} + DOCKER_IMAGE: ${{ matrix.dockerImage }} + DOCKER_TAG: stretch DOCKER_NAME: ${{ matrix.dockerName }} PLATFORM: ${{ matrix.platform }} shell: bash @@ -56,17 +57,17 @@ jobs: - name: Collecting deployable artifacts shell: bash run: | - mkdir -p ${{ matrix.dockerTag }} - mv deploy/*.tar.gz ${{ matrix.dockerTag }} - if: matrix.dockerTag != 'aarch64' + mkdir -p ${{ matrix.dockerImage }} + mv deploy/*.tar.gz ${{ matrix.dockerImage }} + if: matrix.dockerImage != 'aarch64' # Upload artifacts - name: Upload artifacts uses: actions/upload-artifact@v1 with: - name: ${{ matrix.dockerTag }} - path: ${{ matrix.dockerTag }} - if: matrix.dockerTag != 'aarch64' + name: ${{ matrix.dockerImage }} + path: ${{ matrix.dockerImage }} + if: matrix.dockerImage != 'aarch64' ###################### ###### macOS ######### diff --git a/.github/workflows/push-master.yml b/.github/workflows/push-master.yml index dfff1d9a6..df031f731 100644 --- a/.github/workflows/push-master.yml +++ b/.github/workflows/push-master.yml @@ -18,18 +18,18 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - dockerTag: [ amd64, armv6hf, armv7hf, aarch64 ] + dockerImage: [ x86_64, armv6l, armv7l, aarch64 ] include: - - dockerTag: amd64 - dockerName: Debian Stretch (AMD64) + - dockerImage: x86_64 + dockerName: Debian Stretch (x86_64) platform: x11 - - dockerTag: armv6hf + - dockerImage: armv6l dockerName: Debian Stretch (Raspberry Pi v1 & ZERO) platform: rpi - - dockerTag: armv7hf + - dockerImage: armv7l dockerName: Debian Stretch (Raspberry Pi 2 & 3) platform: rpi - - dockerTag: aarch64 + - dockerImage: aarch64 dockerName: Debian Stretch (Generic AARCH64) platform: amlogic @@ -41,7 +41,8 @@ jobs: # build process - name: Build packages env: - DOCKER_TAG: ${{ matrix.dockerTag }} + DOCKER_IMAGE: ${{ matrix.dockerImage }} + DOCKER_TAG: stretch DOCKER_NAME: ${{ matrix.dockerName }} PLATFORM: ${{ matrix.platform }} shell: bash diff --git a/CompileHowto.md b/CompileHowto.md index 6eb2f0c19..0917928bb 100644 --- a/CompileHowto.md +++ b/CompileHowto.md @@ -2,44 +2,44 @@ If you are using [Docker](https://www.docker.com/), you can compile Hyperion inside a docker container. This keeps your system clean and with a simple script it's easy to use. Supported is also cross compiling for Raspberry Pi (Debian Stretch or higher). To compile Hyperion just execute one of the following commands. The compiled binaries and packages will be available at the deploy folder next to the script.
-Note: call the script with `./docker-compile.sh -h` for more options +Note: call the script with `./docker-compile.sh -h` for more options. -## Native compiling on Raspberry Pi +## Native compilation on Raspberry Pi for: **Raspbian Stretch** ``` -wget -qN https://raw.github.com/hyperion-project/hyperion.ng/master/bin/scripts/docker-compile.sh && chmod +x *.sh && ./docker-compile.sh -t rpi-raspbian-stretch +wget -qN https://raw.github.com/hyperion-project/hyperion.ng/master/bin/scripts/docker-compile.sh && chmod +x *.sh && ./docker-compile.sh -i rpi-raspbian ``` **Raspbian Buster** ``` -wget -qN https://raw.github.com/hyperion-project/hyperion.ng/master/bin/scripts/docker-compile.sh && chmod +x *.sh && ./docker-compile.sh -t rpi-raspbian-buster +wget -qN https://raw.github.com/hyperion-project/hyperion.ng/master/bin/scripts/docker-compile.sh && chmod +x *.sh && ./docker-compile.sh -i rpi-raspbian -t buster ``` -## Cross compiling on X64_86 for: +## Cross compilation on x86_64 for: -**X64:** +**x86_64 (Debian Stretch):** ``` -wget -qN https://raw.github.com/hyperion-project/hyperion.ng/master/bin/scripts/docker-compile.sh && chmod +x *.sh && ./docker-compile.sh +wget -qN https://raw.github.com/hyperion-project/hyperion.ng/master/bin/scripts/docker-compile.sh && chmod +x *.sh && ./docker-compile.sh -i x86_64 ``` -**i386:** +**x86_64 (Debian Buster):** ``` -wget -qN https://raw.github.com/hyperion-project/hyperion.ng/master/bin/scripts/docker-compile.sh && chmod +x *.sh && ./docker-compile.sh -t i386 +wget -qN https://raw.github.com/hyperion-project/hyperion.ng/master/bin/scripts/docker-compile.sh && chmod +x *.sh && ./docker-compile.sh -i x86_64 -t buster ``` -**Raspberry Pi v1 & ZERO (Raspbian Stretch)** +**Raspberry Pi v1 & ZERO (Debian Stretch)** ``` -wget -qN https://raw.github.com/hyperion-project/hyperion.ng/master/bin/scripts/docker-compile.sh && chmod +x *.sh && ./docker-compile.sh -t armv6hf +wget -qN https://raw.github.com/hyperion-project/hyperion.ng/master/bin/scripts/docker-compile.sh && chmod +x *.sh && ./docker-compile.sh -i armv6l ``` -**Raspberry Pi 2 & 3 (Raspbian Stretch)** +**Raspberry Pi v1 & ZERO (Debian Buster)** ``` -wget -qN https://raw.github.com/hyperion-project/hyperion.ng/master/bin/scripts/docker-compile.sh && chmod +x *.sh && ./docker-compile.sh -t armv7hf +wget -qN https://raw.github.com/hyperion-project/hyperion.ng/master/bin/scripts/docker-compile.sh && chmod +x *.sh && ./docker-compile.sh -i armv6l -t buster ``` -**Raspberry Pi v1 & ZERO (Raspbian Buster)** +**Raspberry Pi 2/3/4 (Debian Stretch)** ``` -wget -qN https://raw.github.com/hyperion-project/hyperion.ng/master/bin/scripts/docker-compile.sh && chmod +x *.sh && ./docker-compile.sh -t armv6hf-buster +wget -qN https://raw.github.com/hyperion-project/hyperion.ng/master/bin/scripts/docker-compile.sh && chmod +x *.sh && ./docker-compile.sh -i armv7l ``` -**Raspberry Pi 2 & 3 (Raspbian Buster** +**Raspberry Pi 2/3/4 (Debian Buster)** ``` -wget -qN https://raw.github.com/hyperion-project/hyperion.ng/master/bin/scripts/docker-compile.sh && chmod +x *.sh && ./docker-compile.sh -t armv7hf-buster +wget -qN https://raw.github.com/hyperion-project/hyperion.ng/master/bin/scripts/docker-compile.sh && chmod +x *.sh && ./docker-compile.sh -i armv7l -t buster ``` # The usual way @@ -114,7 +114,7 @@ mkdir build cd build cmake -DCMAKE_BUILD_TYPE=Release .. make -j $(nproc) -if this get stucked and dmseg says out of memory try: +if this get stucked and dmesg says out of memory try: make -j 2 # optional: install into your system sudo make install/strip diff --git a/bin/scripts/docker-compile.sh b/bin/scripts/docker-compile.sh index 1731a0b40..3ff06ad70 100644 --- a/bin/scripts/docker-compile.sh +++ b/bin/scripts/docker-compile.sh @@ -3,10 +3,14 @@ DOCKER="docker" # Git repo url of Hyperion GIT_REPO_URL="https://github.com/hyperion-project/hyperion.ng.git" +# GitHub Container Registry url +REGISTRY_URL="ghcr.io/hyperion-project" # cmake build type BUILD_TYPE="Release" -# the image tag at hyperionproject/hyperion-ci -BUILD_TARGET="amd64" +# the docker image at GitHub Container Registry +BUILD_IMAGE="x86_64" +# the docker tag at GitHub Container Registry +BUILD_TAG="stretch" # build packages (.deb .zip ...) BUILD_PACKAGES=true # packages string inserted to cmake cmd @@ -42,8 +46,8 @@ function printHelp { echo "######################################################## ## A script to compile Hyperion inside a docker container ## Requires installed Docker: https://www.docker.com/ -## Without arguments it will compile Hyperion for Debain Stretch (x64) or higher. -## Supports Raspberry Pi (armv6hf, armv7hf) cross compilation (Debian Stretch/Buster) and native compilation (Raspbian Stretch/Buster) +## Without arguments it will compile Hyperion for Debian Stretch (x86_64). +## Supports Raspberry Pi (armv6l, armv7l) cross compilation (Debian Stretch/Buster) and native compilation (Raspbian Stretch/Buster) ## ## Homepage: https://www.hyperion-project.org ## Forum: https://forum.hyperion-project.org @@ -51,17 +55,19 @@ echo "######################################################## # These are possible arguments to modify the script behaviour with their default values # # docker-compile.sh -h # Show this help message -# docker-compile.sh -t amd64 # The docker tag, one of amd64 | i386 | armv6hf | armv7hf | armv6hf-buster | armv7hf-buster | rpi-raspbian-stretch | rpi-raspbian-buster +# docker-compile.sh -i x86_64 # The docker image, one of x86_64 | armv6l | armv7l | rpi-raspbian +# docker-compile.sh -t stretch # The docker tag, stretch or buster # docker-compile.sh -b Release # cmake Release or Debug build # docker-compile.sh -p true # If true build packages with CPack -# More informations to docker tags at: https://hub.docker.com/r/hyperionproject/hyperion-ci/" +# More informations to docker tags at: https://github.com/Hyperion-Project/hyperion.docker-ci" } -while getopts t:b:p:h option +while getopts i:t:b:p:h option do case "${option}" in - t) BUILD_TARGET=${OPTARG};; + i) BUILD_IMAGE=${OPTARG};; + t) BUILD_TAG=${OPTARG};; b) BUILD_TYPE=${OPTARG};; p) BUILD_PACKAGES=${OPTARG};; h) printHelp; exit 0;; @@ -73,7 +79,7 @@ if [ $BUILD_PACKAGES == "true" ]; then PACKAGES="package" fi -echo "---> Initialize with BUILD_TARGET=${BUILD_TARGET}, BUILD_TYPE=${BUILD_TYPE}, BUILD_PACKAGES=${BUILD_PACKAGES}" +echo "---> Initialize with IMAGE:TAG=${BUILD_IMAGE}:${BUILD_TAG}, BUILD_TYPE=${BUILD_TYPE}, BUILD_PACKAGES=${BUILD_PACKAGES}" # cleanup deploy folder, create folder for ownership sudo rm -fr $SCRIPT_PATH/deploy >/dev/null 2>&1 @@ -84,18 +90,19 @@ echo "---> Downloading Hyperion source code from ${GIT_REPO_URL}" sudo rm -fr $SCRIPT_PATH/hyperion >/dev/null 2>&1 git clone --recursive --depth 1 -q $GIT_REPO_URL $SCRIPT_PATH/hyperion || { echo "---> Failed to download Hyperion source code! Abort"; exit 1; } -# start compilation +# Steps: +# Update lokal docker image # Remove container after stop # Mount /deploy to /deploy # Mount source dir to /source -# Target docker image +# Use target docker image # execute inside container all commands on bash + echo "---> Startup docker..." -$DOCKER pull hyperionproject/hyperion-ci:$BUILD_TARGET $DOCKER run --rm \ -v "${SCRIPT_PATH}/deploy:/deploy" \ -v "${SCRIPT_PATH}/hyperion:/source:ro" \ - hyperionproject/hyperion-ci:$BUILD_TARGET \ + $REGISTRY_URL/$BUILD_IMAGE:$BUILD_TAG \ /bin/bash -c "mkdir hyperion && cp -r /source/. /hyperion && cd /hyperion && mkdir build && cd build && cmake -DCMAKE_BUILD_TYPE=${BUILD_TYPE} .. || exit 2 &&