github-device-flow 0.2.1

Binary and library for performing the GitHub Device Flow
Documentation
#!/bin/bash

BIN_NAME=github-device-flow

function usage {
		echo "Usage: $0 <subcommand>"
		exit 1
}

if [ $# -ne 1 ]; then
		usage
fi

function build_x86_64 {
  docker run --rm -v "$(pwd)":/home/rust/src messense/rust-musl-cross:x86_64-musl cargo build --release
	docker run --rm -v "$(pwd)":/home/rust/src messense/rust-musl-cross:x86_64-musl musl-strip /home/rust/src/target/x86_64-unknown-linux-musl/release/$BIN_NAME
}

function build_arm {
	docker run --rm -v "$(pwd)":/home/rust/src messense/rust-musl-cross:arm-musleabihf cargo build --release
	docker run --rm -v "$(pwd)":/home/rust/src messense/rust-musl-cross:arm-musleabihf musl-strip /home/rust/src/target/arm-unknown-linux-musleabihf/release/$BIN_NAME
}

function build_armv7 {
	docker run --rm -v "$(pwd)":/home/rust/src messense/rust-musl-cross:armv7-musleabihf cargo build --release
	docker run --rm -v "$(pwd)":/home/rust/src messense/rust-musl-cross:armv7-musleabihf musl-strip /home/rust/src/target/armv7-unknown-linux-musleabihf/release/$BIN_NAME
}

function create_linux_release_artifact {
	[ -d linux-release ] && rm -rf linux-release
	mkdir -p linux-release

	sudo chown -R runner:docker ./target

	if [ "$1" == "x86_64-linux" ]; then
		cp target/x86_64-unknown-linux-musl/release/$BIN_NAME linux-release
	elif [ "$1" == "arm-linux" ]; then
		cp target/arm-unknown-linux-musleabihf/release/$BIN_NAME linux-release
	elif [ "$1" == "armv7-linux" ]; then
		cp target/armv7-unknown-linux-musleabihf/release/$BIN_NAME
	fi
	pushd linux-release

	zip -9 $BIN_NAME.$1.zip $BIN_NAME

	popd

	[ -f linux-release/$BIN_NAME.$1.zip ] && mv linux-release/$BIN_NAME.$1.zip .
	[ -d linux-release ] && rm -rf linux-release
}

function build_macos {
	if is_macos; then
		cargo build --release
	else
		echo "This command must be run on macOS"
	fi
}

function local_build {
	build_x86_64
	build_arm
	build_armv7
	build_macos
}

function create_release {
	current_tag=$(git tag --points-at HEAD)
	current_release_tag=$(gh release list --json tagName --limit 1 -q '.[0].tagName')

	if [ "$current_tag" != "$current_release_tag" ]; then
		echo "Creating release $current_tag"
	else
		echo "Release $current_tag already exists"
		return 1
	fi

	if [ -z "$current_tag" ]; then
		echo "No tag found"

		new_tag=$(echo ${current_release_tag} | awk -F. -v OFS=. '{$NF += 1 ; print}')

		if [ -t 0 ]; then
			read -p "Enter new tag, leave empty for $new_tag or n to exit " new_tag
		else
			new_tag="n"
		fi
		if [ "$new_tag" == "n" ]; then
			exit 1
		fi

		git tag $new_tag
	fi

	gh release create $new_tag --notes "Release $new_tag"
}

case $1 in
	"x86_64")
		build_x86_64
		create_linux_release_artifact x86_64-linux
		;;
	"arm")
		build_arm
		create_linux_release_artifact arm-linux
		;;
	"armv7")
		build_armv7
		create_linux_release_artifact armv7-linux
		;;
	"macos")
		build_macos
		create_macos_artifact
		;;
	"local-release")
		create_release
		;;
	"local-build")
		local_build
		;;
	"notarize-macos")
		create_macos_artifact
		;;
	*)
		usage
		;;
esac