Skip to content

Commit cddcabc

Browse files
Alramechmeta-codesync[bot]
authored andcommitted
Add script to generate version from commit hash
Summary: Adds a script to generate a version from an input commit hash, or current if not specified. based on https://www.internalfb.com/diff/D88055700 For use in build modernization to generate the appropriate( dash separated) commit hash Adds buck target in case that's required to get the output to fit properly into a conveyor artifact Reviewed By: vilatto Differential Revision: D88218082 fbshipit-source-id: f2fdda07349a8a6f181419e19aa3e0d897dc89d3
1 parent ed4fb55 commit cddcabc

2 files changed

Lines changed: 67 additions & 0 deletions

File tree

eden/fs/BUCK

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ load("@fbcode//cpe/nupkg_builder:nupkg.bzl", "nupkg")
22
load("@fbcode//eden/fs:build_targets.bzl", "make_rpm_features")
33
load("@fbcode//registry:defs.bzl", "rpm")
44
load("@fbcode_macros//build_defs:cpp_library.bzl", "cpp_library")
5+
load("@fbcode_macros//build_defs:python_binary.bzl", "python_binary")
56

67
oncall("scm_client_infra")
78

@@ -71,3 +72,8 @@ nupkg.builder(
7172
# TODO: Set up install script to copy files to the appropriate locations
7273
],
7374
)
75+
76+
python_binary(
77+
name = "generate_version_release",
78+
main_src = "scripts/generate_version_release.py",
79+
)
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
#!/usr/bin/env python3
2+
# Copyright (c) Meta Platforms, Inc. and affiliates.
3+
#
4+
# This software may be used and distributed according to the terms of the
5+
# GNU General Public License version 2.
6+
7+
import argparse
8+
import datetime
9+
import subprocess
10+
import sys
11+
12+
13+
def main():
14+
parser = argparse.ArgumentParser(
15+
description="Generate version/release information from latest hg changeset date"
16+
)
17+
parser.add_argument("--commit", help="Print commit hash")
18+
group = parser.add_mutually_exclusive_group(required=True)
19+
group.add_argument("--version", action="store_true", help="Print YYYYMMDD")
20+
group.add_argument("--release", action="store_true", help="Print HHMMSS")
21+
group.add_argument(
22+
"--dash-combined", action="store_true", help="Print YYYYMMDD-HHMMSS"
23+
)
24+
group.add_argument(
25+
"--dot-combined", action="store_true", help="Print YYYYMMDD.HHMMSS"
26+
)
27+
args = parser.parse_args()
28+
29+
# Obtain changeset epoch seconds from hg
30+
rev_epoch = int(
31+
subprocess.check_output(
32+
[
33+
"hg",
34+
"log",
35+
"-l1",
36+
f"-r {args.commit}" if args.commit else "",
37+
"--template",
38+
"{date}",
39+
],
40+
text=True,
41+
).split(".", 1)[0]
42+
)
43+
44+
dt = datetime.datetime.fromtimestamp(rev_epoch)
45+
version = dt.strftime("%Y%m%d")
46+
release = dt.strftime("%H%M%S")
47+
48+
if args.version:
49+
print(version)
50+
elif args.release:
51+
print(release)
52+
elif args.dash_combined:
53+
print(f"{version}-{release}")
54+
elif args.dot_combined:
55+
print(f"{version}.{release}")
56+
57+
sys.exit(0)
58+
59+
60+
if __name__ == "__main__":
61+
main()

0 commit comments

Comments
 (0)