blob: efa7bf83b2a756f0fce3444cdec945abb506d2d4 [file] [log] [blame]
#!/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 -euo pipefail
function printHelp() {
cat << EOF
$0 Usage:
Sets Concourse pipelines for Geode Native builds.
Options:
Parameter Description Default
--target Fly target. "default"
--branch Branch to build. Current checked out branch.
--version Version of Geode. 1.14.0
--pre Version pre release tag. "" | Empty
--pipeline Name of pipeline to set. Based on repository owner name and branch.
--github-owner GitHub owner for repository. Current tracking branch repository owner.
--github-repository GitHub repository name. Current tracking branch repository name.
--google-zone Google Compute project. Current default project.
--google-project Google Compute zone. Concourse worker's zone.
--google-storage-bucket Google Compute Storage bucket. Based on google-project value.
--google-storage-key Google Compute Storage key prefix. Based on pipeline value.
--fly Path to fly executable. "fly"
--ytt Path to ytt executable. "ytt"
--variants Pipeline variants of publish. Both release and pr.
--output Rendered pipeline files directory. Temporary directory.
Example:
\$ $0 --target=my-target --google-zone=my-zone
Environment Variables:
All options can be specified via environment variables where hyphens (-) are replaced with underscore (_).
Example:
\$ target=my-target google_zone=my-zone $0
EOF
}
while [ $# -gt 0 ]; do
if [[ $1 == "--help" ]]; then
printHelp;
exit 0;
elif [[ $1 == *"--"*"="* ]]; then
param="${1%%=*}"
param="${param#--}"
declare ${param//[^[:word:]]/_}="${1#--*=}"
elif [[ $1 == *"--"* ]]; then
param="${1/--/}"
declare ${param//[^[:word:]]/_}="${2}"
shift
fi
shift
done
ytt=${ytt:-ytt}
fly=${fly:-fly}
yq=${yq:-yq}
target=${target:-default}
output=${output:-$(mktemp -d)}
branch=${branch:-$(git rev-parse --abbrev-ref HEAD)}
git_tracking_branch=${git_tracking_branch:-$(git for-each-ref --format='%(upstream:short)' $(git symbolic-ref -q HEAD))}
git_remote=${git_remote:-$(echo ${git_tracking_branch} | cut -d/ -f1)}
git_repository_url=${git_repository_url:-$(git remote get-url ${git_remote})}
if [[ ${git_repository_url} =~ ^((https|git)(:\/\/|@)github\.com[\/:])([^\/:]+)\/(.+)[\.git]?$ ]]; then
github_owner=${github_owner:-${BASH_REMATCH[4]}}
github_repository=${github_repository:-${BASH_REMATCH[5]}}
fi
pipeline=${pipeline:-${github_owner}-${branch}}
pipeline=${pipeline//[^[:word:]-]/-}
if (which ${yq} >/dev/null); then
version=${version:-$(bash -c "${yq} \"\$@\"" yq -N e '.pipeline.version | select(.) ' - < base/base.yml)}
pre=${pre:-$(bash -c "${yq} \"\$@\"" yq -N e '.pipeline.pre | select(.) ' - < base/base.yml)}
fi
pre=${pre:-"build"}
if [ "${pre}" == "none" ]; then
pre=""
fi
google_project=${google_project:-$(gcloud config get-value project)}
google_zone=${google_zone:-'$(curl "http://metadata.google.internal/computeMetadata/v1/instance/zone" -H "Metadata-Flavor: Google" -s | cut -d / -f 4)'}
google_storage_bucket=${google_storage_bucket:-${google_project}-concourse}
google_storage_key=${google_storage_key:-geode-native/${pipeline}}
variants=${variants:-"release pr"}
variants_release=${variant_release:-""}
for variant in ${variants}; do
eval pipeline_suffix=\${variants_${variant}-"-${variant}"}
bash -c "${ytt} \"\$@\"" ytt \
--file lib \
--file base \
--file ${variant} \
--data-value "pipeline.name=${pipeline}" \
--data-value "pipeline.version=${version}" \
--data-value "pipeline.pre=${pre}" \
--data-value "pipeline.variant=${variant}" \
--data-value "repository.branch=${branch}" \
--data-value "github.owner=${github_owner}" \
--data-value "github.repository=${github_repository}" \
--data-value "google.project=${google_project}" \
--data-value "google.zone=${google_zone}" \
--data-value "google.storage.bucket=${google_storage_bucket}" \
--data-value "google.storage.key=${google_storage_key}" \
> "${output}/${variant}.yml"
bash -c "${fly} \"\$@\"" fly --target=${target} \
set-pipeline \
"--pipeline=${pipeline}${pipeline_suffix}" \
"--config=${output}/${variant}.yml"
done