| #!/usr/bin/env bash |
| # |
| # Licensed to the Apache Software Foundation (ASF) under one or more |
| # contributor license agreements. See the NOTICE file distributed with |
| # this work for additional information regarding copyright ownership. |
| # The ASF licenses this file to You under the Apache License, Version 2.0 |
| # (the "License"); you may not use this file except in compliance with |
| # the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| set -e |
| |
| usage() { |
| echo "Usage: deploy_rc_pipeline -v version_number" |
| echo " -v The #.# version number" |
| exit 1 |
| } |
| |
| VERSION_MM="" |
| |
| while getopts ":v:" opt; do |
| case ${opt} in |
| v ) |
| VERSION_MM=$OPTARG |
| ;; |
| \? ) |
| usage |
| ;; |
| esac |
| done |
| |
| if [[ ${VERSION_MM} == "" ]]; then |
| usage |
| fi |
| |
| if [[ $VERSION_MM =~ ^([0-9]+\.[0-9]+)$ ]]; then |
| true |
| else |
| echo "Malformed version number ${VERSION_MM}. Example valid version: 1.9" |
| exit 1 |
| fi |
| |
| PIPEYML=$PWD/rc-pipeline.yml |
| cat << "EOF" | sed -e "s/<VERSION_MM>/${VERSION_MM}/" > $PIPEYML |
| --- |
| |
| resources: |
| - name: geode |
| type: git |
| source: |
| branch: support/<VERSION_MM> |
| tag_filter: rel/v<VERSION_MM>.*.RC* |
| uri: https://github.com/apache/geode.git |
| - name: geode-develop |
| type: git |
| source: |
| branch: develop |
| uri: https://github.com/apache/geode.git |
| - name: geode-examples |
| type: git |
| source: |
| branch: support/<VERSION_MM> |
| uri: https://github.com/apache/geode-examples.git |
| - name: geode-native |
| type: git |
| source: |
| branch: support/<VERSION_MM> |
| tag_filter: rel/v<VERSION_MM>.*.RC* |
| uri: https://github.com/apache/geode-native.git |
| - name: geode-benchmarks |
| type: git |
| source: |
| branch: support/<VERSION_MM> |
| tag_filter: rel/v<VERSION_MM>.*.RC* |
| uri: https://github.com/apache/geode-benchmarks.git |
| - name: upthewaterspout-tests |
| type: git |
| source: |
| branch: master |
| uri: https://github.com/apache/geode.git |
| |
| jobs: |
| - name: build-geode-from-tag |
| serial: true |
| public: true |
| plan: |
| - aggregate: |
| - get: geode |
| trigger: true |
| - task: validate |
| timeout: 1h |
| config: |
| image_resource: |
| type: docker-image |
| source: |
| repository: bellsoft/liberica-openjdk-debian |
| tag: 8 |
| inputs: |
| - name: geode |
| platform: linux |
| run: |
| path: /bin/sh |
| args: |
| - -ec |
| - | |
| set -ex |
| apt update -q |
| apt install -qq -y --no-install-recommends unzip git |
| FULL_VERSION=$(cd geode && git describe --tags | sed -e 's#^rel/v##') |
| VERSION=$(echo $FULL_VERSION|sed -e 's/\.RC.*//') |
| SHA=$(cd geode && git rev-parse HEAD) |
| java -version |
| cd geode |
| ./gradlew test installDist |
| gfsh=geode-assembly/build/install/apache-geode/bin/gfsh |
| $gfsh version --full | grep "^Source-Revision: ${SHA}$" |
| $gfsh version --full | grep "^Product-Version: ${VERSION}-build" |
| ! $gfsh version --full | grep Oracle |
| - name: build-geode-from-src-tgz |
| serial: true |
| public: true |
| plan: |
| - aggregate: |
| - get: geode |
| trigger: true |
| - task: validate |
| timeout: 1h |
| config: |
| image_resource: |
| type: docker-image |
| source: |
| repository: bellsoft/liberica-openjdk-debian |
| tag: 8 |
| inputs: |
| - name: geode |
| platform: linux |
| run: |
| path: /bin/sh |
| args: |
| - -ec |
| - | |
| set -ex |
| apt update -q |
| apt install -qq -y --no-install-recommends unzip git |
| FULL_VERSION=$(cd geode && git describe --tags | sed -e 's#^rel/v##') |
| VERSION=$(echo $FULL_VERSION|sed -e 's/\.RC.*//') |
| SHA=$(cd geode && git rev-parse HEAD) |
| curl -L -s https://dist.apache.org/repos/dist/dev/geode/${FULL_VERSION}/apache-geode-${VERSION}-src.tgz > src.tgz |
| tar xzf src.tgz |
| cd apache-geode-${VERSION}-src |
| java -version |
| ./gradlew test installDist |
| gfsh=geode-assembly/build/install/apache-geode/bin/gfsh |
| $gfsh version --full | grep "^Source-Revision: ${SHA}$" |
| $gfsh version --full | grep "^Product-Version: ${VERSION}-build" |
| ! $gfsh version --full | grep Oracle |
| - name: run-gfsh-from-tgz |
| serial: true |
| public: true |
| plan: |
| - aggregate: |
| - get: geode |
| trigger: true |
| - task: validate |
| timeout: 1h |
| config: |
| image_resource: |
| type: docker-image |
| source: |
| repository: bellsoft/liberica-openjdk-debian |
| tag: 8 |
| inputs: |
| - name: geode |
| platform: linux |
| run: |
| path: /bin/sh |
| args: |
| - -ec |
| - | |
| set -ex |
| apt update -q |
| apt install -qq -y --no-install-recommends git |
| FULL_VERSION=$(cd geode && git describe --tags | sed -e 's#^rel/v##') |
| VERSION=$(echo $FULL_VERSION|sed -e 's/\.RC.*//') |
| SHA=$(cd geode && git rev-parse HEAD) |
| curl -L -s https://dist.apache.org/repos/dist/dev/geode/${FULL_VERSION}/apache-geode-${VERSION}.tgz > bin.tgz |
| tar xzf bin.tgz |
| cd apache-geode-${VERSION} |
| java -version |
| gfsh=bin/gfsh |
| $gfsh version --full | grep "^Source-Revision: ${SHA}$" |
| $gfsh version --full | grep "^Product-Version: ${VERSION}$" |
| ! $gfsh version --full | grep Oracle |
| - name: run-geode-examples-jdk11 |
| serial: true |
| public: true |
| plan: |
| - aggregate: |
| - get: geode-examples |
| trigger: true |
| - task: validate |
| timeout: 1h |
| config: |
| image_resource: |
| type: docker-image |
| source: |
| repository: bellsoft/liberica-openjdk-debian |
| tag: 11 |
| inputs: |
| - name: geode-examples |
| platform: linux |
| run: |
| path: /bin/sh |
| args: |
| - -ec |
| - | |
| set -ex |
| apt update -q |
| apt install -qq -y --no-install-recommends unzip |
| cd geode-examples |
| java -version |
| ./gradlew runAll |
| - name: run-geode-examples-from-src-tgz-jdk8 |
| serial: true |
| public: true |
| plan: |
| - aggregate: |
| - get: geode-examples |
| trigger: true |
| - task: validate |
| timeout: 1h |
| config: |
| image_resource: |
| type: docker-image |
| source: |
| repository: bellsoft/liberica-openjdk-debian |
| tag: 8 |
| inputs: |
| - name: geode-examples |
| platform: linux |
| run: |
| path: /bin/sh |
| args: |
| - -ec |
| - | |
| set -ex |
| apt update -q |
| apt install -qq -y --no-install-recommends unzip git |
| FULL_VERSION=$(cd geode-examples && git describe --tags | sed -e 's#^rel/v##' -e 's#-.*##') |
| VERSION=$(echo $FULL_VERSION|sed -e 's/\.RC.*//') |
| if [ "${FULL_VERSION}" = "${VERSION}" ] ; then |
| GRADLE_ARGS="" |
| curl -L -s https://downloads.apache.org/geode/${VERSION}/apache-geode-examples-${VERSION}-src.tgz > src.tgz |
| else |
| STAGING_MAVEN=$(cat geode-examples/gradle.properties | grep geodeRepositoryUrl | awk '{print $3}') |
| GRADLE_ARGS="-PgeodeReleaseUrl=https://dist.apache.org/repos/dist/dev/geode/${FULL_VERSION} -PgeodeRepositoryUrl=${STAGING_MAVEN}" |
| curl -L -s https://dist.apache.org/repos/dist/dev/geode/${FULL_VERSION}/apache-geode-examples-${VERSION}-src.tgz > src.tgz |
| fi |
| tar xzf src.tgz |
| cd apache-geode-examples-${VERSION}-src |
| java -version |
| ./gradlew ${GRADLE_ARGS} build runAll |
| - name: build-geode-native-from-tag |
| serial: true |
| public: true |
| plan: |
| - aggregate: |
| - get: geode-native |
| trigger: true |
| - task: validate |
| timeout: 1h |
| config: |
| image_resource: |
| type: docker-image |
| source: |
| repository: bellsoft/liberica-openjdk-debian |
| tag: 8 |
| inputs: |
| - name: geode-native |
| platform: linux |
| run: |
| path: /bin/sh |
| args: |
| - -ec |
| - | |
| set -ex |
| apt update -q |
| apt install -qq -y --no-install-recommends git |
| FULL_VERSION=$(cd geode-native && git describe --tags | sed -e 's#^rel/v##') |
| VERSION=$(echo $FULL_VERSION|sed -e 's/\.RC.*//') |
| #use geode from binary dist |
| curl -L -s https://dist.apache.org/repos/dist/dev/geode/${FULL_VERSION}/apache-geode-${VERSION}.tgz > geode-bin.tgz |
| tar xzf geode-bin.tgz |
| # needed to get cmake >= 3.12 |
| echo 'APT::Default-Release "stable";' >> /etc/apt/apt.conf.d/99defaultrelease |
| echo 'deb http://ftp.de.debian.org/debian/ stable main contrib non-free' >> /etc/apt/sources.list.d/stable.list |
| echo 'deb-src http://ftp.de.debian.org/debian/ stable main contrib non-free' >> /etc/apt/sources.list.d/stable.list |
| echo 'deb http://security.debian.org/ stable/updates main contrib non-free' >> /etc/apt/sources.list.d/stable.list |
| apt-get update |
| DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends -y cmake openssl doxygen build-essential libssl-dev zlib1g-dev |
| cd geode-native |
| mkdir build |
| cd build |
| cmake .. -DGEODE_ROOT=$PWD/../../apache-geode-${VERSION} |
| cmake --build . -- -j 4 |
| cmake --build . --target docs -- -j 4 |
| cmake --build . --target install -- -j 4 |
| - name: build-geode-native-from-src-tgz |
| serial: true |
| public: true |
| plan: |
| - aggregate: |
| - get: geode-native |
| trigger: true |
| - get: geode |
| - task: validate |
| timeout: 1h |
| config: |
| image_resource: |
| type: docker-image |
| source: |
| repository: bellsoft/liberica-openjdk-debian |
| tag: 8 |
| inputs: |
| - name: geode-native |
| - name: geode |
| platform: linux |
| run: |
| path: /bin/sh |
| args: |
| - -ec |
| - | |
| set -ex |
| apt update -q |
| apt install -qq -y --no-install-recommends unzip git |
| FULL_VERSION=$(cd geode-native && git describe --tags | sed -e 's#^rel/v##') |
| VERSION=$(echo $FULL_VERSION|sed -e 's/\.RC.*//') |
| # build geode from source |
| cd geode |
| ./gradlew build -x test -x javadoc -x rat -x pmdMain |
| cd .. |
| # needed to get cmake >= 3.12 |
| echo 'APT::Default-Release "stable";' >> /etc/apt/apt.conf.d/99defaultrelease |
| echo 'deb http://ftp.de.debian.org/debian/ stable main contrib non-free' >> /etc/apt/sources.list.d/stable.list |
| echo 'deb-src http://ftp.de.debian.org/debian/ stable main contrib non-free' >> /etc/apt/sources.list.d/stable.list |
| echo 'deb http://security.debian.org/ stable/updates main contrib non-free' >> /etc/apt/sources.list.d/stable.list |
| apt-get update |
| DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends -y cmake openssl doxygen build-essential libssl-dev zlib1g-dev |
| curl -L -s https://dist.apache.org/repos/dist/dev/geode/${FULL_VERSION}/apache-geode-native-${VERSION}-src.tgz > src.tgz |
| tar xzf src.tgz |
| cd apache-geode-native-${VERSION}-src |
| mkdir build |
| cd build |
| cmake .. -DGEODE_ROOT=$PWD/../../geode/geode-assembly/build/install/apache-geode |
| cmake --build . -- -j 4 |
| cmake --build . --target docs -- -j 4 |
| cmake --build . --target install -- -j 4 |
| - name: upthewaterspout |
| serial: true |
| public: true |
| plan: |
| - aggregate: |
| - get: geode |
| trigger: true |
| - get: upthewaterspout-tests |
| - get: geode-examples |
| - task: validate |
| timeout: 1h |
| config: |
| image_resource: |
| type: docker-image |
| source: |
| repository: bellsoft/liberica-openjdk-debian |
| tag: 8 |
| inputs: |
| - name: geode |
| - name: upthewaterspout-tests |
| - name: geode-examples |
| platform: linux |
| run: |
| path: /bin/sh |
| args: |
| - -ec |
| - | |
| set -ex |
| apt update -q |
| apt install -qq -y --no-install-recommends unzip git gpg |
| FULL_VERSION=$(cd geode && git describe --tags | sed -e 's#^rel/v##') |
| VERSION=$(echo $FULL_VERSION|sed -e 's/\.RC.*//') |
| STAGING_MAVEN=$(cat geode-examples/gradle.properties | grep geodeRepositoryUrl | awk '{print $3}') |
| cd upthewaterspout-tests |
| curl -L -s https://dist.apache.org/repos/dist/dev/geode/KEYS > KEYS |
| gpg --import KEYS |
| java -version |
| ./gradlew build -PmavenURL=${STAGING_MAVEN} -PdownloadURL=https://dist.apache.org/repos/dist/dev/geode/${FULL_VERSION}/ -Pversion=${FULL_VERSION} |
| - name: benchmarks-test |
| serial: true |
| public: true |
| plan: |
| - get: geode-benchmarks |
| trigger: true |
| - task: validate |
| timeout: 1h |
| config: |
| image_resource: |
| type: docker-image |
| source: |
| repository: bellsoft/liberica-openjdk-debian |
| tag: 8 |
| inputs: |
| - name: geode-benchmarks |
| platform: linux |
| run: |
| path: /bin/sh |
| args: |
| - -ec |
| - | |
| set -ex |
| apt update -q |
| apt install -qq -y --no-install-recommends unzip git keychain |
| FULL_VERSION=$(cd geode-benchmarks && git describe --tags | sed -e 's#^rel/v##') |
| VERSION=$(echo $FULL_VERSION|sed -e 's/\.RC.*//') |
| curl -L -s https://dist.apache.org/repos/dist/dev/geode/${FULL_VERSION}/apache-geode-benchmarks-${VERSION}-src.tgz > src.tgz |
| tar xzf src.tgz |
| cd apache-geode-benchmarks-${VERSION}-src |
| java -version |
| mkdir -p ~/.ssh |
| ssh-keygen -m PEM -b 2048 -t rsa -f ~/.ssh/id_rsa -q -N "" |
| cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys |
| apt-get update |
| apt-get install openssh-server --no-install-recommends -y |
| echo "StrictHostKeyChecking no" >> /etc/ssh/ssh_config |
| service ssh start |
| echo 'tasks.withType(JavaCompile) { options.encoding = "UTF-8" }' >> geode-benchmarks/build.gradle |
| ./gradlew build test |
| - name: verify-expected-files-and-keys |
| serial: true |
| public: true |
| plan: |
| - aggregate: |
| - get: geode |
| trigger: true |
| - task: validate |
| timeout: 1h |
| config: |
| image_resource: |
| type: docker-image |
| source: |
| repository: bellsoft/liberica-openjdk-debian |
| tag: 8 |
| inputs: |
| - name: geode |
| platform: linux |
| run: |
| path: /bin/bash |
| args: |
| - -ec |
| - | |
| set -ex |
| apt update -q |
| apt install -qq -y --no-install-recommends git gpg |
| FULL_VERSION=$(cd geode && git describe --tags | sed -e 's#^rel/v##') |
| VERSION=$(echo $FULL_VERSION|sed -e 's/\.RC.*//') |
| curl -L -s https://dist.apache.org/repos/dist/dev/geode/KEYS > KEYS |
| gpg --import KEYS |
| url=https://dist.apache.org/repos/dist/dev/geode/${FULL_VERSION} |
| function verifyArtifactSizeSignatureLicenseNoticeAndCopyright { |
| tld=$1 |
| file=${tld}.tgz |
| minfilesize=$2 |
| maxfilesize=$3 |
| echo Verifying $file... |
| asc=${file}.asc |
| sha=${file}.sha256 |
| sum=sha256sum |
| curl -L -s $url/$file > $file |
| actualfilesize=$(wc -c < $file) |
| if [ $actualfilesize -lt $minfilesize ] ; then |
| echo "File size of $file is only $actualfilesize bytes, expected at least $minfilesize" |
| return 1 |
| fi |
| if [ $actualfilesize -gt $maxfilesize ] ; then |
| echo "File size of $file is $actualfilesize, expected no more than $maxfilesize bytes" |
| return 1 |
| fi |
| curl -L -s $url/$asc > $asc |
| curl -L -s $url/$sha > $sha |
| gpg --verify $asc |
| $sum -c $sha |
| echo $file >> exp |
| echo $asc >> exp |
| echo $sha >> exp |
| #check that each archive contains all content below a top-level-directory with the same name as the file (sans .tgz) |
| ! tar tvzf $file | grep -v " ${tld}/" |
| #check that each archive contains LICENSE and NOTICE |
| tar tvzf $file | grep " ${tld}/LICENSE" |
| tar tvzf $file | grep " ${tld}/NOTICE" |
| #check that NOTICE contains current copyright year and correctly assigns copyright to ASF |
| tar xzf $file "${tld}/NOTICE" |
| year=$(date +%Y) |
| grep "Copyright" "${tld}/NOTICE" |
| grep -q "Copyright.*${year}.*Apache Software Foundation" "${tld}/NOTICE" |
| #check that the declared license is of the correct type |
| tar xzf $file "${tld}/LICENSE" |
| head -1 "${tld}/LICENSE" | grep -q "Apache License" |
| } |
| verifyArtifactSizeSignatureLicenseNoticeAndCopyright apache-geode-${VERSION}-src 10000000 30000000 |
| verifyArtifactSizeSignatureLicenseNoticeAndCopyright apache-geode-${VERSION} 100000000 150000000 |
| verifyArtifactSizeSignatureLicenseNoticeAndCopyright apache-geode-examples-${VERSION}-src 50000 2000000 |
| verifyArtifactSizeSignatureLicenseNoticeAndCopyright apache-geode-native-${VERSION}-src 2000000 4000000 |
| verifyArtifactSizeSignatureLicenseNoticeAndCopyright apache-geode-benchmarks-${VERSION}-src 50000 500000 |
| curl -L -s ${url}/ | awk '/>..</{next}/<li>/{gsub(/ *<[^>]*>/,"");print}' | sort > actual-file-list |
| sort < exp > expected-file-list |
| set +x |
| echo "" |
| if diff -q expected-file-list actual-file-list ; then |
| echo "The file list at $url matches what is expected and all signatures were verified :)" |
| else |
| echo "Expected:" |
| cat expected-file-list |
| echo "" |
| echo "Actual:" |
| cat actual-file-list |
| echo "" |
| echo "Diff:" |
| diff expected-file-list actual-file-list |
| exit 1 |
| fi |
| - name: verify-no-binaries |
| serial: true |
| public: true |
| plan: |
| - aggregate: |
| - get: geode |
| trigger: true |
| - task: validate |
| timeout: 1h |
| config: |
| image_resource: |
| type: docker-image |
| source: |
| repository: bellsoft/liberica-openjdk-debian |
| tag: 8 |
| inputs: |
| - name: geode |
| platform: linux |
| run: |
| path: /bin/bash |
| args: |
| - -ec |
| - | |
| set -e |
| apt update -q |
| apt install -qq -y --no-install-recommends git |
| FULL_VERSION=$(cd geode && git describe --tags | sed -e 's#^rel/v##') |
| VERSION=$(echo $FULL_VERSION|sed -e 's/\.RC.*//') |
| url=https://dist.apache.org/repos/dist/dev/geode/${FULL_VERSION} |
| BINARY_EXTENSIONS="jar|war|class|exe|dll|o|so|obj|bin|out|pyc" |
| echo "Source artifacts should not contain any files ending in$(echo "|${BINARY_EXTENSIONS}"|sed 's/[^a-z]/ ./g')" |
| echo "" |
| function verifyNoBinaries { |
| file=$1 |
| echo "" |
| echo Checking $file... |
| curl -L -s $url/$file | tar tvzf - | egrep '\.('"${BINARY_EXTENSIONS}"')$' | tee -a bins |
| } |
| verifyNoBinaries apache-geode-${VERSION}-src.tgz |
| verifyNoBinaries apache-geode-examples-${VERSION}-src.tgz |
| verifyNoBinaries apache-geode-native-${VERSION}-src.tgz |
| verifyNoBinaries apache-geode-benchmarks-${VERSION}-src.tgz |
| echo "" |
| echo "" |
| if grep -q . bins ; then |
| echo Binary files were found! |
| exit 1 |
| else |
| echo All good |
| fi |
| - name: verify-license |
| serial: true |
| public: true |
| plan: |
| - aggregate: |
| - get: geode |
| trigger: true |
| - aggregate: |
| - get: geode-develop |
| - task: validate |
| timeout: 1h |
| config: |
| image_resource: |
| type: docker-image |
| source: |
| repository: bellsoft/liberica-openjdk-debian |
| tag: 8 |
| inputs: |
| - name: geode |
| - name: geode-develop |
| platform: linux |
| run: |
| path: /bin/bash |
| args: |
| - -ec |
| - | |
| set -e |
| apt update -q |
| apt install -qq -y --no-install-recommends unzip git |
| FULL_VERSION=$(cd geode && git describe --tags | sed -e 's#^rel/v##') |
| ./geode-develop/dev-tools/release/license_review.sh -v $FULL_VERSION |
| EOF |
| fly -t concourse.apachegeode-ci.info-main login --team-name main --concourse-url https://concourse.apachegeode-ci.info/ |
| fly -t concourse.apachegeode-ci.info-main set-pipeline -p apache-support-${VERSION_MM//./-}-rc -c $PIPEYML |
| fly -t concourse.apachegeode-ci.info-main unpause-pipeline -p apache-support-${VERSION_MM//./-}-rc |
| fly -t concourse.apachegeode-ci.info-main expose-pipeline -p apache-support-${VERSION_MM//./-}-rc |
| rm $PIPEYML |