#!/bin/bash # Merging repository to google-cloud-java using git-filter-repo. # https://stackoverflow.com/questions/1425892/how-do-you-merge-two-git-repositories # # Usage: # cd google-cloud-java # # edit the repository to merge. # vim generation/repo.txt # # use your account # export USERNAME=XXX # # Run the script # ./generation/merge_repository.sh # # Create a pull request. Ensure you MERGE the pull request. Not 'squash'. # cd generation/monorepo/google-cloud-java-merged # git checkout -b merge_repositories # gh pr create --title 'chore: merge new repository into google-cloud-java' --body '' set -xe [ -z "`git config user.email`" ] && git config --global user.email "${USERNAME:-script}@google.com" [ -z "`git config user.name`" ] && git config --global user.name "${USERNAME:-script}" cd "$(dirname "$0")" rm -rf monorepo mkdir monorepo cp merge_repository.sh monorepo cp repos.txt monorepo cd monorepo git clone https://github.com/newren/git-filter-repo.git export PATH=$PATH:`pwd`/git-filter-repo merged_repository=google-cloud-java-merged git clone https://github.com/googleapis/google-cloud-java "${merged_repository}" cd "${merged_repository}" cat ../repos.txt | while read service do cd .. git clone https://github.com/googleapis/${service}.git cd ${service} git filter-repo --to-subdirectory-filter ${service} # setup owlbot files correctly to match monorepo configuration if [ -r "${service}/.github/.OwlBot.yaml" ]; then cp ${service}/.github/.OwlBot.yaml ${service}/.OwlBot.yaml rm ${service}/.github/.OwlBot.lock.yaml rm ${service}/.github/.OwlBot.yaml sed -i.bak '/docker/d' ${service}/.OwlBot.yaml && rm ${service}/.OwlBot.yaml.bak sed -i.bak '/image/d' ${service}/.OwlBot.yaml && rm ${service}/.OwlBot.yaml.bak # In monorepo, the staging directory structure tells the destination module to # which the OwlBot Java postprocessor copies the files. sed -i.bak "s|owl-bot-staging|owl-bot-staging/${service}|" ${service}/.OwlBot.yaml && rm ${service}/.OwlBot.yaml.bak text=$(grep '^.*api_shortname.*' ${service}/.repo-metadata.json) text=$(echo "$text" | sed 's/\"//g; s/\,//g; s/^[[:space:]]*//' ) text=${text/api_shortname/api-name} echo -e "\n"$text>> ${service}/.OwlBot.yaml git add . git config --add secrets.allowed "dest.*src" git commit -am "chore: setup owlbot configuration" fi cd "../${merged_repository}" git remote add ${service} ../${service} git config --add secrets.allowed "dest.*src" git fetch ${service} #--tags EDITOR=true git merge --quiet --allow-unrelated-histories ${service}/main git remote remove ${service} rm -rf ../${service} done # cwd: monorepo/google-cloud-java-merged echo "Working directory: $(pwd)" cp -R ../../../google-cloud-jar-parent google-cloud-jar-parent cp -R ../../../google-cloud-pom-parent google-cloud-pom-parent git add --all git commit -m 'chore: add template files' ../../generate_root_pom.sh git add pom.xml git commit -am 'chore: create aggregator pom' --allow-empty # Point modules poms and BOMs to the aggregator pom as parent bash ../../set_parent_pom.sh git add --all git commit -am 'chore: point modules to the aggregator pom as parent' \ --allow-empty ../../consolidate_config.sh git add --all git commit -am 'chore: consolidate config to parent' \ --allow-empty ../../generate_gapic_bom.sh # add the gapic bom module to root pom.xml by regenerating aggregator pom ../../generate_root_pom.sh git add gapic-libraries-bom/pom.xml git commit -am 'chore: create gapic-libraries-bom' \ --allow-empty cp ../../gapic_bom_versions.txt gapic-libraries-bom/versions.txt ../../delete_non_generated_samples.sh git add --all git commit -am 'chore: delete non-auto-generated samples' \ --allow-empty ../../generate_root_versions_txt.sh ../../update_versions.sh -s ../../apply_current_versions.sh git add --all git commit -am 'chore: update versions to latest in maven' \ --allow-empty ../../update_owlbot_postprocessor_config.sh git add --all git commit -am 'chore: remove and disable owlbot postprocessor templates' \ --allow-empty ../../set_owlbot_config.sh git commit -am 'chore: set owlbot copy config' --allow-empty # create a monorepo/diff repo cd .. cp -R "${merged_repository}" split rm -rf split/.git git clone -b main --single-branch https://github.com/googleapis/google-cloud-java.git shadow cp -R shadow/.git split/.git rm -rf shadow mv split diff cd diff git add "*/src/main/*" || true git commit -m 'split repo - diff src/main' --allow-empty git add "*/src/test/*" || true git commit -m 'split repo - diff src/test' --allow-empty git add "*/samples/*" || true git commit -m 'split repo - diff samples' --allow-empty git add "**/pom.xml" || true git commit -m 'split repo - diff pom.xml' --allow-empty git add "**/CHANGELOG.md" || true git commit -m 'split repo - diff CHANGELOG.md' --allow-empty git add "**/README.md" || true git commit -m 'split repo - diff README.md' --allow-empty git add "**/.OwlBot.yaml" || true git commit -m 'split repo - diff .OwlBot.yaml' --allow-empty git add "**/versions.txt" || true git commit -m 'split repo - diff versions.txt' --allow-empty git add --all || true git commit -am 'split repo - diff everything else' --allow-empty cd ../..