Skip to content

Instantly share code, notes, and snippets.

@jpotts18
Created February 26, 2014 22:58
Show Gist options
  • Save jpotts18/9240598 to your computer and use it in GitHub Desktop.
Save jpotts18/9240598 to your computer and use it in GitHub Desktop.
Xamarin Dual build Jenkins Script
# Source Path Variables
source ~/.bash_profile
# uncomment to run this script in your local environment (outside of jenkins)
set -x
#WORKSPACE="/Users/parivedadeveloper/Projects/pariveda-finternship-2013"
# ANDROID
ANDROID_FOLDER="${WORKSPACE}/source/BBP.Droid"
ANDROID_CSPROJ="${ANDROID_FOLDER}/BBP.Droid.csproj"
ANDROID_APK="${ANDROID_FOLDER}/bin/Release/org.buffalobayou.guide-Signed.apk"
# GIT CONFIG STUFF
BITBUCKET_REPO="https://bitbucket.org/parivedasolutions/pariveda-finternship-2013"
PREVIOUS_GIT_COMMITS=`git log --pretty=oneline --abbrev-commit | head -n7`
FEEDBACK_AND_LINK="Please respond to this email with feedback \n\n\nfor development details: ${BITBUCKET_REPO}"
BUILD_NOTES="${FEEDBACK_AND_LINK} \n\n${PREVIOUS_GIT_COMMITS} \n\nJenkins Build: #${BUILD_NUMBER} \nCommit: ${GIT_COMMIT} \nDATE: ${BUILD_ID}"
#IOS
IOS_FOLDER="${WORKSPACE}/source/BBP.iOS"
IOS_SLN="${WORKSPACE}/source/BBP.iOS.sln"
IOS_IPA="${IOS_FOLDER}/bin/iPhone/Ad-Hoc/BBPiOS-1.ipa"
IOS_DSYM_FOLDER="${IOS_FOLDER}/bin/iPhone/Ad-Hoc/BBPiOS.app.dSYM"
IOS_DSYM_ZIP="${IOS_FOLDER}/bin/iPhone/Ad-Hoc/BBPiOS.app.dSYM.zip"
# TEST FLIGHT
TESTFLIGHT_UPLOAD_URL="http://testflightapp.com/api/builds.json"
API_TOKEN="APIKEY"
TEAM_TOKEN="TEAMKEY"
DISTRO_LIST="Internship Team"
# TODO Notify flag configurable
# SHARED PROJECT
SHARED_SLN="${WORKSPACE}/source/BBP.Shared.sln"
SHARED_BUILD_CONFIGURATION="Debug"
SHARED_FOLDER="${WORKSPACE}/source/BBP.Shared"
SHARED_CSPROJ="${SHARED_FOLDER}/BBP.Shared.csproj"
SHARED_DLL="${SHARED_FOLDER}/bin/${SHARED_BUILD_CONFIGURATION}/BBP.Shared.dll"
# TEST PROJECT
TEST_FOLDER="${WORKSPACE}/source/BBP.Test"
TEST_CSPROJ="${TEST_FOLDER}/BBP.Test.csproj"
TEST_DLL="${TEST_FOLDER}/bin/${SHARED_BUILD_CONFIGURATION}/BBP.Test.dll"
TEST_OUTPUT_XML="-xml=test-results.xml"
MD_TOOL_EXE="/Applications/Xamarin Studio.app/Contents/MacOS/mdtool"
# MONO_EXE="/Library/Frameworks/Mono.framework/Versions/2.10.12/bin/mono"
MONO_EXE="/Library/Frameworks/Mono.framework/Versions/3.2.5/bin/mono"
MONO_PARAMS="--debug"
# TODO Figure out which NUnit is the right one
# @see http://forums.xamarin.com/discussion/comment/16782/#Comment_16782
# NUNIT_CONSOLE_EXE="/Library/Frameworks/Mono.framework/Versions/2.10.12/lib/mono/2.0/nunit-console.exe"
NUNIT_CONSOLE_EXE="/Library/Frameworks/Mono.framework/Versions/2.10.12/lib/mono/4.0/nunit-console.exe"
# NUNIT_CONSOLE_EXE="/Library/Frameworks/Mono.framework/Versions/3.0.12/lib/mono/2.0/nunit-console.exe"
# NUNIT_CONSOLE_EXE="/Library/Frameworks/Mono.framework/Versions/3.0.12/lib/mono/4.5/nunit-console.exe"
# NUNIT_CONSOLE_EXE="/Users/parivedadeveloper/Downloads/monodevelop-4.0.9/external/mdtestharness/nunit-console.exe"
# `/Library/Frameworks/Mono.framework/Versions/3.0.12/bin/pkg-config --variable=libdir mono-nunit`/mono/2.0/nunit-console.exe
# NUNIT_CONSOLE_PARAMS="--nologo --noshadow"
NUNIT_CONSOLE_PARAMS="--noshadow"
# TODO JavaScript Unit Tests (if applicable)
# mocha sandbox/jenkins-test-projects/mocha-test/basic-test.js -R xunit > sandbox/jenkins-test-projects/mocha-test/results.xml
##########
# SHARED CODE
##########
# TODO Build BBP.Shared.csproj
rm -rf ${SHARED_FOLDER}/obj
rm -rf ${SHARED_FOLDER}/bin
# xbuild ${SHARED_CSPROJ} /p:Configuration=${SHARED_BUILD_CONFIGURATION}
# TODO Build BBP.Test.csproj
rm -rf ${TEST_FOLDER}/obj
rm -rf ${TEST_FOLDER}/bin
# xbuild ${TEST_CSPROJ} /p:Configuration=${SHARED_BUILD_CONFIGURATION}
"${MD_TOOL_EXE}" -v build "--configuration:${SHARED_BUILD_CONFIGURATION}" "${SHARED_SLN}"
# "--runtime:3.0.12"
# TODO: Run BBP.Test
# @see http://curtis.schlak.com/2012/01/06/running-nunit-console-under-mono.html
${MONO_EXE} ${MONO_PARAMS} $MONO_OPTIONS ${NUNIT_CONSOLE_EXE} ${NUNIT_CONSOLE_PARAMS} ${TEST_DLL}
# ${TEST_OUTPUT_XML} -domain=multiple
# TODO Jenkins test reporting
##########
# ANDROID
##########
# Android Build
rm -rf ${SHARED_FOLDER}/obj
rm -rf ${SHARED_FOLDER}/bin
rm -rf ${ANDROID_FOLDER}/obj
rm -rf ${ANDROID_FOLDER}/bin
xbuild "${ANDROID_CSPROJ}" /t:SignAndroidPackage /p:Configuration=Release
# TODO Android UI or Integration Tests
# Push to TestFlight
curl -X POST -v ${TESTFLIGHT_UPLOAD_URL} -F file=@"${ANDROID_APK}" -F api_token="${API_TOKEN}" -F team_token="${TEAM_TOKEN}" -F notes="${BUILD_NOTES}" -F distribution_lists="${DISTRO_LIST}" -F notify=False
##########
# IOS
##########
# use mdtool to build project
# TODO make the Build configuration configurable from Jenkins (parameterized builds)
rm -rf ${WORKSPACE}/source/BBP.iOS/obj
rm -rf ${WORKSPACE}/source/BBP.iOS/bin
/Applications/Xamarin\ Studio.app/Contents/MacOS/mdtool -v build "--runtime:3.2.5" "--configuration:Ad-Hoc" "${IOS_SLN}"
# "--runtime:2.10.12"
# TODO iOS UI or Integration Tests
# Zip the DSYM for upload to TestFlight
zip -r "${IOS_DSYM_ZIP}" "${IOS_DSYM_FOLDER}"
# Curl to TestFlight
curl -X POST -v ${TESTFLIGHT_UPLOAD_URL} -F file=@"${IOS_IPA}" -F dsym=@"${IOS_DSYM_ZIP}" -F api_token="${API_TOKEN}" -F team_token="${TEAM_TOKEN}" -F notes="${BUILD_NOTES}" -F distribution_lists="${DISTRO_LIST}" -F notify=False
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment