| #!/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 |
| |