#!/usr/bin/env bash # Copyright 2016-2018 Luke Shumaker # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. set -e branch=$(git name-rev --name-only HEAD) if [[ $branch == master ]]; then gitdir="$(git rev-parse --git-dir)" workdir="${gitdir}/release" exec 8>"${workdir}.lock" flock 8 rm -rf -- "$workdir" git worktree prune git branch -D release.tmp &>/dev/null || true unset GIT_INDEX_FILE git worktree add -b release.tmp "${gitdir}/release" master ( unset GIT_DIR GIT_WORK_TREE cd "$workdir" go generate ./... git ls-files -z '*/.gitignore' | xargs -0r rm -f -- git add . git commit -m "Generate artifacts" git checkout release # Ensure it exists locally git pull --no-edit -s ours # Avoid conflicts # What we want is # # git merge --no-edit -s theirs release.tmp # # Unfortunately, there is no 'theirs' strategy; so we # have to switch branches and do it backward with the # 'ours' strategry, switch back, then merge the merge # commit. git checkout release.tmp git merge --no-edit -s ours release git checkout release git merge release.tmp git branch -d release.tmp ) rm -rf -- "$workdir" git worktree prune fi