1
0
mirror of synced 2025-12-23 21:03:15 -05:00

OSS Setup (#4)

* add local env setup script

* add push to oss script

* oss initial commit
This commit is contained in:
Charles
2020-07-29 10:45:16 -07:00
committed by GitHub
parent f9d6019579
commit dbacb9727d
4 changed files with 102 additions and 0 deletions

0
.root Normal file
View File

1
public/README.md Normal file
View File

@@ -0,0 +1 @@
# Dataline Public Repo

16
tools/local_env/setup.sh Executable file
View File

@@ -0,0 +1,16 @@
#!/usr/bin/env bash
set -e
function _error() {
echo "$@"
exit 1
}
function main() {
[[ -e .root ]] || _error "Must run from root"
git remote add oss https://github.com/datalineio/public.git
}
main "$@"

85
tools/oss/push_oss.sh Executable file
View File

@@ -0,0 +1,85 @@
#!/usr/bin/env bash
set -e
_usage="
Usage: ./tools/oss/push_oss.sh <target-branch> <force (optional)>
Example: ./tools/oss/push_oss.sh my-branch force
"
function _error() {
echo "$@"
echo "$_usage"
exit 1
}
function _in_sync_with_remote() {
# https://stackoverflow.com/a/3278427
git remote update
UPSTREAM='@{u}'
echo "checking local commit history against remote: $(git rev-parse --symbolic-full-name --abbrev-ref ${UPSTREAM})"
LOCAL=$(git rev-parse @)
REMOTE=$(git rev-parse "$UPSTREAM")
BASE=$(git merge-base @ "$UPSTREAM")
if [ $LOCAL = $REMOTE ]; then
echo "Up-to-date"
elif [ $LOCAL = $BASE ]; then
echo "Need to pull"
exit 1
elif [ $REMOTE = $BASE ]; then
echo "Need to push"
exit 1
else
echo "Diverged"
exit 1
fi
}
function _on_master() {
# only push master to downstream repo.
CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
if [[ "$CURRENT_BRANCH" != "master" ]]; then
_error 'Can only push to target branch master while on master branch.';
exit 1;
fi
}
# attempts to push the public dir to the specified branch in the dataline _public_ repository.
# * verifies that the branch being pushed is in sync with the origin remote of the monorepo.
# * allows force push (except when pushing to master--if you need to do this, do it manually).
# * only allows pushes to master from the master branch.
function main() {
[[ -e .root ]] || _error "Must run from root"
TARGET_BRANCH=$1; shift || _error "Missing target branch"
FORCE_RAW=$1;
FORCE=false
if [[ "$FORCE_RAW" = "force" ]]; then
FORCE=true
fi
echo "target branch: ${TARGET_BRANCH}"
echo "force: ${FORCE}"
# if pushing to master on the oss repo, must push from master.
if [[ "$TARGET_BRANCH" = "master" ]]; then
_on_master
fi
if [[ "$TARGET_BRANCH" = "master" && "$FORCE" = true ]]; then
_error "cannot force push to master."
fi
# do not push to oss repo, if local branch is not in sync with origin in monorepo.
_in_sync_with_remote
if [[ "$FORCE" = true ]]
then
git push oss `git subtree split --prefix public`:"${TARGET_BRANCH}" --force
else
git subtree push --prefix=public oss "${TARGET_BRANCH}"
fi
}
main "$@"