github.com/bshelton229/agent@v3.5.4+incompatible/.buildkite/steps/release-homebrew.sh (about) 1 #!/usr/bin/env bash 2 3 # Must be executed after github-release.sh as it depends on release meta-data 4 5 set -euo pipefail 6 7 # Allows you to pipe JSON in and fetch keys using Ruby hash syntax 8 # 9 # Examples: 10 # 11 # echo '{"key":{"subkey": ["value"]}}' | parse_json '["key"]["subkey"].first' 12 function parse_json { 13 ruby -r json -e "print JSON.parse(STDIN.read)$1" 14 } 15 16 function to_json { 17 ruby -r json -e "print STDIN.read.to_json" 18 } 19 20 echo '--- Getting agent version from build meta data' 21 22 export FULL_AGENT_VERSION=$(buildkite-agent meta-data get "agent-version-full") 23 export AGENT_VERSION=$(buildkite-agent meta-data get "agent-version") 24 export BUILD_VERSION=$(buildkite-agent meta-data get "agent-version-build") 25 export IS_PRERELEASE=$(buildkite-agent meta-data get "agent-is-prerelease") 26 27 echo "Full agent version: $FULL_AGENT_VERSION" 28 echo "Agent version: $AGENT_VERSION" 29 echo "Build version: $BUILD_VERSION" 30 echo "Is prerelease?: $IS_PRERELEASE" 31 32 if [[ "$CODENAME" == "unstable" && "$IS_PRERELEASE" == "0" ]] ; then 33 echo "Skipping homebrew release, will happen in stable pipeline" 34 exit 0 35 fi 36 37 if [[ "$CODENAME" == "stable" && "$IS_PRERELEASE" == "1" ]] ; then 38 echo "Skipping homebrew release, should have happened in unstable pipeline" 39 exit 0 40 fi 41 42 GITHUB_RELEASE_VERSION=$(buildkite-agent meta-data get github_release_version) 43 GITHUB_RELEASE_TYPE=$(buildkite-agent meta-data get github_release_type) 44 45 if [[ "$GITHUB_RELEASE_TYPE" != "stable" ]]; then 46 BREW_RELEASE_TYPE="devel" 47 else 48 BREW_RELEASE_TYPE="stable" 49 fi 50 51 BINARY_ARCH="amd64" 52 BINARY_NAME="buildkite-agent-darwin-${BINARY_ARCH}-${AGENT_VERSION}.tar.gz" 53 54 DOWNLOAD_URL="https://github.com/buildkite/agent/releases/download/v$GITHUB_RELEASE_VERSION/$BINARY_NAME" 55 FORMULA_FILE=./pkg/buildkite-agent.rb 56 UPDATED_FORMULA_FILE=./pkg/buildkite-agent-updated.rb 57 58 ARTIFACTS_BUILD="$(buildkite-agent meta-data get "agent-artifacts-build")" 59 60 echo "--- :package: Calculating SHAs for releases/$BINARY_NAME" 61 62 buildkite-agent artifact download --build "$ARTIFACTS_BUILD" "releases/$BINARY_NAME" . 63 64 # $ openssl dgst -sha256 -hex $FILE # portable sha256 with openssl 65 # SHA256($FILE)= 26ff51b51eab2bfbcb2796bc72feec366d7e37a6cf8a11686ee8a6f14a8fc92c 66 # | grep -o '\S*$' # grab the last word (some openssl versions only list the hex) 67 # 26ff51b51eab2bfbcb2796bc72feec366d7e37a6cf8a11686ee8a6f14a8fc92c 68 RELEASE_SHA256="$(openssl dgst -sha256 -hex "releases/$BINARY_NAME" | grep -o '\S*$')" 69 70 echo "Release SHA256: $RELEASE_SHA256" 71 72 echo "--- :octocat: Fetching current homebrew formula from Github Contents API" 73 74 CONTENTS_API_RESPONSE="$(curl "https://api.github.com/repos/buildkite/homebrew-buildkite/contents/buildkite-agent.rb?access_token=$GITHUB_RELEASE_ACCESS_TOKEN")" 75 76 echo "Base64 decoding Github response into $FORMULA_FILE" 77 78 mkdir -p pkg 79 parse_json '["content"]' <<< "$CONTENTS_API_RESPONSE" | openssl enc -base64 -d > "$FORMULA_FILE" 80 81 echo "--- :ruby: Updating formula file" 82 83 echo "Homebrew release type: $BREW_RELEASE_TYPE" 84 echo "Homebrew release version: $GITHUB_RELEASE_VERSION" 85 echo "Homebrew release download URL: $DOWNLOAD_URL" 86 echo "Homebrew release download SHA256: $RELEASE_SHA256" 87 88 ./scripts/update-homebrew-formula.rb "$BREW_RELEASE_TYPE" "$GITHUB_RELEASE_VERSION" "$DOWNLOAD_URL" "$RELEASE_SHA256" < "$FORMULA_FILE" > "$UPDATED_FORMULA_FILE" 89 90 echo "--- :rocket: Commiting new formula to master via Github Contents API" 91 92 UPDATED_FORMULA_BASE64="$(openssl enc -base64 -A < "$UPDATED_FORMULA_FILE")" 93 MASTER_FORMULA_SHA="$(parse_json '["sha"]' <<< "$CONTENTS_API_RESPONSE")" 94 95 echo "Old formula SHA: $MASTER_FORMULA_SHA" 96 97 cat <<JSON > pkg/github_post_data.json 98 { 99 "message": "buildkite-agent $GITHUB_RELEASE_VERSION", 100 "sha": "$MASTER_FORMULA_SHA", 101 "content": "$UPDATED_FORMULA_BASE64", 102 "branch": "master" 103 } 104 JSON 105 106 107 if [[ "${DRY_RUN:-}" == "false" ]] ; then 108 echo "Posting JSON to Github Contents API" 109 curl -X PUT "https://api.github.com/repos/buildkite/homebrew-buildkite/contents/buildkite-agent.rb?access_token=$GITHUB_RELEASE_ACCESS_TOKEN" \ 110 -H "Content-Type: application/json" \ 111 --data-binary "@pkg/github_post_data.json" \ 112 --fail 113 fi