Files
BinaryObjectScanner/publish-nix.sh

152 lines
5.7 KiB
Bash
Raw Normal View History

2024-06-17 16:16:11 -04:00
#!/bin/bash
# This batch file assumes the following:
2025-11-24 11:57:17 -05:00
# - .NET 10.0 (or newer) SDK is installed and in PATH
# - zip is installed and in PATH
2024-02-20 20:51:59 -05:00
# - Git is installed and in PATH
#
# If any of these are not satisfied, the operation may fail
# in an unpredictable way and result in an incomplete output.
2024-02-20 20:51:59 -05:00
# Optional parameters
USE_ALL=false
2024-12-06 11:52:33 -05:00
INCLUDE_DEBUG=false
2024-02-20 20:51:59 -05:00
NO_BUILD=false
NO_ARCHIVE=false
2024-12-06 11:52:33 -05:00
while getopts "udba" OPTION; do
2024-06-26 11:32:20 -04:00
case $OPTION in
2024-02-20 20:51:59 -05:00
u)
USE_ALL=true
;;
2024-12-06 11:52:33 -05:00
d)
INCLUDE_DEBUG=true
;;
2024-02-20 20:51:59 -05:00
b)
NO_BUILD=true
;;
a)
NO_ARCHIVE=true
;;
*)
echo "Invalid option provided"
exit 1
;;
esac
done
# Set the current directory as a variable
BUILD_FOLDER=$PWD
2024-02-20 20:51:59 -05:00
# Set the current commit hash
2024-06-26 11:32:20 -04:00
COMMIT=$(git log --pretty=%H -1)
# Output the selected options
echo "Selected Options:"
echo " Use all frameworks (-u) $USE_ALL"
2024-12-06 11:52:33 -05:00
echo " Include debug builds (-d) $INCLUDE_DEBUG"
2024-06-26 11:32:20 -04:00
echo " No build (-b) $NO_BUILD"
echo " No archive (-a) $NO_ARCHIVE"
echo " "
2024-02-20 20:51:59 -05:00
# Create the build matrix arrays
2025-11-24 11:57:17 -05:00
FRAMEWORKS=("net10.0")
2024-06-26 11:32:20 -04:00
RUNTIMES=("win-x86" "win-x64" "win-arm64" "linux-x64" "linux-arm64" "osx-x64" "osx-arm64")
2024-02-20 20:51:59 -05:00
# Use expanded lists, if requested
2024-06-26 11:32:20 -04:00
if [ $USE_ALL = true ]; then
2025-11-24 11:57:17 -05:00
FRAMEWORKS=("net20" "net35" "net40" "net452" "net462" "net472" "net48" "netcoreapp3.1" "net5.0" "net6.0" "net7.0" "net8.0" "net9.0" "net10.0")
2024-02-20 20:51:59 -05:00
fi
# Create the filter arrays
2025-11-24 11:57:17 -05:00
SINGLE_FILE_CAPABLE=("net5.0" "net6.0" "net7.0" "net8.0" "net9.0" "net10.0")
VALID_APPLE_FRAMEWORKS=("net6.0" "net7.0" "net8.0" "net9.0" "net10.0")
VALID_CROSS_PLATFORM_FRAMEWORKS=("netcoreapp3.1" "net5.0" "net6.0" "net7.0" "net8.0" "net9.0" "net10.0")
2024-06-26 12:44:32 -04:00
VALID_CROSS_PLATFORM_RUNTIMES=("win-arm64" "linux-x64" "linux-arm64" "osx-x64" "osx-arm64")
2024-02-20 20:51:59 -05:00
# Only build if requested
2024-06-26 11:32:20 -04:00
if [ $NO_BUILD = false ]; then
2024-02-20 20:51:59 -05:00
# Restore Nuget packages for all builds
echo "Restoring Nuget packages"
dotnet restore
2024-02-20 20:51:59 -05:00
# Create Nuget Package
2024-02-20 21:04:39 -05:00
dotnet pack BinaryObjectScanner/BinaryObjectScanner.csproj --output $BUILD_FOLDER
2024-11-04 14:38:23 -05:00
# Build ProtectionScan
for FRAMEWORK in "${FRAMEWORKS[@]}"; do
for RUNTIME in "${RUNTIMES[@]}"; do
# Output the current build
echo "===== Build ProtectionScan - $FRAMEWORK, $RUNTIME ====="
# If we have an invalid combination of framework and runtime
if [[ ! $(echo ${VALID_CROSS_PLATFORM_FRAMEWORKS[@]} | fgrep -w $FRAMEWORK) ]]; then
if [[ $(echo ${VALID_CROSS_PLATFORM_RUNTIMES[@]} | fgrep -w $RUNTIME) ]]; then
echo "Skipped due to invalid combination"
continue
fi
fi
# If we have Apple silicon but an unsupported framework
if [[ ! $(echo ${VALID_APPLE_FRAMEWORKS[@]} | fgrep -w $FRAMEWORK) ]]; then
if [ $RUNTIME = "osx-arm64" ]; then
echo "Skipped due to no Apple Silicon support"
continue
fi
fi
# Only .NET 5 and above can publish to a single file
if [[ $(echo ${SINGLE_FILE_CAPABLE[@]} | fgrep -w $FRAMEWORK) ]]; then
2024-12-06 11:52:33 -05:00
# Only include Debug if set
if [ $INCLUDE_DEBUG = true ]; then
2024-11-04 14:38:23 -05:00
dotnet publish ProtectionScan/ProtectionScan.csproj -f $FRAMEWORK -r $RUNTIME -c Debug --self-contained true --version-suffix $COMMIT -p:PublishSingleFile=true
fi
dotnet publish ProtectionScan/ProtectionScan.csproj -f $FRAMEWORK -r $RUNTIME -c Release --self-contained true --version-suffix $COMMIT -p:PublishSingleFile=true -p:DebugType=None -p:DebugSymbols=false
else
2024-12-06 11:52:33 -05:00
# Only include Debug if set
if [ $INCLUDE_DEBUG = true ]; then
2024-11-04 14:38:23 -05:00
dotnet publish ProtectionScan/ProtectionScan.csproj -f $FRAMEWORK -r $RUNTIME -c Debug --self-contained true --version-suffix $COMMIT
fi
dotnet publish ProtectionScan/ProtectionScan.csproj -f $FRAMEWORK -r $RUNTIME -c Release --self-contained true --version-suffix $COMMIT -p:DebugType=None -p:DebugSymbols=false
fi
done
done
2024-02-20 20:51:59 -05:00
fi
2024-02-20 20:51:59 -05:00
# Only create archives if requested
2024-06-26 11:32:20 -04:00
if [ $NO_ARCHIVE = false ]; then
2024-11-04 14:38:23 -05:00
# Create ProtectionScan archives
for FRAMEWORK in "${FRAMEWORKS[@]}"; do
for RUNTIME in "${RUNTIMES[@]}"; do
# Output the current build
echo "===== Archive ProtectionScan - $FRAMEWORK, $RUNTIME ====="
# If we have an invalid combination of framework and runtime
if [[ ! $(echo ${VALID_CROSS_PLATFORM_FRAMEWORKS[@]} | fgrep -w $FRAMEWORK) ]]; then
if [[ $(echo ${VALID_CROSS_PLATFORM_RUNTIMES[@]} | fgrep -w $RUNTIME) ]]; then
echo "Skipped due to invalid combination"
continue
fi
fi
# If we have Apple silicon but an unsupported framework
if [[ ! $(echo ${VALID_APPLE_FRAMEWORKS[@]} | fgrep -w $FRAMEWORK) ]]; then
if [ $RUNTIME = "osx-arm64" ]; then
echo "Skipped due to no Apple Silicon support"
continue
fi
fi
2024-12-06 11:52:33 -05:00
# Only include Debug if set
if [ $INCLUDE_DEBUG = true ]; then
2024-11-04 14:38:23 -05:00
cd $BUILD_FOLDER/ProtectionScan/bin/Debug/${FRAMEWORK}/${RUNTIME}/publish/
zip -r $BUILD_FOLDER/ProtectionScan_${FRAMEWORK}_${RUNTIME}_debug.zip .
2024-11-04 14:38:23 -05:00
fi
cd $BUILD_FOLDER/ProtectionScan/bin/Release/${FRAMEWORK}/${RUNTIME}/publish/
zip -r $BUILD_FOLDER/ProtectionScan_${FRAMEWORK}_${RUNTIME}_release.zip .
2024-11-04 14:38:23 -05:00
done
done
2024-02-20 20:51:59 -05:00
# Reset the directory
cd $BUILD_FOLDER
2024-06-26 11:32:20 -04:00
fi