Skip to content

Instantly share code, notes, and snippets.

@scbedd
Last active June 25, 2020 22:23
Show Gist options
  • Save scbedd/01069813cd4aa4e09e9fb63c3c2d80ca to your computer and use it in GitHub Desktop.
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
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