blob: 4d9231c31a3cce331c468126e93e70e5fb97cf5b [file] [log] [blame]
#!/usr/bin/env python3
#
# Copyright 2019 The Flutter Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import argparse
import datetime
import os
import sys
import json
THIS_DIR = os.path.abspath(os.path.dirname(__file__))
# The template for the POM file.
POM_FILE_CONTENT = '''<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>io.flutter</groupId>
<artifactId>{0}</artifactId>
<version>{1}</version>
<packaging>jar</packaging>
<dependencies>
{2}
</dependencies>
</project>
'''
POM_DEPENDENCY = '''
<dependency>
<groupId>{0}</groupId>
<artifactId>{1}</artifactId>
<version>{2}</version>
<scope>compile</scope>
</dependency>
'''
MAVEN_METADATA_CONTENT = '''
<metadata xmlns="http://maven.apache.org/METADATA/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/METADATA/1.1.0 http://maven.apache.org/xsd/metadata-1.1.0.xsd" modelVersion="1.1.0">
<groupId>io.flutter</groupId>
<artifactId>{0}</artifactId>
<version>{1}</version>
<versioning>
<versions>
<version>{1}</version>
</versions>
<snapshot>
<timestamp>{2}</timestamp>
<buildNumber>0</buildNumber>
</snapshot>
<snapshotVersions>
<snapshotVersion>
<extension>jar</extension>
<value>{1}</value>
</snapshotVersion>
<snapshotVersion>
<extension>pom</extension>
<value>{1}</value>
</snapshotVersion>
</snapshotVersions>
</versioning>
</metadata>
'''
def utf8(s):
return str(s, 'utf-8') if isinstance(s, (bytes, bytearray)) else s
def main():
with open(os.path.join(THIS_DIR, 'files.json')) as f:
dependencies = json.load(f)
parser = argparse.ArgumentParser(
description='Generate the POM file for the engine artifacts'
)
parser.add_argument(
'--engine-artifact-id',
type=utf8,
required=True,
help='The artifact id. e.g. android_arm_release'
)
parser.add_argument(
'--engine-version',
type=utf8,
required=True,
help='The engine commit hash'
)
parser.add_argument(
'--destination',
type=utf8,
required=True,
help='The destination directory absolute path'
)
parser.add_argument(
'--include-embedding-dependencies',
type=bool,
help='Include the dependencies for the embedding'
)
args = parser.parse_args()
engine_artifact_id = args.engine_artifact_id
engine_version = args.engine_version
artifact_version = '1.0.0-' + engine_version
out_file_name = '%s.pom' % engine_artifact_id
pom_dependencies = ''
if args.include_embedding_dependencies:
for dependency in dependencies:
if not dependency['provides']:
# Don't include transitive dependencies since they aren't used by the embedding.
continue
group_id, artifact_id, version = dependency['maven_dependency'].split(':')
pom_dependencies += POM_DEPENDENCY.format(group_id, artifact_id, version)
# Write the POM file.
with open(os.path.join(args.destination, out_file_name), 'w') as f:
f.write(
POM_FILE_CONTENT.format(
engine_artifact_id, artifact_version, pom_dependencies
)
)
# Write the Maven metadata file.
with open(os.path.join(args.destination,
'%s.maven-metadata.xml' % engine_artifact_id),
'w') as f:
timestamp = datetime.datetime.utcnow().strftime("%Y%m%d.%H%M%S")
f.write(
MAVEN_METADATA_CONTENT.format(
engine_artifact_id, artifact_version, timestamp
)
)
if __name__ == '__main__':
sys.exit(main())