navi/scripts/release
Alexis Opolka 138b7e0b00
Update the Continuous Deployment pipeline with a minimal amount of dependencies (#971)
* Merged dotfiles/scripts into navi/scripts

Signed-off-by: alexis-opolka <53085471+alexis-opolka@users.noreply.github.com>

* Fixes the permission denied issue

Signed-off-by: alexis-opolka <53085471+alexis-opolka@users.noreply.github.com>

* Update log functions

Signed-off-by: alexis-opolka <53085471+alexis-opolka@users.noreply.github.com>

* Test new workflow

Signed-off-by: alexis-opolka <53085471+alexis-opolka@users.noreply.github.com>

* Update cd.yml

* Update release script

Signed-off-by: alexis-opolka <53085471+alexis-opolka@users.noreply.github.com>

* Fix attempt

Signed-off-by: alexis-opolka <53085471+alexis-opolka@users.noreply.github.com>

* Update the set-ouput method

Signed-off-by: alexis-opolka <53085471+alexis-opolka@users.noreply.github.com>

* Added debugging log::info

Signed-off-by: alexis-opolka <53085471+alexis-opolka@users.noreply.github.com>

* Tries to fixe issues

Signed-off-by: alexis-opolka <53085471+alexis-opolka@users.noreply.github.com>

* Tries to fixe issues

Signed-off-by: alexis-opolka <53085471+alexis-opolka@users.noreply.github.com>

* Tries to fixe issues

Signed-off-by: alexis-opolka <53085471+alexis-opolka@users.noreply.github.com>

* Tries to fixe issues

Signed-off-by: alexis-opolka <53085471+alexis-opolka@users.noreply.github.com>

* Tries to fixe issues

Signed-off-by: alexis-opolka <53085471+alexis-opolka@users.noreply.github.com>

* Tries to fixe issues

Signed-off-by: alexis-opolka <53085471+alexis-opolka@users.noreply.github.com>

* Tries to fixe issues

Signed-off-by: alexis-opolka <53085471+alexis-opolka@users.noreply.github.com>

* Tries to fixe issues

Signed-off-by: alexis-opolka <53085471+alexis-opolka@users.noreply.github.com>

* Tries to fixe issues

Signed-off-by: alexis-opolka <53085471+alexis-opolka@users.noreply.github.com>

* Tries to fixe issues

Signed-off-by: alexis-opolka <53085471+alexis-opolka@users.noreply.github.com>

* Tries to fixe issues

Signed-off-by: alexis-opolka <53085471+alexis-opolka@users.noreply.github.com>

* Tries to fixe issues

Signed-off-by: alexis-opolka <53085471+alexis-opolka@users.noreply.github.com>

* Tries to fixe issues

Signed-off-by: alexis-opolka <53085471+alexis-opolka@users.noreply.github.com>

* Removed debugging log::info

Signed-off-by: alexis-opolka <53085471+alexis-opolka@users.noreply.github.com>

* Adds more comments on what the expressions does

Signed-off-by: alexis-opolka <53085471+alexis-opolka@users.noreply.github.com>

* Add once again the use of UPX for the linux releases

Signed-off-by: alexis-opolka <53085471+alexis-opolka@users.noreply.github.com>

* Tries to fix issues

Signed-off-by: alexis-opolka <53085471+alexis-opolka@users.noreply.github.com>

* Comment UPX until I found how it was used and implemented it correctly

Signed-off-by: alexis-opolka <53085471+alexis-opolka@users.noreply.github.com>

---------

Signed-off-by: alexis-opolka <53085471+alexis-opolka@users.noreply.github.com>
2025-04-09 20:16:14 +02:00

129 lines
4.5 KiB
Bash
Executable file

#!/usr/bin/env bash
set -euo pipefail
### --------------------------------------------------------------------------------------------------------------------
### Logging functions
### --------------------------------------------------------------------------------------------------------------------
log::info() {
### Will print `[INFO]` in black foreground colour and magenta background colour
### then will print the given text in a magenta foreground colour and default background colour.
printf "\033[35m\033[7m[INFO]\033[27;39m \033[35m$*\033[39m\n"
}
log::error() {
### Will print `[ERROR]` in black foreground colour and red background colour
### then will print the given text in a red foreground colour and default background colour.
printf "\033[31m\033[7m[ERROR]\033[27;39m \033[31m$*\033[39m\n"
}
log::warn() {
### Will print `[WARNING]` in black foreground colour and yellow background colour
### then will print the given text in a yellow foreground colour and default background colour.
printf "\033[33m\033[7m[WARNING]\033[27;39m \033[33m$*\033[39m\n"
}
### --------------------------------------------------------------------------------------------------------------------
### Utils functions
### --------------------------------------------------------------------------------------------------------------------
### Permits us to know if the current target environment
### is a windows platform or not.
is_windows() {
local -r target="$1"
echo "$target" | grep -q "windows"
}
### NOTE: This function is currently not in use but kept as
### a backup function in case something breaks
###
### Returns the target environment, with a fix for the x86_64 target.
get_env_target() {
eval "$(rustc --print cfg | grep target)"
local -rr raw="${target_arch:-}-${target_vendor:-}-${target_os:-}-${target_env:-}"
if echo "$raw" | grep -q "x86_64-apple-macos"; then
echo "x86_64-apple-darwin"
else
echo "$raw"
fi
}
### NOTE: This function is currently not in use but kept as
### a backup function in case something breaks
###
### Logs the given arguments then execute it
_tap() {
log::info "$@"
"$@"
}
### NOTE: This function is currently not in use but kept as
### a backup function in case something breaks
###
### Lists the content of a path, given as parameter.
_ls() {
log::info "contents from $*:"
ls -la "$@" || true
}
### --------------------------------------------------------------------------------------------------------------------
### Release-Related functions
### --------------------------------------------------------------------------------------------------------------------
release() {
local -r env_target="$1"
log::info "env target: $env_target"
local -r cross_target="${1:-"$env_target"}"
log::info "desired target: $cross_target"
TAR_DIR="$(pwd)/target/tar"
### We clean up the target folder, just in case
rm -rf "$(pwd)/target" 2> /dev/null || true
### We add the target for rustup in case cross doesn't find it.
### Since the default behaviour of cross is to compile from
### a rustup target if it doesn't find one for itself.
rustup target add $env_target
cargo install cross
### We're building the release via cross for the target environment
cross build --release --target "$env_target"
cd target/"$env_target"/release/
if is_windows "$env_target"; then
### If our target is windows, we can simply zip our executable
### since having tar is not the norm and neither the default
zip -r "navi.zip" "navi.exe"
### We export a CI/CD variable to be used later in the pipeline
echo "EXTENSION=zip" >> $GITHUB_OUTPUT
else
### @alexis-opolka - I'm currently disabling the usage of UPX since I cannot find how
### it was used before the merge of the code from the @denisidoro/dotfiles repository.
###
#if upx --best --lzma "navi"; then
# log::info "upx succeeded"
#else
# log::info "upx failed"
#fi
### For all other targets, they have tar as the norm
### or have it installed by default.
tar -czf "navi.tar.gz" "navi"
### We export a CI/CD variable to be used later in the pipeline
echo "EXTENSION=tar.gz" >> $GITHUB_OUTPUT
fi
}
### --------------------------------------------------------------------------------------------------------------------
### Main script
### --------------------------------------------------------------------------------------------------------------------
release "$@"