Merge pull request #4236 from cdr/jsjoeio/fix-brew-bump
fix(brew-bump.sh): add checks and handle errors
This commit is contained in:
commit
999960eef5
@ -5,6 +5,21 @@ main() {
|
||||
cd "$(dirname "$0")/../.."
|
||||
# Only sourcing this so we get access to $VERSION
|
||||
source ./ci/lib.sh
|
||||
source ./ci/steps/steps-lib.sh
|
||||
|
||||
echo "Checking environment variables"
|
||||
|
||||
# We need VERSION to bump the brew formula
|
||||
if is_env_var_set "VERSION"; then
|
||||
echo "VERSION is not set"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# We need HOMEBREW_GITHUB_API_TOKEN to push up commits
|
||||
if is_env_var_set "HOMEBREW_GITHUB_API_TOKEN"; then
|
||||
echo "HOMEBREW_GITHUB_API_TOKEN is not set"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# NOTE: we need to make sure cdrci/homebrew-core
|
||||
# is up-to-date
|
||||
@ -13,27 +28,65 @@ main() {
|
||||
echo "Cloning cdrci/homebrew-core"
|
||||
git clone https://github.com/cdrci/homebrew-core.git
|
||||
|
||||
echo "Changing into homebrew-core directory"
|
||||
cd homebrew-core && pwd
|
||||
# Make sure the git clone step is successful
|
||||
if directory_exists "homebrew-core"; then
|
||||
echo "git clone failed. Cannot find homebrew-core directory."
|
||||
ls -la
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Adding Homebrew/homebrew-core as $(upstream)"
|
||||
echo "Changing into homebrew-core directory"
|
||||
pushd homebrew-core && pwd
|
||||
|
||||
echo "Adding Homebrew/homebrew-core"
|
||||
git remote add upstream https://github.com/Homebrew/homebrew-core.git
|
||||
|
||||
# Make sure the git remote step is successful
|
||||
if ! git config remote.upstream.url > /dev/null; then
|
||||
echo "git remote add upstream failed."
|
||||
echo "Could not find upstream in list of remotes."
|
||||
git remote -v
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# TODO@jsjoeio - can I somehow check that this succeeded?
|
||||
echo "Fetching upstream Homebrew/hombrew-core commits"
|
||||
git fetch upstream
|
||||
|
||||
# TODO@jsjoeio - can I somehow check that this succeeded?
|
||||
echo "Merging in latest Homebrew/homebrew-core changes"
|
||||
git merge upstream/master
|
||||
|
||||
echo "Pushing changes to cdrci/homebrew-core fork on GitHub"
|
||||
# Source: https://serverfault.com/a/912788
|
||||
# shellcheck disable=SC2016,SC2028
|
||||
echo '#!/bin/sh\nexec echo "$HOMEBREW_GITHUB_API_TOKEN"' > "$HOME"/.git-askpass.sh
|
||||
# Ensure it's executable since we just created it
|
||||
chmod +x "$HOME/.git-askpass.sh"
|
||||
|
||||
# GIT_ASKPASS lets us use the password when pushing without revealing it in the process list
|
||||
# See: https://serverfault.com/a/912788
|
||||
GIT_ASKPASS="$HOME/.git-askpass.sh" git push https://cdr-oss@github.com/cdr-oss/homebrew-core.git --all
|
||||
PATH_TO_GIT_ASKPASS="$HOME/git-askpass.sh"
|
||||
# Source: https://serverfault.com/a/912788
|
||||
# shellcheck disable=SC2016,SC2028
|
||||
echo 'echo $HOMEBREW_GITHUB_API_TOKEN' > "$PATH_TO_ASKPASS"
|
||||
|
||||
# Make sure the git-askpass.sh file creation is successful
|
||||
if file_exists "$PATH_TO_GIT_ASKPASS"; then
|
||||
echo "git-askpass.sh not found in $HOME."
|
||||
ls -la "$HOME"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Ensure it's executable since we just created it
|
||||
chmod +x "$PATH_TO_GIT_ASKPASS"
|
||||
|
||||
# Make sure the git-askpass.sh file is executable
|
||||
if is_executable "$PATH_TO_GIT_ASKPASS"; then
|
||||
echo "$PATH_TO_GIT_ASKPASS is not executable."
|
||||
ls -la "$PATH_TO_GIT_ASKPASS"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Export the variables so git sees them
|
||||
export HOMEBREW_GITHUB_API_TOKEN="$HOMEBREW_GITHUB_API_TOKEN"
|
||||
export GIT_ASKPASS="$PATH_TO_ASKPASS"
|
||||
git push https://cdr-oss@github.com/cdr-oss/homebrew-core.git --all
|
||||
|
||||
# Find the docs for bump-formula-pr here
|
||||
# https://github.com/Homebrew/brew/blob/master/Library/Homebrew/dev-cmd/bump-formula-pr.rb#L18
|
||||
@ -48,8 +101,14 @@ main() {
|
||||
fi
|
||||
|
||||
# Clean up and remove homebrew-core
|
||||
cd ..
|
||||
popd
|
||||
rm -rf homebrew-core
|
||||
|
||||
# Make sure homebrew-core is removed
|
||||
if directory_exists "homebrew-core"; then
|
||||
echo "rm -rf homebrew-core failed."
|
||||
ls -la
|
||||
fi
|
||||
}
|
||||
|
||||
main "$@"
|
||||
|
47
ci/steps/steps-lib.sh
Executable file
47
ci/steps/steps-lib.sh
Executable file
@ -0,0 +1,47 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# This is a library which contains functions used inside ci/steps
|
||||
#
|
||||
# We separated it into it's own file so that we could easily unit test
|
||||
# these functions and helpers
|
||||
|
||||
# Checks whether and environment variable is set.
|
||||
# Source: https://stackoverflow.com/a/62210688/3015595
|
||||
is_env_var_set() {
|
||||
local name="${1:-}"
|
||||
if test -n "${!name:-}"; then
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Checks whether a directory exists.
|
||||
directory_exists() {
|
||||
local dir="${1:-}"
|
||||
if [[ -d "${dir:-}" ]]; then
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Checks whether a file exists.
|
||||
file_exists() {
|
||||
local file="${1:-}"
|
||||
if test -f "${file:-}"; then
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Checks whether a file is executable.
|
||||
is_executable() {
|
||||
local file="${1:-}"
|
||||
if [ -f "${file}" ] && [ -r "${file}" ] && [ -x "${file}" ]; then
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
46
test/scripts/steps-lib.bats
Normal file
46
test/scripts/steps-lib.bats
Normal file
@ -0,0 +1,46 @@
|
||||
#!/usr/bin/env bats
|
||||
|
||||
SCRIPT_NAME="steps-lib.sh"
|
||||
SCRIPT="$BATS_TEST_DIRNAME/../../ci/steps/$SCRIPT_NAME"
|
||||
|
||||
source "$SCRIPT"
|
||||
|
||||
@test "is_env_var_set should return 1 if env var is not set" {
|
||||
run is_env_var_set "ASDF_TEST_SET"
|
||||
[ "$status" = 1 ]
|
||||
}
|
||||
|
||||
@test "is_env_var_set should return 0 if env var is set" {
|
||||
ASDF_TEST_SET="test" run is_env_var_set "ASDF_TEST_SET"
|
||||
[ "$status" = 0 ]
|
||||
}
|
||||
|
||||
@test "directory_exists should 1 if directory doesn't exist" {
|
||||
run directory_exists "/tmp/asdfasdfasdf"
|
||||
[ "$status" = 1 ]
|
||||
}
|
||||
|
||||
@test "directory_exists should 0 if directory exists" {
|
||||
run directory_exists "$(pwd)"
|
||||
[ "$status" = 0 ]
|
||||
}
|
||||
|
||||
@test "file_exists should 1 if file doesn't exist" {
|
||||
run file_exists "hello-asfd.sh"
|
||||
[ "$status" = 1 ]
|
||||
}
|
||||
|
||||
@test "file_exists should 0 if file exists" {
|
||||
run file_exists "$SCRIPT"
|
||||
[ "$status" = 0 ]
|
||||
}
|
||||
|
||||
@test "is_executable should 1 if file isn't executable" {
|
||||
run is_executable "hello-asfd.sh"
|
||||
[ "$status" = 1 ]
|
||||
}
|
||||
|
||||
@test "is_executable should 0 if file is executable" {
|
||||
run is_executable "$SCRIPT"
|
||||
[ "$status" = 0 ]
|
||||
}
|
Reference in New Issue
Block a user