Can now install it locally (or anywhere else) quite easily. This is the first step for being able to auto create PRs when we do a release
87 lines
2.2 KiB
Bash
Executable File
87 lines
2.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -eu
|
|
|
|
# adapted from https://github.com/johannes-wolf/cetz/blob/35c0868378cea5ad323cc0d9c2f76de8ed9ba5bd/scripts/package
|
|
# licensed under Apache License 2.0
|
|
|
|
. "$(dirname "${BASH_SOURCE[0]}")/setup"
|
|
|
|
if (( $# < 1 )) || [[ "${1:-}" == "help" ]]; then
|
|
echo "package TARGET"
|
|
echo ""
|
|
echo "Packages all relevant files into a directory named '<name>/<version>'"
|
|
echo "at TARGET. If TARGET is set to @local or @preview, the local Typst package"
|
|
echo "directory will be used so that the package gets installed for local use."
|
|
echo "The name and version are read from 'typst.toml' in the project root."
|
|
echo ""
|
|
echo "Local package prefix: $DATA_DIR/typst/package/local"
|
|
echo "Local preview package prefix: $DATA_DIR/typst/package/preview"
|
|
exit 1
|
|
fi
|
|
|
|
TARGET="$(resolve-target "${1:?Missing target path, @local or @preview}")"
|
|
echo "Install dir: $TARGET"
|
|
|
|
# ignore rules
|
|
readarray -t ignores < <(grep -v '^#' .typstignore | grep '[^[:blank:]]')
|
|
|
|
# recursively print all files that are not excluded via .typstignore
|
|
function enumerate {
|
|
local root="$1"
|
|
if [[ -f "$root" ]]; then
|
|
echo "$root"
|
|
else
|
|
local files
|
|
readarray -t files < <(find "$root" \
|
|
-mindepth 1 -maxdepth 1 \
|
|
-not -name .git \
|
|
-not -name .typstignore)
|
|
# declare -p files >&2
|
|
|
|
local f
|
|
for f in "${files[@]}"; do
|
|
local include
|
|
include=1
|
|
|
|
local ignore
|
|
for ignore in "${ignores[@]}"; do
|
|
if [[ "$ignore" =~ ^! ]]; then
|
|
ignore="${ignore:1}"
|
|
if [[ "$f" == ./$ignore ]]; then
|
|
# echo "\"$f\" matched \"!$ignore\"" >&2
|
|
include=1
|
|
fi
|
|
elif [[ "$f" == ./$ignore ]]; then
|
|
# echo "\"$f\" matched \"$ignore\"" >&2
|
|
include=0
|
|
fi
|
|
done
|
|
if [[ "$include" == 1 ]]; then
|
|
enumerate "$f"
|
|
fi
|
|
done
|
|
fi
|
|
}
|
|
|
|
# List of all files that get packaged
|
|
readarray -t files < <(enumerate ".")
|
|
# declare -p files >&2
|
|
|
|
TMP="$(mktemp -d)"
|
|
|
|
for f in "${files[@]}"; do
|
|
mkdir -p "$TMP/$(dirname "$f")" 2>/dev/null
|
|
cp -r "$ROOT/$f" "$TMP/$f"
|
|
done
|
|
|
|
TARGET="${TARGET:?}/${PKG_PREFIX:?}/${VERSION:?}"
|
|
echo "Packaged to: $TARGET"
|
|
if rm -r "${TARGET:?}" 2>/dev/null; then
|
|
echo "Overwriting existing version."
|
|
fi
|
|
mkdir -p "$TARGET"
|
|
|
|
# include hidden files by setting dotglob
|
|
shopt -s dotglob
|
|
mv "$TMP"/* "$TARGET"
|