use bash <script_name> [tag]
example: bash prepare_rocketchat_archive.sh 6.2.9
#!/bin/bash | |
_tag=${1:-latest} | |
_dir="$(mktemp -d)" | |
trap "rm -rf $_dir" EXIT | |
pushd "$_dir" >/dev/null | |
cat <<EDOCKERFILE >Dockerfile | |
from rocketchat/rocket.chat:$_tag as upstream | |
from scratch | |
copy --from=upstream /app/bundle /rocket.chat | |
EDOCKERFILE | |
echo "info: preparing archive" | |
if ! _id="$(docker build -q .)"; then | |
echo "error: failed to build new image" | |
exit 1 | |
fi | |
echo "info: image id $_id" | |
echo "info: saving image" | |
docker save "$_id" >rocketchat.tar | |
if ! [[ -f rocketchat.tar ]]; then | |
echo "error: failed to save image" | |
exit 1 | |
fi | |
if ! tar xf rocketchat.tar; then | |
echo "error: failed to extract archive" | |
exit 1 | |
fi | |
if ! _to_extract="$(jq '.[0].Layers[0]' -r manifest.json)"; then | |
echo "error: no layer found in image" | |
exit 1 | |
fi | |
if ! tar xf "$_to_extract"; then | |
echo "error: failed to extract main layer" | |
exit 1 | |
fi | |
if ! [[ -d rocket.chat ]]; then | |
echo "error: no rocket.chat bundle found" | |
exit 1 | |
fi | |
if ! tar -czf "rocket.chat.$_tag.tar.gz" rocket.chat; then | |
echo "error: failed to archive final archive" | |
exit 1 | |
fi | |
popd >/dev/null | |
mv "${_dir%/}/rocket.chat.$_tag.tar.gz" . | |
echo "info: your rocket.chat version $_tag archive is ready to be used" |