docs/script/preview-openapi-changes

93 строки
3.3 KiB
Bash
Executable File

#!/bin/bash
# Stitches and unstitches the github/github OpenAPI description via rest-api-operations to produce a local preview in docs-internal.
# `github`, `rest-api-operations`, and `docs-internal` must share a parent directory locally.
# You must bootstrap `github` for this script to work. To check if you need to bootstrap, check if the `bin` directory in `github` exists. If it does not exist, run `./script/bootstrap` from the `github` directory.
# Options:
# stitch: stitches the repos together and does the npm builds
# unstitch: unstitches the repos and reverts them to their pre-stitched state
# exit if there is any failure
set -e
function check_repos () {
REPOS=("github" "rest-api-operations" "docs-internal")
for i in "${REPOS[@]}"; do
if [ ! -d "$i" ]; then
echo "Repo directory $i does not exist"
echo "Make sure that all the required repos (${REPOS[*]}) are all in the same directory."
exit 1
fi
done
}
# main below here
OPTION=$1
# The script could be run from anywhere, so we need to get our bearings so we know where the dirs are.
# get the directory of the script (should be docs-internal/script). (from https://stackoverflow.com/a/246128/6348342)
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
# change the script's context to the script dir
cd $SCRIPT_DIR
# change two levels up (i.e. to the parent of the docs-internal repo)
cd ../../
# Check that all the required local repos exist
check_repos
if [[ $OPTION == "stitch" ]]; then
read -r -p "❓Are you sure your github/github and docs-internal repos are on the branches you want to preview? [y/N] " response
if ! [[ $response =~ ^([yY][eE][sS]|[yY])$ ]]
then
echo "Aborted! Nothing was changed."
exit 1
fi
echo "🧵 🧶 🧷 Stitching together the repos..."
set -o xtrace
# Generate the deferenced OpenAPI files from github/github
cd github
bin/openapi bundle /tmp/dump
# Copy the derefrenced json files into rest-api-operations and build them
cd ../rest-api-operations
find /tmp/dump -type f -name "*.deref.json" -exec cp {} descriptions \;
npm run build
# Install the modified local rest-api-operations npm module into docs-internal
cd ../docs-internal
npm install ../rest-api-operations
set +o xtrace
echo "👗 👘 👔 Finished stitching the repos!"
echo "🎉 🎉 You can now start a local development server to see the changes."
elif [[ $OPTION == "unstitch" ]]; then
read -r -p "❓Unstitching will revert the rest-api-operations and docs-internal repos to their last commit. Are you sure? [y/N] " response
if ! [[ $response =~ ^([yY][eE][sS]|[yY])$ ]]
then
echo "Aborted! Nothing was changed."
exit 1
fi
echo "🔥 🔥 Unstitching the repos..."
set -o xtrace
# clear the dump directory
rm -rf /tmp/dump/*
# Undo any docs-internal changes and reinstall rest-api-operations
cd docs-internal
git reset --hard HEAD
npm install
# Undo any rest-api-operations changes
cd ../rest-api-operations
git reset --hard HEAD
set +o xtrace
echo "🏁 🏁 Finished unstitching the repos!"
else
echo "Please provide a valid option. One of: stitch, rebuild, unstitch:"
echo " stitch: stitches the repos together and does the npm builds"
echo " unstitch: unstitches the repos and reverts them to their pre-stitched state"
fi