Skip to content

Instantly share code, notes, and snippets.

View bastionkid's full-sized avatar

Akash Khunt bastionkid

View GitHub Profile
@bastionkid
bastionkid / ruler_report_parser.py
Created June 18, 2023 06:44
Python script to parse the json report generated by Ruler plugin
import sys
import json
# read json file
def read_report_file(file_path):
with open(file_path, 'r') as file:
json_data = json.load(file)
return json_data
# generate dictionary of the grouped contents of an apk file
@bastionkid
bastionkid / ruler_report.yml
Last active June 18, 2023 06:56
Ruler report workflow
name: Ruler Report
# cancel in-progress workflow if new commits are pushed to same head branch
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }}
cancel-in-progress: true
on:
pull_request:
branches: [ "master", "main", "release/*", "feature/*" ]
@bastionkid
bastionkid / size_metrics.yml
Created June 16, 2023 06:20
Complete Size Metrics workflow
name: Size Metrics
# cancel in-progress workflow if new commits are pushed to same head branch
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }}
cancel-in-progress: true
on:
pull_request:
branches: [ "master", "main", "release/*", "feature/*" ]
@bastionkid
bastionkid / size_metrics.yml
Last active June 16, 2023 06:11
Size Metrics workflow with only size_diff_report job
name: Size Metrics
...
# content is omitted as it's already shown earlier
...
env:
size_diff_report_file: apk_size_diff_report.html
jobs:
@bastionkid
bastionkid / size_metrics.yml
Last active June 16, 2023 06:02
Size Metrics workflow with only size_diff_report job
name: Size Metrics
...
# content is omitted as it's already shown earlier
...
env:
size_diff_report_file: apk_size_diff_report.html
jobs:
@bastionkid
bastionkid / compare_apks_html.py
Last active June 16, 2023 05:00
compare_apks.py - Generate HTML report phase
# generate html file containing size diff in HRF
def generate_size_diff_html():
html = "<html>"
html += "<body><h1>Download Size Diff Report</h1><h3>Affected Products</h3>"
html += "<ul><li><h4><code>release</code></h4><table>"
html += f"<tr><th>Component</th><th>Base ({apk_1_sha})</th><th>Merge ({apk_2_sha})</th><th>Diff</th></tr>"
# print diff of each components of both of the apk files
for component in set(components_1.keys()) | set(components_2.keys()):
size_1 = components_1.get(component, 0)
@bastionkid
bastionkid / compare_apks_dictionary.py
Last active June 15, 2023 07:29
compare_apks.py - Dictionary Build phase
# generate dictionary of the grouped contents of an apk file
def get_apk_components(apk_file, size_type):
command = f"{apk_analyzer_path} files list --{size_type} {apk_file}"
files_with_size_string = execute_command(command)
files_with_size_list = files_with_size_string.split('\n')
components = {}
for item in files_with_size_list:
@bastionkid
bastionkid / compare_apks_setup.py
Last active June 15, 2023 07:29
compare_apks.py - Setup phase
# read arguments passed to this script
apk_1_sha = sys.argv[1]
apk_2_sha = sys.argv[2]
apk_1_name = f"{apk_1_sha}.apk"
apk_2_name = f"{apk_2_sha}.apk"
# apk_analyzer_path location will change based on the GHA runner that you're using i.e. mac/windows/ubuntu etc
apk_analyzer_path = "/usr/local/lib/android/sdk/cmdline-tools/latest/bin/apkanalyzer"
@bastionkid
bastionkid / compare_apks.py
Last active June 16, 2023 05:00
Python script to compare size contribution from high level components
import sys
import subprocess
# generate dictionary of the grouped contents of an apk file
def get_apk_components(apk_file, size_type):
command = f"{apk_analyzer_path} files list --{size_type} {apk_file}"
files_with_size_string = execute_command(command)
files_with_size_list = files_with_size_string.split('\n')
@bastionkid
bastionkid / commit_short_sha.sh
Created June 13, 2023 08:04
Shell script to generate short SHA from git head commit
#!/bin/bash
commit_id=$(git rev-parse HEAD)
echo "${commit_id:0:7}"