From f81afc5eab3d01511f64e2e1b506c73083983371 Mon Sep 17 00:00:00 2001 From: ann0see <20726856+ann0see@users.noreply.github.com> Date: Tue, 15 Mar 2022 22:24:39 +0100 Subject: [PATCH 1/2] Build: Add iOS deploy script Co-authored-by: Christian Hoffmann --- ios/deploy_ios.sh | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100755 ios/deploy_ios.sh diff --git a/ios/deploy_ios.sh b/ios/deploy_ios.sh new file mode 100755 index 0000000000..4344761480 --- /dev/null +++ b/ios/deploy_ios.sh @@ -0,0 +1,18 @@ +#!/bin/bash +set -eu + +## Builds an ipa file for iOS. Should be run from the repo-root + +# Create Xcode file and build +qmake -spec macx-xcode Jamulus.pro +/usr/bin/xcodebuild -project Jamulus.xcodeproj -scheme Jamulus -configuration Release clean archive -archivePath "build/Jamulus.xcarchive" CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO + +# Generate ipa by copying the .app file from the xcarchive directory +mkdir build/Payload +cp -r build/Jamulus.xcarchive/Products/Applications/Jamulus.app build/Payload/ +cd build +zip -0 -y -r Jamulus.ipa Payload/ + +# Make a deploy folder and copy file +mkdir ../deploy +mv Jamulus.ipa ../deploy From f460f5ce276d8907e0784e7993c9532b72daa30f Mon Sep 17 00:00:00 2001 From: Christian Hoffmann Date: Sun, 13 Mar 2022 22:53:28 +0100 Subject: [PATCH 2/2] Autobuild: Combine and simplify iOS build scripts Related: #2503 - Move all autobuild/ios/* scripts to a single .github/autobuild/ios.sh script which is called for the different stages (setup/build/get-artifacts). - Condense redundant parameter parsing into a single step - Create functions with proper names for larger steps - Inline Github artifact output definition as it's shorter that way - Make shellcheck-clean --- .github/autobuild/ios.sh | 52 +++++++++++++++++++++ .github/workflows/autobuild.yml | 6 +-- autobuild/ios/autobuild_ios_1_prepare.sh | 31 ------------ autobuild/ios/autobuild_ios_2_build.sh | 27 ----------- autobuild/ios/autobuild_ios_3_copy_files.sh | 48 ------------------- 5 files changed, 55 insertions(+), 109 deletions(-) create mode 100755 .github/autobuild/ios.sh delete mode 100755 autobuild/ios/autobuild_ios_1_prepare.sh delete mode 100755 autobuild/ios/autobuild_ios_2_build.sh delete mode 100755 autobuild/ios/autobuild_ios_3_copy_files.sh diff --git a/.github/autobuild/ios.sh b/.github/autobuild/ios.sh new file mode 100755 index 0000000000..e5b21b10a5 --- /dev/null +++ b/.github/autobuild/ios.sh @@ -0,0 +1,52 @@ +#!/bin/bash +set -eu + +QT_DIR=/usr/local/opt/qt +AQTINSTALL_VERSION=2.0.6 + +if [[ ! ${QT_VERSION:-} =~ [0-9]+\.[0-9]+\..* ]]; then + echo "Environment variable QT_VERSION must be set to a valid Qt version" + exit 1 +fi +if [[ ! ${jamulus_buildversionstring:-} =~ [0-9]+\.[0-9]+\.[0-9]+ ]]; then + echo "Environment variable jamulus_buildversionstring has to be set to a valid version string" + exit 1 +fi + +setup() { + if [[ -d "${QT_DIR}" ]]; then + echo "Using Qt installation from previous run (actions/cache)" + else + echo "Install dependencies..." + python3 -m pip install "aqtinstall==${AQTINSTALL_VERSION}" + python3 -m aqt install-qt --outputdir "${QT_DIR}" mac ios "${QT_VERSION}" --archives qtbase qttools qttranslations qtmacextras + fi +} + +build_app_as_ipa() { + # Add the Qt binaries to the PATH: + export PATH="${QT_DIR}/${QT_VERSION}/ios/bin:${PATH}" + ./ios/deploy_ios.sh +} + +pass_artifact_to_job() { + artifact_deploy_filename="jamulus_${jamulus_buildversionstring}_iOSUnsigned${ARTIFACT_SUFFIX:-1}.ipa" + echo "Moving build artifact to deploy/${artifact_deploy_filename}" + mv ./deploy/Jamulus.ipa "./deploy/${artifact_deploy_filename}" + echo "::set-output name=artifact_1::${artifact_deploy_filename}" +} + +case "${1:-}" in + setup) + setup + ;; + build) + build_app_as_ipa + ;; + get-artifacts) + pass_artifact_to_job + ;; + *) + echo "Unknown stage '${1:-}'" + exit 1 +esac diff --git a/.github/workflows/autobuild.yml b/.github/workflows/autobuild.yml index f4850541c0..ebac4d1e9e 100644 --- a/.github/workflows/autobuild.yml +++ b/.github/workflows/autobuild.yml @@ -129,9 +129,9 @@ jobs: - config_name: iOS (artifacts) target_os: ios building_on_os: macos-10.15 - cmd1_prebuild: "./autobuild/ios/autobuild_ios_1_prepare.sh 5.15.2" - cmd2_build: "./autobuild/ios/autobuild_ios_2_build.sh" - cmd3_postbuild: "./autobuild/ios/autobuild_ios_3_copy_files.sh" + cmd1_prebuild: "QT_VERSION=5.15.2 ./.github/autobuild/ios.sh setup" + cmd2_build: "QT_VERSION=5.15.2 ./.github/autobuild/ios.sh build" + cmd3_postbuild: "QT_VERSION=5.15.2 ./.github/autobuild/ios.sh get-artifacts" # Build failed with CodeQL enabled when last tested 03/2022 (#2490). # There are no hints that iOS is supposed to be supported by CodeQL. # Therefore, disable it: diff --git a/autobuild/ios/autobuild_ios_1_prepare.sh b/autobuild/ios/autobuild_ios_1_prepare.sh deleted file mode 100755 index ddd07e33db..0000000000 --- a/autobuild/ios/autobuild_ios_1_prepare.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/bash -e - -# autobuild_1_prepare: set up environment, install Qt & dependencies - -if [ "$#" -ne "1" ]; then - echo "need to specify Qt version" - exit 1 -fi - -QT_DIR=/usr/local/opt/qt -QT_VER=$1 -AQTINSTALL_VERSION=2.0.6 - -################### -### PROCEDURE ### -################### - -echo "Install dependencies..." -python3 -m pip install "aqtinstall==${AQTINSTALL_VERSION}" -python3 -m aqt install-qt --outputdir "${QT_DIR}" mac ios "${QT_VER}" --archives qtbase qttools qttranslations qtmacextras - -# Add the qt binaries to the PATH. -# The clang_64 entry can be dropped when Qt <6.2 compatibility is no longer needed. -for qt_path in "${QT_DIR}"/${QT_VER}/ios/bin "${QT_DIR}"/${QT_VER}/clang_64/bin; do - if [[ -d $qt_path ]]; then - export -p PATH="${qt_path}:${PATH}" - break - fi -done -echo "::set-env name=PATH::${PATH}" -echo "the path is ${PATH}" diff --git a/autobuild/ios/autobuild_ios_2_build.sh b/autobuild/ios/autobuild_ios_2_build.sh deleted file mode 100755 index 5a7662eea0..0000000000 --- a/autobuild/ios/autobuild_ios_2_build.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/sh -e - -# autobuild_2_build: actual build process - - -#################### -### PARAMETERS ### -#################### - - -source "$(dirname "${BASH_SOURCE[0]}")/../ensure_THIS_JAMULUS_PROJECT_PATH.sh" - -################### -### PROCEDURE ### -################### - -cd "${THIS_JAMULUS_PROJECT_PATH}" - -qmake -spec macx-xcode Jamulus.pro -/usr/bin/xcodebuild -project Jamulus.xcodeproj -scheme Jamulus -configuration Release clean archive -archivePath "build/Jamulus.xcarchive" CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO -# Make a deploy folder -mkdir deploy -# Generate ipa by copying the .app file from the xcarchive file -mkdir deploy/Payload -cp -r build/Jamulus.xcarchive/Products/Applications/Jamulus.app deploy/Payload/ -cd deploy -zip -0 -y -r Jamulus.ipa Payload/ diff --git a/autobuild/ios/autobuild_ios_3_copy_files.sh b/autobuild/ios/autobuild_ios_3_copy_files.sh deleted file mode 100755 index 5d59791a2b..0000000000 --- a/autobuild/ios/autobuild_ios_3_copy_files.sh +++ /dev/null @@ -1,48 +0,0 @@ -#!/bin/sh -e - -# autobuild_3_copy_files: copy the built files to deploy folder - -if [ "$#" -gt 1 ]; then - BUILD_SUFFIX=_$1 - shift -fi - -#################### -### PARAMETERS ### -#################### - -source "$(dirname "${BASH_SOURCE[0]}")/../ensure_THIS_JAMULUS_PROJECT_PATH.sh" - -################### -### PROCEDURE ### -################### - -cd "${THIS_JAMULUS_PROJECT_PATH}" - -echo "" -echo "" -echo "ls GITROOT/deploy/" -ls "${THIS_JAMULUS_PROJECT_PATH}"/deploy/ -echo "" - -echo "" -echo "" -artifact_deploy_filename=jamulus_${jamulus_buildversionstring}_iOSUnsigned${BUILD_SUFFIX}.ipa -echo "Move/Rename the built file to deploy/${artifact_deploy_filename}" -mv "${THIS_JAMULUS_PROJECT_PATH}"/deploy/Jamulus.ipa "${THIS_JAMULUS_PROJECT_PATH}"/deploy/"${artifact_deploy_filename}" - - -echo "" -echo "" -echo "ls GITROOT/deploy/" -ls "${THIS_JAMULUS_PROJECT_PATH}"/deploy/ -echo "" - - -github_output_value() -{ - echo "github_output_value() ${1} = ${2}" - echo "::set-output name=${1}::${2}" -} - -github_output_value artifact_1 ${artifact_deploy_filename}