From f2152f6d71850cca32071774b4dc51d00f27782c Mon Sep 17 00:00:00 2001 From: Thanh Ha Date: Fri, 19 May 2017 21:39:35 -0400 Subject: [PATCH] Add version bump job Create a job that performs version bumping activities via Jenkins. This job: 1) Version Bumps by x.y.(z+1) on release branch 2) Runs a Maven Build and deploys the bumped artifacts to Nexus 3) Pushes the patches to Gerrit This patch also archives relevant log information and creates reproducible patches in case manual intervention is necessary. Change-Id: Ic03787c6ced6796db067832b0a7c8218e457b216 Signed-off-by: Thanh Ha --- jjb/autorelease/autorelease-projects.yaml | 1 + jjb/autorelease/autorelease-templates.yaml | 57 ++++++++++++++++ jjb/autorelease/version-bump.sh | 77 ++++++++++++++++++++++ 3 files changed, 135 insertions(+) create mode 100644 jjb/autorelease/version-bump.sh diff --git a/jjb/autorelease/autorelease-projects.yaml b/jjb/autorelease/autorelease-projects.yaml index 6e5fa31f4..c622cd4f4 100644 --- a/jjb/autorelease/autorelease-projects.yaml +++ b/jjb/autorelease/autorelease-projects.yaml @@ -3,6 +3,7 @@ name: autorelease-projects jobs: - 'autorelease-release-{stream}' + - autorelease-version-bump-{stream} stream: - nitrogen: diff --git a/jjb/autorelease/autorelease-templates.yaml b/jjb/autorelease/autorelease-templates.yaml index 284fdef09..4894c2257 100644 --- a/jjb/autorelease/autorelease-templates.yaml +++ b/jjb/autorelease/autorelease-templates.yaml @@ -151,6 +151,63 @@ - opendaylight-infra-shiplogs: maven-version: 'mvn33' +- job-template: + name: autorelease-version-bump-{stream} + project-type: freestyle + node: centos7-autorelease-4c-16g + + properties: + - opendaylight-infra-properties: + build-days-to-keep: 7 + + parameters: + - lf-infra-parameters: + project: releng/autorelease + branch: '{branch}' + refspec: 'refs/heads/{branch}' + - string: + name: RELEASE_TAG + default: '{next-release-tag}' + description: | + Release that is being version bumped. + Eg. Lithium, Beryllium, Boron, Carbon, Carbon-SR1, Carbon-SR2... + - bool: + name: DRY_RUN + default: true + description: | + If DRY_RUN is enabled modifications are not published to Gerrit. + - maven-exec: + maven-version: mvn33 + + scm: + - lf-infra-gerrit-scm: + branch: '{branch}' + refspec: 'refs/heads/{branch}' + jenkins-ssh-credential: opendaylight-jenkins-ssh + submodule-recursive: true + choosing-strategy: default + + wrappers: + - lf-infra-wrappers: + build-timeout: 240 + jenkins-ssh-credential: opendaylight-jenkins-ssh + + builders: + # force jenkins install of maven version before any shell scripts use it + - maven-target: + maven-version: mvn33 + goals: '-version' + settings: autorelease-settings + settings-type: cfp + global-settings: odl-global-settings + global-settings-type: cfp + - autorelease-cfp + - shell: !include-raw-escape: + - ../global-jjb/shell/lftools-install.sh + - version-bump.sh + + publishers: + - lf-infra-publish - job-template: name: 'autorelease-generate-release-notes-{stream}' diff --git a/jjb/autorelease/version-bump.sh b/jjb/autorelease/version-bump.sh new file mode 100644 index 000000000..4b4aea439 --- /dev/null +++ b/jjb/autorelease/version-bump.sh @@ -0,0 +1,77 @@ +#!/bin/bash +# @License EPL-1.0 +############################################################################## +# Copyright (c) 2017 The Linux Foundation and others. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v1.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-v10.html +############################################################################## + +# This script performs version bumping activities for an ODL release. +echo "---> version-bump.sh" + +mkdir -p "$WORKSPACE/archives" +LOG_FILE="$WORKSPACE/archives/version-bump.log" +BRANCH="$GERRIT_BRANCH" + +# Ensure we fail the job if any steps fail. +set -eu -o pipefail + +git checkout -b "${BRANCH,,}" "origin/${BRANCH,,}" +git submodule foreach git checkout -b "${BRANCH,,}" "origin/${BRANCH,,}" + +# Check if git state is clean +git status + +lftools version release "$RELEASE_TAG" +lftools version bump "$RELEASE_TAG" + +git submodule foreach "git commit -asm 'Bump versions by x.y.(z+1)'" +# Only submodules need to be bumped, we can ignore autorelease's bump information +git checkout -f + +# Generate git patches +patch_dir="$WORKSPACE/archives/patches/version-bump" +mkdir -p "$patch_dir" +for module in $(git submodule | awk '{ print $2 }') +do + pushd "$module" + git format-patch --stdout "origin/${BRANCH,,}" > "$patch_dir/${module//\//-}.patch" + git bundle create "$patch_dir/${module//\//-}.bundle" "origin/${BRANCH,,}..HEAD" + popd +done + +# Verify +{ + echo "----> Verify version bump" + git submodule foreach git show HEAD + git show HEAD + find . -name pom.xml -print0 | xargs -0 grep "$RELEASE_TAG" || true + git status + ls "$patch_dir" +} | tee -a "$LOG_FILE" + +# Push +if [ "$DRY_RUN" = "false" ] +then + # Run a build here! Should be safe to run mvn clean deploy as nothing should be + # using the version bumped versions just yet. + ./scripts/fix-relativepaths.sh + "$MVN" clean install -Pq \ + -s "$SETTINGS_FILE" \ + -gs "$GLOBAL_SETTINGS_FILE" \ + --show-version \ + --batch-mode \ + -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn \ + -Djenkins \ + -Dmaven.repo.local=/tmp/r \ + -Dorg.ops4j.pax.url.mvn.localRepository=/tmp/r + + # Push up patches last, as long as nothing failed. + git submodule foreach "git remote add gerrit '$GIT_URL/$PROJECT'" + git submodule foreach "git review --yes -t '${RELEASE_TAG}' || true" +fi + +echo "Version bumping complete." -- 2.36.6