xref: /aosp_15_r20/prebuilts/tools/import-maven-artifacts.sh (revision 6774467a9462441f7cd7fbc651979727f762377a)
1*6774467aSAndroid Build Coastguard Workerset -e
2*6774467aSAndroid Build Coastguard Worker
3*6774467aSAndroid Build Coastguard Worker
4*6774467aSAndroid Build Coastguard WorkerdestRepo="$(cd $(dirname $0)/../.. && pwd)"
5*6774467aSAndroid Build Coastguard WorkertempDir="/tmp/import-temp-work"
6*6774467aSAndroid Build Coastguard Workerrm -rf $tempDir
7*6774467aSAndroid Build Coastguard Workermkdir -p $tempDir
8*6774467aSAndroid Build Coastguard Workercd $tempDir
9*6774467aSAndroid Build Coastguard Worker
10*6774467aSAndroid Build Coastguard Workerfunction usage() {
11*6774467aSAndroid Build Coastguard Worker  echo "Usage: $0 group:artifact:version[:classifier][@extension] [group:artifact:version[:classifier][@extension]...]
12*6774467aSAndroid Build Coastguard Worker
13*6774467aSAndroid Build Coastguard WorkerThis script downloads the specified artifacts copies them into the appropriate subdirectory of $destRepo/prebuilts/"
14*6774467aSAndroid Build Coastguard Worker  exit 1
15*6774467aSAndroid Build Coastguard Worker}
16*6774467aSAndroid Build Coastguard Worker
17*6774467aSAndroid Build Coastguard Worker
18*6774467aSAndroid Build Coastguard Worker
19*6774467aSAndroid Build Coastguard Worker
20*6774467aSAndroid Build Coastguard WorkerinputRepo=m2repository
21*6774467aSAndroid Build Coastguard WorkerstageRepo=m2staged
22*6774467aSAndroid Build Coastguard WorkerdestAndroidRepo=$destRepo/prebuilts/gradle-plugin
23*6774467aSAndroid Build Coastguard WorkerdestThirdPartyRepo=$destRepo/prebuilts/tools/common/m2/repository
24*6774467aSAndroid Build Coastguard Worker
25*6774467aSAndroid Build Coastguard Worker
26*6774467aSAndroid Build Coastguard Worker# usage: downloadArtifacts "$group:$artifact:$version[:classifier][@extension]..."
27*6774467aSAndroid Build Coastguard Workerfunction downloadArtifacts() {
28*6774467aSAndroid Build Coastguard Worker  if [ "$1" == "" ]; then
29*6774467aSAndroid Build Coastguard Worker    usage
30*6774467aSAndroid Build Coastguard Worker  fi
31*6774467aSAndroid Build Coastguard Worker  echo downloading dependencies into $inputRepo
32*6774467aSAndroid Build Coastguard Worker  rm -rf $inputRepo
33*6774467aSAndroid Build Coastguard Worker  while [ "$1" != "" ]; do
34*6774467aSAndroid Build Coastguard Worker    echo importing $1
35*6774467aSAndroid Build Coastguard Worker    IFS=@ read -r dependency extension <<< "$1"
36*6774467aSAndroid Build Coastguard Worker    IFS=: read -ra FIELDS <<< "${dependency}"
37*6774467aSAndroid Build Coastguard Worker    groupId="${FIELDS[0]}"
38*6774467aSAndroid Build Coastguard Worker    artifactId="${FIELDS[1]}"
39*6774467aSAndroid Build Coastguard Worker    version="${FIELDS[2]}"
40*6774467aSAndroid Build Coastguard Worker    classifier="${FIELDS[3]}"
41*6774467aSAndroid Build Coastguard Worker
42*6774467aSAndroid Build Coastguard Worker    # download the actual artifact
43*6774467aSAndroid Build Coastguard Worker    downloadArtifact "$groupId" "$artifactId" "$version" "$classifier" "$extension"
44*6774467aSAndroid Build Coastguard Worker
45*6774467aSAndroid Build Coastguard Worker    # try to download the sources jar
46*6774467aSAndroid Build Coastguard Worker    downloadArtifact "$groupId" "$artifactId" "$version" "sources" "jar" || true
47*6774467aSAndroid Build Coastguard Worker
48*6774467aSAndroid Build Coastguard Worker    # go to next artifact
49*6774467aSAndroid Build Coastguard Worker    shift
50*6774467aSAndroid Build Coastguard Worker  done
51*6774467aSAndroid Build Coastguard Worker  echo done downloading dependencies
52*6774467aSAndroid Build Coastguard Worker}
53*6774467aSAndroid Build Coastguard Worker
54*6774467aSAndroid Build Coastguard Worker# usage: downloadArtifact "$group" "$artifact" "$version" "$classifier" "$extension"
55*6774467aSAndroid Build Coastguard Workerfunction downloadArtifact() {
56*6774467aSAndroid Build Coastguard Worker  pomPath="$PWD/pom.xml"
57*6774467aSAndroid Build Coastguard Worker  echo creating $pomPath
58*6774467aSAndroid Build Coastguard Worker  pomPrefix='<?xml version="1.0" encoding="UTF-8"?>
59*6774467aSAndroid Build Coastguard Worker<project xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
60*6774467aSAndroid Build Coastguard Worker  <modelVersion>4.0.0</modelVersion>
61*6774467aSAndroid Build Coastguard Worker  <groupId>com.google.android.build</groupId>
62*6774467aSAndroid Build Coastguard Worker  <artifactId>m2repository</artifactId>
63*6774467aSAndroid Build Coastguard Worker  <version>1.0</version>
64*6774467aSAndroid Build Coastguard Worker  <repositories>
65*6774467aSAndroid Build Coastguard Worker    <repository>
66*6774467aSAndroid Build Coastguard Worker      <id>google</id>
67*6774467aSAndroid Build Coastguard Worker      <name>Google</name>
68*6774467aSAndroid Build Coastguard Worker      <url>https://maven.google.com</url>
69*6774467aSAndroid Build Coastguard Worker    </repository>
70*6774467aSAndroid Build Coastguard Worker    <repository>
71*6774467aSAndroid Build Coastguard Worker      <id>jcenter</id>
72*6774467aSAndroid Build Coastguard Worker      <name>JCenter</name>
73*6774467aSAndroid Build Coastguard Worker      <url>https://jcenter.bintray.com</url>
74*6774467aSAndroid Build Coastguard Worker    </repository>
75*6774467aSAndroid Build Coastguard Worker  </repositories>
76*6774467aSAndroid Build Coastguard Worker  <dependencies>
77*6774467aSAndroid Build Coastguard Worker'
78*6774467aSAndroid Build Coastguard Worker
79*6774467aSAndroid Build Coastguard Worker  pomSuffix='
80*6774467aSAndroid Build Coastguard Worker  </dependencies>
81*6774467aSAndroid Build Coastguard Worker  <build>
82*6774467aSAndroid Build Coastguard Worker        <plugins>
83*6774467aSAndroid Build Coastguard Worker            <plugin>
84*6774467aSAndroid Build Coastguard Worker                <groupId>org.apache.maven.plugins</groupId>
85*6774467aSAndroid Build Coastguard Worker                <artifactId>maven-dependency-plugin</artifactId>
86*6774467aSAndroid Build Coastguard Worker                <version>2.8</version>
87*6774467aSAndroid Build Coastguard Worker                <executions>
88*6774467aSAndroid Build Coastguard Worker                    <execution>
89*6774467aSAndroid Build Coastguard Worker                        <id>default-cli</id>
90*6774467aSAndroid Build Coastguard Worker                        <configuration>
91*6774467aSAndroid Build Coastguard Worker                            <includeScope>runtime</includeScope>
92*6774467aSAndroid Build Coastguard Worker                            <addParentPoms>true</addParentPoms>
93*6774467aSAndroid Build Coastguard Worker                            <copyPom>true</copyPom>
94*6774467aSAndroid Build Coastguard Worker                            <useRepositoryLayout>true</useRepositoryLayout>
95*6774467aSAndroid Build Coastguard Worker                            <outputDirectory>m2repository</outputDirectory>
96*6774467aSAndroid Build Coastguard Worker                        </configuration>
97*6774467aSAndroid Build Coastguard Worker                    </execution>
98*6774467aSAndroid Build Coastguard Worker                </executions>
99*6774467aSAndroid Build Coastguard Worker            </plugin>
100*6774467aSAndroid Build Coastguard Worker        </plugins>
101*6774467aSAndroid Build Coastguard Worker    </build>
102*6774467aSAndroid Build Coastguard Worker</project>
103*6774467aSAndroid Build Coastguard Worker'
104*6774467aSAndroid Build Coastguard Worker
105*6774467aSAndroid Build Coastguard Worker
106*6774467aSAndroid Build Coastguard Worker  groupId="$1"
107*6774467aSAndroid Build Coastguard Worker  artifactId="$2"
108*6774467aSAndroid Build Coastguard Worker  version="$3"
109*6774467aSAndroid Build Coastguard Worker  classifier="$4"
110*6774467aSAndroid Build Coastguard Worker  extension="$5"
111*6774467aSAndroid Build Coastguard Worker  pomDependencies=""
112*6774467aSAndroid Build Coastguard Worker
113*6774467aSAndroid Build Coastguard Worker
114*6774467aSAndroid Build Coastguard Worker  dependencyText=$(echo -e "\n    <dependency>\n      <groupId>${groupId}</groupId>\n      <artifactId>${artifactId}</artifactId>\n      <version>${version}</version>")
115*6774467aSAndroid Build Coastguard Worker  [ $classifier ] && dependencyText+=$(echo -e "\n      <classifier>${classifier}</classifier>")
116*6774467aSAndroid Build Coastguard Worker  [ $extension ] && dependencyText+=$(echo -e "\n      <type>${extension}</type>")
117*6774467aSAndroid Build Coastguard Worker  dependencyText+=$(echo -e "\n    </dependency>")
118*6774467aSAndroid Build Coastguard Worker
119*6774467aSAndroid Build Coastguard Worker
120*6774467aSAndroid Build Coastguard Worker  pomDependencies="${pomDependencies}${dependencyText}"
121*6774467aSAndroid Build Coastguard Worker
122*6774467aSAndroid Build Coastguard Worker  echo "${pomPrefix}${pomDependencies}${pomSuffix}" > $pomPath
123*6774467aSAndroid Build Coastguard Worker  echo done creating $pomPath
124*6774467aSAndroid Build Coastguard Worker
125*6774467aSAndroid Build Coastguard Worker  echo downloading one dependency into $inputRepo
126*6774467aSAndroid Build Coastguard Worker  mvn -f "$pomPath" dependency:copy-dependencies
127*6774467aSAndroid Build Coastguard Worker  echo done downloading one dependency into $inputRepo
128*6774467aSAndroid Build Coastguard Worker}
129*6774467aSAndroid Build Coastguard Worker
130*6774467aSAndroid Build Coastguard Worker# generates an appropriately formatted repository for merging into existing repositories,
131*6774467aSAndroid Build Coastguard Worker# by computing artifact metadata
132*6774467aSAndroid Build Coastguard Workerfunction stageRepo() {
133*6774467aSAndroid Build Coastguard Worker  echo staging to $stageRepo
134*6774467aSAndroid Build Coastguard Worker  rm -rf $stageRepo
135*6774467aSAndroid Build Coastguard Worker
136*6774467aSAndroid Build Coastguard Worker  for f in $(find $inputRepo -type f | grep -v '\.sha1$' | grep -v '\.md5'); do
137*6774467aSAndroid Build Coastguard Worker      md5=$(md5sum $f | sed 's/ .*//')
138*6774467aSAndroid Build Coastguard Worker      sha1=$(sha1sum $f | sed 's/ .*//')
139*6774467aSAndroid Build Coastguard Worker      relPath=$(echo $f | sed "s|$inputRepo/||")
140*6774467aSAndroid Build Coastguard Worker      relDir=$(dirname $relPath)
141*6774467aSAndroid Build Coastguard Worker
142*6774467aSAndroid Build Coastguard Worker      fileName=$(basename $relPath)
143*6774467aSAndroid Build Coastguard Worker      writeChecksums="true"
144*6774467aSAndroid Build Coastguard Worker
145*6774467aSAndroid Build Coastguard Worker      destDir="$stageRepo/$relDir"
146*6774467aSAndroid Build Coastguard Worker      destFile="$stageRepo/$relPath"
147*6774467aSAndroid Build Coastguard Worker      if [ "$fileName" == "maven-metadata-local.xml" ]; then
148*6774467aSAndroid Build Coastguard Worker        writeChecksums="false"
149*6774467aSAndroid Build Coastguard Worker        destFile="$destDir/maven-metadata.xml"
150*6774467aSAndroid Build Coastguard Worker      fi
151*6774467aSAndroid Build Coastguard Worker
152*6774467aSAndroid Build Coastguard Worker      mkdir -p $destDir
153*6774467aSAndroid Build Coastguard Worker      if [ "$writeChecksums" == "true" ]; then
154*6774467aSAndroid Build Coastguard Worker        echo -n $md5 > "${destFile}.md5"
155*6774467aSAndroid Build Coastguard Worker        echo -n $sha1 > "${destFile}.sha1"
156*6774467aSAndroid Build Coastguard Worker      fi
157*6774467aSAndroid Build Coastguard Worker      cp $f $destFile
158*6774467aSAndroid Build Coastguard Worker  done
159*6774467aSAndroid Build Coastguard Worker
160*6774467aSAndroid Build Coastguard Worker  echo done staging to $stageRepo
161*6774467aSAndroid Build Coastguard Worker}
162*6774467aSAndroid Build Coastguard Worker
163*6774467aSAndroid Build Coastguard Workerfunction announceCopy() {
164*6774467aSAndroid Build Coastguard Worker  input=$1
165*6774467aSAndroid Build Coastguard Worker  output=$2
166*6774467aSAndroid Build Coastguard Worker  if stat $input > /dev/null 2>/dev/null; then
167*6774467aSAndroid Build Coastguard Worker    echo copying "$input" to "$output"
168*6774467aSAndroid Build Coastguard Worker    cp -rT $input $output
169*6774467aSAndroid Build Coastguard Worker  fi
170*6774467aSAndroid Build Coastguard Worker}
171*6774467aSAndroid Build Coastguard Worker
172*6774467aSAndroid Build Coastguard Workerfunction exportArtifact() {
173*6774467aSAndroid Build Coastguard Worker  echo exporting
174*6774467aSAndroid Build Coastguard Worker  announceCopy $stageRepo/com/android $destAndroidRepo/com/android
175*6774467aSAndroid Build Coastguard Worker  rm -rf $stageRepo/com/android
176*6774467aSAndroid Build Coastguard Worker
177*6774467aSAndroid Build Coastguard Worker  announceCopy $stageRepo/androidx $destAndroidRepo/androidx
178*6774467aSAndroid Build Coastguard Worker  rm -rf $stageRepo/androidx
179*6774467aSAndroid Build Coastguard Worker
180*6774467aSAndroid Build Coastguard Worker  announceCopy $stageRepo $destThirdPartyRepo
181*6774467aSAndroid Build Coastguard Worker  echo done exporting
182*6774467aSAndroid Build Coastguard Worker}
183*6774467aSAndroid Build Coastguard Worker
184*6774467aSAndroid Build Coastguard Worker
185*6774467aSAndroid Build Coastguard Workerfunction main() {
186*6774467aSAndroid Build Coastguard Worker  downloadArtifacts "$@"
187*6774467aSAndroid Build Coastguard Worker  stageRepo
188*6774467aSAndroid Build Coastguard Worker  exportArtifact
189*6774467aSAndroid Build Coastguard Worker}
190*6774467aSAndroid Build Coastguard Worker
191*6774467aSAndroid Build Coastguard Workermain "$@"
192