Skip to content

Commit

Permalink
pull in set-environment script
Browse files Browse the repository at this point in the history
Signed-off-by: Chris Abraham <cjyabraham@gmail.com>
  • Loading branch information
cjyabraham committed May 21, 2024
1 parent 6baeccd commit fddc375
Show file tree
Hide file tree
Showing 2 changed files with 158 additions and 14 deletions.
19 changes: 5 additions & 14 deletions .github/workflows/build_test_and_deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,10 +49,8 @@ jobs:
# https://github.com/pantheon-systems/docker-build-tools-ci/blob/6.x/scripts/set-environment
- name: setup-environment-vars
run: |
echo '1' $GITHUB_REF
if [[ "$GITHUB_REF" =~ ^refs/pull/([0-9]+)/merge$ ]]; then
export PR_NUMBER=${BASH_REMATCH[1]}
echo '2' $PR_NUMBER
export CI_BRANCH=`curl -u "${GITHUB_OWNER}:${GITHUB_TOKEN}" \
-H "Accept: application/vnd.github.groot-preview+json" \
Expand All @@ -65,7 +63,6 @@ jobs:
python3 -c "import sys, json; print(json.load(sys.stdin)['html_url'])"`
elif [ "$GITHUB_REF" != "refs/heads/main" ]; then
echo '3'
export PR_NUMBER=`curl -u "${GITHUB_OWNER}:${GITHUB_TOKEN}" \
-H "Accept: application/vnd.github.groot-preview+json" \
"https://api.github.com/repos/${CI_PROJECT_NAME}/commits/${COMMIT_SHA}/pulls" | \
Expand All @@ -81,18 +78,12 @@ jobs:
"https://api.github.com/repos/${CI_PROJECT_NAME}/commits/${COMMIT_SHA}/pulls" | \
python3 -c "import sys, json; print(json.load(sys.stdin)[0]['html_url'])"`
else
echo '4'
export CI_BRANCH="main"
fi
echo '5'
export CI_PROJECT_REPONAME="${CI_PROJECT_NAME#*/}"
export CI_PROJECT_USERNAME=$GITHUB_REPOSITORY_OWNER
/build-tools-ci/scripts/set-environment
GITHUB_WORKFLOW_URL=https://github.com/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID
echo "export CI_BUILD_URL='${GITHUB_WORKFLOW_URL}'" >> $BASH_ENV
echo "export CI_NODE_INDEX=0" >> $BASH_ENV
echo "export CI_REPOSITORY_URL='https://github.com/${GITHUB_REPOSITORY}'" >> $BASH_ENV
echo "export ARTIFACTS_DIR_URL='${GITHUB_WORKFLOW_URL}/#artifacts'" >> $BASH_ENV
export GITHUB_WORKFLOW_URL=https://github.com/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID
./.github/workflows/set-environment
build_php:
container:
Expand Down Expand Up @@ -130,7 +121,7 @@ jobs:
# Set TERMINUS_ENV and related environment variables.
# https://github.com/pantheon-systems/docker-build-tools-ci/blob/6.x/scripts/set-environment
- name: setup-environment-vars
run: /build-tools-ci/scripts/set-environment
run: ./.github/workflows/set-environment

- name: run PHP build step
run: composer -n build-assets
Expand Down Expand Up @@ -198,7 +189,7 @@ jobs:
# Set TERMINUS_ENV and related environment variables.
# https://github.com/pantheon-systems/docker-build-tools-ci/blob/6.x/scripts/set-environment
- name: setup-environment-vars
run: /build-tools-ci/scripts/set-environment
run: ./.github/workflows/set-environment

# Rsync the build artifact pieces web directory
- name: sync build artifact
Expand Down Expand Up @@ -268,7 +259,7 @@ jobs:
# Set TERMINUS_ENV and related environment variables.
# https://github.com/pantheon-systems/docker-build-tools-ci/blob/6.x/scripts/set-environment
- name: setup-environment-vars
run: /build-tools-ci/scripts/set-environment
run: ./.github/workflows/set-environment

# Rsync the build artifact pieces web directory
- name: sync build artifact
Expand Down
153 changes: 153 additions & 0 deletions .github/workflows/set-environment
Original file line number Diff line number Diff line change
@@ -0,0 +1,153 @@
#!/bin/bash
set -eo pipefail

#
# Before calling this script, set the following environent variables:
#
# - CI_BRANCH: the branch being tested
# - CI_BUILD_NUMBER: monotonically increasing build counter
# - PR_NUMBER: pull request number (if job is from a pull request)
#
# Optionally:
#
# - CI_PULL_REQUEST: URL to the current pull request; used to set PR_NUMBER
# - DEFAULT_SITE: name of the repository; used to set TERMINUS_SITE
#
# Note that any environment variable given above is not set, then
# it will be assigned its value from the corresponding CircleCI
# environment variable.
#
CI_BRANCH=${CI_BRANCH:-$CIRCLE_BRANCH}
CI_BUILD_NUMBER=${CI_BUILD_NUMBER:-$CIRCLE_BUILD_NUM}
CI_PROJECT_NAME=${CI_PROJECT_NAME:-$CIRCLE_PROJECT_REPONAME}
CI_PULL_REQUEST=${CI_PULL_REQUEST:-$CIRCLE_PULL_REQUEST}

# Circle sets both $CIRCLE_PULL_REQUEST and $CI_PULL_REQUEST.
PR_NUMBER=${PR_NUMBER:-$CI_PULL_REQUEST}
PR_NUMBER=${PR_NUMBER##*/}

# Set up BASH_ENV if it was not set for us.
BASH_ENV=${BASH_ENV:-$HOME/.bashrc}

# Provide a default email address
GIT_EMAIL=${GIT_EMAIL:-ci-bot@pantheon.io}

# We will also set the default site name to be the same as the repository name.
DEFAULT_SITE=${DEFAULT_SITE:-$CI_PROJECT_NAME}

# By default, we will make the main branch master.
DEFAULT_BRANCH=${DEFAULT_BRANCH:-master}

# If we are on the default branch.
if [[ ${CI_BRANCH} == ${DEFAULT_BRANCH} ]] ; then
# Use dev as the environment.
DEFAULT_ENV=${DEFAULT_ENV:-dev}
else
# Otherwise, name the environment after the CI build number.
DEFAULT_ENV=ci-$CI_BUILD_NUMBER
fi

# If there is a PR number provided, though, then we will use it instead.
if [[ -n ${PR_NUMBER} ]] ; then
DEFAULT_ENV="pr-${PR_NUMBER}"
fi

CI_PR_URL=${CI_PR_URL:-$CIRCLE_PULL_REQUEST}
CI_PROJECT_USERNAME=${CI_PROJECT_USERNAME:-$CIRCLE_PROJECT_USERNAME}
CI_PROJECT_REPONAME=${CI_PROJECT_REPONAME:-$CIRCLE_PROJECT_REPONAME}
TERMINUS_SITE=${TERMINUS_SITE:-$DEFAULT_SITE}
TERMINUS_ENV=${TERMINUS_ENV:-$DEFAULT_ENV}

# If any Pantheon environments are locked, users may provide a URL-encoded
# 'username:password' string in an environment variable to include the
# HTTP Basic Authentication.
MULTIDEV_SITE_BASIC_AUTH=${MULTIDEV_SITE_BASIC_AUTH:-$SITE_BASIC_AUTH}
DEV_SITE_BASIC_AUTH=${DEV_SITE_BASIC_AUTH:-$SITE_BASIC_AUTH}
TEST_SITE_BASIC_AUTH=${TEST_SITE_BASIC_AUTH:-$SITE_BASIC_AUTH}
LIVE_SITE_BASIC_AUTH=${LIVE_SITE_BASIC_AUTH:-$SITE_BASIC_AUTH}

# Prepare the Basic Authentication strings, appending the "@" sign if not empty.
MULTIDEV_SITE_BASIC_AUTH=${MULTIDEV_SITE_BASIC_AUTH:+"$MULTIDEV_SITE_BASIC_AUTH@"}
DEV_SITE_BASIC_AUTH=${DEV_SITE_BASIC_AUTH:+"$DEV_SITE_BASIC_AUTH@"}
TEST_SITE_BASIC_AUTH=${TEST_SITE_BASIC_AUTH:+"$TEST_SITE_BASIC_AUTH@"}
LIVE_SITE_BASIC_AUTH=${LIVE_SITE_BASIC_AUTH:+"$LIVE_SITE_BASIC_AUTH@"}

#=====================================================================================================================
# EXPORT needed environment variables
#
# Circle CI 2.0 does not yet expand environment variables so they have to be manually EXPORTed
# Once environment variables can be expanded this section can be removed
# See: https://discuss.circleci.com/t/unclear-how-to-work-with-user-variables-circleci-provided-env-variables/12810/11
# See: https://discuss.circleci.com/t/environment-variable-expansion-in-working-directory/11322
# See: https://discuss.circleci.com/t/circle-2-0-global-environment-variables/8681
# Bitbucket has similar issues:
# https://bitbucket.org/site/master/issues/18262/feature-request-pipeline-command-to-modify
#=====================================================================================================================
(
echo 'export PATH=$PATH:$HOME/bin'
echo "export PR_NUMBER=$PR_NUMBER"
echo "export CI_BRANCH=$(echo $CI_BRANCH | grep -v '"'^\(master\|[0-9]\+.x\)$'"')"
echo "export CI_BUILD_NUMBER=$CI_BUILD_NUMBER"
echo "export DEFAULT_SITE='$DEFAULT_SITE'"
echo "export CI_PR_URL='$CI_PR_URL'"
echo "export CI_PROJECT_USERNAME='$CI_PROJECT_USERNAME'"
echo "export CI_PROJECT_REPONAME='$CI_PROJECT_REPONAME'"
echo "export DEFAULT_ENV='$DEFAULT_ENV'"
echo 'export TERMINUS_HIDE_UPDATE_MESSAGE=1'
echo "export TERMINUS_SITE='$TERMINUS_SITE'"
echo "export TERMINUS_ENV='$TERMINUS_ENV'"
echo "export DEFAULT_BRANCH='$DEFAULT_BRANCH'"
echo "export MULTIDEV_SITE_URL='https://${MULTIDEV_SITE_BASIC_AUTH}$TERMINUS_ENV-$TERMINUS_SITE.pantheonsite.io/'"
echo "export DEV_SITE_URL='https://${DEV_SITE_BASIC_AUTH}dev-$TERMINUS_SITE.pantheonsite.io/'"
echo "export TEST_SITE_URL='https://${TEST_SITE_BASIC_AUTH}test-$TERMINUS_SITE.pantheonsite.io/'"
echo "export LIVE_SITE_URL='https://${LIVE_SITE_BASIC_AUTH}live-$TERMINUS_SITE.pantheonsite.io/'"
echo "export ARTIFACTS_DIR='artifacts'"
echo "export ARTIFACTS_FULL_DIR='/tmp/artifacts'"
echo "export CI_BUILD_URL='${GITHUB_WORKFLOW_URL}'"
echo "export CI_NODE_INDEX=0"
echo "export CI_REPOSITORY_URL='https://github.com/${GITHUB_REPOSITORY}'"
echo "export ARTIFACTS_DIR_URL='${GITHUB_WORKFLOW_URL}/#artifacts'"
) >> $BASH_ENV

# If a Terminus machine token and site name are defined
if [[ -n "$TERMINUS_MACHINE_TOKEN" && -n "$TERMINUS_SITE" ]]
then

# Authenticate with Terminus
terminus -n auth:login --machine-token="$TERMINUS_MACHINE_TOKEN" > /dev/null 2>&1

# Use Terminus to fetch variables
TERMINUS_SITE_UUID=$(terminus site:info $TERMINUS_SITE --field=id)

# And add those variables to $BASH_ENV
(
echo "export TERMINUS_SITE_UUID='$TERMINUS_SITE_UUID'"
) >> $BASH_ENV
fi

source $BASH_ENV

echo 'Contents of BASH_ENV:'
cat $BASH_ENV
echo

# Avoid ssh prompting when connecting to new ssh hosts
mkdir -p $HOME/.ssh && echo "StrictHostKeyChecking no" >> "$HOME/.ssh/config"

# Configure the GitHub Oauth token if it is available
if [ -n "$GITHUB_TOKEN" ]; then
composer -n config --global github-oauth.github.com $GITHUB_TOKEN
fi

# Set up our default git config settings if git is available.
git config --global user.email "${GIT_EMAIL:-no-reply+ci-$CI_BUILD_NUMBER@getpantheon.com}"
git config --global user.name "CI Bot"
git config --global core.fileMode false

# Re-install the Terminus Build Tools plugin if requested
if [ -n $BUILD_TOOLS_VERSION ] && [ "$BUILD_TOOLS_VERSION" <> 'dev-master' ]; then
echo "Install Terminus Build Tools Plugin version $BUILD_TOOLS_VERSION."
echo "Note that it is NOT RECOMMENDED to define BUILD_TOOLS_VERSION, save in the Terminus Build Tools plugin tests themselves. All other tests should use the version bundled with the container."
rm -rf ${TERMINUS_PLUGINS_DIR:-~/.terminus/plugins}/terminus-build-tools-plugin
composer -n create-project --no-dev -d ${TERMINUS_PLUGINS_DIR:-~/.terminus/plugins} pantheon-systems/terminus-build-tools-plugin:$BUILD_TOOLS_VERSION
fi

0 comments on commit fddc375

Please sign in to comment.