Add version bump job 78/57578/4
authorThanh Ha <thanh.ha@linuxfoundation.org>
Sat, 20 May 2017 01:39:35 +0000 (21:39 -0400)
committerThanh Ha <thanh.ha@linuxfoundation.org>
Wed, 24 May 2017 17:42:09 +0000 (13:42 -0400)
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 <thanh.ha@linuxfoundation.org>
jjb/autorelease/autorelease-projects.yaml
jjb/autorelease/autorelease-templates.yaml
jjb/autorelease/version-bump.sh [new file with mode: 0644]

index 6e5fa31f47dea54dc76d7a29b29a33173813d7e2..c622cd4f4e3e488237b803705bd7fb7610128307 100644 (file)
@@ -3,6 +3,7 @@
     name: autorelease-projects
     jobs:
       - 'autorelease-release-{stream}'
+      - autorelease-version-bump-{stream}
 
     stream:
       - nitrogen:
index 284fdef09c0635d96479e9cabca753b4b42bd26c..4894c2257cf7685d61cd93580ae1705e5f167e24 100644 (file)
       - 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 (file)
index 0000000..4b4aea4
--- /dev/null
@@ -0,0 +1,77 @@
+#!/bin/bash
+# @License EPL-1.0 <http://spdx.org/licenses/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."