| #!/bin/bash -lex | |
| # | |
| # Copyright (c) 2019 Oracle and/or its affiliates. All rights reserved. | |
| # | |
| # This program and the accompanying materials are made available under the | |
| # terms of the Eclipse Public License v. 2.0, which is available at | |
| # http://www.eclipse.org/legal/epl-2.0. | |
| # | |
| # This Source Code may also be made available under the following Secondary | |
| # Licenses when the conditions for such availability set forth in the | |
| # Eclipse Public License v. 2.0 are satisfied: GNU General Public License, | |
| # version 2 with the GNU Classpath Exception, which is available at | |
| # https://www.gnu.org/software/classpath/license.html. | |
| # | |
| # SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 | |
| # | |
| #Environment paths for Jenkins | |
| #TOOLS_PREFIX=/opt/tools | |
| #JAVA_PREFIX=/opt/tools/java/oracle | |
| #MVN_HOME=/opt/tools/apache-maven/latest | |
| #JAVA_HOME=/opt/tools/java/oracle/jdk-8/latest | |
| #PATH=/opt/tools/apache-maven/latest/bin:/opt/tools/java/oracle/jdk-8/latest/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin | |
| # IMPORTANT - modify environmen.sh before running the script. | |
| source environment.sh | |
| #Script REQUIRES Curl, Perl, Python, Git and Maven (3.6.0) to be installed on running host. | |
| #Configures and moves documentation to proper locations, | |
| #Generates release notes by milestone (same as version number) | |
| #Moves release notes to proper location | |
| #Sends release notes to GitHub (rest api) | |
| #Commits all modifications to proper repositories (web and src-web) | |
| DIRS="$RELEASE_VERSION" | |
| if $UPDATE_LATEST; | |
| then | |
| DIRS="latest $DIRS" | |
| fi | |
| #export PATH=/opt/csw/bin:$PATH | |
| WEB_DIR=$WORKSPACE/target/jersey-web | |
| WEB_SRC_DIR=$WORKSPACE/target/jersey-web-src | |
| function copyDocs { | |
| APIDOCS_DIR=$WEB_DIR/apidocs/$1 | |
| DOCS_DIR=$WEB_DIR/documentation/$1 | |
| # | |
| # API docs | |
| # | |
| if test ! -e $APIDOCS_DIR ; then | |
| mkdir -p $APIDOCS_DIR | |
| fi | |
| cd $APIDOCS_DIR | |
| rm -rf jersey || true | |
| cp -R $WORKSPACE/target/site/apidocs ./jersey | |
| # | |
| # user guide | |
| # | |
| rm -rf $DOCS_DIR || true | |
| mkdir -p $DOCS_DIR | |
| cp -r $WORKSPACE/docs/target/docbook/index/* $DOCS_DIR | |
| rm $DOCS_DIR/*.fo || true | |
| } | |
| if test -e $WEB_DIR ; then | |
| rm -rf $WEB_DIR | |
| fi | |
| # would couse shallow reject: git clone --depth 1 $WEBSITE_URL $WEB_DIR | |
| git clone $WEBSITE_URL $WEB_DIR | |
| git clone $WEBSITE_SOURCE_REPO $WEB_SRC_DIR | |
| cd $WEB_DIR | |
| for dir in $DIRS; do | |
| copyDocs $dir | |
| done | |
| cd $WEB_DIR | |
| git config --local user.email "jersey-bot@eclipse.org" | |
| git config --local user.name "jersey-bot" | |
| git add -A . | |
| git diff --cached --exit-code || git commit -m "[jenkins] automatic javadoc and documentation update [$RELEASE_VERSION @ $BRANCH_SPECIFIER]" | |
| # [1] update site | |
| mvn versions:set -DnewVersion=$RELEASE_VERSION -DgenerateBackupPoms=false -f $WEB_SRC_DIR/pom.xml | |
| # [2] update scm.md | |
| perl -0777 -i' ' -pe 's@(<td>master</td>.*?</tr>)@$1\n'\ | |
| ' <tr>\n'\ | |
| ' <td>'$RELEASE_VERSION'</td>\n'\ | |
| ' <td>This is the Jersey '$RELEASE_VERSION' release tag. A sustaining branch for Jersey '$RELEASE_VERSION'\n'\ | |
| ' release will be created from the tag if necessary.</td>\n'\ | |
| ' </tr>@igs' \ | |
| $WEB_SRC_DIR/src/site/markdown/scm.md | |
| ### [] run post-site | |
| ##mvn clean post-site -f $WEB_SRC_DIR/pom.xml | |
| mvn clean site -f $WEB_SRC_DIR/pom.xml | |
| cp -r $WEB_SRC_DIR/target/site/* . | |
| cp -a $WEB_SRC_DIR/src/main/templates/release-note.html release-notes/${RELEASE_VERSION}.html | |
| # [] add pull requests to the release notes | |
| MILESTONE_ID=$(curl 'https://api.github.com/repos/eclipse-ee4j/jersey/milestones' | python -c " | |
| import json,sys,os | |
| obj=json.load(sys.stdin) | |
| [sys.stdout.write(str(a['number']) + os.linesep if a['title']=='"$RELEASE_VERSION"' else '') for a in obj] | |
| ") | |
| PULL_REQUESTS="" | |
| [ "$MILESTONE_ID" -eq "$MILESTONE_ID" ] && PULL_REQUESTS=$(curl 'https://api.github.com/repos/eclipse-ee4j/jersey/issues?state=closed&milestone='$MILESTONE_ID | python -c " | |
| import json,sys,os; | |
| obj=json.load(sys.stdin); | |
| output = '' | |
| for a in obj: | |
| if 'pull_request' in a: | |
| output += ' <li>[<a href=\'{0}\'>Pull {1}</a>] - {2}</li>\n'.format(str(a['pull_request']['html_url']), str(a['number']), str(a['title'])) | |
| else: | |
| output += ' <li>[<a href=\'{0}\'>Issue {1}</a>] - {2}</li>\n'.format(str(a['html_url']), str(a['number']), str(a['title'])) | |
| if output != '': | |
| print '<h2>Issues and Pull Requests</h2>\n<ul>\n{}</ul>'.format(output) | |
| ") | |
| if [ "$PULL_REQUESTS" != "" ]; then | |
| perl -0777 -i' ' -pe 's|<!-- PULL_REQUESTS_PLACEHOLDER -->|'"$(printf '%s' "$PULL_REQUESTS" | sed -e 's/[\|$@&]/\\&/g')"'|igs' release-notes/$RELEASE_VERSION.html | |
| fi | |
| # [] update the template with the current release | |
| perl -0777 -i' ' -pe 's@(<h2>Previous releases</h2>.*?<ul>)@$1\n'\ | |
| ' <li><a href="'$RELEASE_VERSION'.html">Jersey '$RELEASE_VERSION' Release Notes</a></li>@igs' \ | |
| $WEB_SRC_DIR/src/main/templates/release-note.html | |
| git add -A . | |
| git diff --cached --exit-code || git commit -m "[jenkins] automatic project-info and release notes update [$RELEASE_VERSION @ $BRANCH_SPECIFIER]" | |
| GITHUB_RELEASE_NOTES='{ | |
| "tag_name": "'"$RELEASE_VERSION"'", | |
| "name": "'"$RELEASE_VERSION"'", | |
| "body": "'"$(printf '%s' "$PULL_REQUESTS" | sed -e 's/["]/\\&/g' | perl -pe 's/\n/\\n/')"'" | |
| }' | |
| echo "Github release notes: $GITHUB_RELEASE_NOTES" | |
| if [ "$DRY_RUN" = "false" ]; then | |
| echo "Publishing release on Github" | |
| curl -u "${USER_NAME}:${USER_TOKEN}" -X POST -vvv --data "$GITHUB_RELEASE_NOTES" \ | |
| -H "Content-type: application/json" https://api.github.com/repos/eclipse-ee4j/jersey/releases | |
| echo "Pushing Web sources to $WEBSITE_URL" | |
| #git push origin master | |
| else | |
| echo "Dry run .. not pushing to the master" | |
| #git push origin master --dry-run | |
| fi |