xref: /aosp_15_r20/external/google-cloud-java/generation/merge_repository.sh (revision 55e87721aa1bc457b326496a7ca40f3ea1a63287)
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