From fdaa9398928395e01692d5547badbf71aabbc34e Mon Sep 17 00:00:00 2001 From: Michael Vines Date: Fri, 7 Jun 2019 11:32:47 -0700 Subject: [PATCH] Bring in Travis CI to build Windows and mac OS release binaries (#4591) * Bring in Travis CI to build Windows and mac OS release binaries * Update .travis.yml --- .travis.yml | 40 +++++++++++++++++ README.md | 31 +++++++++++++ ci/env.sh | 4 ++ ci/publish-tarball.sh | 79 +++++++++++++++++++++------------- install/solana-install-init.sh | 6 +-- scripts/cargo-install-all.sh | 32 +++++++------- 6 files changed, 144 insertions(+), 48 deletions(-) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 000000000..448b3a286 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,40 @@ +os: + - osx + - windows + +language: rust +cache: cargo +rust: + - 1.35.0 + +install: + - source ci/rust-version.sh + - test $rust_stable = $TRAVIS_RUST_VERSION # Update .travis.yml rust version above when this fails + +script: + - source ci/env.sh + - ci/publish-tarball.sh + +notifications: + email: + recipients: + - mvines@solana.com + +deploy: + - provider: s3 + access_key_id: $AWS_ACCESS_KEY_ID + secret_access_key: $AWS_SECRET_ACCESS_KEY + bucket: release.solana.com + region: us-west-1 + skip_cleanup: true + acl: public_read + local_dir: travis-s3-upload + on: + all_branches: true + - provider: releases + api_key: $GITHUB_TOKEN + skip_cleanup: true + file_glob: true + file: travis-$TRAVIS_TAG-upload/* + on: + tags: true diff --git a/README.md b/README.md index a5ad1368a..665c7af1f 100644 --- a/README.md +++ b/README.md @@ -30,6 +30,37 @@ Before you jump into the code, review the online book [Solana: Blockchain Rebuil (The _latest_ development version of the online book is also [available here](https://solana-labs.github.io/book-edge/).) +Release Binaries +=== +Official release binaries are available at [Github Releases](https://github.com/solana-labs/solana/releases). + +Additionally we provide pre-release binaries for the latest code on the edge and +beta channels. Note that these pre-release binaries may be less stable than an +official release. + +### Edge channel +#### Linux (x86_64-unknown-linux-gnu) +* [solana.tar.bz2](http://release.solana.com/edge/solana-release-x86_64-unknown-linux-gnu.tar.bz2) +* [solana-install](http://release.solana.com/edge/solana-install-x86_64-unknown-linux-gnu) as a stand-alone executable +#### mac OS (x86_64-apple-darwin) +* [solana.tar.bz2](http://release.solana.com/edge/solana-release-x86_64-apple-darwin.tar.bz2) +* [solana-install](http://release.solana.com/edge/solana-install-x86_64-apple-darwin) as a stand-alone executable +#### Windows (x86_64-pc-windows-msvc) +* [solana.tar.bz2](http://release.solana.com/edge/solana-release-x86_64-pc-windows-msvc.tar.bz2) +* [solana-install.exe](http://release.solana.com/edge/solana-install-x86_64-pc-windows-msvc.exe) as a stand-alone executable + + +### Beta channel +#### Linux (x86_64-unknown-linux-gnu) +* [solana.tar.bz2](http://release.solana.com/beta/solana-release-x86_64-unknown-linux-gnu.tar.bz2) +* [solana-install](http://release.solana.com/beta/solana-install-x86_64-unknown-linux-gnu) as a stand-alone executable +#### mac OS (x86_64-apple-darwin) +* [solana.tar.bz2](http://release.solana.com/beta/solana-release-x86_64-apple-darwin.tar.bz2) +* [solana-install](http://release.solana.com/beta/solana-install-x86_64-apple-darwin) as a stand-alone executable +#### Windows (x86_64-pc-windows-msvc) +* [solana.tar.bz2](http://release.solana.com/beta/solana-release-x86_64-pc-windows-msvc.tar.bz2) +* [solana-install.exe](http://release.solana.com/beta/solana-install-x86_64-pc-windows-msvc.exe) as a stand-alone executable + Developing === diff --git a/ci/env.sh b/ci/env.sh index 2e73095b8..a651f336b 100644 --- a/ci/env.sh +++ b/ci/env.sh @@ -15,6 +15,7 @@ if ${CI:-false}; then else export CI_PULL_REQUEST= fi + export CI_OS_NAME=$TRAVIS_OS_NAME export CI_TAG=$TRAVIS_TAG fi if ${BUILDKITE:-false}; then @@ -30,6 +31,7 @@ if ${CI:-false}; then else export CI_PULL_REQUEST= fi + export CI_OS_NAME=linux # TRIGGERED_BUILDKITE_TAG is a workaround to propagate BUILDKITE_TAG into # the solana-secondary builder if [[ -n $TRIGGERED_BUILDKITE_TAG ]]; then @@ -44,6 +46,7 @@ else export CI_BUILD_ID= export CI_COMMIT= export CI_JOB_ID= + export CI_OS_NAME= export CI_PULL_REQUEST= export CI_TAG= fi @@ -54,6 +57,7 @@ CI_BRANCH=$CI_BRANCH CI_BUILD_ID=$CI_BUILD_ID CI_COMMIT=$CI_COMMIT CI_JOB_ID=$CI_JOB_ID +CI_OS_NAME=$CI_OS_NAME CI_PULL_REQUEST=$CI_PULL_REQUEST CI_TAG=$CI_TAG EOF diff --git a/ci/publish-tarball.sh b/ci/publish-tarball.sh index 3f811d20c..6139bf113 100755 --- a/ci/publish-tarball.sh +++ b/ci/publish-tarball.sh @@ -24,12 +24,17 @@ if [[ -z $CHANNEL_OR_TAG ]]; then exit 1 fi -case "$(uname)" in -Darwin) +PERF_LIBS=false +case "$CI_OS_NAME" in +osx) TARGET=x86_64-apple-darwin ;; -Linux) +linux) TARGET=x86_64-unknown-linux-gnu + PERF_LIBS=true + ;; +windows) + TARGET=x86_64-pc-windows-msvc ;; *) TARGET=unknown-unknown-unknown @@ -53,18 +58,21 @@ echo --- Creating tarball source ci/rust-version.sh stable scripts/cargo-install-all.sh +"$rust_stable" solana-release - rm -rf target/perf-libs - ./fetch-perf-libs.sh - mkdir solana-release/target - cp -a target/perf-libs solana-release/target/ + if $PERF_LIBS; then + rm -rf target/perf-libs + ./fetch-perf-libs.sh + mkdir solana-release/target + cp -a target/perf-libs solana-release/target/ + + # shellcheck source=/dev/null + source ./target/perf-libs/env.sh + ( + cd validator + cargo +"$rust_stable" install --path . --features=cuda --root ../solana-release-cuda + ) + cp solana-release-cuda/bin/solana-validator solana-release/bin/solana-validator-cuda + fi - # shellcheck source=/dev/null - source ./target/perf-libs/env.sh - ( - cd validator - cargo +"$rust_stable" install --path . --features=cuda --root ../solana-release-cuda - ) - cp solana-release-cuda/bin/solana-validator solana-release/bin/solana-validator-cuda cp -a scripts multinode-demo solana-release/ # Add a wrapper script for validator.sh @@ -103,23 +111,36 @@ if [[ -n $DO_NOT_PUBLISH_TAR ]]; then fi for file in solana-release-$TARGET.tar.bz2 solana-install-$TARGET; do - echo --- AWS S3 Store: $file - ( - set -x - $DRYRUN docker run \ - --rm \ - --env AWS_ACCESS_KEY_ID \ - --env AWS_SECRET_ACCESS_KEY \ - --volume "$PWD:/solana" \ - eremite/aws-cli:2018.12.18 \ - /usr/bin/s3cmd --acl-public put /solana/"$file" s3://release.solana.com/"$CHANNEL_OR_TAG"/"$file" + if [[ -n $BUILDKITE ]]; then + echo --- AWS S3 Store: $file + ( + set -x + $DRYRUN docker run \ + --rm \ + --env AWS_ACCESS_KEY_ID \ + --env AWS_SECRET_ACCESS_KEY \ + --volume "$PWD:/solana" \ + eremite/aws-cli:2018.12.18 \ + /usr/bin/s3cmd --acl-public put /solana/"$file" s3://release.solana.com/"$CHANNEL_OR_TAG"/$file - echo Published to: - $DRYRUN ci/format-url.sh http://release.solana.com/"$CHANNEL_OR_TAG"/"$file" - ) + echo Published to: + $DRYRUN ci/format-url.sh http://release.solana.com/"$CHANNEL_OR_TAG"/$file + ) - if [[ -n $TAG ]]; then - ci/upload-github-release-asset.sh $file + if [[ -n $TAG ]]; then + ci/upload-github-release-asset.sh $file + fi + elif [[ -n $TRAVIS ]]; then + # .travis.yaml uploads everything in the travis-s3-upload/ directory to release.solana.com + mkdir -p travis-s3-upload/"$CHANNEL_OR_TAG" + cp -v $file travis-s3-upload/"$CHANNEL_OR_TAG"/ + + if [[ -n $TAG ]]; then + # .travis.yaml uploads everything in the travis-$TAG-upload/ directory to + # the associated Github Release + mkdir -p travis-"$TAG"-upload/ + cp -v $file travis-"$TAG"-upload/ + fi fi done diff --git a/install/solana-install-init.sh b/install/solana-install-init.sh index 87ffe4020..55ded136a 100644 --- a/install/solana-install-init.sh +++ b/install/solana-install-init.sh @@ -66,9 +66,9 @@ main() { Linux) TARGET=x86_64-unknown-linux-gnu ;; - # Darwin) - # TARGET=x86_64-apple-darwin - # ;; + Darwin) + TARGET=x86_64-apple-darwin + ;; *) err "machine architecture is currently unsupported" ;; diff --git a/scripts/cargo-install-all.sh b/scripts/cargo-install-all.sh index d296c1593..a2b24a411 100755 --- a/scripts/cargo-install-all.sh +++ b/scripts/cargo-install-all.sh @@ -29,26 +29,26 @@ SECONDS=0 cargo $rust_version build --all --release --features="$cargoFeatures" ) -BIN_CRATES=( - bench-exchange - bench-streamer - bench-tps - drone - genesis - gossip - install - keygen - ledger-tool - replicator - validator - wallet +PROGRAMS=( + solana-drone + solana-genesis + solana-gossip + solana-install + solana-keygen + solana-ledger-tool + solana-replicator + solana-validator + solana-wallet + solana-bench-exchange + solana-bench-streamer + solana-bench-tps ) -for crate in "${BIN_CRATES[@]}"; do +for program in "${PROGRAMS[@]}"; do ( set -x - # shellcheck disable=SC2086 # Don't want to double quote $rust_version - cargo $rust_version install --force --path "$crate" --root "$installDir" --features="$cargoFeatures" + mkdir -p "$installDir"/bin + cp target/release/"$program" "$installDir"/bin ) done