blob: 83871b8aef6f53c9e93de795e7755d751d40b08d [file] [log] [blame]
/*
* Copyright (C) 2017 The Android Open Source Project
*
* 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.
*/
import com.google.common.base.Charsets
import com.google.common.io.Files
import com.google.common.hash.HashCode
import com.google.common.hash.HashFunction
import com.google.common.hash.Hashing
import java.nio.charset.Charset
// Main task called by the build server.
task(createArchive)
// upload anchor for subprojects to upload their artifacts
// to the local repo.
task(mainUpload)
rootProject.ext.repoWithHistoryOut = new File(buildDir, 'support_repo_with_history')
// repository creation task
task createRepository(type: Zip, dependsOn: mainUpload) {
from rootProject.ext.supportRepoOut
from "${init.prebuiltsRoot}/maven_repo/android"
// if there are duplicates, pick the first one.
duplicatesStrategy "EXCLUDE"
destinationDir project.ext.distDir
into 'm2repository'
baseName = String.format("sdk-repo-linux-m2repository-%s", project.ext.buildNumber)
}
task createTopOfTreeRepository(type : Zip) {
description "Creates a maven repository that includes just the libraries compiled in this" +
" project, without any history from prebuilts."
from rootProject.ext.supportRepoOut
destinationDir rootProject.ext.distDir
into 'm2repository'
baseName = String.format("top-of-tree-m2repository-%s", project.ext.buildNumber)
dependsOn mainUpload
}
createArchive.dependsOn createRepository
createRepository.dependsOn createTopOfTreeRepository
// anchor for prepare repo. This is post unzip + sourceProp.
task nukeRepoOut() {
description "This task clears the repo folder to ensure that we run a fresh build every" +
" time we create arhives. Otherwise, snapshots will accumulate in the builds folder."
doFirst {
rootProject.ext.supportRepoOut.deleteDir()
rootProject.ext.supportRepoOut.mkdirs()
}
}
task(prepareRepo)
task(createXml).doLast({
def repoArchive = createRepository.archivePath
def repoArchiveName = createRepository.archiveName
def size = repoArchive.length()
def sha1 = getSha1(repoArchive)
def xml =
"<sdk:sdk-addon xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:sdk=\"http://schemas.android.com/sdk/android/addon/6\">\n\
<sdk:extra>\n\
<sdk:revision>\n\
<sdk:major>${project.ext.extraVersion}</sdk:major>\n\
</sdk:revision>\n\
<sdk:vendor-display>Android</sdk:vendor-display>\n\
<sdk:vendor-id>android</sdk:vendor-id>\n\
<sdk:name-display>Local Maven repository for Support Libraries</sdk:name-display>\n\
<sdk:path>m2repository</sdk:path>\n\
<sdk:archives>\n\
<sdk:archive>\n\
<sdk:size>${size}</sdk:size>\n\
<sdk:checksum type=\"sha1\">${sha1}</sdk:checksum>\n\
<sdk:url>${repoArchiveName}</sdk:url>\n\
</sdk:archive>\n\
</sdk:archives>\n\
</sdk:extra>\n\
</sdk:sdk-addon>"
Files.write(xml, new File(project.ext.distDir, 'repo-extras.xml'), Charsets.UTF_8)
})
createArchive.dependsOn createXml
createXml.dependsOn createRepository
task(createSourceProp).doLast({
def sourceProp =
"Extra.VendorDisplay=Android\n\
Extra.Path=m2repository\n\
Archive.Arch=ANY\n\
Extra.NameDisplay=Android Support Repository\n\
Archive.Os=ANY\n\
Pkg.Desc=Local Maven repository for Support Libraries\n\
Pkg.Revision=${project.ext.extraVersion}.0.0\n\
Extra.VendorId=android"
Files.write(sourceProp, new File(project.ext.supportRepoOut, 'source.properties'), Charsets.UTF_8)
})
createSourceProp.dependsOn nukeRepoOut
prepareRepo.dependsOn createSourceProp
/**
* Generates SHA1 hash for the specified file's absolute path.
*
* @param inputFile file to hash
* @return SHA1 hash
*/
String getSha1(File inputFile) {
HashFunction hashFunction = Hashing.sha1()
HashCode hashCode = hashFunction.hashString(inputFile.getAbsolutePath(), Charset.forName("UTF-8"))
return hashCode.toString()
}