1
0
mirror of https://github.com/openshift/openshift-docs.git synced 2026-02-07 00:48:01 +01:00
Files
openshift-docs/scripts/push_to_netlify.sh
2021-01-20 17:30:35 +10:00

160 lines
6.4 KiB
Bash

#!/bin/bash
set -ev
NC='\033[0m' # No Color
#RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
BLUE='\033[0;34m'
UPDATED_BRANCH_NAME="${PR_BRANCH//./-}" #converts all dots to dashes in URL's (fixes incorrect URLs in comments)
PREVIEW_URL=https://${UPDATED_BRANCH_NAME}--ocpdocs.netlify.com
COMMENT_FOUND=''
echo -e "${YELLOW}==== CURRENT BRANCH ====${NC}"
git rev-parse --abbrev-ref HEAD
echo -e "${YELLOW}==== RESETTING REMOTES ====${NC}"
git remote rm origin
git remote add origin https://"${GH_TOKEN}"@github.com/openshift-docs-preview-bot/openshift-docs.git > /dev/null 2>&1
echo -e "${YELLOW}==== SETTING GIT USER ====${NC}"
git config --global user.email "travis@travis-ci.org"
git config --global user.name "Travis CI"
echo -e "${YELLOW}==== SETTING UPSTREAM ====${NC}"
git remote add upstream git://github.com/openshift/openshift-docs
echo -e "${YELLOW}==== SETTING MASTER BRANCH ====${NC}"
git fetch origin master
git rev-parse master
git fetch upstream master
git rev-parse upstream/master
#if [ "$(git rev-parse master)" != "$(git rev-parse upstream/master)" ]
#then
# echo -e "${YELLOW}==== PUSHING UPSTRAM CHANGES TO MASTER ====${NC}"
# git stash
# git checkout master
# git fetch upstream master
# git rebase upstream/master
# git push -f origin master
#else
# echo -e "${GREEN}==== MASTER UP TO DATE WITH UPSTREAM MASTER ====${NC}"
#fi
#set the remote to user repository
echo -e "${YELLOW}==== SETTING REMOTE FOR ${BLUE}$REPO_NAME:$PR_BRANCH${YELLOW} ====${NC}"
git remote add userrepo https://github.com/"$REPO_NAME".git
#add branch to remote
echo -e "${YELLOW}==== SETTING REMOTE BRANCH TRACKING ====${NC}"
git remote set-branches --add userrepo "$PR_BRANCH"
#fetch updated changes
echo -e "${YELLOW}==== FETCHNING the BRANCH ${BLUE}$PR_BRANCH ====${NC}"
git fetch userrepo "$PR_BRANCH"
#checkout branch
echo -e "${YELLOW}==== Checking out ${BLUE}$PR_BRANCH ====${NC}"
git checkout -b preview_branch userrepo/"$PR_BRANCH"
echo -e "${YELLOW}==== CHANGING NAME OF THE BRANCH ====${NC}"
git branch -m "$PR_BRANCH"
echo -e "${YELLOW}==== PUSHING TO GITHUB ====${NC}"
git push origin -f "$PR_BRANCH" --quiet
# This logic fails when a user uses same branch names for different PRs
# echo -e "${YELLOW}==== CHECKING IF BRANCH ALREADY EXIST ====${NC}"
# if curl --output /dev/null --silent --head --fail "$PREVIEW_URL"; then
# echo -e "${GREEN}Branch exists. No new comment on the PR.${NC}"
# NEW_BRANCH=false
# else
# echo -e "${GREEN}Branch does not exist. Add a new comment on the PR.${NC}"
# NEW_BRANCH=true
# fi
# Updated logic below, it checks if there is already a comment from preview bot,
echo -e "${YELLOW}==== CHECKING PREVIEW BUILD COMMENTS ====${NC}"
#get all users who commented in an array
PREVIEW_BOT_COMMENTS=$(curl -H "Authorization: token ${GH_BOT_TOKEN}" https://api.github.com/repos/${BASE_REPO}/issues/${PR_NUMBER}/comments | jq '.[].user.login' | tr -d '"')
echo "-------------------------------------------------COMMENT AUTHOR-----------------------------------------------------"
echo "${PREVIEW_BOT_COMMENTS}"
echo "--------------------------------------------------------------------------------------------------------------------"
if [[ " ${PREVIEW_BOT_COMMENTS[@]} " =~ "openshift-docs-preview-bot" ]]; then
echo -e "${GREEN}Preview comment exists. No new comment on the PR.${NC}"
COMMENT_FOUND=true
else
echo -e "${GREEN}Preview comment does not exist. Add a new comment on the PR.${NC}"
COMMENT_FOUND=false
fi
echo -e "$YELLOW==== REMOVING TRAVIS CI BUILD ERROR COMMENTS IF ANY ====${NC}"
COMMENTS_JSON=$(curl -H "Authorization: token ${GH_BOT_TOKEN}" "https://api.github.com/repos/${BASE_REPO}/issues/${PR_NUMBER}/comments" | jq '.')
mapfile -t BOT_COMMENTS < <(echo "${COMMENTS_JSON}" | jq '.[] | select(.user.login=="openshift-docs-bot") | .url')
if [ ${#BOT_COMMENTS[@]} -eq 0 ]; then
echo -e "${GREEN} No build failed comments.${NC}"
else
for COMMENT_URL in "${BOT_COMMENTS[@]}"
do
curl -H "Authorization: token ${GH_BOT_TOKEN}" -X "DELETE" "${COMMENT_URL}"
echo -e "${GREEN} Deleted comment ${BLUE}${COMMENT_URL}${NC}"
done
fi
echo -e "${YELLOW}==== FINDING MODIFIED FILES ====${NC}"
COMMIT_HASH="$(git rev-parse @~)"
mapfile -t FILES_CHANGED < <(git diff --name-only "$COMMIT_HASH")
echo -e "${YELLOW}==== REFERENCE CHECK ====${NC}"
for i in "${FILES_CHANGED[@]}"
do
#only do this for adoc files
if [ "${i: -5}" == ".adoc" ] ; then
echo -e "${BLUE}******** CHECKING REFERENCES for ${i} ********${NC}"
node checkrefs.js "${i}"
echo $'******** DONE ********\n'
fi
done
if [[ "$COMMENT_FOUND" = false ]]; then
#FILES_CHANGED=$(git diff --name-only HEAD HEAD~"${COMMITS_IN_PR}")
COMMENT_DATA1='The preview will be available shortly at: \n'
COMMENT_DATA2=''
#only list the individual urls if modified files is upto 5
if [ ${#FILES_CHANGED[@]} -lt 6 ] ; then
for i in "${FILES_CHANGED[@]}"
do
#only do this for adoc files
if [ "${i: -5}" == ".adoc" ] ; then
#ignore adoc files which are modules or topics
if [[ ${i} != *"topic"* || ${i} != *"module"* ]] ; then
FILE_NAME="${i::-5}"
CHECK_DOCS_URL="https://docs.openshift.com/container-platform/3.9/$FILE_NAME.html"
if curl --output /dev/null --silent --head --fail "$CHECK_DOCS_URL"; then
FINAL_URL="https://${PR_BRANCH}--ocpdocs.netlify.com/openshift-enterprise/latest/$FILE_NAME.html"
#COMMENT_DATA2="- *$i*: ${COMMENT_DATA2}${FINAL_URL}\\n"
echo "- *$i*: ${FINAL_URL}" >> comments.txt
fi
fi
fi
done
fi
echo -e "${YELLOW}ADDING COMMENT on PR${NC}"
#if there is a comment file show individual file URLs otherwise show the main URL
if [ ! -f comments.txt ]; then
COMMENT_DATA="${COMMENT_DATA1}- https://${PR_BRANCH}--ocpdocs.netlify.com/"
else
COMMENT_DATA2=$(cat comments.txt)
COMMENT_DATA="${COMMENT_DATA1}${COMMENT_DATA2}"
fi
echo -e "\033[31m COMMENT DATA: $COMMENT_DATA"
curl -H "Authorization: token ${GH_TOKEN}" -X POST -d "{\"body\": \"${COMMENT_DATA}\"}" "https://api.github.com/repos/${BASE_REPO}/issues/${PR_NUMBER}/comments"
fi
echo -e "${GREEN}DONE!${NC}"