blob: 9e180d840437528d424d1276e9760c44c9e0189f [file] [log] [blame]
#!/usr/bin/env bash
trap ctrl_c INT
GRIP_PID=-1
function ctrl_c() {
stop_grip
exit 0
}
function stop_grip() {
if [[ (-n "$GRIP_PID") && ("$GRIP_PID" != "-1") ]]; then
echo "Stoping grip..."
kill -9 $GRIP_PID 2>&1 > /dev/null
echo "Done."
fi
}
SCRIPT_DIR=$PWD
AUTO_COMMIT=0
function prepend () {
echo -e "$LINE$(cat README.md)" > README.md
}
function overwrite_readme () {
PROJECT_NAME="$(xpath pom.xml '/project/name/text()' | xargs)" > /dev/null 2>&1
PROJECT_DESCRIPTION="$(xpath pom.xml '/project/description/text()' | xargs)" > /dev/null 2>&1
echo "Overwriting README for $PROJECT_NAME"
printf "# $PROJECT_NAME\n\nThis module is part of the [Apache Sling](https://sling.apache.org) project.\n\n$PROJECT_DESCRIPTION" > README.md
update_badges
}
function update_badges () {
echo "Updating badges on $REPO"
REPO_NAME=${PWD##*/}
ARTIFACT_ID="$(xpath pom.xml '/project/artifactId/text()')" > /dev/null 2>&1
echo "Artifact ID: $ARTIFACT_ID"
GIT=$(git remote -v)
if [[ "$GIT" = *"https"* ]]; then
git checkout master
git remote remove origin
git remote add origin git@github.com:apache/sling-$REPO_NAME.git
git fetch
git branch --set-upstream-to=origin/master master
fi
echo "Adding standard items for $REPO_NAME"
LINE="\n\n"
prepend
STATUS=""
for module in `cat $SCRIPT_DIR/contrib-projects.txt`; do
if [[ "$module" == "$REPO_NAME" ]]; then
STATUS="contrib"
echo "Found status $STATUS..."
break
fi
done
if [[ -z $STATUS ]]; then
for module in `cat $SCRIPT_DIR/deprecated-projects.txt`; do
if [[ "$module" == "$REPO_NAME" ]]; then
STATUS="deprecated"
echo "Found status $STATUS..."
break
fi
done
fi
if [ ! -z $STATUS ]; then
LINE=" [![$STATUS](https://sling.apache.org/badges/status-$STATUS.svg)](https://github.com/apache/sling-aggregator/blob/master/docs/status/$STATUS.md)"
prepend
fi
GROUP="$(xmllint --xpath "string(/manifest/project[@path=\"$REPO_NAME\"]/@groups)" $SCRIPT_DIR/default.xml)"
if [ ! -z "$GROUP" ]; then
echo "Found group $GROUP..."
LINE=" [![${GROUP}](https://sling.apache.org/badges/group-$GROUP.svg)](https://github.com/apache/sling-aggregator/blob/master/docs/groups/$GROUP.md)"
prepend
fi
LINE=" [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://www.apache.org/licenses/LICENSE-2.0)"
prepend
if [[ ! -z $ARTIFACT_ID ]]; then
JAVADOC_BADGE_RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" https://www.javadoc.io/badge/org.apache.sling/$ARTIFACT_ID.svg)
if [[ $JAVADOC_BADGE_RESPONSE != "404" ]]; then
echo "Adding Javadoc badge for $ARTIFACT_ID"
LINE=" [![JavaDocs](https://www.javadoc.io/badge/org.apache.sling/$ARTIFACT_ID.svg)](https://www.javadoc.io/doc/org.apache.sling/$ARTIFACT_ID)"
prepend
else
echo "No published javadocs found for $ARTIFACT_ID"
fi
MAVEN_BADGE_CONTENTS=$(curl -L https://maven-badges.herokuapp.com/maven-central/org.apache.sling/$ARTIFACT_ID/badge.svg)
if [[ $MAVEN_BADGE_CONTENTS = *"unknown"* ]]; then
echo "No Maven release found for $ARTIFACT_ID"
else
echo "Adding Maven release badge for $ARTIFACT_ID"
LINE=" [![Maven Central](https://maven-badges.herokuapp.com/maven-central/org.apache.sling/$ARTIFACT_ID/badge.svg)](https://search.maven.org/#search%7Cga%7C1%7Cg%3A%22org.apache.sling%22%20a%3A%22$ARTIFACT_ID%22)"
prepend
fi
fi
COVERAGE_CONTENTS=$(curl -L https://img.shields.io/jenkins/c/https/builds.apache.org/job/Sling/job/sling-$REPO_NAME/job/master.svg)
if [[ $COVERAGE_CONTENTS = *"job or coverage not found"* ]]; then
echo "No coverage reports found for $REPO_NAME"
else
echo "Adding coverage badge for $REPO_NAME"
LINE=" [![Coverage Status](https://img.shields.io/jenkins/c/https/builds.apache.org/job/Sling/job/sling-$REPO_NAME/job/master.svg)](https://builds.apache.org/job/Sling/job/sling-$REPO_NAME/job/master)"
prepend
fi
TEST_CONTENTS=$(curl -L https://img.shields.io/jenkins/t/https/builds.apache.org/job/Sling/job/sling-$REPO_NAME/job/master.svg)
if [[ $TEST_CONTENTS = *"inaccessible"* || $TEST_CONTENTS = *"invalid"* ]]; then
echo "No tests found for $REPO_NAME"
else
echo "Adding test badge for $REPO_NAME"
LINE=" [![Test Status](https://img.shields.io/jenkins/t/https/builds.apache.org/job/Sling/job/sling-$REPO_NAME/job/master.svg)](https://builds.apache.org/job/Sling/job/sling-$REPO_NAME/job/master/test_results_analyzer/)"
prepend
fi
BUILD_RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" https://builds.apache.org/job/Sling/job/sling-$REPO_NAME/)
if [ "$BUILD_RESPONSE" != "404" ]; then
echo "Adding build badge for $REPO_NAME"
LINE=" [![Build Status](https://builds.apache.org/buildStatus/icon?job=Sling/sling-$REPO_NAME/master)](https://builds.apache.org/job/Sling/job/sling-$REPO_NAME/job/master)"
prepend
else
echo "No build found for $REPO_NAME"
fi
echo "Adding logo for $REPO_NAME"
LINE="[<img src=\"https://sling.apache.org/res/logos/sling.png\"/>](https://sling.apache.org)\n\n"
prepend
GRIP_PID=$(pgrep -f grip)
if [[ -n $GRIP_PID} ]]; then
stop_grip 2>&1 > /dev/null
fi
grip -b > /dev/null 2>&1 & > /dev/null
GRIP_PID=$(pgrep -f grip)
if [[ ${AUTO_COMMIT} -eq 1 ]]; then
RESULTS="C"
else
if [[ ! -z $ARTIFACT_ID ]]; then
echo "Commit results? (C=Commit,N=No,R=Revert,O=Overwrite README)?"
else
echo "Commit results? (C=Commit,N=No,R=Revert)?"
fi
read RESULTS
fi
if [ "$RESULTS" == "C" ]; then
git commit README.md -m "Updating badges for ${REPO_NAME}"
elif [ "$RESULTS" == "R" ]; then
git checkout -- README.md
elif [ "$RESULTS" == "O" ]; then
git checkout -- README.md
overwrite_readme
fi
stop_grip
}
function handle_repo () {
cd $REPO
if [ ! -e "README.md" ]; then
echo "No README.md found in $REPO"
elif egrep -q "https?:\/\/sling\.apache\.org\/res\/logos\/sling\.png" "README.md"; then
if [[ ${AUTO_COMMIT} -eq 1 ]]; then
OVERWRITE="Y"
else
echo "Badge already present on $REPO, overwrite (Y/N)?"
read OVERWRITE
fi
if [ "$OVERWRITE" == "Y" ]; then
sed -i -e 1,4d README.md
rm README.md-e
update_badges
else
echo "Skipping..."
fi
else
update_badges
fi
}
while getopts "o" opt; do
case "$opt" in
o)
AUTO_COMMIT=1
shift
;;
esac
done
# if [[ ${AUTO_COMMIT} -eq 1 ]]; then
# SLING_DIR=$1
# PROJECT=$2
# else
#
# fi
SLING_DIR=$1
PROJECT=$2
if [ ! -f ~/.grip/settings.py ]; then
echo "Did not find GitHub Access token file, please generate an access token on GitHub https://github.com/settings/tokens/new?scopes= and provide it below:"
read ACCESS_TOKEN
echo "PASSWORD = '$ACCESS_TOKEN'" > ~/.grip/settings.py
fi
printf "\nStarting badge update!\n\n-------------------------\n\n"
if [ -z "$SLING_DIR" ]; then
echo "Please provide the Sling Directory: ./add-badges.sh [SLING_DIR]"
exit 1
fi
if [ -z "$PROJECT" ]; then
echo "Handling all repos in $SLING_DIR"
for REPO in $SLING_DIR/*/ ; do
handle_repo
done
else
echo "Handling project $SLING_DIR/$PROJECT"
REPO=$SLING_DIR/$PROJECT
handle_repo
fi
printf "\n\nBadge Update Complete!"