diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 1f3230b..6665929 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,5 +1,7 @@ stages: - test + - build + - deploy test: stage: test @@ -7,6 +9,40 @@ test: - echo "This job tests something" tags: - xcode_12_2 + +build_project: + stage: build + script: + - xcodebuild build -project MVMCore/MVMCore.xcodeproj -scheme FatLibrary | xcpretty + artifacts: + paths: + - RemoteViewFramework/** + expire_in: 1 week + only: + - branches + - feature/testing + tags: + - xcode_12_2 + environment: + name: oneartifactory + url: https://oneartifactoryprod.verizon.com/artifactory + variables: + ARTIFACTORY_URL: https://oneartifactoryprod.verizon.com/artifactory + +deploy_snapshot: + stage: deploy + script: + - cd Scripts && ./upload_remote_view_frameworks.sh + only: + - branches + - feature/testing + tags: + - bash_shell + environment: + name: oneartifactory + url: https://oneartifactoryprod.verizon.com/artifactory + variables: + ARTIFACTORY_URL: https://oneartifactoryprod.verizon.com/artifactory # #stages: # # - test diff --git a/Scripts/upload_framework.sh b/Scripts/upload_framework.sh new file mode 100644 index 0000000..c1e5990 --- /dev/null +++ b/Scripts/upload_framework.sh @@ -0,0 +1,89 @@ +#!/bin/bash -e + +# upload_framework.sh +# RemoteView +# +# Uploads an iOS framework to Artificatory given the local path as the first argument and the remote project name in Verizon OneArtifactory for the second argument. +# +# An API key from Artifcatory is required in the api_key.private file before uploading. +# +# The script will replace [VER] in the provided remote path with the version found in the framework bundle. +# +# Created by Hedden, Kyle Matthew on 3/2/18. +# Copyright © 2018 Verizon. All rights reserved. + +URL=$1 +LOCALPATH=$2 +REMOTEPATH=$3 + +if [ -z $URL ]; then + echo "The artifactory instance url must be specified as the first argument!" + exit 1 +fi + +echo ">>> UPLOAD START <<<" +echo "Local path: ${LOCALPATH}" +echo "Remote path: ${REMOTEPATH}" + +LOCALBASE=$(basename "${LOCALPATH}") +LOCALDIR=$(dirname "${LOCALPATH}") + +# Grab the framework version from the bundled Info.plist. +FRAMEWORKVER=$(/usr/libexec/plistbuddy -c "Print :CFBundleShortVersionString" "${LOCALPATH}/Info.plist") +echo -e "\nFramework version: \t${FRAMEWORKVER}" + +# Replace the [VER] placeholders with the found version. +REMOTEPATH="${REMOTEPATH//\[VER\]/$FRAMEWORKVER}" +echo -e "Resolved path: \t\t${REMOTEPATH}" + +if [ -z $ARTIFACTORY_APIKEY ]; then + # Read the API key from a private file. + read -r APIKEY < "api_key.private" +else + APIKEY=$ARTIFACTORY_APIKEY +fi + +if [ -z $APIKEY ]; then + read -p "Artifactory API Key:" APIKEY + echo $APIKEY >> api_key.private +fi + +echo -e "API Key: \t\t${APIKEY}" + +# Zip the framework & DSYM for uploading. +pushd $LOCALDIR +echo -e "---------\nZipping: \t\t${LOCALBASE}.zip" +zip -r -X "${LOCALBASE}.zip" $LOCALBASE +# Generate framework's SHA-1 checksum. +CHECKSUM=$(shasum -a 1 "${LOCALBASE}.zip" | cut -d " " -f 1) +echo -e "SHA-1 Checksum: \t${CHECKSUM}" +if [ -e ${LOCALBASE}.dSYM ]; then +echo -e "---------\nZipping: \t\t${LOCALBASE}.dSYM.zip" +zip -r -X "${LOCALBASE}.dSYM.zip" $LOCALBASE.dSYM +# Generate its SHA-1 checksum for dsym. +DSYM_CHECKSUM=$(shasum -a 1 "${LOCALBASE}.dSYM.zip" | cut -d " " -f 1) +echo -e "SHA-1 Checksum: \t${DSYM_CHECKSUM}" +fi +popd +mv ${LOCALPATH}.zip . +if [ -e ${LOCALPATH}.dSYM.zip ]; then +mv ${LOCALPATH}.dSYM.zip . +fi + +# Upload framework to Artifactory. +echo -e "---------\nUploading to: \t\t${URL}/${REMOTEPATH}.zip" +curl --header "X-JFrog-Art-Api: ${APIKEY}" --header "X-Checksum-Sha1: ${CHECKSUM}" -X PUT "${URL}/${REMOTEPATH}.zip" -T "${LOCALBASE}.zip" + +# Cleanup. +rm "${LOCALBASE}.zip" + +if [ -e ${LOCALBASE}.dSYM.zip ]; then +# Upload dsym Artifactory. +echo -e "---------\nUploading to: \t\t${URL}/${REMOTEPATH}.dSYM.zip" +curl --header "X-JFrog-Art-Api: ${APIKEY}" --header "X-Checksum-Sha1: ${DSYM_CHECKSUM}" -X PUT "${URL}/${REMOTEPATH}.dSYM.zip" -T "${LOCALBASE}.dSYM.zip" +# Cleanup dsym. +rm ${LOCALBASE}.dSYM.zip +fi + + +echo -e "\n\n<<< UPLOAD COMPLETE >>>\n\n" diff --git a/Scripts/upload_remote_view_frameworks.sh b/Scripts/upload_remote_view_frameworks.sh new file mode 100644 index 0000000..c495882 --- /dev/null +++ b/Scripts/upload_remote_view_frameworks.sh @@ -0,0 +1,26 @@ +#!/bin/sh -e + +# upload_remote_view_frameworks.sh +# +# Uploads all compiled framework flavors in RemoteViewFramework to Artifactory with the SNAPSHOT classifier. This is to avoid accidently clobbering a release build of a particular version. Remove the classifier in Artificatory to make a release. +# +# Created by Hedden, Kyle Matthew on 3/2/18. +# + +FRAMEWORK_VERSION=$(cd ../MVMCore && agvtool vers -terse) +if [ $(git tag --list | grep "v${FRAMEWORK_VERSION}") ]; then + echo This version tag has already been committed! Aborting! + exit 1 +fi + +# Create new aggregate builds + +if [ -z $ARTIFACTORY_URL ]; then + ARTIFACTORY_URL="https://oneartifactoryprod.verizon.com/artifactory" +fi + +#xcodebuild -workspace "../RemoteView.xcworkspace" -scheme "RemoteViewAggregate" + +# Remote View Versions + +./upload_framework.sh $ARTIFACTORY_URL "../MVMCore/build/universal/MVMCore.framework" BPHV_MobileFirst_IOS/com/vzw/hss/myverizon/MVMCore/[VER]/MVMCore-[VER]-Debug-SNAPSHOT