From d6998757e1a091ccd62bb86599b74a12e98e67e4 Mon Sep 17 00:00:00 2001 From: amarcu5 Date: Tue, 11 Sep 2018 12:43:56 +0100 Subject: [PATCH] Removed PlistBuddy dependency --- README.md | 2 -- build-tools/plistbuddy | Bin 12928 -> 0 bytes make.sh | 62 ++++++++++++++++++++++++++++++----------- out/PiPer.safariextz | Bin 15174 -> 15180 bytes update.plist | 12 ++++++-- 5 files changed, 55 insertions(+), 21 deletions(-) delete mode 100755 build-tools/plistbuddy diff --git a/README.md b/README.md index 809ce42..1e9b52a 100644 --- a/README.md +++ b/README.md @@ -103,8 +103,6 @@ npm install -g xar-js npm install -g google-closure-compiler-js ``` -Additionally a reimplementation of the utility PlistBuddy used for automated build numbering is [provided](https://github.com/amarcu5/PiPer/tree/master/build-tools/) but it is advisable to download the original as part of [Xcode](https://itunes.apple.com/gb/app/xcode/id497799835?mt=12) or from [Apple's Command Line Tools](https://developer.apple.com/download/) - #### Steps 1. Clone the repository 2. Run `make.sh` diff --git a/build-tools/plistbuddy b/build-tools/plistbuddy deleted file mode 100755 index 814716b517f6036c85b6cbca6a66cb90a3860e7a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12928 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 B)6D/dev/null 2>&1 && echo "csso" || echo "./build-tools/cs CCJS_PATH=$(type "google-closure-compiler-js" >/dev/null 2>&1 && echo "google-closure-compiler-js" || echo "./build-tools/google-closure-compiler-js") XARJS_PATH=$(type "xarjs" >/dev/null 2>&1 && echo "xarjs" || echo "./build-tools/xarjs") SVGO_PATH=$(type "svgo" >/dev/null 2>&1 && echo "svgo" || echo "./build-tools/svgo") -PLISTBUDDY_PATH=$(type "/usr/libexec/PlistBuddy" >/dev/null 2>&1 && echo "/usr/libexec/PlistBuddy" || echo "./build-tools/plistbuddy") # Certifcate paths LEAF_CERT_PATH="../certs/cert.pem" @@ -82,6 +81,15 @@ while :; do shift done +# Check for git and exit if not found +if [[ "${update_version}" -eq 1 ]] && { ! type "git" &>/dev/null; }; then + echo "Error: 'git' command not found" >&2 + echo "Please install the latest version of git (see https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)" >&2 + exit 1 +else + GIT_PATH=$(sh /etc/profile; which git) +fi + # # Build script @@ -120,6 +128,34 @@ if [[ "$compress_css" -eq 1 ]]; then done fi +# Get current version from git if automatic versioning enabled +if [[ "${update_version}" -eq 1 ]]; then + + # Check we're inside a git work tree + inside_git_repo="$(git rev-parse --is-inside-work-tree 2>/dev/null)" + if [[ "${inside_git_repo}" ]]; then + + # Get number of commits and release version from most recent tag + number_of_commits=$(($("${GIT_PATH}" rev-list HEAD --count) + 1)) + git_release_version=$("${GIT_PATH}" describe --tags --always --abbrev=0) + git_release_version=${git_release_version%%-*}; + git_release_version=${git_release_version#*v}; + + # Otherwise issue warning and set blank version + else + echo "Warning: Unable to set version automatically as cannot find 'git' repository (ensure repository has been cloned to fix this)" >&2 + number_of_commits="0" + git_release_version="0.0.0" + fi + + # Helper performs multiline sed regular expression + function multiline_sed_regex() { + mv "$1" "$1.bak" + cat "$1.bak" | tr "\n" "\f" | sed -E "$2" | tr "\f" "\n" > "$1" + rm -rf "$1.bak" + } +fi + # Use closure compiler to compress javascript if [[ "$compress_js" -eq 1 ]]; then for path in "out/${EXTENSION_NAME}.safariextension/scripts"/*.js; do @@ -138,26 +174,18 @@ fi rm "out/${EXTENSION_NAME}.safariextension/scripts/externs.js" # Update version info from git -if [[ "$update_version" -eq 1 ]]; then - git=$(sh /etc/profile; which git) - number_of_commits=$(($("$git" rev-list HEAD --count) + 1)) - git_release_version=$("$git" describe --tags --always --abbrev=0) - git_release_version=${git_release_version%%-*}; - git_release_version=${git_release_version#*v}; +if [[ "${update_version}" -eq 1 ]]; then info_plist="out/${EXTENSION_NAME}.safariextension/Info.plist" update_plist="update.plist" - ${PLISTBUDDY_PATH} -c "Set :CFBundleVersion $number_of_commits" "$info_plist" - ${PLISTBUDDY_PATH} -c "Set :CFBundleShortVersionString ${git_release_version}" "$info_plist" - ${PLISTBUDDY_PATH} -c "Set \":Extension Updates:0:CFBundleVersion\" $number_of_commits" "$update_plist" - ${PLISTBUDDY_PATH} -c "Set \":Extension Updates:0:CFBundleShortVersionString\" ${git_release_version#*v}" "$update_plist" + multiline_sed_regex "${info_plist}" "s|(> *CFBundleShortVersionString *[^>]+>)[^<]+|\1${git_release_version}|g" + multiline_sed_regex "${info_plist}" "s|(> *CFBundleVersion *[^>]+>)[^<]+|\1${number_of_commits}|g" + multiline_sed_regex "${update_plist}" "s|(> *CFBundleShortVersionString *[^>]+>)[^<]+|\1${git_release_version}|g" + multiline_sed_regex "${update_plist}" "s|(> *CFBundleVersion *[^>]+>)[^<]+|\1${number_of_commits}|g" fi # Package safari extension -cd out || exit -if [[ "$package_ext" -eq 1 ]] && [[ -f "${PRIVATE_KEY_PATH}" ]]; then - [[ ${XARJS_PATH} != /* ]] && ! type "${XARJS_PATH}" >/dev/null 2>&1 && XARJS_PATH="../${XARJS_PATH}" - ${XARJS_PATH} create "${EXTENSION_NAME}.safariextz" --cert "${LEAF_CERT_PATH}" --cert "${INTERMEDIATE_CERT_PATH}" --cert "${ROOT_CERT_PATH}" --private-key "${PRIVATE_KEY_PATH}" "${EXTENSION_NAME}.safariextension" - rm -rf "${EXTENSION_NAME}.safariextension" +if [[ "${package_ext}" -eq 1 ]] && [[ -f "out/${PRIVATE_KEY_PATH}" ]]; then + (cd out && ${XARJS_PATH} create "${EXTENSION_NAME}.safariextz" --cert "${LEAF_CERT_PATH}" --cert "${INTERMEDIATE_CERT_PATH}" --cert "${ROOT_CERT_PATH}" --private-key "${PRIVATE_KEY_PATH}" "${EXTENSION_NAME}.safariextension") + rm -rf "out/${EXTENSION_NAME}.safariextension" fi - echo "Done." diff --git a/out/PiPer.safariextz b/out/PiPer.safariextz index 04216579848a7584211bdb54d50ac6d1acef671f..c0c11361f44dcab0740c288c0c11bf31fea66923 100644 GIT binary patch delta 5545 zcmV;a6;|rTcFcBvcwurO02}}T00000000n#00000001Im00001c$~#r*^-;c5`E_@ z9DY^UVqYeDe1jb%fdmpr@CFo{*d&33;OlQm?Y4Ux``R;c=b@ufEm*X7FKpe|Q>glBA8hFL3zl)1#^BldZ3x+dQp)9nTc}rFVi|uLIedw-}9!B7RRi}Rjx;c8&o{M6nTr~ zZwth94xeTI?1}5SJw03o@){gxYRZLJ(5`n#*<||3P8l3$qH)n#LW@dOa6K|28l`c0 z?nTXNGET3wb;qr2-*2u~$M0}_$pp>XCz0bKK3Daui0jRUE3Zio^aY!^z9lv1jY187 z=4l3SV}BA4)3O=ZR7btq@{6^4B}lFJ2ZZuu-f@@VOh2I_fu%cU8(&YOxN6oLI>1$a z0Q7mHO$5#qe2v4#{ix2^dKitZF`SkjqUl(y_bVdGD1!h?h1Q3`UE%T8=a)-@D#=jV zY>#oK@rC1e^f)u;eUh#WGLZQhh9$^}omF3bau&vo};i-wNW>q@q zqQTL@OWo=sV4B#_b9_6QO_WPu=@R4tFEpeskb6<&0ohADb&*D@GQem{y`4FNEmp$CnTMNYq}f?mnWe6Bm9E(h z0ym+7>YiaN+`h)mP=1T|h`24ZVN6)?G`QXpktLHkMIsAN;D^dprAZ`x=op%iv4254Z1iI}x7L`CAH&2C|=jKYR0hDsQ## zZ=L`|boL&V>5OKQl z9@C5c(!Vs=rmC*OuCm-yDcW{q*gWuw<$8M5n|cz4L!%?9zsS7_(F8#V!_iJr{8;i0 zmwCNa%q6liK$#CG>A0M<8NgWVA|L8vyWUQiotTTeBU0--J8x@$dSoUusn{Lefx31x zRG4y0XT!zOvX2e5H&7;Sh_Tog7kth{K-xRaCOjyGgt%!xDYeMJ+bK)5SUcgZeKJ*z zgr@YPwjSc^X6V}G#w5*hRqRxl6{-taIOj9FVIpaV)aj9^*o-~S(9>cYiJ~4`I(Iy* z$XU#*0UijBX{;iD`LGw63f2*kvepxqg>oo*57XC~_9t0b)^DNNAHQW`9?B)W=t2 zFA9g(bp!INg~RK*0r}O!;dR}B{A%F zIA$(eUE=G1ei~dFS1t-y6sq>vwMWD_<695U*2)Gq^7AkauDMI{%NAzpov=-oQnPhU z{M3nIaQ0cu_GeRdXR54=Q?=;{IAR{xTDm34J(r#ohhkptEj-1oTd?1Qa-(|G12G=ToFWdQw^$Ds!r!#*|0I}Fq6c-WM zW;x}TXl@+NPPR+1V{kgx%HB;8^c-|7>K%r7FXfYx>eWN$U$+ChBFbQK&38DnssM3O z@ztcLwkJL{1fEy-X#i7MV8C+Dx(nn|5IkAY(^~1PLziV~J{eEvi?3}XckRxXguy@N zLAk$wtFmH18HJh&4fJ;ddqGHhrQw}9Cmd|b#>Ip|0}?%3^N_GnY$_^bzj##RL=dBX zw&C}UsHTWUdLYnjG?JRj0yhU(x@C{ly_ay8sNyaFDr;2r@5s5TBG8c+dJePA&!l`c zPB{OPk62sv7i2#nH`%yogw3`In~oc{g>i;|+`4E{i>XOI^$*>$EF*$6giAO-&nsnU zgQ*F**zf73gh&wyY-V#U$m1T&&P7jULpHXP6Y4CAa!nbhv!yELNi0aK>k8ngeU|da z*`|z*0Bc!f6@(lCWQ?+DrhFKi)GBFenzLL>m8O<5ogLytp zqROS6X@P9wsH!~ea9LI89Oyz^h1sGRaosy96K$WR0X;=25gY?zJWWwjJ@~aDTyJm@* zF@Msm^_JQ%_Ht#2*5lmO08ewTWeRzvQ&(lrJCBlUY@{dQS7w)xuu=<^`+NT*dA%v= zn6Z~psO1KJZ-7PzR*XD#8@!M0-*@@7$H=d`{MuvWXD+{%-q*^DJd@s{2#T41Mrol| z0E_N--L9_WMcm>|2@E%eEu2@!6Q^rAD?Y(SN~DE!f=m>Ch7z1`ob6%tcc^O7KFL7b zpC?v0Z;hn%DO#G_T8>>DWgm?LYppgB=>$NVsk;S+>?{V-d=j#`Bc03bYU83NyR|U= z>Mj(w04=p4IH+YXSN1Kqc<819j7&kBY<5Ejd>>J2f@(V|h?JyfwR zC3R)2nc-p;I`k>AR#GaiMMln)oI?4Dy8uY3p z83*H3+*)2O165zhx+!Gia-N2Azg=DfL7E##uvo4%K$X#yt9R9wU4smNuSdi21BED! zqWdPjsY2hnOt9ydk9912uRak7-@V0<`sa<10|A1PJH9M>-&0xSNoIdVk|Ff=W0%Ft zHy-FW*97U-`0&rmZiU~70=wsr&$=v;x4rl--I{T)>yhV${hPX8*Q6Jl_oC2cN1?@T zRY-a7YY>R#`PSG3w|?b+1@E2ItM9D{rE5Y4%PZ!r%>lXvpUuY;cXkvj`|HNCz-cYRI1?YF&U12$M5seX?=c;FBmkUE@!l|R>(k9(TcuCZMogM9t=5?a)ck>z8`4Z=!u(@97R}JorTCaj>x zxCc8Y`$1}YoO*r%_%Qu?o%nPC`t7pv>p+s1@rNAz`SID6Y8_PZmsP%sPoLW$2~K%@ z?c(}&=ld|d&pj>dhC}=X1%D7Iu49-&A!}RNi=kviS%JNGLKD~eY z91;;8a#RwNXcEU1z%ec+0t!QukY+JF#xa~=0uFtczA^OT82DySLDc=_InWlGL6i^-iV3g;_Q8J_)*wv65E2I@6v1FjK%of-5{v+JOi}^LU@=B>F-`p|u##_J z&8r}PjobGj{fqE_Zjk!;!sojc5GTR8>^`@bHwy40vb;l=?}VW!lzopdPn4lZ<}G8s zbA}-B_c-%&)&v9$|Bzr&0#IB6zgU8kfaDke5*j1J+eIPGM9I%s^FQ#0hUDaEBBV&1 zjRDCr5ys&+En)*Ah+{k;2ny%0pUS~6Gv_sbcV4sSIo$L+aMy8{l==0ag_|Yc{88;W z+zj`Q@IQl_#(ocOj^of6&{c`>&*fc_STdbjlCi?`sG94w({2r2QL{zs)0m z8b`4o@d(4vcQVa)B0(H}k4P-cFaa7e3>7mtivx;{04ylDm<%zFBRL#)p;UCE>E9(1 z#UwbxfEcoei~}rU0uXX|j1o8qBMuN$%taIz{JXlry#sX>nbc1{8||nr6a;rUUTz(dI~)2Vw%SL>$B1L{lge zQGkNwA{$}>$DkoVX&SKqs%(6Jh5+9FPvl{G`?rz*0w3ai3kI;~BrcCnO}D{KZ95!( zDEg~~N;zrQzVS=8Wl|AV_Jump2XIH@B408ZhCj4lfO5N9OdFqYuDdm10WQ%7E%p|cn~#oKT)7P#qOPe4E(#znS^Kt0<5 zl+oQ16-JN^V{T#LF6386-TLhWj^O0{J#pqu9sz@;Zvq*O=zOUv%4=Itgy-8<^=asz zAJ-VAa|#n!WiL5d_6Zdkd6_X+8UGR$xQJ+UQThBJn$3@FVCt`t{F$P!D1hQV}I?Fra)RGU5B{c_%x zKD+v}uo1Nof6^w?>rgr*Br};IIeL)x`Y7xL)ab(_$p+`IKiLLCNVMY3`1hf;c9C|w z-&azQ5{%_qee0YhryT++)frdwZ=J`^6dQb^gQ{TeA(As-(D3e6ENU57p!_<685ztJ^~Zc-DRL0pK*8-tlx!%$tKvu zvKccxf5~}{IH{Q)_$~0!GgAe=<1#r7>BoM<+*&qn82jSWf-h3=Nk09yS! zAJWeyEOXK%~F*Q(^UCfoNj z^b4kzJ0Sfu1shCMUkJT~j0|+035zFD;cFAyhr@VjVYv3?Qu*J&Bx-ml z6$+zm?hmW_zy&nOgQ;`Ql$&Zf#oP`cEecU!7C7#Y5GTMb{IkVe4&zB?7i`+zry-{} zM}lK1o8c}|j^rymQxSp`Xl78j23?6se?zEhPjGDIC`G3hISeq=Uja&JmU-`>JVwzC z+Ww=0CQ(ky2=5_|`=vLE$M4uU$2Cn9l8FeR$Us(D2oXXFC0a{3e_rww z%>j=45=~^VJ;2b?x01;eks@%(|IAP=0++^NQUonci5!0zTGc(Yzx9!Yqm-&{I1c9du{LX&do7l?q?XWDIFNu8i0mcDr$B3ZO6SVLf~7z-#BReqB<5 z@#!(on4b*pnc_3>6Z+%7!~Kb)LLT<5pZ4vibtB4_O$$St+4clB;|nbsucR6E_h*## r2omz1bGIm(hJdyM^aX8ZaQfo2iMvai1$swENB;xB<9B7V9wsOi?@q?M delta 5539 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 diff --git a/update.plist b/update.plist index e2d544f..9245e1e 100644 --- a/update.plist +++ b/update.plist @@ -8,9 +8,9 @@ CFBundleIdentifier com.amarcus.safari.piper CFBundleShortVersionString - 0.2.5 + CFBundleVersion - 152 + 153 Developer Identifier BQ6Q24MF9X URL @@ -21,3 +21,11 @@ + + + + + + + +