Files

99 lines
2.3 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
IFS=$'\n\t'
GO=${GO:-go}
PSIPHON_VERSION=""
TARGETS=""
function help_message() {
echo "Usage: $0 [OPTIONS] <psiphon_version>"
echo "Options:"
echo " --targets <targets> Comma-separated list of target platforms (default: current platform)"
echo " --version <version> Psiphon version to build (default: latest)"
exit ${1:-1}
}
while [[ $# -gt 0 ]]; do
case $1 in
--help|-h)
help_message 0
;;
--targets=*)
TARGETS="${1#*=}"
shift
;;
-t | --targets)
TARGETS="${2}"
shift 2
;;
--version=*)
PSIPHON_VERSION="${1#*=}"
shift
;;
-v | --version)
PSIPHON_VERSION="${2}"
shift 2
;;
*)
echo "Unknown option: $1"
help_message
;;
esac
done
MYPATH=$(dirname "$(readlink -f "$0")")
source "${MYPATH}/latest_version.sh"
if [[ -z "${PSIPHON_VERSION}" ]]; then
PSIPHON_VERSION=$(get_latest_version)
else
if ! validate_version_format "${PSIPHON_VERSION}"; then
echo "Invalid Psiphon version format. Please use 'X.Y.Z' or 'vX.Y.Z' format."
exit 1
fi
fi
PSIPHON_VERSION=$(normalize_version "${PSIPHON_VERSION}")
ALL_TARGETS="linux/amd64,linux/386,linux/arm64,linux/arm/v7,linux/arm/v6,windows/amd64,windows/386,darwin/amd64,darwin/arm64"
CURRENT_TARGET="$(go env GOOS)/$(go env GOARCH)"
TARGETS=${TARGETS:-"current"}
TARGETS=$(decipher_targets "${TARGETS}")
TARGETS=${TARGETS%$'\n'}
IFS=' ' TARGETS=(${TARGETS//,/ })
BUILD_DIR=$(pwd)/tmp_build_$$
rm -rf "${BUILD_DIR}"
mkdir -p "${BUILD_DIR}"
trap 'rm -rf "${BUILD_DIR}"' EXIT
BIN_DIR="$(pwd)/dist"
rm -rf "${BIN_DIR}"
mkdir -p "${BIN_DIR}"
curl -sL https://github.com/Psiphon-Labs/psiphon-tunnel-core/archive/refs/tags/${PSIPHON_VERSION}.tar.gz | tar xz --strip-components=1 -C "${BUILD_DIR}"
pushd "${BUILD_DIR}/ConsoleClient" > /dev/null
export CGO_ENABLED=0
for PLATFORM in "${TARGETS[@]}"
do
echo "Building for ${PLATFORM}..."
IFS='/' read -r OS ARCH VARIANT <<< "${PLATFORM}"
export GOOS=${OS}
export GOARCH=${ARCH}
if [[ -n "${VARIANT}" ]]; then
export GOARM=${VARIANT#v}
fi
GOEXT=""
if [[ "${OS}" == "windows" ]]; then
GOEXT=".exe"
fi
${GO} build -a -tags netgo -ldflags "-s -w -extldflags '-static'" -o "${BIN_DIR}/psiphon_${PLATFORM//\//_}${GOEXT}"
unset GOOS GOARCH GOARM
done
popd > /dev/null