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