33set -e
44
55_main () {
6+ :<< 'COMMENT '
7+ Inputs from env
8+ - RELEASE: release/nightly (default nightly)
9+ - XCCONFIG: relative/path/to/xcconfig
10+ - default behavior is to search for an xcconfig file that defines '^MARKETING_VERSION ='
11+ e.g. MARKETING_VERSION must appear at the beginning of a line within the file
12+ - PRODUCT_NAME: name of the scheme/app to build and archive
13+ - MARKETING_VERSION: current version to set build output to
14+ COMMENT
15+ _ghtee () {
16+ local INP=$( < /dev/stdin)
17+ if [[ -n " $GITHUB_SHA " ]]; then
18+ tee -a " $1 "
19+ else
20+ if [[ ! " $1 " = * null ]] && [[ ! " $2 " = * null ]]; then
21+ echo $INP
22+ fi
23+ fi
24+ }
625 _mkipa () {
726 p=Payload
8- mkdir $p
27+ [[ -d " $p " ]] && rm -fr $p || true && mkdir $p
928 mv " $1 .app" $p
10- zip -qr9 " $1 .ipa" $p
11- rm -r $p
29+ zip -r9 " $1 .ipa" $p
1230 }
1331
14- local BUILD_TYPE=" ${1:- nightly} "
32+ local BUILD_TYPE=" ${RELEASE:- nightly} "
33+ if [[ ! " $BUILD_TYPE " = nightly ]]; then BUILD_TYPE=" release" ; fi
1534 if [[ -n " $GITHUB_REF " ]]; then
1635 if [[ " $GITHUB_REF " = ref/tags/* ]]; then
1736 local BUILD_TYPE=" release"
@@ -24,38 +43,59 @@ _main() {
2443 fi
2544 COMMIT=" ${COMMIT: 0: 8} "
2645 BRANCH=" $( echo $BRANCH | sed ' s/\//_/g' ) "
27- local APP=" ${2:- $(basename * xcodeproj .xcodeproj)} "
46+ local XCCONFIG=" ${XCCONFIG:= $(grep -r ' ^MARKETING_VERSION =' --include ' *.xcconfig' . | awk -F: ' { print $1 }' )} "
47+ if [[ -z " $XCCONFIG " ]]; then
48+ if [[ -z " $PRODUCT_NAME " ]]; then
49+ local EPOS=" ::error file=.github/makeipa,line=36,col=14,endColumn=29,title=Missing PRODUCT_NAME!::"
50+ local EMSG=" $EPOS Must set PRODUCT_NAME in env or in a valid xcconfig!"
51+ fi
52+ if [[ -z " $MARKETING_VERSION " ]]; then
53+ local EPOS=" ::error file=.github/makeipa,line=37,col=14,endColumn=34,title=Missing MARKETING_VERSION!::"
54+ local EMSG=" $EPOS Must set MARKETING_VERSION in env or in a valid xcconfig!"
55+ fi
56+ local APP=" $PRODUCT_NAME "
57+ local VER=" $MARKETING_VERSION "
58+ else
59+ local VER=" ${MARKETING_VERSION:- $(grep ' ^MARKETING_VERSION =' $XCCONFIG | awk ' { print $3 }' )} "
60+ local APP=" ${PRODUCT_NAME:- $(grep ' ^PRODUCT_NAME' $XCCONFIG | awk ' { print $3 }' )} "
61+ local APP=" ${APP:- $(basename * xcodeproj .xcodeproj)} "
62+ if [[ -z " $VER " ]]; then
63+ local EPOS=" ::error file=.github/makeipa,line=40,col=14,endColumn=89,title=Missing MARKETING_VERSION!::"
64+ local EMSG=" $EPOS Must set MARKETING_VERSION in env or in a valid xcconfig!"
65+ fi
66+ if [[ -z " $APP " ]]; then
67+ local EPOS=" ::error file=.github/makeipa,line=42,col=14,endColumn=57,title=Missing PRODUCT_NAME!::"
68+ local EMSG=" $EPOS Must set PRODUCT_NAME in env or in a valid xcconfig!"
69+ fi
70+ fi
71+ [[ -n " $EMSG " ]] && ( echo $EMSG && exit 1 )
2872 local XCARCHIVE=" ${XCARCHIVE:- $APP .xcarchive} "
2973 local BUILDOUT=" $XCARCHIVE /Products/Applications/$APP "
3074 local DSYM=" $APP .app.dSYM"
31- local VER=" $( grep ' MARKETING' Build.xcconfig | awk ' { print $3 }' ) "
3275 local ARGS=" archive -scheme $APP -archivePath $XCARCHIVE -destination generic/platform=iOS"
3376 if [[ " $BUILD_TYPE " = nightly ]]; then
34- VER=" $( date +' %y%m%d%H%M' ) +$VER +$BRANCH +$COMMIT "
35- ARGS=" $ARGS MARKETING_VERSION=$VER "
77+ ARGS=" $ARGS MARKETING_VERSION=$( date +' %y%m%d%H%M' ) +$VER +$BRANCH +$COMMIT "
3678 fi
3779 local LOG=" build/$VER .log"
3880 local OUTIPA=" build/$APP .$VER .ipa"
3981 local DSYMTAR=" build/$DSYM .$VER .tar"
4082
41- [[ -d " build" ]] && rm -r build || true && mkdir build
42- [[ -d " $XCARCHIVE " ]] && rm -r $XCARCHIVE
83+ [[ -d " build" ]] && rm -fr build || true && mkdir build
84+ [[ -d " $XCARCHIVE " ]] && rm -fr $XCARCHIVE
4385 echo " ::group:: Building $BUILD_TYPE "
44- echo " [$VER ] Building.."
86+ echo " [$VER ] Building.." | _ghtee " $GITHUB_STEP_SUMMARY "
4587 NSUnbufferedIO=YES set -o pipefail && xcodebuild $ARGS 2>&1 | tee " $LOG " | xcbeautify --renderer github-actions
46- echo " [$VER ] Archiving.."
88+ echo " [$VER ] Archiving.." | _ghtee " $GITHUB_STEP_SUMMARY "
4789 xz -e " $LOG "
48- tar cf " $DSYMTAR " -C " $XCARCHIVE /dSYMs" " $DSYM "
90+ tar cvf " $DSYMTAR " -C " $XCARCHIVE /dSYMs" " $DSYM " 2>&1 | _ghtee $GITHUB_STEP_SUMMARY null
4991 xz -e " $DSYMTAR "
50- _mkipa " $BUILDOUT "
92+ _mkipa " $BUILDOUT " | _ghtee $GITHUB_STEP_SUMMARY null
5193 mv " $BUILDOUT .ipa" " $OUTIPA "
52- rm -r " $XCARCHIVE "
53- if [[ -n " $GITHUB_SHA " ]]; then
54- echo " log=$( basename $LOG .xz) " >> $GITHUB_OUTPUT
55- echo " sym=$( basename $DSYMTAR .xz) " >> $GITHUB_OUTPUT
56- echo " ipa=$( basename $OUTIPA ) " >> $GITHUB_OUTPUT
57- fi
58- echo " [$VER ] Done!"
94+ rm -fr " $XCARCHIVE "
95+ echo " log=$( basename $LOG .xz) " | _ghtee $GITHUB_OUTPUT null
96+ echo " sym=$( basename $DSYMTAR .xz) " | _ghtee $GITHUB_OUTPUT null
97+ echo " ipa=$( basename $OUTIPA ) " | _ghtee $GITHUB_OUTPUT null
98+ echo " [$VER ] Done!" | _ghtee $GITHUB_STEP_SUMMARY
5999 echo " ::endgroup::"
60100}
61101
0 commit comments