diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 00000000..4807ae58 --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,24 @@ +version: 2.1 +jobs: + build: + docker: + - image: circleci/rust:latest + steps: + - checkout + - run: | + sudo apt-get update + sudo apt-get install -y libssl-dev libsodium-dev + - restore_cache: + key: cargo-cache-{{ arch }}-{{ checksum "Cargo.lock" }} + - run: | + export SODIUM_USE_PKG_CONFIG=1 + export OPENSSL_STATIC=1 + ./build-host-release + - save_cache: + paths: + - /usr/local/cargo/registry + - ./target + key: cargo-cache-{{ arch }}-{{ checksum "Cargo.lock" }} + - store_artifacts: + path: ./build/release + destination: releases diff --git a/.gitignore b/.gitignore index 72b595de..c1d37946 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,5 @@ /target -/build/*.tar.gz -/build/*.tar.xz -/build/*.zip +/build/release /build/target /build/install /build/*.sha256 diff --git a/README.md b/README.md index b85c0f2d..db9f9930 100644 --- a/README.md +++ b/README.md @@ -2,10 +2,12 @@ [![Codacy Badge](https://api.codacy.com/project/badge/Grade/2029e102e1bd46fb9423cb35980636b7)](https://app.codacy.com/app/zonyitoo/shadowsocks-rust?utm_source=github.com&utm_medium=referral&utm_content=shadowsocks/shadowsocks-rust&utm_campaign=Badge_Grade_Dashboard) [![Build Status](https://img.shields.io/travis/shadowsocks/shadowsocks-rust.svg)](https://travis-ci.org/shadowsocks/shadowsocks-rust) +[![Build status](https://ci.appveyor.com/api/projects/status/h3ny0dov7v9xioa5?svg=true)](https://ci.appveyor.com/project/zonyitoo/shadowsocks-rust-0grjf) [![License](https://img.shields.io/github/license/zonyitoo/shadowsocks-rust.svg)](https://github.com/zonyitoo/shadowsocks-rust) [![crates.io](https://img.shields.io/crates/v/shadowsocks-rust.svg)](https://crates.io/crates/shadowsocks-rust) [![dependency status](https://deps.rs/repo/github/shadowsocks/shadowsocks-rust/status.svg)](https://deps.rs/repo/github/shadowsocks/shadowsocks-rust) [![Release](https://img.shields.io/github/release/shadowsocks/shadowsocks-rust.svg)](https://github.com/shadowsocks/shadowsocks-rust/releases) +[![CircleCI](https://circleci.com/gh/shadowsocks/shadowsocks-rust.svg?style=svg)](https://circleci.com/gh/shadowsocks/shadowsocks-rust) This is a port of [shadowsocks](https://github.com/shadowsocks/shadowsocks). diff --git a/build-host-release b/build-host-release new file mode 100755 index 00000000..f246483c --- /dev/null +++ b/build-host-release @@ -0,0 +1,50 @@ +#!/bin/bash + +ROOT_DIR=$( cd $( dirname $0 ) && pwd ) +VERSION=$(grep -E '^version' "${ROOT_DIR}/Cargo.toml" | awk '{print $3}' | sed 's/"//g') +HOST_TRIPLE=$(rustc -Vv | grep 'host:' | awk '{print $2}') + +cargo build --release --features "miscreant" +if [[ "$?" != "0" ]]; then + exit $?; +fi + +TARGET_SUFFIX="" +if [[ "${HOST_TRIPLE}" == *"-windows-"* ]]; then + TARGET_SUFFIX=".exe" +fi + +TARGETS=("sslocal${TARGET_SUFFIX}" "ssserver${TARGET_SUFFIX}" "ssurl${TARGET_SUFFIX}" "sstunnel${TARGET_SUFFIX}") +if [[ "${HOST_TRIPLE}" == *"-linux-"* ]]; then + TARGETS+=("ssredir${TARGET_SUFFIX}") +fi + +RELEASE_FOLDER="${ROOT_DIR}/build/release" +RELEASE_PACKAGE_NAME="shadowsocks-v${VERSION}-stable.${HOST_TRIPLE}" + +mkdir -p "${RELEASE_FOLDER}" + +# Into release folder +cd "target/release" + +if [[ "${HOST_TRIPLE}" == *"-windows-"* ]]; then + # For Windows, use zip + + RELEASE_PACKAGE_FILE_NAME="${RELEASE_PACKAGE_NAME}.zip" + RELEASE_PACKAGE_FILE_PATH="${RELEASE_FOLDER}/${RELEASE_PACKAGE_FILE_NAME}" + zip "${RELEASE_PACKAGE_FILE_PATH}" "${TARGETS[@]}" + + # Checksum + cd "${RELEASE_FOLDER}" + shasum -a 256 "${RELEASE_PACKAGE_FILE_NAME}" > "${RELEASE_PACKAGE_FILE_NAME}.sha256" +else + # For others, Linux, OS X, uses tar.xz + + RELEASE_PACKAGE_FILE_NAME="${RELEASE_PACKAGE_NAME}.tar.xz" + RELEASE_PACKAGE_FILE_PATH="${RELEASE_FOLDER}/${RELEASE_PACKAGE_FILE_NAME}" + tar -cJf "${RELEASE_PACKAGE_FILE_PATH}" "${TARGETS[@]}" + + # Checksum + cd "${RELEASE_FOLDER}" + shasum -a 256 "${RELEASE_PACKAGE_FILE_NAME}" > "${RELEASE_PACKAGE_FILE_NAME}.sha256" +fi \ No newline at end of file diff --git a/build/build-release b/build/build-release index f05c04b5..6e3b049e 100755 --- a/build/build-release +++ b/build/build-release @@ -39,9 +39,12 @@ function build() { exit $? fi + PKG_DIR="${CUR_DIR}/release" + mkdir -p "${PKG_DIR}" + if [[ "$TARGET" == *"-linux-"* ]]; then - PKG_NAME="shadowsocks-v${VERSION}-stable.${TARGET}.tar.xz" - PKG_PATH="${CUR_DIR}/${PKG_NAME}" + PKG_NAME="shadowsocks-v${VERSION}.${TARGET}.tar.xz" + PKG_PATH="${PKG_DIR}/${PKG_NAME}" echo "* Packaging XZ in ${PKG_PATH} ..." cd ${RELEASE_DIR} @@ -56,11 +59,11 @@ function build() { exit $? fi - cd "${CUR_DIR}" + cd "${PKG_DIR}" shasum -a 256 "${PKG_NAME}" > "${PKG_NAME}.sha256" elif [[ "$TARGET" == *"-windows-"* ]]; then - PKG_NAME="shadowsocks-v${VERSION}-stable.${TARGET}.zip" - PKG_PATH="${CUR_DIR}/${PKG_NAME}" + PKG_NAME="shadowsocks-v${VERSION}.${TARGET}.zip" + PKG_PATH="${PKG_DIR}/${PKG_NAME}" echo "* Packaging ZIP in ${PKG_PATH} ..." cd ${RELEASE_DIR} @@ -74,7 +77,7 @@ function build() { exit $? fi - cd "${CUR_DIR}" + cd "${PKG_DIR}" shasum -a 256 "${PKG_NAME}" > "${PKG_NAME}.sha256" fi