get_env.py 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. #!/usr/bin/env python3
  2. import ssl
  3. import json
  4. import os
  5. import shlex
  6. import re
  7. import string
  8. import random
  9. import argparse
  10. import datetime
  11. import urllib.request
  12. def id_gen(size=5, chars=string.ascii_uppercase + string.digits):
  13. return "".join(random.choice(chars) for _ in range(size))
  14. def parse_args():
  15. parser = argparse.ArgumentParser()
  16. parser.add_argument("--event_file", help="Current GitHub event file", required=True)
  17. parser.add_argument(
  18. "--is_pull", help="Is it Pull Request", default=False, action="store_true"
  19. )
  20. args = parser.parse_args()
  21. return args
  22. def get_commit_json(event):
  23. context = ssl._create_unverified_context()
  24. with urllib.request.urlopen(
  25. event["pull_request"]["_links"]["commits"]["href"], context=context
  26. ) as commit_file:
  27. commit_json = json.loads(commit_file.read().decode("utf-8"))
  28. return commit_json
  29. def get_details(event, args):
  30. data = {}
  31. current_time = datetime.datetime.utcnow().date()
  32. if args.is_pull:
  33. commit_json = get_commit_json(event)
  34. data["commit_comment"] = shlex.quote(commit_json[-1]["commit"]["message"])
  35. data["commit_hash"] = commit_json[-1]["sha"]
  36. ref = event["pull_request"]["head"]["ref"]
  37. data["pull_id"] = event["pull_request"]["number"]
  38. data["pull_name"] = shlex.quote(event["pull_request"]["title"])
  39. else:
  40. data["commit_comment"] = shlex.quote(event["commits"][-1]["message"])
  41. data["commit_hash"] = event["commits"][-1]["id"]
  42. ref = event["ref"]
  43. data["commit_sha"] = data["commit_hash"][:8]
  44. data["branch_name"] = re.sub("refs/\w+/", "", ref)
  45. data["suffix"] = (
  46. data["branch_name"].replace("/", "_")
  47. + "-"
  48. + current_time.strftime("%d%m%Y")
  49. + "-"
  50. + data["commit_sha"]
  51. )
  52. if ref.startswith("refs/tags/"):
  53. data["suffix"] = data["branch_name"].replace("/", "_")
  54. return data
  55. def add_env(name, value, file):
  56. delimeter = id_gen()
  57. print(f"{name}<<{delimeter}", file=file)
  58. print(f"{value}", file=file)
  59. print(f"{delimeter}", file=file)
  60. def add_envs(data, env_file, args):
  61. add_env("COMMIT_MSG", data["commit_comment"], env_file)
  62. add_env("COMMIT_HASH", data["commit_hash"], env_file)
  63. add_env("COMMIT_SHA", data["commit_sha"], env_file)
  64. add_env("SUFFIX", data["suffix"], env_file)
  65. add_env("BRANCH_NAME", data["branch_name"], env_file)
  66. add_env("DIST_SUFFIX", data["suffix"], env_file)
  67. add_env("WORKFLOW_BRANCH_OR_TAG", data["branch_name"], env_file)
  68. if args.is_pull:
  69. add_env("PULL_ID", data["pull_id"], env_file)
  70. add_env("PULL_NAME", data["pull_name"], env_file)
  71. def main():
  72. args = parse_args()
  73. event_file = open(args.event_file)
  74. event = json.load(event_file)
  75. env_file = open(os.environ["GITHUB_ENV"], "a")
  76. data = get_details(event, args)
  77. add_envs(data, env_file, args)
  78. event_file.close()
  79. env_file.close()
  80. if __name__ == "__main__":
  81. main()