Add release scripts
tools/release/release.sh will now ask for version number and
generates a commit for it. The version number was moved to a
specific bzl file to be easier to manipulate.
tools/release/release.yaml is a Google Cloud Container Builder
script that will build the update site and publish it to eclipse.bazel.build/updatesite
This script only tag a release, it does not mark it as a release
on GitHub yet.
Change-Id: I4711f2552d876bd0a74cd24d6408da85f629a905
diff --git a/BUILD b/BUILD
index 3534b37..83d3fdc 100644
--- a/BUILD
+++ b/BUILD
@@ -4,8 +4,7 @@
"eclipse_feature",
"eclipse_p2updatesite",
)
-
-VERSION = "0.0.3.qualifier"
+load(":version.bzl", "VERSION")
eclipse_plugin(
name = "com.google.devtools.bazel.e4b",
@@ -43,5 +42,6 @@
description = "Eclipse plugin for Bazel",
eclipse_features = [":com.google.devtools.bazel.e4b.feature"],
label = "Eclipse 4 Bazel",
- url = "https://bazelbuild.github.io/e4b",
+ url = "https://eclipse.bazel.build",
+ visibility = ["//tools/release:__pkg__"],
)
diff --git a/README.md b/README.md
index 308b6ef..b26e661 100644
--- a/README.md
+++ b/README.md
@@ -19,7 +19,7 @@
* Select "Help" > "Install Software"
* Add the update
site
-[http://bazelbuild.github.io/eclipse/p2updatesite](http://bazelbuild.github.io/eclipse/p2updatesite).
+[https://eclipse.bazel.build/updatesite](https://eclipse.bazel.build/updatesite).
* Select "Uncategorized category" > "Eclipse 4 Bazel"
## Using the plugin
diff --git a/tools/release/BUILD b/tools/release/BUILD
new file mode 100644
index 0000000..3bf2c1b
--- /dev/null
+++ b/tools/release/BUILD
@@ -0,0 +1,5 @@
+sh_binary(
+ name = "unzip-updatesite",
+ srcs = ["unzip-updatesite.sh"],
+ data = ["//:p2updatesite.zip"],
+)
diff --git a/tools/release/release.sh b/tools/release/release.sh
new file mode 100755
index 0000000..d173972
--- /dev/null
+++ b/tools/release/release.sh
@@ -0,0 +1,98 @@
+#!/bin/bash
+
+ROOTDIR="$(dirname $(dirname "$(cd "$(dirname "$0")" && pwd -P)"))"
+cd "$ROOTDIR"
+RELEASE_ORIGIN=${RELEASE_ORIGIN:-"git@github.com:bazelbuild/eclipse"}
+
+source version.bzl
+# Remove qualifier from VERSION if present
+VERSION="${VERSION//\.qualifier}"
+
+make_version_bzl() {
+ cat <<EOF >version.bzl
+# Note: do not edit, use tools/release/release.sh script instead.
+# This file is both a shell script and a skylark file.
+VERSION="$1"
+EOF
+}
+
+# Create the release tag
+make_release_tag() {
+ # Detach head
+ git checkout -q --detach
+ # Update the version.bzl file
+ make_version_bzl "${VERSION}"
+ # Create the commit
+ git commit -q -m "Release ${VERSION}" version.bzl
+ # Create the tag
+ git tag "${VERSION}"
+ # Checkout back master
+ git checkout -q master
+}
+
+# Create a commit for increasing the version number
+make_release_commit() {
+ git checkout -q master
+ make_version_bzl "${1}.qualifier"
+ git commit -q -m "Update version to ${1}.qualifer after release ${2}" \
+ version.bzl
+}
+
+# Read the version number from the input
+read_version() {
+ while true; do
+ echo -n "$1 [$VERSION] "
+ read ans
+ if [ -n "$ans" ]; then
+ if [[ "$ans" =~ [0-9]+(\.[0-9]+)* ]]; then
+ VERSION="$ans"
+ return
+ else
+ echo "Please enter a version number (e.g. 0.3.0)." >&2
+ fi
+ else
+ return
+ fi
+ done
+}
+
+# Produces all possible new versions
+incr_version() {
+ local v=(${1//./ })
+ for (( i=${#v[@]}-1; $i >= 0; i=$i-1 )); do
+ local new_v=""
+ for (( j=0; $j < ${#v[@]}; j=$j+1 )); do
+ local vj=${v[$j]}
+ if (( $j == $i )); then
+ vj=$(( ${v[$j]} + 1))
+ fi
+ if [ -n "${new_v}" ]; then
+ new_v="${new_v}.${vj}"
+ else
+ new_v="${vj}"
+ fi
+ done
+ echo "${new_v}"
+ done
+}
+
+# Push the master branch and the given tag
+push_master_and_tag() {
+ git push "${RELEASE_ORIGIN}" master
+ git push "${RELEASE_ORIGIN}" "$1"
+}
+
+# Do the release itself, the update site is build on GCCB
+release() {
+ read_version "About to release, which version?"
+ make_release_tag
+ local old_version="${VERSION}"
+ local new_versions=($(incr_version "${VERSION}"))
+ VERSION=${new_versions[0]}
+ echo "Possible versions for next releases: ${new_versions[@]}"
+ read_version "Next version will be?"
+ make_release_commit "${VERSION}" "${old_version}"
+ push_master_and_tag "${old_version}"
+}
+
+release
diff --git a/tools/release/release.yaml b/tools/release/release.yaml
new file mode 100644
index 0000000..c914227
--- /dev/null
+++ b/tools/release/release.yaml
@@ -0,0 +1,11 @@
+steps:
+- name: gcr.io/cloud-builders/bazel
+ args: ['run', '//tools/release:unzip-updatesite', '--', '/workspace/bazel-updatesite']
+- name: gcr.io/cloud-builders/gsutil
+ args: ['-m', 'rsync', '-r', '-c', '-d', '/workspace/bazel-updatesite', 'gs://eclipse.bazel.build/updatesite']
+- name: gcr.io/cloud-builders/gsutil
+ args: ['web', 'set', '-m', 'index.html', '-e', '404.html', 'gs://eclipse.bazel.build']
+- name: gcr.io/cloud-builders/gsutil
+ args: ['-m', 'acl', 'ch', '-R', '-u', 'AllUsers:R', 'gs://eclipse.bazel.build']
+
+timeout: 3600s
diff --git a/tools/release/unzip-updatesite.sh b/tools/release/unzip-updatesite.sh
new file mode 100755
index 0000000..bb29bca
--- /dev/null
+++ b/tools/release/unzip-updatesite.sh
@@ -0,0 +1,7 @@
+#!/bin/bash
+# A small target to run in Google Cloud Container Builder so the result is unzipped.
+
+OUTPUT_DIR="${1:-bazel-updatesite}"
+RUNFILES="${JAVA_RUNFILES:-$0.runfiles}"
+
+unzip -d "${OUTPUT_DIR}" "${RUNFILES}/build_bazel_eclipse/p2updatesite.zip"
diff --git a/version.bzl b/version.bzl
new file mode 100644
index 0000000..20c03a8
--- /dev/null
+++ b/version.bzl
@@ -0,0 +1,3 @@
+# Note: do not edit, use tools/release/release.sh script instead.
+# This file is both a shell script and a skylark file.
+VERSION="0.0.3.qualifier"