From a2c4c43eaa553bf1caa316b6b70edf60ca0e4cde Mon Sep 17 00:00:00 2001 From: Noah Theus Date: Sun, 22 Dec 2024 07:41:48 +0100 Subject: [PATCH] add build script --- build.sh | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 build.sh diff --git a/build.sh b/build.sh new file mode 100644 index 0000000..49d6e91 --- /dev/null +++ b/build.sh @@ -0,0 +1,54 @@ +#!/usr/bin/env bash + + +# Get the current directory name as the project name +PROJECT_NAME=$(basename "$PWD") + +# Change to the Go project directory (current directory) +cd "$PWD" || exit + +# List of target architectures +architectures=( + "linux/amd64" + "linux/386" + "linux/arm64" + "linux/arm/v7" + "linux/riscv64" + "windows/amd64" + "darwin/amd64" + "darwin/arm64" +) + +# Create a build directory if it doesn't exist +mkdir -p build + +# Loop over architectures and build for each one +for arch in "${architectures[@]}"; do + os=$(echo $arch | cut -d '/' -f 1) + arch_type=$(echo $arch | cut -d '/' -f 2) + + # Set the output file name using the project name, os, and arch + output_file="build/$PROJECT_NAME-$os-$arch_type" + + # Build the app for the specific architecture + GOARCH=$arch_type GOOS=$os go build -o "$output_file" + + # Provide feedback to the user + if [ $? -eq 0 ]; then + echo "Successfully built for $arch: $output_file" + + # Create a tar.gz archive for the individual build + tar -czf "$output_file.tar.gz" -C build $(basename "$output_file") + if [ $? -eq 0 ]; then + echo "Successfully created archive: $output_file.tar.gz" + + # Delete the executable after archiving + rm "$output_file" + echo "Deleted executable: $output_file" + else + echo "Failed to create archive for $output_file" + fi + else + echo "Failed to build for $arch" + fi +done \ No newline at end of file