Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions .reuse/dep5
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,18 @@ Files: tests/test_android/*
Copyright: 2018 Google, Inc
License: Apache-2.0

Files: tests/test_android2/*
Copyright: 2018 Google, Inc
License: Apache-2.0

Files: tests/test_kotlin/*
Copyright: 2018 Google, Inc
License: Apache-2.0

Files: tests/test_kotlin2/*
Copyright: 2018 Google, Inc
License: Apache-2.0

Files: tests/test_swift/*
Copyright: 2021 LG Electronics
License: Apache-2.0
Expand Down
280 changes: 171 additions & 109 deletions src/fosslight_dependency/_package_manager.py

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions src/fosslight_dependency/constant.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
YARN = 'yarn'

# Supported package name and manifest file
SUPPORT_PACKAE = {
SUPPORT_PACKAGE = {
PYPI: ['requirements.txt', 'setup.py', 'pyproject.toml'],
PNPM: 'pnpm-lock.yaml',
NPM: 'package.json',
Expand All @@ -37,7 +37,7 @@
GRADLE: 'build.gradle',
PUB: 'pubspec.yaml',
COCOAPODS: 'Podfile.lock',
ANDROID: 'build.gradle',
ANDROID: ['build.gradle', 'build.gradle.kts'],
SWIFT: 'Package.resolved',
CARTHAGE: 'Cartfile.resolved',
GO: 'go.mod',
Expand Down
14 changes: 13 additions & 1 deletion src/fosslight_dependency/package_manager/Android.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
# SPDX-License-Identifier: Apache-2.0

import os
import shutil
import logging
import fosslight_util.constant as constant
import fosslight_dependency.constant as const
Expand All @@ -23,19 +24,30 @@ class Android(PackageManager):
app_name = const.default_app_name
input_file_name = ''
plugin_auto_run = False
input_file_preexisted = False
gradle_cache_preexisted = False

def __init__(self, input_dir, output_dir, app_name):
super().__init__(self.package_manager_name, '', input_dir, output_dir)
self.download_url_map = {}
if app_name:
self.app_name = app_name
self.input_file_name = self.check_input_path()
self.input_file_preexisted = os.path.isfile(self.input_file_name)
self.gradle_cache_dir = os.path.join(os.path.abspath(input_dir), '.gradle')
self.gradle_cache_preexisted = os.path.isdir(self.gradle_cache_dir)
self.append_input_package_list_file(self.input_file_name)

def __del__(self):
if self.plugin_auto_run:
if self.plugin_auto_run and not self.input_file_preexisted:
if os.path.isfile(self.input_file_name):
os.remove(self.input_file_name)
if not self.gradle_cache_preexisted and os.path.isdir(self.gradle_cache_dir):
try:
shutil.rmtree(self.gradle_cache_dir)
logger.debug(f'Removed gradle cache directory: {self.gradle_cache_dir}')
except Exception as e:
logger.warning(f'Failed to remove gradle cache directory: {e}')

def check_input_path(self):
if os.path.isfile(self.plugin_output_file):
Expand Down
4 changes: 2 additions & 2 deletions src/fosslight_dependency/package_manager/Cargo.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,8 @@ def run_plugin(self):
logger.info(f"Found {self.input_file_name}, skip the flutter cmd to analyze dependency.")
return True

if not os.path.exists(const.SUPPORT_PACKAE.get(self.package_manager_name)):
logger.error(f"Cannot find the file({const.SUPPORT_PACKAE.get(self.package_manager_name)})")
if not os.path.exists(const.SUPPORT_PACKAGE.get(self.package_manager_name)):
logger.error(f"Cannot find the file({const.SUPPORT_PACKAGE.get(self.package_manager_name)})")
return False

if os.path.exists(self.cargo_lock_f):
Expand Down
2 changes: 1 addition & 1 deletion src/fosslight_dependency/package_manager/Carthage.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
class Carthage(PackageManager):
package_manager_name = const.CARTHAGE

input_file_name = const.SUPPORT_PACKAE.get(package_manager_name)
input_file_name = const.SUPPORT_PACKAGE.get(package_manager_name)
dn_url = "https://github.com/"

def __init__(self, input_dir, output_dir, github_token):
Expand Down
2 changes: 1 addition & 1 deletion src/fosslight_dependency/package_manager/Cocoapods.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ class Cocoapods(PackageManager):
package_manager_name = const.COCOAPODS

dn_url = 'https://cocoapods.org/'
input_file_name = const.SUPPORT_PACKAE.get(package_manager_name)
input_file_name = const.SUPPORT_PACKAGE.get(package_manager_name)

def __init__(self, input_dir, output_dir):
super().__init__(self.package_manager_name, self.dn_url, input_dir, output_dir)
Expand Down
2 changes: 1 addition & 1 deletion src/fosslight_dependency/package_manager/Helm.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ class Helm(PackageManager):
package_manager_name = const.HELM
tmp_charts_dir = 'tmp_charts'

input_file_name = const.SUPPORT_PACKAE.get(package_manager_name)
input_file_name = const.SUPPORT_PACKAGE.get(package_manager_name)

def __init__(self, input_dir, output_dir):
super().__init__(self.package_manager_name, '', input_dir, output_dir)
Expand Down
4 changes: 2 additions & 2 deletions src/fosslight_dependency/package_manager/Maven.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ def run_plugin(self):
self.is_run_plugin = True

if os.path.isfile(pom_backup):
shutil.move(pom_backup, const.SUPPORT_PACKAE.get(self.package_manager_name))
shutil.move(pom_backup, const.SUPPORT_PACKAGE.get(self.package_manager_name))
else:
self.set_direct_dependencies(False)

Expand All @@ -69,7 +69,7 @@ def add_plugin_in_pom(self, pom_backup):
xml = 'xml'
f_content = None

manifest_file = const.SUPPORT_PACKAE.get(self.package_manager_name)
manifest_file = const.SUPPORT_PACKAGE.get(self.package_manager_name)
if os.path.isfile(manifest_file) != 1:
logger.error(f"{manifest_file} is not existed in this directory.")
return ret
Expand Down
4 changes: 2 additions & 2 deletions src/fosslight_dependency/package_manager/Npm.py
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,7 @@ def parse_direct_dependencies(self):
if not self.direct_dep:
return
try:
if os.path.isfile(const.SUPPORT_PACKAE.get(self.package_manager_name)):
if os.path.isfile(const.SUPPORT_PACKAGE.get(self.package_manager_name)):
ret, err_msg = self.parse_transitive_relationship()
if not ret:
self.direct_dep = False
Expand Down Expand Up @@ -252,7 +252,7 @@ def parse_oss_information(self, f_name):
if f'{oss_init_name}({oss_item.version})' in self.relation_tree:
dep_item.depends_on_raw = self.relation_tree[f'{oss_init_name}({oss_item.version})']

manifest_file_path = os.path.join(package_path, const.SUPPORT_PACKAE.get(self.package_manager_name))
manifest_file_path = os.path.join(package_path, const.SUPPORT_PACKAGE.get(self.package_manager_name))
multi_license, license_comment, multi_flag = check_multi_license(license_name, manifest_file_path)

if multi_flag:
Expand Down
2 changes: 1 addition & 1 deletion src/fosslight_dependency/package_manager/Nuget.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ class Nuget(PackageManager):
def __init__(self, input_dir, output_dir):
super().__init__(self.package_manager_name, self.dn_url, input_dir, output_dir)

for manifest_i in const.SUPPORT_PACKAE.get(self.package_manager_name):
for manifest_i in const.SUPPORT_PACKAGE.get(self.package_manager_name):
if os.path.exists(os.path.basename(manifest_i)):
self.append_input_package_list_file(os.path.basename(manifest_i))
if manifest_i != 'packages.config':
Expand Down
6 changes: 3 additions & 3 deletions src/fosslight_dependency/package_manager/Pub.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,15 +31,15 @@ def __init__(self, input_dir, output_dir):
self.pkg_source_list = {}
self.name_version_dict = {}
self.pkg_details = {}
self.append_input_package_list_file(const.SUPPORT_PACKAE.get(self.package_manager_name))
self.append_input_package_list_file(const.SUPPORT_PACKAGE.get(self.package_manager_name))

def __del__(self):
if self.cur_path != '':
os.chdir(self.cur_path)

def run_plugin(self):
if not os.path.exists(const.SUPPORT_PACKAE.get(self.package_manager_name)):
logger.error(f"Cannot find the file({const.SUPPORT_PACKAE.get(self.package_manager_name)})")
if not os.path.exists(const.SUPPORT_PACKAGE.get(self.package_manager_name)):
logger.error(f"Cannot find the file({const.SUPPORT_PACKAGE.get(self.package_manager_name)})")
return False

return True
Expand Down
6 changes: 3 additions & 3 deletions src/fosslight_dependency/package_manager/Pypi.py
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ def create_virtualenv(self):

manifest_files = self.manifest_file_name
if not manifest_files:
manifest_files = copy.deepcopy(const.SUPPORT_PACKAE[self.package_manager_name])
manifest_files = copy.deepcopy(const.SUPPORT_PACKAGE[self.package_manager_name])
self.set_manifest_file(manifest_files)

install_cmd_list = []
Expand Down Expand Up @@ -190,9 +190,9 @@ def create_virtualenv(self):
if install_cmd_list:
install_cmd = cmd_separator.join(install_cmd_list)
else:
logger.error(const.SUPPORT_PACKAE[self.package_manager_name])
logger.error(const.SUPPORT_PACKAGE[self.package_manager_name])
logger.error('Cannot create virtualenv because it cannot find: '
+ ', '.join(const.SUPPORT_PACKAE[self.package_manager_name]))
+ ', '.join(const.SUPPORT_PACKAGE[self.package_manager_name]))
logger.error("Please run with '-a' and '-d' option.")
return False

Expand Down
2 changes: 1 addition & 1 deletion src/fosslight_dependency/package_manager/Swift.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
class Swift(PackageManager):
package_manager_name = const.SWIFT

input_file_name = const.SUPPORT_PACKAE.get(package_manager_name)
input_file_name = const.SUPPORT_PACKAGE.get(package_manager_name)
tmp_dep_tree_fname = 'show-dep.json'

def __init__(self, input_dir, output_dir, github_token):
Expand Down
2 changes: 1 addition & 1 deletion src/fosslight_dependency/package_manager/Unity.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
class Unity(PackageManager):
package_manager_name = const.UNITY

input_file_name = const.SUPPORT_PACKAE.get(package_manager_name)
input_file_name = const.SUPPORT_PACKAGE.get(package_manager_name)
packageCache_dir = os.path.join('Library', 'PackageCache')
mirror_url = 'https://github.com/needle-mirror/'
unity_internal_url = 'https://github.cds.internal.unity3d.com'
Expand Down
10 changes: 5 additions & 5 deletions src/fosslight_dependency/run_dependency_scanner.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
def find_package_manager(input_dir, path_to_exclude=[], manifest_file_name=[], recursive=False, excluded_files=[]):
ret = True
if not manifest_file_name:
for value in const.SUPPORT_PACKAE.values():
for value in const.SUPPORT_PACKAGE.values():
if isinstance(value, list):
manifest_file_name.extend(value)
else:
Expand Down Expand Up @@ -98,7 +98,7 @@ def find_package_manager(input_dir, path_to_exclude=[], manifest_file_name=[], r
for f_with_path in found_manifest_file:
f_name = os.path.basename(f_with_path)
dir_path = os.path.dirname(f_with_path)
for key, value in const.SUPPORT_PACKAE.items():
for key, value in const.SUPPORT_PACKAGE.items():
manifest_patterns = value if isinstance(value, list) else [value]

for pattern in manifest_patterns:
Expand Down Expand Up @@ -266,15 +266,15 @@ def run_dependency_scanner(package_manager='', input_dir='', output_dir_file='',
if package_manager:
scan_item.set_cover_comment(f"Manual detect mode (-m {package_manager})")
autodetect = False
support_packagemanager = list(const.SUPPORT_PACKAE.keys())
support_packagemanager = list(const.SUPPORT_PACKAGE.keys())

if package_manager not in support_packagemanager:
logger.error(f"(-m option) You entered the unsupported package manager({package_manager}).")
logger.error("Please enter the supported package manager({0}) with '-m' option."
.format(", ".join(support_packagemanager)))
return False, scan_item
manifest_file_name = []
value = const.SUPPORT_PACKAE[package_manager]
value = const.SUPPORT_PACKAGE[package_manager]
if isinstance(value, list):
manifest_file_name.extend(value)
else:
Expand Down Expand Up @@ -312,7 +312,7 @@ def run_dependency_scanner(package_manager='', input_dir='', output_dir_file='',
suggested_files_str.append("Please check the following files and try again:")
for f in suggested_files:
pm = const.SUGGESTED_PACKAGE[f.split(os.path.sep)[-1]]
suggested_files_str.append(f"\t\t\t{f} ({pm}) detected, but {const.SUPPORT_PACKAE[pm]} missing.")
suggested_files_str.append(f"\t\t\t{f} ({pm}) detected, but {const.SUPPORT_PACKAGE[pm]} missing.")

suggested_files_str.append("\t\t\tRefer: https://fosslight.org/fosslight-guide-en/scanner/1_dependency.html")
scan_item.set_cover_comment('\n'.join(suggested_files_str))
Expand Down
119 changes: 119 additions & 0 deletions tests/test_android2/sunflower/app/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
/*
* Copyright 2018 Google LLC
*
* 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
*
* https://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.
*/

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
apply plugin: 'dagger.hilt.android.plugin'
apply plugin: 'androidx.navigation.safeargs.kotlin'
apply plugin: 'org.fosslight'

android {
compileSdkVersion rootProject.compileSdkVersion
buildFeatures {
dataBinding true
}
defaultConfig {
applicationId "com.google.samples.apps.sunflower"
minSdkVersion rootProject.minSdkVersion
targetSdkVersion rootProject.targetSdkVersion
testInstrumentationRunner "com.google.samples.apps.sunflower.utilities.MainTestRunner"
versionCode 1
versionName "0.1.6"
vectorDrawables.useSupportLibrary true

// Consult the README on instructions for setting up Unsplash API key
buildConfigField("String", "UNSPLASH_ACCESS_KEY", "\"" + getUnsplashAccess() + "\"")
Comment thread
woocheol-lge marked this conversation as resolved.
javaCompileOptions {
annotationProcessorOptions {
arguments["dagger.hilt.disableModulesHaveInstallInCheck"] = "true"
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}

kotlinOptions {
// work-runtime-ktx 2.1.0 and above now requires Java 8
jvmTarget = "1.8"

// Enable Coroutines and Flow APIs
freeCompilerArgs += "-Xopt-in=kotlinx.coroutines.ExperimentalCoroutinesApi"
freeCompilerArgs += "-Xopt-in=kotlinx.coroutines.FlowPreview"
}
packagingOptions {
// Multiple dependency bring these files in. Exclude them to enable
// our test APK to build (has no effect on our AARs)
excludes += "/META-INF/AL2.0"
excludes += "/META-INF/LGPL2.1"
}
}

dependencies {
kapt "androidx.room:room-compiler:$rootProject.roomVersion"
kapt "com.github.bumptech.glide:compiler:$rootProject.glideVersion"
kapt "com.google.dagger:hilt-android-compiler:$rootProject.hiltVersion"
implementation "androidx.appcompat:appcompat:$rootProject.appCompatVersion"
implementation "androidx.constraintlayout:constraintlayout:$rootProject.constraintLayoutVersion"
implementation "androidx.core:core-ktx:$rootProject.ktxVersion"
implementation "androidx.fragment:fragment-ktx:$rootProject.fragmentVersion"
implementation "androidx.lifecycle:lifecycle-extensions:$rootProject.lifecycleVersion"
implementation "androidx.lifecycle:lifecycle-livedata-ktx:$rootProject.lifecycleVersion"
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$rootProject.lifecycleVersion"
implementation "androidx.navigation:navigation-fragment-ktx:$rootProject.navigationVersion"
implementation "androidx.navigation:navigation-ui-ktx:$rootProject.navigationVersion"
implementation "androidx.paging:paging-runtime-ktx:$rootProject.pagingVersion"
implementation "androidx.recyclerview:recyclerview:$rootProject.recyclerViewVersion"
implementation "androidx.room:room-runtime:$rootProject.roomVersion"
implementation "androidx.room:room-ktx:$rootProject.roomVersion"
implementation "androidx.viewpager2:viewpager2:$rootProject.viewPagerVersion"
implementation "androidx.work:work-runtime-ktx:$rootProject.workVersion"
implementation "com.github.bumptech.glide:glide:$rootProject.glideVersion"
implementation "com.google.android.material:material:$rootProject.materialVersion"
implementation "com.google.code.gson:gson:$rootProject.gsonVersion"
implementation "com.squareup.okhttp3:logging-interceptor:$rootProject.okhttpLoggingVersion"
implementation "com.squareup.retrofit2:converter-gson:$rootProject.retrofitVersion"
implementation "com.squareup.retrofit2:retrofit:$rootProject.retrofitVersion"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$rootProject.coroutinesVersion"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$rootProject.coroutinesVersion"
implementation "com.google.dagger:hilt-android:$rootProject.hiltVersion"

// Testing dependencies
kaptAndroidTest "com.google.dagger:hilt-android-compiler:$rootProject.hiltVersion"
androidTestImplementation "androidx.arch.core:core-testing:$rootProject.coreTestingVersion"
androidTestImplementation "androidx.test.espresso:espresso-contrib:$rootProject.espressoVersion"
androidTestImplementation "androidx.test.espresso:espresso-core:$rootProject.espressoVersion"
androidTestImplementation "androidx.test.espresso:espresso-intents:$rootProject.espressoVersion"
androidTestImplementation "androidx.test.ext:junit:$rootProject.testExtJunit"
androidTestImplementation "androidx.test.uiautomator:uiautomator:$rootProject.uiAutomatorVersion"
androidTestImplementation "androidx.work:work-testing:$rootProject.workVersion"
androidTestImplementation "com.google.truth:truth:$rootProject.truthVersion"
androidTestImplementation "com.google.dagger:hilt-android-testing:$rootProject.hiltVersion"
androidTestImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-test:$rootProject.coroutinesVersion"
testImplementation "junit:junit:$rootProject.junitVersion"
}

def getUnsplashAccess() {
return project.findProperty("unsplash_access_key")
}
Loading
Loading