| 
									
										
										
										
											2017-03-05 01:49:10 -08:00
										 |  |  | #!/usr/bin/env bash
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 11:43:25 -08:00
										 |  |  | set -x -u -e -o pipefail | 
					
						
							| 
									
										
										
										
											2017-03-05 01:49:10 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | # Setup environment | 
					
						
							|  |  |  | readonly thisDir=$(cd $(dirname $0); pwd) | 
					
						
							|  |  |  | source ${thisDir}/_travis-fold.sh | 
					
						
							| 
									
										
										
										
											2015-11-09 15:25:00 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-01 21:51:12 +02:00
										 |  |  | # Find the most recent tag that is reachable from the current commit. | 
					
						
							|  |  |  | # This is shallow clone of the repo, so we might need to fetch more commits to | 
					
						
							|  |  |  | # find the tag. | 
					
						
							|  |  |  | function getLatestTag { | 
					
						
							|  |  |  |   local depth=`git log --oneline | wc -l` | 
					
						
							|  |  |  |   local latestTag=`git describe --tags --abbrev=0 || echo NOT_FOUND` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   while [ "$latestTag" == "NOT_FOUND" ]; do | 
					
						
							|  |  |  |     # Avoid infinite loop. | 
					
						
							|  |  |  |     if [ "$depth" -gt "1000" ]; then | 
					
						
							|  |  |  |       echo "Error: Unable to find the latest tag." 1>&2 | 
					
						
							|  |  |  |       exit 1; | 
					
						
							|  |  |  |     fi | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # Increase the clone depth and look for a tag. | 
					
						
							|  |  |  |     depth=$((depth + 50)) | 
					
						
							|  |  |  |     git fetch --depth=$depth | 
					
						
							|  |  |  |     latestTag=`git describe --tags --abbrev=0 || echo NOT_FOUND` | 
					
						
							|  |  |  |   done | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   echo $latestTag; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-09 15:25:00 -08:00
										 |  |  | function publishRepo { | 
					
						
							| 
									
										
										
										
											2016-05-09 17:26:51 -07:00
										 |  |  |   COMPONENT=$1 | 
					
						
							| 
									
										
										
										
											2015-11-09 15:25:00 -08:00
										 |  |  |   ARTIFACTS_DIR=$2 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-09 17:26:51 -07:00
										 |  |  |   BUILD_REPO="${COMPONENT}-builds" | 
					
						
							|  |  |  |   REPO_DIR="tmp/${BUILD_REPO}" | 
					
						
							| 
									
										
										
										
											2015-11-09 15:25:00 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-06 18:03:38 -08:00
										 |  |  |   if [ -n "${CREATE_REPOS:-}" ]; then | 
					
						
							| 
									
										
										
										
											2016-12-15 11:19:21 -08:00
										 |  |  |     curl -u "$ORG:$TOKEN" https://api.github.com/user/repos \
 | 
					
						
							|  |  |  |          -d '{"name":"'$BUILD_REPO'", "auto_init": true}' | 
					
						
							|  |  |  |   fi | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   echo "Pushing build artifacts to ${ORG}/${BUILD_REPO}" | 
					
						
							| 
									
										
										
										
											2015-11-09 15:25:00 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   # create local repo folder and clone build repo into it | 
					
						
							|  |  |  |   rm -rf $REPO_DIR | 
					
						
							|  |  |  |   mkdir -p $REPO_DIR | 
					
						
							|  |  |  |   ( | 
					
						
							|  |  |  |     cd $REPO_DIR && \
 | 
					
						
							|  |  |  |     git init && \
 | 
					
						
							|  |  |  |     git remote add origin $REPO_URL && \
 | 
					
						
							| 
									
										
										
										
											2016-12-20 22:52:50 +00:00
										 |  |  |     # use the remote branch if it exists | 
					
						
							|  |  |  |     if git ls-remote --exit-code origin ${BRANCH}; then | 
					
						
							|  |  |  |       git fetch origin ${BRANCH} --depth=1 && \
 | 
					
						
							|  |  |  |       git checkout origin/${BRANCH} | 
					
						
							|  |  |  |     fi | 
					
						
							|  |  |  |     git checkout -b "${BRANCH}" | 
					
						
							| 
									
										
										
										
											2015-11-09 15:25:00 -08:00
										 |  |  |   ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   # copy over build artifacts into the repo directory | 
					
						
							|  |  |  |   rm -rf $REPO_DIR/* | 
					
						
							|  |  |  |   cp -R $ARTIFACTS_DIR/* $REPO_DIR/ | 
					
						
							| 
									
										
										
										
											2016-05-25 15:37:40 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-20 22:52:50 +00:00
										 |  |  |   # Replace $$ANGULAR_VERSION$$ with the build version. | 
					
						
							|  |  |  |   BUILD_VER="${LATEST_TAG}+${SHORT_SHA}" | 
					
						
							| 
									
										
										
										
											2016-05-12 13:58:42 -07:00
										 |  |  |   if [[ ${TRAVIS} ]]; then | 
					
						
							|  |  |  |     find $REPO_DIR/ -type f -name package.json -print0 | xargs -0 sed -i "s/\\\$\\\$ANGULAR_VERSION\\\$\\\$/${BUILD_VER}/g" | 
					
						
							| 
									
										
										
										
											2016-08-31 18:58:59 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # Find umd.js and umd.min.js | 
					
						
							|  |  |  |     UMD_FILES=$(find $REPO_DIR/ -type f -name "*.umd*.js" -print) | 
					
						
							|  |  |  |     for UMD_FILE in ${UMD_FILES}; do | 
					
						
							|  |  |  |       sed -i "s/\\\$\\\$ANGULAR_VERSION\\\$\\\$/${BUILD_VER}/g" ${UMD_FILE} | 
					
						
							|  |  |  |     done | 
					
						
							| 
									
										
										
										
											2016-12-15 11:19:21 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     ( | 
					
						
							|  |  |  |       cd $REPO_DIR && \
 | 
					
						
							|  |  |  |       git config credential.helper "store --file=.git/credentials" && \
 | 
					
						
							| 
									
										
										
										
											2017-03-13 14:43:52 -07:00
										 |  |  |       # SECURITY CRITICAL: DO NOT use shell to expand vars since it could be logged and leaked. | 
					
						
							| 
									
										
										
										
											2017-03-14 11:49:33 -07:00
										 |  |  |       node -e "console.log('https://'+process.env.GITHUB_TOKEN_ANGULAR+':@github.com')" > .git/credentials | 
					
						
							| 
									
										
										
										
											2016-12-15 11:19:21 -08:00
										 |  |  |     ) | 
					
						
							| 
									
										
										
										
											2016-05-12 13:58:42 -07:00
										 |  |  |   fi | 
					
						
							| 
									
										
										
										
											2015-11-09 15:25:00 -08:00
										 |  |  |   echo `date` > $REPO_DIR/BUILD_INFO | 
					
						
							|  |  |  |   echo $SHA >> $REPO_DIR/BUILD_INFO | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   ( | 
					
						
							|  |  |  |     cd $REPO_DIR && \
 | 
					
						
							| 
									
										
										
										
											2015-11-16 18:14:14 -08:00
										 |  |  |     git config user.name "${COMMITTER_USER_NAME}" && \
 | 
					
						
							|  |  |  |     git config user.email "${COMMITTER_USER_EMAIL}" && \
 | 
					
						
							| 
									
										
										
										
											2015-11-17 14:56:51 -08:00
										 |  |  |     git add --all && \
 | 
					
						
							| 
									
										
										
										
											2017-08-24 12:49:58 -07:00
										 |  |  |     git commit -m "${COMMIT_MSG}" --quiet && \
 | 
					
						
							| 
									
										
										
										
											2016-05-09 17:26:51 -07:00
										 |  |  |     git tag "${BUILD_VER}" && \
 | 
					
						
							| 
									
										
										
										
											2016-12-20 22:52:50 +00:00
										 |  |  |     git push origin "${BRANCH}" --tags --force | 
					
						
							| 
									
										
										
										
											2015-11-09 15:25:00 -08:00
										 |  |  |   ) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-09 17:26:51 -07:00
										 |  |  | # Publish all individual packages from packages-dist. | 
					
						
							| 
									
										
										
										
											2016-12-15 11:19:21 -08:00
										 |  |  | function publishPackages { | 
					
						
							| 
									
										
										
										
											2017-01-19 14:25:44 -08:00
										 |  |  |   GIT_SCHEME=$1 | 
					
						
							|  |  |  |   PKGS_DIST=$2 | 
					
						
							|  |  |  |   BRANCH=$3 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-24 12:49:58 -07:00
										 |  |  |   for dir in $PKGS_DIST/*/ | 
					
						
							| 
									
										
										
										
											2016-05-09 17:26:51 -07:00
										 |  |  |   do | 
					
						
							|  |  |  |     COMPONENT="$(basename ${dir})" | 
					
						
							| 
									
										
										
										
											2016-03-04 19:16:12 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-09 17:26:51 -07:00
										 |  |  |     # Replace _ with - in component name. | 
					
						
							|  |  |  |     COMPONENT="${COMPONENT//_/-}" | 
					
						
							|  |  |  |     JS_BUILD_ARTIFACTS_DIR="${dir}" | 
					
						
							| 
									
										
										
										
											2016-03-04 19:16:12 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-19 14:25:44 -08:00
										 |  |  |     if [[ "$GIT_SCHEME" == "ssh" ]]; then | 
					
						
							| 
									
										
										
										
											2016-12-15 11:19:21 -08:00
										 |  |  |       REPO_URL="git@github.com:${ORG}/${COMPONENT}-builds.git" | 
					
						
							| 
									
										
										
										
											2017-01-19 14:25:44 -08:00
										 |  |  |     elif [[ "$GIT_SCHEME" == "http" ]]; then | 
					
						
							| 
									
										
										
										
											2016-12-15 11:19:21 -08:00
										 |  |  |       REPO_URL="https://github.com/${ORG}/${COMPONENT}-builds.git" | 
					
						
							|  |  |  |     else | 
					
						
							| 
									
										
										
										
											2017-01-19 14:25:44 -08:00
										 |  |  |       die "Don't have a way to publish to scheme $GIT_SCHEME" | 
					
						
							| 
									
										
										
										
											2016-12-15 11:19:21 -08:00
										 |  |  |     fi | 
					
						
							| 
									
										
										
										
											2016-05-09 17:26:51 -07:00
										 |  |  |     SHA=`git rev-parse HEAD` | 
					
						
							|  |  |  |     SHORT_SHA=`git rev-parse --short HEAD` | 
					
						
							| 
									
										
										
										
											2017-03-05 11:53:45 -08:00
										 |  |  |     COMMIT_MSG=`git log --oneline -1` | 
					
						
							| 
									
										
										
										
											2016-05-09 17:26:51 -07:00
										 |  |  |     COMMITTER_USER_NAME=`git --no-pager show -s --format='%cN' HEAD` | 
					
						
							|  |  |  |     COMMITTER_USER_EMAIL=`git --no-pager show -s --format='%cE' HEAD` | 
					
						
							| 
									
										
										
										
											2017-02-01 21:51:12 +02:00
										 |  |  |     LATEST_TAG=`getLatestTag` | 
					
						
							| 
									
										
										
										
											2016-03-04 19:16:12 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-09 17:26:51 -07:00
										 |  |  |     publishRepo "${COMPONENT}" "${JS_BUILD_ARTIFACTS_DIR}" | 
					
						
							|  |  |  |   done | 
					
						
							| 
									
										
										
										
											2015-11-17 22:56:41 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-09 15:25:00 -08:00
										 |  |  |   echo "Finished publishing build artifacts" | 
					
						
							| 
									
										
										
										
											2016-12-15 11:19:21 -08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-22 22:50:12 -07:00
										 |  |  | # See docs/DEVELOPER.md for help | 
					
						
							| 
									
										
										
										
											2017-01-19 14:25:44 -08:00
										 |  |  | CUR_BRANCH=${TRAVIS_BRANCH:-$(git symbolic-ref --short HEAD)} | 
					
						
							| 
									
										
										
										
											2016-12-15 11:19:21 -08:00
										 |  |  | if [ $# -gt 0 ]; then | 
					
						
							|  |  |  |   ORG=$1 | 
					
						
							| 
									
										
										
										
											2017-01-19 14:25:44 -08:00
										 |  |  |   publishPackages "ssh" dist/packages-dist $CUR_BRANCH | 
					
						
							|  |  |  |   if [[ -e dist/packages-dist-es2015 ]]; then | 
					
						
							|  |  |  |     publishPackages "ssh" dist/packages-dist-es2015 ${CUR_BRANCH}-es2015 | 
					
						
							|  |  |  |   fi | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-15 11:19:21 -08:00
										 |  |  | elif [[ \
 | 
					
						
							|  |  |  |     "$TRAVIS_REPO_SLUG" == "angular/angular" && \
 | 
					
						
							|  |  |  |     "$TRAVIS_PULL_REQUEST" == "false" && \
 | 
					
						
							|  |  |  |     "$CI_MODE" == "e2e" ]]; then | 
					
						
							|  |  |  |   ORG="angular" | 
					
						
							| 
									
										
										
										
											2017-01-19 14:25:44 -08:00
										 |  |  |   publishPackages "http" dist/packages-dist $CUR_BRANCH | 
					
						
							|  |  |  |   if [[ -e dist/packages-dist-es2015 ]]; then | 
					
						
							|  |  |  |     publishPackages "http" dist/packages-dist-es2015 ${CUR_BRANCH}-es2015 | 
					
						
							|  |  |  |   fi | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-04 19:16:12 -08:00
										 |  |  | else | 
					
						
							| 
									
										
										
										
											2017-01-19 14:25:44 -08:00
										 |  |  |   echo "Not building the upstream/${CUR_BRANCH} branch, build artifacts won't be published." | 
					
						
							| 
									
										
										
										
											2015-11-09 15:25:00 -08:00
										 |  |  | fi |