get_env.py 2.7 KB

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