blob: d444367adefeb6e612b195291948ecb45c993f52 [file] [log] [blame]
#!/bin/bash
#!/usr/bin/env bash
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
# This script is used to prepare the release artifacts for the Apache Iggy project.
set -euo pipefail
# Determine tar command based on OS
TAR_CMD="tar"
OS_NAME=$(uname)
if [[ "$OS_NAME" == "Darwin" ]]; then
if command -v gtar >/dev/null 2>&1; then
TAR_CMD="gtar"
else
echo "❌ GNU tar (gtar) is required on macOS. Install it with: brew install gnu-tar"
exit 1
fi
fi
if [ "$(basename "$PWD")" == "scripts" ]; then
cd ..
fi
SRC_DIR="./"
RELEASE_DIR="iggy_release"
TEMP_DIR="iggy_release_tmp"
rm -rf "$TEMP_DIR"
rm -rf "$RELEASE_DIR"
mkdir -p "$TEMP_DIR"
mkdir -p "$RELEASE_DIR"
RELEASE_FILES=(
"Cargo.lock"
"Cargo.toml"
"DEPENDENCIES.md"
"DISCLAIMER"
"Dockerfile"
"LICENSE"
"NOTICE"
"docker-compose.yml"
"justfile"
)
RELEASE_DIRS=(
"bdd"
"core"
"examples"
"foreign"
"licenses"
"scripts"
"web"
)
IGNORED_FILES=(
".DS_Store"
".gitignore"
)
IGNORED_DIRS=(
"target"
"node_modules"
"pkg"
"build"
"out"
"dist"
"bin"
"obj"
"__pycache__"
".elixir_ls"
".tox"
".eggs"
".venv"
".svelte-kit"
)
for file in "${RELEASE_FILES[@]}"; do
cp "$SRC_DIR/$file" "$TEMP_DIR/"
done
shopt -s dotglob nullglob
for dir in "${RELEASE_DIRS[@]}"; do
src="$SRC_DIR/$dir"
dest="$TEMP_DIR/$dir"
[ -d "$src" ] || continue
mkdir -p "$dest"
for item in "$src"/*; do
name=$(basename "$item")
if [[ "$dir" == "web" ]]; then
if [ -d "$item" ]; then
for ignored in "${IGNORED_DIRS[@]}"; do
if [[ "$name" == "$ignored" ]]; then
continue 2
fi
done
fi
if [ -f "$item" ]; then
for ignored_file in "${IGNORED_FILES[@]}"; do
if [[ "$name" == "$ignored_file" ]]; then
continue 2
fi
done
fi
fi
if [[ "$dir" == "foreign" && -d "$item" ]]; then
sdk=$(basename "$item")
mkdir -p "$dest/$sdk"
for sdk_item in "$item"/*; do
sdk_name=$(basename "$sdk_item")
if [ -d "$sdk_item" ]; then
for ignored in "${IGNORED_DIRS[@]}"; do
if [[ "$sdk_name" == "$ignored" ]]; then
continue 2
fi
done
fi
if [ -f "$sdk_item" ]; then
for ignored_file in "${IGNORED_FILES[@]}"; do
if [[ "$sdk_name" == "$ignored_file" ]]; then
continue 2
fi
done
fi
cp -r "$sdk_item" "$dest/$sdk/"
done
continue
fi
cp -r "$item" "$dest/"
done
done
shopt -u dotglob nullglob
VERSION=$(grep '^version' "$TEMP_DIR/core/server/Cargo.toml" | head -n 1 | cut -d '"' -f2)
echo "Preparing release for version: $VERSION"
ARCHIVE_NAME="iggy-${VERSION}-incubating-src.tar.gz"
GZIP=-n "$TAR_CMD" --sort=name \
--mtime='UTC 2020-01-01' \
--owner=0 --group=0 --numeric-owner \
-czf "$ARCHIVE_NAME" -C "$TEMP_DIR" .
CHECKSUM_FILE="${ARCHIVE_NAME}.sha512"
sha512sum "$ARCHIVE_NAME" > "$CHECKSUM_FILE"
rm -rf "$TEMP_DIR"
echo "Release directory: $RELEASE_DIR"
echo "SHA-512 checksum:"
cat "$CHECKSUM_FILE"
echo "✔ Archive created: $ARCHIVE_NAME"
echo "✔ Checksum saved to: $CHECKSUM_FILE"
mv "$ARCHIVE_NAME" "$RELEASE_DIR/"
mv "$CHECKSUM_FILE" "$RELEASE_DIR/"