#!/usr/bin/env bash set -euo pipefail repo_root=$(cd "$(dirname "$0")/.." && pwd) cd "$repo_root" [[ $# == 1 && $1 == /* ]] || { echo 'Usage: scripts/package-source.sh ABSOLUTE_NEW_DIRECTORY' >&2; exit 2; } destination=$1 [[ ! -e $destination && ! -L $destination ]] || { echo 'Refusing existing source output.' >&2; exit 1; } git diff --quiet HEAD -- || { echo 'Commit tracked changes before packaging.' >&2; exit 1; } revision=$(git rev-parse HEAD) mkdir -p "$destination" source_dir="$destination/sized-source" mkdir "$source_dir" git archive "$revision" | tar -x -C "$source_dir" mkdir -p "$source_dir/.cargo" cargo vendor --locked --versioned-dirs --manifest-path "$source_dir/Cargo.toml" "$source_dir/vendor" > "$destination/vendor-config" sed 's|directory = ".*"|directory = "vendor"|' "$destination/vendor-config" > "$source_dir/.cargo/config.toml" printf '%s\n' "$revision" > "$source_dir/SOURCE-REVISION.txt" cat > "$source_dir/BUILD-OFFLINE.txt" < "$destination/SOURCE-REVISION.txt" echo "Verified offline source: $destination/sized-v2.0.0-source.tar.gz"