forked from pactflow/pact-protobuf-plugin
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request pactflow#56 from YOU54F/feat/musl_linux_win_aarch64
feat: musl linux / win aarch64
- Loading branch information
Showing
5 changed files
with
192 additions
and
60 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,12 @@ | ||
[target.aarch64-unknown-linux-gnu] | ||
[target.x86_64-unknown-linux-musl] | ||
pre-build=[ | ||
"dpkg --add-architecture arm64 && apt-get update && apt-get install --assume-yes wget unzip", | ||
"apt-get update && apt-get install --assume-yes wget unzip", | ||
"wget https://github.com/protocolbuffers/protobuf/releases/download/v21.5/protoc-21.5-linux-x86_64.zip", | ||
"unzip protoc-21.5-linux-x86_64.zip -d /usr/local/" | ||
] | ||
[target.aarch64-unknown-linux-musl] | ||
pre-build=[ | ||
"dpkg --add-architecture arm64 && apt-get update && apt-get install --assume-yes wget unzip", | ||
"wget https://github.com/protocolbuffers/protobuf/releases/download/v21.5/protoc-21.5-linux-x86_64.zip", | ||
"unzip protoc-21.5-linux-x86_64.zip -d /usr/local/" | ||
] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,61 +1,137 @@ | ||
#!/bin/bash | ||
|
||
if [ $# -lt 1 ] | ||
set -e | ||
set -x | ||
|
||
RUST_DIR="$(cd -- "$(dirname "${BASH_SOURCE[0]}")" && pwd )" | ||
|
||
source "$RUST_DIR/scripts/gzip-and-sum.sh" | ||
ARTIFACTS_DIR=${ARTIFACTS_DIR:-"$RUST_DIR/release_artifacts"} | ||
mkdir -p "$ARTIFACTS_DIR" | ||
export CARGO_TARGET_DIR=${CARO_TARGET_DIR:-"$RUST_DIR/target"} | ||
|
||
if [ $# -lt 2 ] | ||
then | ||
echo "Usage : $0 <Linux|Windows|macOS> <version tag>" | ||
echo "Usage : $0 <Linux|Windows|macOS> <release version> <cargo flags>" | ||
exit | ||
fi | ||
|
||
set -e | ||
APP=pact-protobuf-plugin | ||
OS=$1 | ||
shift; | ||
VERSION=$1 | ||
shift; | ||
echo Building Release for "$OS" | ||
# All flags passed to this script are passed to cargo. | ||
cargo_flags=( "$@" ) | ||
build_manifest() { | ||
NEXT=$(echo "$VERSION" | sed 's/^refs\/tags\/v-//') | ||
# get latest release tag, if NEXT still contains refs | ||
if [[ "${NEXT}" =~ "refs"* ]]; then | ||
CRATE_VERSION=$(cat Cargo.toml| grep 'version = ".*"' -m1 | cut -d '"' -f 2) | ||
echo "defaulting NEXT=$VERSION to version from Cargo.toml $CRATE_VERSION" | ||
NEXT=$CRATE_VERSION | ||
# LATEST_RELEASE=$(echo $(curl -s https://api.github.com/repos/pact-foundation/pact-stub-server/releases/latest | jq -r '.name') | sed 's/v//') | ||
# echo "defaulting NEXT=$VERSION to latest release $LATEST_RELEASE" | ||
# NEXT=$LATEST_RELEASE | ||
fi | ||
sed -e 's/\"version\": \".*\"/\"version\": \"'${NEXT}'\"/' "$RUST_DIR/pact-plugin.json" > "$ARTIFACTS_DIR/pact-plugin.json" | ||
sed -e 's/VERSION=\".*\"/VERSION=\"'${NEXT}'\"/' "$RUST_DIR/scripts/install-plugin.sh" > "$ARTIFACTS_DIR/install-plugin.sh" | ||
openssl dgst -sha256 -r $ARTIFACTS_DIR/install-plugin.sh > "$ARTIFACTS_DIR/install-plugin.sh.sha256" | ||
} | ||
install_cross() { | ||
cargo install [email protected] | ||
} | ||
|
||
build_linux_x86_64() { | ||
install_cross | ||
cargo clean | ||
cross build --target=x86_64-unknown-linux-musl "${cargo_flags[@]}" | ||
if [[ "${cargo_flags[*]}" =~ "--release" ]]; then | ||
gzip_and_sum \ | ||
"$CARGO_TARGET_DIR/x86_64-unknown-linux-musl/release/${APP}" \ | ||
"$ARTIFACTS_DIR/${APP}-linux-x86_64.gz" | ||
# cargo clean | ||
fi | ||
} | ||
|
||
build_linux_aarch64() { | ||
install_cross | ||
cargo clean | ||
cross build --target=aarch64-unknown-linux-musl "${cargo_flags[@]}" | ||
|
||
if [[ "${cargo_flags[*]}" =~ "--release" ]]; then | ||
gzip_and_sum \ | ||
"$CARGO_TARGET_DIR/aarch64-unknown-linux-musl/release/${APP}" \ | ||
"$ARTIFACTS_DIR/${APP}-linux-aarch64.gz" | ||
fi | ||
} | ||
# Build the x86_64 darwin release | ||
build_macos_x86_64() { | ||
cargo build --target x86_64-apple-darwin "${cargo_flags[@]}" | ||
|
||
if [[ "${cargo_flags[*]}" =~ "--release" ]]; then | ||
gzip_and_sum \ | ||
"$CARGO_TARGET_DIR/x86_64-apple-darwin/release/${APP}" \ | ||
"$ARTIFACTS_DIR/${APP}-osx-x86_64.gz" | ||
gzip_and_sum \ | ||
"$CARGO_TARGET_DIR/x86_64-apple-darwin/release/${APP}" \ | ||
"$ARTIFACTS_DIR/${APP}-macos-x86_64.gz" | ||
fi | ||
} | ||
|
||
# Build the aarch64 darwin release | ||
build_macos_aarch64() { | ||
cargo build --target aarch64-apple-darwin "${cargo_flags[@]}" | ||
|
||
if [[ "${cargo_flags[*]}" =~ "--release" ]]; then | ||
gzip_and_sum \ | ||
"$CARGO_TARGET_DIR/aarch64-apple-darwin/release/${APP}" \ | ||
"$ARTIFACTS_DIR/${APP}-osx-aarch64.gz" | ||
gzip_and_sum \ | ||
"$CARGO_TARGET_DIR/aarch64-apple-darwin/release/${APP}" \ | ||
"$ARTIFACTS_DIR/${APP}-macos-aarch64.gz" | ||
fi | ||
} | ||
|
||
# Build the x86_64 windows release | ||
build_windows_x86_64() { | ||
cargo build --target x86_64-pc-windows-msvc "${cargo_flags[@]}" | ||
|
||
# If --release in cargo flags, then gzip and sum the release artifacts | ||
if [[ "${cargo_flags[*]}" =~ "--release" ]]; then | ||
gzip_and_sum \ | ||
"$CARGO_TARGET_DIR/x86_64-pc-windows-msvc/release/${APP}.exe" \ | ||
"$ARTIFACTS_DIR/${APP}-windows-x86_64.exe.gz" | ||
fi | ||
} | ||
|
||
echo Building Release for "$1" - "$2" | ||
# Build the aarch64 windows release | ||
build_windows_aarch64() { | ||
cargo build --target aarch64-pc-windows-msvc "${cargo_flags[@]}" | ||
|
||
cargo clean | ||
mkdir -p target/artifacts | ||
if [[ "${cargo_flags[*]}" =~ "--release" ]]; then | ||
gzip_and_sum \ | ||
"$CARGO_TARGET_DIR/aarch64-pc-windows-msvc/release/${APP}.exe" \ | ||
"$ARTIFACTS_DIR/${APP}-windows-aarch64.exe.gz" | ||
fi | ||
} | ||
|
||
case "$1" in | ||
case "$OS" in | ||
Linux) echo "Building for Linux" | ||
docker run --rm --user "$(id -u)":"$(id -g)" -v "$(pwd):/workspace" -w /workspace -t \ | ||
pactfoundation/rust-musl-build -c 'LIBZ_SYS_STATIC=1 cargo build --release' | ||
gzip -c target/release/pact-protobuf-plugin > target/artifacts/pact-protobuf-plugin-linux-x86_64.gz | ||
openssl dgst -sha256 -r target/artifacts/pact-protobuf-plugin-linux-x86_64.gz > target/artifacts/pact-protobuf-plugin-linux-x86_64.gz.sha256 | ||
cp pact-plugin.json target/artifacts | ||
NEXT=$(echo "$2" | cut -d\- -f2) | ||
sed -e 's/VERSION=\"0.1.5\"/VERSION=\"'${NEXT}'\"/' scripts/install-plugin.sh > target/artifacts/install-plugin.sh | ||
openssl dgst -sha256 -r target/artifacts/install-plugin.sh > target/artifacts/install-plugin.sh.sha256 | ||
|
||
# Build aarch64 | ||
cargo install cross --git https://github.com/cross-rs/cross | ||
cross build --target aarch64-unknown-linux-gnu --release | ||
gzip -c target/aarch64-unknown-linux-gnu/release/pact-protobuf-plugin > target/artifacts/pact-protobuf-plugin-linux-aarch64.gz | ||
openssl dgst -sha256 -r target/artifacts/pact-protobuf-plugin-linux-aarch64.gz > target/artifacts/pact-protobuf-plugin-linux-aarch64.gz.sha256 | ||
build_linux_x86_64 | ||
build_linux_aarch64 | ||
build_manifest | ||
;; | ||
Windows) echo "Building for Windows" | ||
cargo build --release | ||
gzip -c target/release/pact-protobuf-plugin.exe > target/artifacts/pact-protobuf-plugin-windows-x86_64.exe.gz | ||
openssl dgst -sha256 -r target/artifacts/pact-protobuf-plugin-windows-x86_64.exe.gz > target/artifacts/pact-protobuf-plugin-windows-x86_64.exe.gz.sha256 | ||
Windows) echo "Building for windows" | ||
build_windows_x86_64 | ||
build_windows_aarch64 | ||
;; | ||
macOS) echo "Building for OSX" | ||
cargo build --release | ||
gzip -c target/release/pact-protobuf-plugin > target/artifacts/pact-protobuf-plugin-osx-x86_64.gz | ||
openssl dgst -sha256 -r target/artifacts/pact-protobuf-plugin-osx-x86_64.gz > target/artifacts/pact-protobuf-plugin-osx-x86_64.gz.sha256 | ||
# macos | ||
gzip -c target/release/pact-protobuf-plugin > target/artifacts/pact-protobuf-plugin-macos-x86_64.gz | ||
openssl dgst -sha256 -r target/artifacts/pact-protobuf-plugin-macos-x86_64.gz > target/artifacts/pact-protobuf-plugin-macos-x86_64.gz.sha256 | ||
|
||
# M1 | ||
# export SDKROOT=$(xcrun -sdk macosx11.1 --show-sdk-path) | ||
# export MACOSX_DEPLOYMENT_TARGET=$(xcrun -sdk macosx11.1 --show-sdk-platform-version) | ||
export MACOSX_DEPLOYMENT_TARGET=${MACOSX_DEPLOYMENT_TARGET:-12} | ||
cargo build --target aarch64-apple-darwin --release | ||
|
||
gzip -c target/aarch64-apple-darwin/release/pact-protobuf-plugin > target/artifacts/pact-protobuf-plugin-osx-aarch64.gz | ||
openssl dgst -sha256 -r target/artifacts/pact-protobuf-plugin-osx-aarch64.gz > target/artifacts/pact-protobuf-plugin-osx-aarch64.gz.sha256 | ||
# macos | ||
gzip -c target/aarch64-apple-darwin/release/pact-protobuf-plugin > target/artifacts/pact-protobuf-plugin-macos-aarch64.gz | ||
openssl dgst -sha256 -r target/artifacts/pact-protobuf-plugin-macos-aarch64.gz > target/artifacts/pact-protobuf-plugin-macos-aarch64.gz.sha256 | ||
macOS) echo "Building for macos" | ||
build_macos_x86_64 | ||
build_macos_aarch64 | ||
;; | ||
*) echo "$1 is not a recognised OS" | ||
*) echo "$OS is not a recognised OS" | ||
exit 1 | ||
;; | ||
esac | ||
esac |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
#!/bin/bash | ||
|
||
# Gzip and sum a file. | ||
# | ||
# Usage: gzip_and_sum <orig_file> <target_file> [<digest_file>] | ||
# | ||
# - orig_file: the file to gzip and sum | ||
# - target_file: the file to write the gzipped file to | ||
# - digest_file: the file to write the digest to. If not provided, defaults to | ||
# <target_file>.sha256 | ||
gzip_and_sum() { | ||
orig_file=$1 | ||
target_file=$2 | ||
digest_file=${3:-$target_file.sha256} | ||
|
||
gzip --stdout --best "$orig_file" > "$target_file" | ||
openssl dgst -sha256 -r "$target_file" > "$digest_file" | ||
} |