Files
angular__angular/scripts/deploy/publish-build-artifacts.sh
T
Paul Gschwendtner 3940fab732 build: use version placeholder in package configs (#6112)
Recently the version placeholders had been replaced with hardcoded versions because it was necessary to be able to release the CDK.

But now the version placeholders are replaced in every file and therefore they can be used instead of the hardcoded values.
2017-07-31 11:22:40 -07:00

90 lines
2.9 KiB
Bash
Executable File

#!/bin/bash
# Script to publish the build artifacts to a GitHub repository.
# Builds will be automatically published once new changes are made to the repository.
# The script should immediately exit if any command in the script fails.
set -e
# Go to the project root directory
cd $(dirname ${0})/../..
if [ -z ${MATERIAL2_BUILDS_TOKEN} ]; then
echo "Error: No access token for GitHub could be found." \
"Please set the environment variable 'MATERIAL2_BUILDS_TOKEN'."
exit 1
fi
# Material packages that need to published.
PACKAGES=(cdk material)
REPOSITORIES=(cdk-builds material2-builds)
# Command line arguments.
COMMAND_ARGS=${*}
# Function to publish artifacts of a package to Github.
# @param ${1} Name of the package
# @param ${2} Repository name of the package.
publishPackage() {
packageName=${1}
packageRepo=${2}
buildDir="dist/releases/${packageName}"
buildVersion=$(node -pe "require('./package.json').version")
commitSha=$(git rev-parse --short HEAD)
commitAuthorName=$(git --no-pager show -s --format='%an' HEAD)
commitAuthorEmail=$(git --no-pager show -s --format='%ae' HEAD)
commitMessage=$(git log --oneline -n 1)
repoUrl="https://github.com/angular/${packageRepo}.git"
repoDir="tmp/${packageRepo}"
if [[ ! ${COMMAND_ARGS} == *--no-build* ]]; then
# Create a release of the current repository.
$(npm bin)/gulp ${packageName}:build-release:clean
fi
# Prepare cloning the builds repository
rm -rf ${repoDir}
mkdir -p ${repoDir}
# Clone the repository and only fetch the last commit to download less unused data.
git clone ${repoUrl} ${repoDir} --depth 1
# Copy the build files to the repository
rm -rf ${repoDir}/*
cp -r ${buildDir}/* ${repoDir}
# Create the build commit and push the changes to the repository.
cd ${repoDir}
# Replace the version in every file recursively with a more specific version that also includes
# the SHA of the current build job. Normally this "sed" call would just replace the version
# placeholder, but the version placeholders have been replaced by the release task already.
sed -i "s/${buildVersion}/${buildVersion}-${commitSha}/g" $(find . -type f)
# Prepare Git for pushing the artifacts to the repository.
git config user.name "${commitAuthorName}"
git config user.email "${commitAuthorEmail}"
git config credential.helper "store --file=.git/credentials"
echo "https://${MATERIAL2_BUILDS_TOKEN}:@github.com" > .git/credentials
git add -A
git commit --allow-empty -m "${commitMessage}"
git tag "${buildVersion}-${commitSha}"
git push origin master --tags
echo "Published package artifacts for ${packageName}#${commitSha}."
}
for ((i = 0; i < ${#PACKAGES[@]}; i++)); do
packageName=${PACKAGES[${i}]}
packageRepo=${REPOSITORIES[${i}]}
# Publish artifacts of the current package. Run publishing in a sub-shell to avoid working
# directory changes.
(publishPackage ${packageName} ${packageRepo})
done