Last active
June 25, 2020 22:23
-
-
Save scbedd/01069813cd4aa4e09e9fb63c3c2d80ca to your computer and use it in GitHub Desktop.
Given a list of tags, generate relative link replacements from an azure repo
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import os | |
import glob | |
from subprocess import check_call, CalledProcessError | |
import pdb | |
import logging | |
import sys | |
import shutil | |
import requests | |
from io import StringIO | |
import csv | |
import argparse | |
TARGET_REPOS = { | |
"java": "C:/repo/azure-sdk-for-java", | |
"net": "C:/repo/azure-sdk-for-net", | |
"python": "C:/repo/azure-sdk-for-python", | |
"js": "C:/repo/azure-sdk-for-js" | |
} | |
GLOB_SEARCHES = { | |
"java": "C:/repo/azure-sdk-for-java/sdk/*/{}/README.md", | |
"net": "C:/repo/azure-sdk-for-net/sdk/*/{}/README.md", | |
"python": "C:/repo/azure-sdk-for-python/sdk/*/{}/README.md", | |
"js": "C:/repo/azure-sdk-for-js/sdk/*/{}/README.md" | |
} | |
DEST = "C:/Users/sbedd/Desktop/net_readmes/readmes/{}-readme.md" | |
# add final member <target tag> with target_tag | |
REPLACE_LINKS_CMD_NET = ["python", "C:/Users/sbedd/Desktop/net_readmes/replace_relative_links.py", "-t", "C:/repo/azure-sdk-for-net", "-i", "azure/azure-sdk-for-net", "-r", "C:/repo/azure-sdk-for-net", "-s"] | |
REPLACE_LINKS_CMD_PY = ["python", "C:/Users/sbedd/Desktop/net_readmes/replace_relative_links.py", "-t", "C:/repo/azure-sdk-for-python", "-i", "azure/azure-sdk-for-python", "-r", "C:/repo/azure-sdk-for-python", "-s"] | |
REPLACE_LINKS_CMD_JS = ["python", "C:/Users/sbedd/Desktop/net_readmes/replace_relative_links.py", "-t", "C:/repo/azure-sdk-for-js", "-i", "azure/azure-sdk-for-js", "-r", "C:/repo/azure-sdk-for-js", "-s"] | |
REPLACE_LINKS_CMD_JAVA = ["python", "C:/Users/sbedd/Desktop/net_readmes/replace_relative_links.py", "-t", "C:/repo/azure-sdk-for-java", "-i", "azure/azure-sdk-for-java", "-r", "C:/repo/azure-sdk-for-java", "-s"] | |
REPLACE_LINKS_CMDS = { | |
"java": REPLACE_LINKS_CMD_JAVA, | |
"net": REPLACE_LINKS_CMD_NET, | |
"python": REPLACE_LINKS_CMD_PY, | |
"js": REPLACE_LINKS_CMD_JS | |
} | |
# add final member <target tag> during call | |
CHECKOUT_REPO_CMD_ROOT = ["git", "checkout"] | |
# add final member <target tag> during call | |
RESET_REPO_CMD = ["git", "reset", "--hard", "origin/master"] | |
CLEAN_REPO_CMD = ["git", "clean", "-xdf"] | |
PKGID_IDX = 2 | |
VERSIONGA_IDX = 3 | |
VERSIONPREV_IDX = 4 | |
def eval_row_for_tag(row): | |
if row: | |
result = [] | |
pkg_id = row[PKGID_IDX] | |
if row[VERSIONGA_IDX]: | |
result.append("{}_{}".format(pkg_id, row[VERSIONGA_IDX])) | |
if row[VERSIONPREV_IDX]: | |
result.append("{}_{}".format(pkg_id, row[VERSIONPREV_IDX])) | |
else: | |
return [] | |
return result | |
def is_pre(version): | |
return (not re.match("[0-9\.]+", version)) | |
def get_results(reader): | |
results = [] | |
is_first = True | |
for row in reader: | |
if is_first: | |
is_first = False | |
else: | |
results.extend(eval_row_for_tag(row)) | |
return results | |
def get_targets(): | |
java_request = requests.get("https://raw.githubusercontent.com/Azure/azure-sdk/master/_data/releases/latest/java-packages.csv") | |
net_request = requests.get("https://raw.githubusercontent.com/Azure/azure-sdk/master/_data/releases/latest/dotnet-packages.csv") | |
py_request = requests.get("https://raw.githubusercontent.com/Azure/azure-sdk/master/_data/releases/latest/python-packages.csv") | |
js_request = requests.get("https://raw.githubusercontent.com/Azure/azure-sdk/master/_data/releases/latest/js-packages.csv") | |
java_reader = csv.reader(java_request.text.split("\n"), delimiter=',') | |
net_reader = csv.reader(net_request.text.split("\n"), delimiter=',') | |
py_reader = csv.reader(py_request.text.split("\n"), delimiter=',') | |
js_reader = csv.reader(js_request.text.split("\n"), delimiter=',') | |
return { | |
"java": get_results(java_reader), | |
"net": get_results(net_reader), | |
"python": get_results(py_reader), | |
"js": get_results(js_reader), | |
} | |
def run_check_call( | |
command_array, | |
working_directory, | |
acceptable_return_codes=[], | |
run_as_shell=False, | |
always_exit=True, | |
): | |
try: | |
if run_as_shell: | |
logging.info( | |
"Command Array: {0}, Target Working Directory: {1}".format( | |
" ".join(command_array), working_directory | |
) | |
) | |
check_call(" ".join(command_array), cwd=working_directory, shell=True) | |
else: | |
logging.info( | |
"Command Array: {0}, Target Working Directory: {1}".format( | |
command_array, working_directory | |
) | |
) | |
check_call(command_array, cwd=working_directory) | |
except CalledProcessError as err: | |
if err.returncode not in acceptable_return_codes: | |
logging.error(err) # , file = sys.stderr | |
if always_exit: | |
exit(1) | |
else: | |
return err | |
if __name__ == "__main__": | |
parser = argparse.ArgumentParser( | |
description="Takes a target language, generates readmes" | |
) | |
parser.add_argument( | |
"-t", | |
dest="target_language", | |
help="java,net,py,js", | |
required=True, | |
) | |
args = parser.parse_args() | |
if args.target_language == "java": | |
VERSIONPREV_IDX += 1 | |
VERSIONGA_IDX += 1 | |
results = get_targets() | |
targets = results[args.target_language] | |
for target_tag in targets: | |
print("Going after {}".format(target_tag)) | |
target_pkg, target_version = target_tag.split("_") | |
dest = DEST.format(target_pkg.replace('azure-','').replace('Azure.', '').replace('@azure/', '').lower() + "-pre" if is_pre(target_version) else "") | |
# checkout repo at the target_tag | |
run_check_call(REPLACE_LINKS_CMDS[args.target_language] + [target_tag], TARGET_REPOS[args.target_language]) | |
# apply changes | |
run_check_call(REPLACE_LINKS_CMDS[args.target_language] + [target_tag], TARGET_REPOS[args.target_language]) | |
# copy readme out into local | |
results = glob.glob(GLOB_SEARCHS[args.target_language].format(target_pkg)) | |
if len(results) == 1: | |
src = results[0] | |
shutil.copy2(src, dest) | |
else: | |
print("ARGH IT BROKE") | |
exit(1) | |
# checkout * on the repo | |
run_check_call(RESET_REPO_CMD) | |
run_check_call(CLEAN_REPO_CMD) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment