entrypoint.sh in outliner-0.2.0 vs entrypoint.sh in outliner-1.0.0

- old
+ new

@@ -1,20 +1,78 @@ #!/bin/sh - +set -eu if [ $# -eq 0 ]; then - echo "Please run with outliner [export|import] arguments" + echo "Please run with outliner [export|import|sync] arguments" exit fi +setup_git() { + if [ -f "$HOME/.ssh/id_rsa" ]; then + # This is required because Kubernetes secret mounts can't + # have file permissions set + chmod 0400 "$HOME/.ssh/id_rsa" + + if [ ! -d "$HOME/.ssh/id_rsa.pub" ]; then + ssh-keygen -y -f "$HOME/.ssh/id_rsa" > "$HOME/.ssh/id_rsa.pub" + fi + echo "[+] Using SSH key for git pushes" + else + echo "[E] Git credentials not available, quitting" + exit 1 + fi + + eval $(ssh-agent) + ssh-add "$HOME/.ssh/id_rsa" +} + +update_git_config() { + EMAIL=${GIT_EMAIL:-outliner@example.invalid} + git config --global user.email "$EMAIL" + git config --global user.name "Outliner Backup" + git remote add origin "$GIT_REMOTE_URL" +} + case $1 in export) shift - bundle exec outliner-export $@ + bundle exec outliner-export "$@" ;; import) shift - bundle exec outliner-import $@ - break + bundle exec outliner-import "$@" + ;; + sync) + BRANCH=${GIT_BRANCH:-master} + old_git_dir=$(mktemp -d) + fresh_export_dir=$(mktemp -d) + if [ -z "$GIT_REMOTE_URL" ]; then + echo "[E] GIT_REMOTE_URL not set" + exit 1 + else + git clone --branch "$BRANCH" "$GIT_REMOTE_URL" "$old_git_dir" + setup_git + update_git_config + echo "[+] Exporting data from Outline" + bundle exec outliner-export "$fresh_export_dir" + echo "[+] Resetting git repository" + cd "$old_git_dir" + # We update so that git forgets all files + git ls-files -z |xargs -n1 -0 git rm + # Then we copy across the files from the new export + cd "$fresh_export_dir" + echo "[+] Updating git repository" + rsync -av . "$old_git_dir" + cd "$old_git_dir" + echo "[+] Committing to git" + git add . + git commit --message "Backup: $(date)" > /dev/null + git status + echo "[+] Pushing to git remote" + git push origin "HEAD:$BRANCH" + echo "[+] Cleaning up" + rm -rf "$old_git_dir" + rm -rf "$fresh_export_dir" + fi ;; *) echo "Invalid command, please check README" ;; esac