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
60 changes: 40 additions & 20 deletions tool/report_static.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,15 +30,26 @@ def load_data(filename):
return json.load(f)


def get_printed_package_name(package_name, package_manager):
def get_package_url(package_name, package_manager):
if package_manager == "maven":
ga, v = package_name.split("@")
g, a = ga.split(":")
return f"[{package_name}](https://central.sonatype.com/artifact/{g}/{a}/{v})"
return f"https://central.sonatype.com/artifact/{g}/{a}/{v}"
elif package_manager in ["npm", "yarn-berry", "yarn-classic", "pnpm"]:
name_in_url = "/v/".join(package_name.rsplit("@", 1)) # replaces last occurrence of @ for /v/
return f"[{package_name}](https://npmjs.com/package/{name_in_url})"
return package_name
return f"https://npmjs.com/package/{name_in_url}"
raise ValueError("Package Manager not supported for acquiring package URL.")


def get_registry_url(package_name, package_manager):
if package_manager == "maven":
ga, v = package_name.split("@")
g, a = ga.split(":")
return f"https://central.sonatype.com/artifact/{g}/{a}/{v}"
elif package_manager in ["npm", "yarn-berry", "yarn-classic", "pnpm"]:
name_in_url = "/".join(package_name.rsplit("@", 1)) # replaces last occurrence of @ for /v/
return f"https://registry.npmjs.com/{name_in_url}"
raise ValueError("Package Manager not supported for acquiring registry URL.")


def create_dataframe(data, deps_list, package_manager):
Expand All @@ -54,11 +65,29 @@ def create_dataframe(data, deps_list, package_manager):
for package_name, package_data in data.items():
source_code_data = package_data.get("source_code", {}) or {}
match_data = package_data.get("match_info", {}) or {}
sha_exists_info = source_code_data.get("source_code_version", {}) or {}
sc_version_info = source_code_data.get("source_code_version", {}) or {}
aliased_package_name = aliased_packages.get(package_name, None)

# Create a row for each package
printed_package_name = get_printed_package_name(package_name, package_manager)
package_url = get_package_url(package_name, package_manager)
registry_url = get_registry_url(package_name, package_manager)
printed_package_name = f"[{package_name}]({package_url})"

printed_sha_info, printed_tag_info = "", ""
if not sc_version_info.get("is_sha"):
# When package manager does not have a field for commit SHA
printed_sha_info = f"[Commit SHA not directly available]({registry_url})"
else:
if sc_version_info.get("sha_status_code") == 404:
printed_sha_info = f"[Commit SHA present but not found in repo]({sc_version_info.get('sha_url')})"
else:
printed_sha_info = f"[Commit SHA present in repo]({sc_version_info.get('sha_url')})"
printed_tag_info = f"Not acquired due to SHA presence"
if not printed_tag_info:
if not sc_version_info.get("exists"):
printed_tag_info = f"[Release tag not found in repo]({sc_version_info.get('tag_url')})"
else:
printed_tag_info = f"[Release tag found in repo]({sc_version_info.get('tag_url')})"
row = {
"package_name": printed_package_name,
"deprecated_in_version": package_data.get("package_info", {}).get("deprecated_in_version"),
Expand All @@ -79,13 +108,9 @@ def create_dataframe(data, deps_list, package_manager):
"is_aliased": aliased_package_name is not None,
"aliased_package_name": f"`{aliased_package_name}`" if aliased_package_name else "-",
"is_match": match_data.get("match", None),
"sha_exists": sha_exists_info.get("exists", "-"),
"tag_version": f"`{sha_exists_info.get("tag_version", "-")}`",
"is_sha": sha_exists_info.get("is_sha", "-"),
"sha": sha_exists_info.get("sha", "-"),
"tag_url": sha_exists_info.get("url", "-"),
"message": sha_exists_info.get("message", "-"),
"status_code_for_sha": sha_exists_info.get("status_code", "-"),
"sha_exists": sc_version_info.get("exists", False),
"sha_info": printed_sha_info,
"tag_info": printed_tag_info,
}
rows.append(row)

Expand Down Expand Up @@ -343,13 +368,8 @@ def write_summary(
(df["sha_exists"] == False) & (df["github_exists"] == True),
(
[
"sha_exists",
"tag_version",
"is_sha",
"sha",
"tag_url",
"message",
"status_code_for_sha",
"sha_info",
"tag_info",
]
+ (["parent"] if package_manager in SHOW_PARENTS else [])
+ (["command"] if package_manager == "maven" else [])
Expand Down
39 changes: 26 additions & 13 deletions tool/static_analysis.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,11 +51,14 @@
"source_code_version": {
"exists": None,
"tag_version": "",
"tag_format": None,
"is_sha": None,
"sha": "",
"url": "",
"tag_url": None,
"sha_url": None,
"message": "",
"status_code": 404,
"tag_status_code": 404,
"sha_status_code": 404,
},
"parent_repo_link": "",
"open_issues_count": 0,
Expand Down Expand Up @@ -341,11 +344,13 @@ def check_git_head_presence(package_name, version):
source_code_info = {
"exists": False,
"tag_version": version,
"tag_format": None,
"is_sha": False,
"sha": None,
"url": None,
"tag_url": None,
"sha_url": None,
"message": "No tags found in the repo",
"status_code": 404,
"tag_status_code": 404,
"sha_status_code": 404,
}
if package_manager in ["yarn-berry", "yarn-classic", "pnpm", "npm"]:
if git_head := check_git_head_presence(package_name, version):
Expand All @@ -356,22 +361,28 @@ def check_git_head_presence(package_name, version):
return {
"exists": True,
"tag_version": version,
"tag_format": None,
"is_sha": True,
"sha": git_head,
"url": None,
"tag_url": None,
"sha_url": f"{repo_api}/commits/{git_head}",
"message": "gitHead found in package metadata",
"status_code": 200,
"tag_status_code": 404,
"sha_status_code": 200,
}
else:
logging.warning(f"gitHead {git_head} not found in {repo_link}, checking tags")
source_code_info = {
"exists": False,
"tag_version": version,
"tag_format": None,
"is_sha": True,
"sha": git_head,
"url": None,
"tag_url": None,
"sha_url": f"{repo_api}/commits/{git_head}",
"message": f"gitHead {git_head} not found in {repo_link}",
"status_code": 404,
"tag_status_code": 404,
"sha_status_code": 404,
}
except Exception as e:
logging.error(f"Error checking gitHead in repo: {str(e)}")
Expand All @@ -390,9 +401,10 @@ def check_git_head_presence(package_name, version):
release_tag_exists = False
if len(have_no_tags_data) == 0:
logging.warning(f"No tags found for {package_name} in {repo_api}")
release_tag_url = None
release_tag_url = f"{repo_api}/tags"
message = "No tags found in the repo"
status_code_release_tag = have_no_tags_response_status_code
existing_tag_format = None
else:
tag_possible_formats = construct_tag_format(version, package_name, repo_name=simplified_path)
existing_tag_format = find_existing_tags_batch(tag_possible_formats, simplified_path)
Expand All @@ -405,17 +417,18 @@ def check_git_head_presence(package_name, version):
status_code_release_tag = 200
else:
logging.warning(f"Tag {version} not found in {repo_api}")
release_tag_url = None
release_tag_url = f"{repo_api}/tags"
message = f"Tag {version} not found in the repo"
status_code_release_tag = 404

source_code_info.update(
{
"exists": release_tag_exists,
"tag_version": version,
"url": release_tag_url,
"tag_format": existing_tag_format,
"tag_url": release_tag_url,
"message": message,
"status_code": status_code_release_tag,
"tag_status_code": status_code_release_tag,
}
)

Expand Down
Loading