Exemple #1
0
def run_main() -> int:
    try:
        # Read commit information:
        dd_sdk_ios_commit = DogfoodedCommit()

        # Resolve and read `dd-sdk-ios` dependencies:
        dd_sdk_package_path = '../..'
        os.system(
            f'swift package --package-path {dd_sdk_package_path} resolve')
        dd_sdk_ios_package = PackageResolvedFile(
            path=f'{dd_sdk_package_path}/Package.resolved')
        kronos_dependency = dd_sdk_ios_package.read_dependency(
            package_name='Kronos')
        plcrash_reporter_dependency = dd_sdk_ios_package.read_dependency(
            package_name='PLCrashReporter')

        if dd_sdk_ios_package.get_number_of_dependencies() > 2:
            raise Exception(
                '`dogfood.py` needs update as `dd-sdk-ios` has unrecognized dependencies'
            )

        # Clone `datadog-ios` repository to temporary location and update its `Package.resolved` so it points
        # to the current `dd-sdk-ios` commit. After that, push changes to `datadog-ios` and create dogfooding PR.
        with TemporaryDirectory() as temp_dir:
            with remember_cwd():
                repository = Repository.clone(
                    ssh='[email protected]:DataDog/datadog-ios.git',
                    repository_name='datadog-ios',
                    temp_dir=temp_dir)
                repository.create_branch(
                    f'dogfooding-{dd_sdk_ios_commit.hash_short}')
                package = PackageResolvedFile(
                    path=
                    'Datadog.xcworkspace/xcshareddata/swiftpm/Package.resolved'
                )
                # Update version of `dd-sdk-ios`:
                package.update_dependency(package_name='DatadogSDK',
                                          new_branch='dogfooding',
                                          new_revision=dd_sdk_ios_commit.hash,
                                          new_version=None)
                # Set version of `Kronos` to as it is resolved in `dd-sdk-ios`:
                package.update_dependency(
                    package_name='Kronos',
                    new_branch=kronos_dependency['branch'],
                    new_revision=kronos_dependency['revision'],
                    new_version=kronos_dependency['version'],
                )
                # Set version of `PLCrashReporter` to as it is resolved in `dd-sdk-ios`:
                package.update_dependency(
                    package_name='PLCrashReporter',
                    new_branch=plcrash_reporter_dependency['branch'],
                    new_revision=plcrash_reporter_dependency['revision'],
                    new_version=plcrash_reporter_dependency['version'],
                )
                package.save()
                # Push changes to `datadog-ios`:
                repository.commit(
                    message=
                    f'Dogfooding dd-sdk-ios commit: {dd_sdk_ios_commit.hash}\n\n'
                    + f'Dogfooded commit message: {dd_sdk_ios_commit.message}',
                    author=dd_sdk_ios_commit.author)
                repository.push()
                # Create PR:
                repository.create_pr(
                    title=
                    f'[Dogfooding] Upgrade dd-sdk-ios to {dd_sdk_ios_commit.hash_short}',
                    description=
                    '⚙️ This is an automated PR upgrading the version of \`dd-sdk-ios\` to '
                    +
                    f'https://github.com/DataDog/dd-sdk-ios/commit/{dd_sdk_ios_commit.hash}'
                )
    except Exception as error:
        print(f'❌ Dogfooding failed: {error}')
        return 1

    return 0
Exemple #2
0
def dogfood(dry_run: bool, repository_url: str, repository_name: str,
            repository_package_resolved_path: str) -> int:
    print(f'🐶 Dogfooding: {repository_name}...')

    # Read commit information:
    dd_sdk_ios_commit = DogfoodedCommit()

    # Resolve and read `dd-sdk-ios` dependencies:
    dd_sdk_package_path = '../..'
    os.system(f'swift package --package-path {dd_sdk_package_path} resolve')
    dd_sdk_ios_package = PackageResolvedFile(
        path=f'{dd_sdk_package_path}/Package.resolved')

    # Clone dependant repo to temporary location and update its `Package.resolved` so it points
    # to the current `dd-sdk-ios` commit. After that, push changes to dependant repo and create dogfooding PR.
    with TemporaryDirectory() as temp_dir:
        with remember_cwd():
            repository = Repository.clone(ssh=repository_url,
                                          repository_name=repository_name,
                                          temp_dir=temp_dir)
            repository.create_branch(
                f'dogfooding-{dd_sdk_ios_commit.hash_short}')

            package = PackageResolvedFile(
                path=repository_package_resolved_path)

            # Update version of `dd-sdk-ios`:
            package.update_dependency(package_name='DatadogSDK',
                                      new_branch='dogfooding',
                                      new_revision=dd_sdk_ios_commit.hash,
                                      new_version=None)

            # Add or update `dd-sdk-ios` dependencies
            for dependency_name in dd_sdk_ios_package.read_dependency_names():
                dependency = dd_sdk_ios_package.read_dependency(
                    package_name=dependency_name)

                if package.has_dependency(package_name=dependency_name):
                    package.update_dependency(
                        package_name=dependency_name,
                        new_branch=dependency['state']['branch'],
                        new_revision=dependency['state']['revision'],
                        new_version=dependency['state']['version'],
                    )
                else:
                    package.add_dependency(
                        package_name=dependency_name,
                        repository_url=dependency['repositoryURL'],
                        branch=dependency['state']['branch'],
                        revision=dependency['state']['revision'],
                        version=dependency['state']['version'])

            package.save()

            # Push changes to dependant repo:
            repository.commit(
                message=
                f'Dogfooding dd-sdk-ios commit: {dd_sdk_ios_commit.hash}\n\n' +
                f'Dogfooded commit message: {dd_sdk_ios_commit.message}',
                author=dd_sdk_ios_commit.author)

            if dry_run:
                package.print()
            else:
                repository.push()
                # Create PR:
                repository.create_pr(
                    title=
                    f'[Dogfooding] Upgrade dd-sdk-ios to {dd_sdk_ios_commit.hash_short}',
                    description=
                    '⚙️ This is an automated PR upgrading the version of \`dd-sdk-ios\` to '
                    +
                    f'https://github.com/DataDog/dd-sdk-ios/commit/{dd_sdk_ios_commit.hash}'
                )