#!/bin/sh set -e TYPE=$1 TEST=$2 usage() { echo "Usage: $0 [gif|mp4] " echo "e.g. using full path: $0 gif pkg/integration/tests/demo/nuke_working_tree.go" exit 1 } if [ "$#" -ne 2 ] then usage fi if [ "$TYPE" != "gif" ] && [ "$TYPE" != "mp4" ] then usage exit 1 fi if [ -z "$TEST" ] then usage fi WORKTREE_PATH=$(git worktree list | grep assets | awk '{print $1}') if [ -z "$WORKTREE_PATH" ] then echo "Could not find assets worktree. You'll need to create a worktree for the assets branch using the following command:" echo "git worktree add .worktrees/assets assets" echo "The assets branch has no shared history with the main branch: it exists to store assets which are too large to store in the main branch." exit 1 fi OUTPUT_DIR="$WORKTREE_PATH/demo" if ! command -v terminalizer &> /dev/null then echo "terminalizer could not be found" echo "Install it with: npm install -g terminalizer" exit 1 fi if ! command -v "gifsicle" &> /dev/null then echo "gifsicle could not be found" echo "Install it with: npm install -g gifsicle" exit 1 fi # Get last part of the test path and set that as the output name # example test path: pkg/integration/tests/01_basic_test.go # For that we want: NAME=01_basic_test NAME=$(echo "$TEST" | sed -e 's/.*\///' | sed -e 's/\..*//') # Add the demo to the tests list (if missing) so that it can be run go generate pkg/integration/tests/tests.go mkdir -p "$OUTPUT_DIR" # First we record the demo into a yaml representation terminalizer -c demo/config.yml record --skip-sharing -d "go run cmd/integration_test/main.go cli --slow $TEST" "$OUTPUT_DIR/$NAME" # Then we render it into a gif terminalizer render "$OUTPUT_DIR/$NAME" -o "$OUTPUT_DIR/$NAME.gif" # Then we convert it to either an mp4 or gif based on the command line argument if [ "$TYPE" = "mp4" ] then COMPRESSED_PATH="$OUTPUT_DIR/$NAME.mp4" ffmpeg -y -i "$OUTPUT_DIR/$NAME.gif" -movflags faststart -pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" "$COMPRESSED_PATH" else COMPRESSED_PATH="$OUTPUT_DIR/$NAME-compressed.gif" gifsicle --colors 256 --use-col=web -O3 < "$OUTPUT_DIR/$NAME.gif" > "$COMPRESSED_PATH" fi echo "Demo recorded to $COMPRESSED_PATH"