FROM --platform=$BUILDPLATFORM golang:1.18 AS psiphon_builder
WORKDIR /go
LABEL stage=builder
ARG VERSION=2.0.23
ARG BUILDPLATFORM
ARG BUILDOS
ARG BUILDARCH
ARG TARGETS
ENV DIR=/go/src/github.com/Psiphon-Labs/psiphon-tunnel-core \
		GO111MODULE=off \
		CGO_ENABLED=0
SHELL ["/bin/bash", "-c"]
RUN TARGET_PALTFORMS=${TARGETS:-"$BUILDOS/$BUILDARCH"}; 																											\
		mkdir -p ${DIR} 																																											&&	\
		curl -sL https://github.com/Psiphon-Labs/psiphon-tunnel-core/archive/refs/tags/v${VERSION}.tar.gz |			 	\
		tar xz -C ${DIR} --strip-components=1 																																&& 	\
		(IFS=','; for PLATFORM in $TARGET_PALTFORMS; 																															\
		do 																																																				\
			OS=${PLATFORM%%/*} 																																									&& 	\
			ARCH=${PLATFORM#*/} 																																								&& 	\
			ARCH=${ARCH%/*} 																																										&& 	\
			VERSION=${PLATFORM##*/} 																																						&& 	\
			TARGETVARIANT=${VERSION/$ARCH/}																																			&& 	\
			VERSION=${TARGETVER/v/} 																																						&& 	\
			GOOS=${OS} GOARCH=${ARCH} go install -a -tags netgo 																										\
			-ldflags '-w -extldflags "-static"' 																																		\
			github.com/Psiphon-Labs/psiphon-tunnel-core/ConsoleClient																						&&	\
			BINARY=$(find /go/bin/* -name "ConsoleClient*") 																										&& 	\
			mv ${BINARY} /go/psiphon_${OS}_${ARCH}_${TARGETVARIANT};																								\
		done)

FROM alpine:3.16.0
RUN mkdir -p /psiphon /config 
ARG TARGETOS
ARG TARGETARCH
ARG TARGETVARIANT
COPY start_psiphon psiphon.config /psiphon/
COPY --from=psiphon_builder /go/psiphon_${TARGETOS}_${TARGETARCH}_${TARGETVARIANT} /psiphon/psiphon
EXPOSE 8080 1080
VOLUME /config
CMD ["/bin/sh", "/psiphon/start_psiphon"]
