build(package): added package script

package script auto generates release archive
This commit is contained in:
2026-01-31 11:27:58 -05:00
parent 6a8fcc0290
commit a3b63a68d1
3 changed files with 162 additions and 0 deletions

4
.gitignore vendored
View File

@@ -103,3 +103,7 @@ output/
scratch/
releases/
stroid-dist/
stroid-universal-dist.tar.gz
stroid-*/
stroid-*.tar.gz

114
package_release.sh Executable file
View File

@@ -0,0 +1,114 @@
#!/bin/bash
set -e
RELEASE_DIR="releases"
STAGING_DIR="stroid-dist"
REQUIRED_BINARIES=(
"stroid-macos-arm64"
"stroid-linux-x86_64"
"stroid-linux-arm64"
)
for bin in "${REQUIRED_BINARIES[@]}"; do
if [ ! -f "$RELEASE_DIR/$bin" ]; then
echo "Error: Missing binary $RELEASE_DIR/$bin. Run release.sh first."
exit 1
fi
done
chmod +x "$RELEASE_DIR/stroid-macos-arm64"
VERSION_OUTPUT=$("$RELEASE_DIR/stroid-macos-arm64" info -v)
VERSION=$(echo "$VERSION_OUTPUT" | awk '{print $3}')
if [ -z "$VERSION" ]; then
echo "Error: Could not extract version from binary output."
exit 1
fi
TARBALL_NAME="stroid-${VERSION}.tar.gz"
echo "Packaging Stroid version ${VERSION}..."
rm -rf "$STAGING_DIR"
mkdir -p "$STAGING_DIR/bin"
for bin in "${REQUIRED_BINARIES[@]}"; do
cp "$RELEASE_DIR/$bin" "$STAGING_DIR/bin/"
done
cat << 'EOF' > "$STAGING_DIR/install.sh"
#!/bin/bash
set -e
OS=$(uname -s)
ARCH=$(uname -m)
INSTALL_PATH=$1
echo "Detecting system: $OS ($ARCH)"
case "$OS" in
Darwin)
if [ "$ARCH" = "arm64" ]; then
SELECTED_BIN="bin/stroid-macos-arm64"
else
echo "Error: Intel Macs (x86_64) are not supported by this package."
exit 1
fi
;;
Linux)
if [ "$ARCH" = "x86_64" ]; then
SELECTED_BIN="bin/stroid-linux-x86_64"
elif [ "$ARCH" = "aarch64" ] || [ "$ARCH" = "arm64" ]; then
SELECTED_BIN="bin/stroid-linux-arm64"
else
echo "Error: Linux architecture $ARCH is not supported."
exit 1
fi
;;
*)
echo "Error: Operating system $OS is not supported."
exit 1
;;
esac
echo "Verifying binary integrity..."
chmod +x "$SELECTED_BIN"
if ! ./"$SELECTED_BIN" info -v > /dev/null 2>&1; then
echo "Error: The selected binary failed the version check. It may be incompatible with this system's libraries."
exit 1
fi
VERSION_INFO=$(./"$SELECTED_BIN" info -v)
echo "Verification successful: $VERSION_INFO"
if [ -z "$INSTALL_PATH" ]; then
if [ "$EUID" -eq 0 ]; then
INSTALL_PATH="/usr/local/bin"
else
INSTALL_PATH="$HOME/.local/bin"
fi
fi
mkdir -p "$INSTALL_PATH"
echo "Installing to: $INSTALL_PATH/stroid"
cp "$SELECTED_BIN" "$INSTALL_PATH/stroid"
chmod +x "$INSTALL_PATH/stroid"
echo "Installation complete."
if [[ ":$PATH:" != *":$INSTALL_PATH:"* ]]; then
echo "Note: $INSTALL_PATH is not in your PATH. Add it to your shell profile to run 'stroid' from anywhere."
fi
EOF
chmod +x "$STAGING_DIR/install.sh"
tar -czf "$TARBALL_NAME" -C "$STAGING_DIR" .
echo "Distribution package created: $TARBALL_NAME"
echo "Contents:"
tar -tf "$TARBALL_NAME"
rm -rf "$STAGING_DIR"

44
release.md Normal file
View File

@@ -0,0 +1,44 @@
# Generating Releases
> This document is likely only of interest to developers wishing to build release files. If you wish to use
> stroid, please refer to the main readme instructions.
## Building
Release files can be built on an arm mac using the following commands:
```bash
./release.sh
```
all release files will be placed in the `releases/` folder.
This will construct release files for arm mac, arm linux, and x86_64 linux. These should be
compatible with most systems (linux more recent than 2020 and macOS more recent than 15.0)
For those who wish to build from source see the main readme instructions.
## Packaging
The auto-generated release files are named according to the following convention:
`stroid-<os>-<arch>`, these are all statically linked so they should
just run on system. To distribute these files we want to package them into a single
archive file along with an installation script which will select the correct binary
for the host system. There is a script `package_release.sh` which will do this automatically.
Once the release files have been generated, run the following command:
```bash
./package_release.sh
```
## Uploading
Once the release files have been packaged, they can be uploaded to the github releases page. This can be done manually through the github web interface, or
automatically using the `gh` CLI tool. To upload using the CLI tool, first ensure you have it installed and authenticated with your
github account. Then run the following command:
```bash
gh release create <tag> ./stroid-release.tar.gz
```
Alternatively, you can upload the files manually through the github web interface by navigating to the releases page of
the repository and clicking on "Draft a new release". From there, you can upload the `stroid-release.tar.gz` file and
publish the release.