1*55e87721SMatt Gilbride#!/bin/bash 2*55e87721SMatt Gilbride 3*55e87721SMatt Gilbride# Merging repository to google-cloud-java using git-filter-repo. 4*55e87721SMatt Gilbride# https://stackoverflow.com/questions/1425892/how-do-you-merge-two-git-repositories 5*55e87721SMatt Gilbride# 6*55e87721SMatt Gilbride# Usage: 7*55e87721SMatt Gilbride# cd google-cloud-java 8*55e87721SMatt Gilbride# # edit the repository to merge. 9*55e87721SMatt Gilbride# vim generation/repo.txt 10*55e87721SMatt Gilbride# # use your account 11*55e87721SMatt Gilbride# export USERNAME=XXX 12*55e87721SMatt Gilbride# # Run the script 13*55e87721SMatt Gilbride# ./generation/merge_repository.sh 14*55e87721SMatt Gilbride# # Create a pull request. Ensure you MERGE the pull request. Not 'squash'. 15*55e87721SMatt Gilbride# cd generation/monorepo/google-cloud-java-merged 16*55e87721SMatt Gilbride# git checkout -b merge_repositories 17*55e87721SMatt Gilbride# gh pr create --title 'chore: merge new repository into google-cloud-java' --body '' 18*55e87721SMatt Gilbride 19*55e87721SMatt Gilbrideset -xe 20*55e87721SMatt Gilbride 21*55e87721SMatt Gilbride[ -z "`git config user.email`" ] && git config --global user.email "${USERNAME:-script}@google.com" 22*55e87721SMatt Gilbride[ -z "`git config user.name`" ] && git config --global user.name "${USERNAME:-script}" 23*55e87721SMatt Gilbride 24*55e87721SMatt Gilbridecd "$(dirname "$0")" 25*55e87721SMatt Gilbride 26*55e87721SMatt Gilbriderm -rf monorepo 27*55e87721SMatt Gilbridemkdir monorepo 28*55e87721SMatt Gilbride 29*55e87721SMatt Gilbridecp merge_repository.sh monorepo 30*55e87721SMatt Gilbridecp repos.txt monorepo 31*55e87721SMatt Gilbride 32*55e87721SMatt Gilbridecd monorepo 33*55e87721SMatt Gilbride 34*55e87721SMatt Gilbridegit clone https://github.com/newren/git-filter-repo.git 35*55e87721SMatt Gilbrideexport PATH=$PATH:`pwd`/git-filter-repo 36*55e87721SMatt Gilbride 37*55e87721SMatt Gilbridemerged_repository=google-cloud-java-merged 38*55e87721SMatt Gilbridegit clone https://github.com/googleapis/google-cloud-java "${merged_repository}" 39*55e87721SMatt Gilbride 40*55e87721SMatt Gilbridecd "${merged_repository}" 41*55e87721SMatt Gilbride 42*55e87721SMatt Gilbridecat ../repos.txt | while read service 43*55e87721SMatt Gilbridedo 44*55e87721SMatt Gilbride cd .. 45*55e87721SMatt Gilbride git clone https://github.com/googleapis/${service}.git 46*55e87721SMatt Gilbride cd ${service} 47*55e87721SMatt Gilbride git filter-repo --to-subdirectory-filter ${service} 48*55e87721SMatt Gilbride 49*55e87721SMatt Gilbride # setup owlbot files correctly to match monorepo configuration 50*55e87721SMatt Gilbride if [ -r "${service}/.github/.OwlBot.yaml" ]; then 51*55e87721SMatt Gilbride cp ${service}/.github/.OwlBot.yaml ${service}/.OwlBot.yaml 52*55e87721SMatt Gilbride rm ${service}/.github/.OwlBot.lock.yaml 53*55e87721SMatt Gilbride rm ${service}/.github/.OwlBot.yaml 54*55e87721SMatt Gilbride sed -i.bak '/docker/d' ${service}/.OwlBot.yaml && rm ${service}/.OwlBot.yaml.bak 55*55e87721SMatt Gilbride sed -i.bak '/image/d' ${service}/.OwlBot.yaml && rm ${service}/.OwlBot.yaml.bak 56*55e87721SMatt Gilbride 57*55e87721SMatt Gilbride # In monorepo, the staging directory structure tells the destination module to 58*55e87721SMatt Gilbride # which the OwlBot Java postprocessor copies the files. 59*55e87721SMatt Gilbride sed -i.bak "s|owl-bot-staging|owl-bot-staging/${service}|" ${service}/.OwlBot.yaml && rm ${service}/.OwlBot.yaml.bak 60*55e87721SMatt Gilbride 61*55e87721SMatt Gilbride text=$(grep '^.*api_shortname.*' ${service}/.repo-metadata.json) 62*55e87721SMatt Gilbride text=$(echo "$text" | sed 's/\"//g; s/\,//g; s/^[[:space:]]*//' ) 63*55e87721SMatt Gilbride text=${text/api_shortname/api-name} 64*55e87721SMatt Gilbride echo -e "\n"$text>> ${service}/.OwlBot.yaml 65*55e87721SMatt Gilbride git add . 66*55e87721SMatt Gilbride git config --add secrets.allowed "dest.*src" 67*55e87721SMatt Gilbride git commit -am "chore: setup owlbot configuration" 68*55e87721SMatt Gilbride fi 69*55e87721SMatt Gilbride 70*55e87721SMatt Gilbride cd "../${merged_repository}" 71*55e87721SMatt Gilbride git remote add ${service} ../${service} 72*55e87721SMatt Gilbride git config --add secrets.allowed "dest.*src" 73*55e87721SMatt Gilbride git fetch ${service} #--tags 74*55e87721SMatt Gilbride EDITOR=true git merge --quiet --allow-unrelated-histories ${service}/main 75*55e87721SMatt Gilbride git remote remove ${service} 76*55e87721SMatt Gilbride rm -rf ../${service} 77*55e87721SMatt Gilbridedone 78*55e87721SMatt Gilbride 79*55e87721SMatt Gilbride# cwd: monorepo/google-cloud-java-merged 80*55e87721SMatt Gilbrideecho "Working directory: $(pwd)" 81*55e87721SMatt Gilbride 82*55e87721SMatt Gilbridecp -R ../../../google-cloud-jar-parent google-cloud-jar-parent 83*55e87721SMatt Gilbridecp -R ../../../google-cloud-pom-parent google-cloud-pom-parent 84*55e87721SMatt Gilbride 85*55e87721SMatt Gilbridegit add --all 86*55e87721SMatt Gilbridegit commit -m 'chore: add template files' 87*55e87721SMatt Gilbride 88*55e87721SMatt Gilbride../../generate_root_pom.sh 89*55e87721SMatt Gilbride 90*55e87721SMatt Gilbridegit add pom.xml 91*55e87721SMatt Gilbridegit commit -am 'chore: create aggregator pom' --allow-empty 92*55e87721SMatt Gilbride 93*55e87721SMatt Gilbride# Point modules poms and BOMs to the aggregator pom as parent 94*55e87721SMatt Gilbridebash ../../set_parent_pom.sh 95*55e87721SMatt Gilbride 96*55e87721SMatt Gilbridegit add --all 97*55e87721SMatt Gilbridegit commit -am 'chore: point modules to the aggregator pom as parent' \ 98*55e87721SMatt Gilbride --allow-empty 99*55e87721SMatt Gilbride 100*55e87721SMatt Gilbride../../consolidate_config.sh 101*55e87721SMatt Gilbride 102*55e87721SMatt Gilbridegit add --all 103*55e87721SMatt Gilbridegit commit -am 'chore: consolidate config to parent' \ 104*55e87721SMatt Gilbride --allow-empty 105*55e87721SMatt Gilbride 106*55e87721SMatt Gilbride../../generate_gapic_bom.sh 107*55e87721SMatt Gilbride 108*55e87721SMatt Gilbride# add the gapic bom module to root pom.xml by regenerating aggregator pom 109*55e87721SMatt Gilbride../../generate_root_pom.sh 110*55e87721SMatt Gilbride 111*55e87721SMatt Gilbridegit add gapic-libraries-bom/pom.xml 112*55e87721SMatt Gilbridegit commit -am 'chore: create gapic-libraries-bom' \ 113*55e87721SMatt Gilbride --allow-empty 114*55e87721SMatt Gilbride 115*55e87721SMatt Gilbridecp ../../gapic_bom_versions.txt gapic-libraries-bom/versions.txt 116*55e87721SMatt Gilbride 117*55e87721SMatt Gilbride../../delete_non_generated_samples.sh 118*55e87721SMatt Gilbride 119*55e87721SMatt Gilbridegit add --all 120*55e87721SMatt Gilbridegit commit -am 'chore: delete non-auto-generated samples' \ 121*55e87721SMatt Gilbride --allow-empty 122*55e87721SMatt Gilbride 123*55e87721SMatt Gilbride../../generate_root_versions_txt.sh 124*55e87721SMatt Gilbride../../update_versions.sh -s 125*55e87721SMatt Gilbride../../apply_current_versions.sh 126*55e87721SMatt Gilbride 127*55e87721SMatt Gilbridegit add --all 128*55e87721SMatt Gilbridegit commit -am 'chore: update versions to latest in maven' \ 129*55e87721SMatt Gilbride --allow-empty 130*55e87721SMatt Gilbride 131*55e87721SMatt Gilbride../../update_owlbot_postprocessor_config.sh 132*55e87721SMatt Gilbride 133*55e87721SMatt Gilbridegit add --all 134*55e87721SMatt Gilbridegit commit -am 'chore: remove and disable owlbot postprocessor templates' \ 135*55e87721SMatt Gilbride --allow-empty 136*55e87721SMatt Gilbride 137*55e87721SMatt Gilbride../../set_owlbot_config.sh 138*55e87721SMatt Gilbride 139*55e87721SMatt Gilbridegit commit -am 'chore: set owlbot copy config' --allow-empty 140*55e87721SMatt Gilbride 141*55e87721SMatt Gilbride# create a monorepo/diff repo 142*55e87721SMatt Gilbridecd .. 143*55e87721SMatt Gilbridecp -R "${merged_repository}" split 144*55e87721SMatt Gilbriderm -rf split/.git 145*55e87721SMatt Gilbridegit clone -b main --single-branch https://github.com/googleapis/google-cloud-java.git shadow 146*55e87721SMatt Gilbridecp -R shadow/.git split/.git 147*55e87721SMatt Gilbriderm -rf shadow 148*55e87721SMatt Gilbridemv split diff 149*55e87721SMatt Gilbridecd diff 150*55e87721SMatt Gilbride 151*55e87721SMatt Gilbridegit add "*/src/main/*" || true 152*55e87721SMatt Gilbridegit commit -m 'split repo - diff src/main' --allow-empty 153*55e87721SMatt Gilbride 154*55e87721SMatt Gilbridegit add "*/src/test/*" || true 155*55e87721SMatt Gilbridegit commit -m 'split repo - diff src/test' --allow-empty 156*55e87721SMatt Gilbride 157*55e87721SMatt Gilbridegit add "*/samples/*" || true 158*55e87721SMatt Gilbridegit commit -m 'split repo - diff samples' --allow-empty 159*55e87721SMatt Gilbride 160*55e87721SMatt Gilbridegit add "**/pom.xml" || true 161*55e87721SMatt Gilbridegit commit -m 'split repo - diff pom.xml' --allow-empty 162*55e87721SMatt Gilbride 163*55e87721SMatt Gilbridegit add "**/CHANGELOG.md" || true 164*55e87721SMatt Gilbridegit commit -m 'split repo - diff CHANGELOG.md' --allow-empty 165*55e87721SMatt Gilbride 166*55e87721SMatt Gilbridegit add "**/README.md" || true 167*55e87721SMatt Gilbridegit commit -m 'split repo - diff README.md' --allow-empty 168*55e87721SMatt Gilbride 169*55e87721SMatt Gilbridegit add "**/.OwlBot.yaml" || true 170*55e87721SMatt Gilbridegit commit -m 'split repo - diff .OwlBot.yaml' --allow-empty 171*55e87721SMatt Gilbride 172*55e87721SMatt Gilbridegit add "**/versions.txt" || true 173*55e87721SMatt Gilbridegit commit -m 'split repo - diff versions.txt' --allow-empty 174*55e87721SMatt Gilbride 175*55e87721SMatt Gilbridegit add --all || true 176*55e87721SMatt Gilbridegit commit -am 'split repo - diff everything else' --allow-empty 177*55e87721SMatt Gilbridecd ../.. 178