2017-03-05 04:49:10 -05:00
#!/usr/bin/env bash
2017-03-05 14:43:25 -05:00
set -x -u -e -o pipefail
2017-03-05 04:49:10 -05:00
# Setup environment
readonly thisDir = $( cd $( dirname $0 ) ; pwd )
2015-11-09 18:25:00 -05:00
2017-02-01 14:51:12 -05: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 18:25:00 -05:00
function publishRepo {
2016-05-09 20:26:51 -04:00
COMPONENT = $1
2015-11-09 18:25:00 -05:00
ARTIFACTS_DIR = $2
2016-05-09 20:26:51 -04:00
BUILD_REPO = " ${ COMPONENT } -builds "
REPO_DIR = " tmp/ ${ BUILD_REPO } "
2015-11-09 18:25:00 -05:00
2017-03-06 21:03:38 -05:00
if [ -n " ${ CREATE_REPOS :- } " ] ; then
2016-12-15 14:19:21 -05: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 18:25:00 -05: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 17:52:50 -05: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 18:25:00 -05:00
)
# copy over build artifacts into the repo directory
rm -rf $REPO_DIR /*
cp -R $ARTIFACTS_DIR /* $REPO_DIR /
2016-05-25 18:37:40 -04:00
2018-04-23 14:46:02 -04:00
if [ [ ${ CI } ] ] ; then
2016-12-15 14:19:21 -05:00
(
2018-04-27 19:21:38 -04:00
# The file ~/.git_credentials is created in /.circleci/config.yml
2016-12-15 14:19:21 -05:00
cd $REPO_DIR && \
2018-04-23 14:46:02 -04:00
git config credential.helper " store --file= $HOME /.git_credentials "
2016-12-15 14:19:21 -05:00
)
2016-05-12 16:58:42 -04:00
fi
2015-11-09 18:25:00 -05:00
echo ` date` > $REPO_DIR /BUILD_INFO
echo $SHA >> $REPO_DIR /BUILD_INFO
2019-07-19 15:10:10 -04:00
echo 'This file is used by the npm/yarn_install rule to detect APF. See https://github.com/bazelbuild/rules_nodejs/issues/927' > $REPO_DIR /ANGULAR_PACKAGE
2015-11-09 18:25:00 -05:00
(
cd $REPO_DIR && \
2015-11-16 21:14:14 -05:00
git config user.name " ${ COMMITTER_USER_NAME } " && \
git config user.email " ${ COMMITTER_USER_EMAIL } " && \
2015-11-17 17:56:51 -05:00
git add --all && \
2017-08-24 15:49:58 -04:00
git commit -m " ${ COMMIT_MSG } " --quiet && \
2016-05-09 20:26:51 -04:00
git tag " ${ BUILD_VER } " && \
2016-12-20 17:52:50 -05:00
git push origin " ${ BRANCH } " --tags --force
2015-11-09 18:25:00 -05:00
)
}
2016-05-09 20:26:51 -04:00
# Publish all individual packages from packages-dist.
2016-12-15 14:19:21 -05:00
function publishPackages {
2017-01-19 17:25:44 -05:00
GIT_SCHEME = $1
PKGS_DIST = $2
BRANCH = $3
2018-09-28 09:11:07 -04:00
BUILD_VER = $4
2017-01-19 17:25:44 -05:00
2017-08-24 15:49:58 -04:00
for dir in $PKGS_DIST /*/
2016-05-09 20:26:51 -04:00
do
2021-04-03 09:52:53 -04:00
if [ [ ! -f " $dir /package.json " ] ] ; then
# Only publish directories that contain a `package.json` file.
echo " Skipping $dir , it does not contain a package to be published. "
continue
fi
2016-05-09 20:26:51 -04:00
COMPONENT = " $( basename ${ dir } ) "
2016-03-04 22:16:12 -05:00
2016-05-09 20:26:51 -04:00
# Replace _ with - in component name.
COMPONENT = " ${ COMPONENT //_/- } "
JS_BUILD_ARTIFACTS_DIR = " ${ dir } "
2016-03-04 22:16:12 -05:00
2017-01-19 17:25:44 -05:00
if [ [ " $GIT_SCHEME " = = "ssh" ] ] ; then
2016-12-15 14:19:21 -05:00
REPO_URL = " git@github.com: ${ ORG } / ${ COMPONENT } -builds.git "
2017-01-19 17:25:44 -05:00
elif [ [ " $GIT_SCHEME " = = "http" ] ] ; then
2016-12-15 14:19:21 -05:00
REPO_URL = " https://github.com/ ${ ORG } / ${ COMPONENT } -builds.git "
else
2017-01-19 17:25:44 -05:00
die " Don't have a way to publish to scheme $GIT_SCHEME "
2016-12-15 14:19:21 -05:00
fi
2016-03-04 22:16:12 -05:00
2016-05-09 20:26:51 -04:00
publishRepo " ${ COMPONENT } " " ${ JS_BUILD_ARTIFACTS_DIR } "
done
2015-11-18 01:56:41 -05:00
2015-11-09 18:25:00 -05:00
echo "Finished publishing build artifacts"
2016-12-15 14:19:21 -05:00
}
2018-06-05 14:38:46 -04:00
function publishAllBuilds( ) {
GIT_SCHEME = " $1 "
2018-09-28 09:11:07 -04:00
SHA = ` git rev-parse HEAD`
COMMIT_MSG = ` git log --oneline -1`
COMMITTER_USER_NAME = ` git --no-pager show -s --format= '%cN' HEAD`
COMMITTER_USER_EMAIL = ` git --no-pager show -s --format= '%cE' HEAD`
local shortSha = ` git rev-parse --short HEAD`
local latestTag = ` getLatestTag`
publishPackages $GIT_SCHEME dist/packages-dist $CUR_BRANCH " ${ latestTag } + ${ shortSha } "
2018-10-23 17:43:17 -04:00
# don't publish ivy builds on non-master branch
if [ [ " ${ CI_BRANCH - } " = = "master" ] ] ; then
publishPackages $GIT_SCHEME dist/packages-dist-ivy-aot " ${ CUR_BRANCH } -ivy-aot " " ${ latestTag } -ivy-aot+ ${ shortSha } "
fi
2018-06-05 14:38:46 -04:00
}
2017-03-23 01:50:12 -04:00
# See docs/DEVELOPER.md for help
2018-10-17 12:19:15 -04:00
CUR_BRANCH = ${ CI_BRANCH :- $( git symbolic-ref --short HEAD) }
2016-12-15 14:19:21 -05:00
if [ $# -gt 0 ] ; then
ORG = $1
2018-06-05 14:38:46 -04:00
publishAllBuilds "ssh"
2018-04-27 19:21:38 -04:00
else
2016-12-15 14:19:21 -05:00
ORG = "angular"
2018-06-05 14:38:46 -04:00
publishAllBuilds "http"
2015-11-09 18:25:00 -05:00
fi