Files
logpile/scripts/release.sh
2026-03-16 00:32:09 +03:00

144 lines
4.6 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
set -e
# logpile Release Build Script
# Creates binaries for selected platforms and packages them for release
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# Get version from git
VERSION=$(git describe --tags --always --dirty 2>/dev/null || echo "dev")
if [[ $VERSION == *"dirty"* ]] && [[ "${ALLOW_DIRTY}" != "1" ]]; then
echo -e "${RED}Error: Working directory has uncommitted changes${NC}"
echo "Commit your changes first (or run with ALLOW_DIRTY=1)"
exit 1
fi
echo -e "${GREEN}Building logpile version: ${VERSION}${NC}"
echo ""
# Stable build env for this machine/toolchain
export GOPATH="${GOPATH:-/tmp/go}"
export GOCACHE="${GOCACHE:-/tmp/gocache}"
# Use the locally installed Go toolchain by default.
# A pinned or auto-downloaded toolchain can still be requested via env override.
export GOTOOLCHAIN="${GOTOOLCHAIN:-local}"
mkdir -p "${GOPATH}" "${GOCACHE}"
# Create release directory
RELEASE_DIR="releases/${VERSION}"
mkdir -p "${RELEASE_DIR}"
# Create release notes template (always include macOS Gatekeeper note)
if [ ! -f "${RELEASE_DIR}/RELEASE_NOTES.md" ]; then
cat > "${RELEASE_DIR}/RELEASE_NOTES.md" <<EON
# logpile ${VERSION}
Дата релиза: $(date +%Y-%m-%d)
Тег: \`${VERSION}\`
## Что нового
- TODO: опишите ключевые изменения релиза.
## Запуск на macOS
Снимите карантинный атрибут через терминал: \`xattr -d com.apple.quarantine /path/to/logpile-darwin-arm64\`
После этого бинарник запустится без предупреждения Gatekeeper.
EON
fi
# Build selected platforms
echo -e "${YELLOW}Building binaries...${NC}"
mkdir -p bin
CGO_ENABLED=0 GOOS=darwin GOARCH=arm64 \
go build -ldflags "-X main.version=${VERSION} -X main.commit=$(git rev-parse --short HEAD)" \
-o bin/logpile-darwin-arm64 ./cmd/logpile
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 \
go build -ldflags "-X main.version=${VERSION} -X main.commit=$(git rev-parse --short HEAD)" \
-o bin/logpile-windows-amd64.exe ./cmd/logpile
echo ""
echo -e "${YELLOW}Creating release packages...${NC}"
# Linux AMD64
if [ -f "bin/logpile-linux-amd64" ]; then
cd bin
tar -czf "../${RELEASE_DIR}/logpile-${VERSION}-linux-amd64.tar.gz" logpile-linux-amd64
cd ..
echo -e "${GREEN} ✓ logpile-${VERSION}-linux-amd64.tar.gz${NC}"
fi
# Linux ARM64
if [ -f "bin/logpile-linux-arm64" ]; then
cd bin
tar -czf "../${RELEASE_DIR}/logpile-${VERSION}-linux-arm64.tar.gz" logpile-linux-arm64
cd ..
echo -e "${GREEN} ✓ logpile-${VERSION}-linux-arm64.tar.gz${NC}"
fi
# macOS Intel
if [ -f "bin/logpile-darwin-amd64" ]; then
cd bin
tar -czf "../${RELEASE_DIR}/logpile-${VERSION}-darwin-amd64.tar.gz" logpile-darwin-amd64
cd ..
echo -e "${GREEN} ✓ logpile-${VERSION}-darwin-amd64.tar.gz${NC}"
fi
# macOS Apple Silicon
if [ -f "bin/logpile-darwin-arm64" ]; then
cd bin
tar -czf "../${RELEASE_DIR}/logpile-${VERSION}-darwin-arm64.tar.gz" logpile-darwin-arm64
cd ..
echo -e "${GREEN} ✓ logpile-${VERSION}-darwin-arm64.tar.gz${NC}"
fi
# Windows AMD64
if [ -f "bin/logpile-windows-amd64.exe" ]; then
cd bin
zip -q "../${RELEASE_DIR}/logpile-${VERSION}-windows-amd64.zip" logpile-windows-amd64.exe
cd ..
echo -e "${GREEN} ✓ logpile-${VERSION}-windows-amd64.zip${NC}"
fi
# Generate checksums
echo ""
echo -e "${YELLOW}Generating checksums...${NC}"
cd "${RELEASE_DIR}"
shasum -a 256 *.tar.gz *.zip > SHA256SUMS.txt 2>/dev/null || shasum -a 256 * | grep -v SHA256SUMS > SHA256SUMS.txt
cd ../..
echo -e "${GREEN} ✓ SHA256SUMS.txt${NC}"
# List release files
echo ""
echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo -e "${GREEN}Release ${VERSION} built successfully!${NC}"
echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo ""
echo "Files in ${RELEASE_DIR}:"
ls -lh "${RELEASE_DIR}"
echo ""
# Show next steps
echo -e "${YELLOW}Next steps:${NC}"
echo " 1. Create git tag:"
echo " git tag -a ${VERSION} -m \"Release ${VERSION}\""
echo ""
echo " 2. Push tag to remote:"
echo " git push origin ${VERSION}"
echo ""
echo " 3. Create release on git.mchus.pro:"
echo " - Go to: https://git.mchus.pro/mchus/logpile/releases"
echo " - Click 'New Release'"
echo " - Select tag: ${VERSION}"
echo " - Upload files from: ${RELEASE_DIR}/"
echo ""
echo -e "${GREEN}Done!${NC}"