summaryrefslogtreecommitdiffstats
path: root/documentation/set_versions.py
blob: d48b8b74c7fc5e0dd7d664921155226c8609b478 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#!/usr/bin/env python3
#
# Add version information to poky.yaml based upon current git branch/tags
#
# Copyright Linux Foundation
# Author: Richard Purdie <richard.purdie@linuxfoundation.org>
#
# SPDX-License-Identifier: MIT
#


import subprocess
import collections
import sys

ourversion = None
if len(sys.argv) == 2:
    ourversion = sys.argv[1]

activereleases = ["honister", "hardknott", "gatesgarth", "dunfell", "zeus", "warrior"]
#devbranch = "langdale"
devbranch = "kirkstone"
ltsseries = ["kirkstone", "dunfell"]

release_series = collections.OrderedDict()
#release_series["langdale"] = "4.1"
release_series["kirkstone"] = "4.0"
release_series["honister"] = "3.4"
release_series["hardknott"] = "3.3"
release_series["gatesgarth"] = "3.2"
release_series["dunfell"] = "3.1"

ourversion = None
ourseries = None
ourbranch = None

# Test tags exist and inform the user to fetch if not
try:
    subprocess.run(["git", "show", "yocto-3.4.2"], capture_output=True, check=True)
except subprocess.CalledProcessError:
    sys.exit("Please run 'git fetch --tags' before building the documentation")

# Try and figure out what we are
tags = subprocess.run(["git", "tag", "--points-at", "HEAD"], capture_output=True, text=True).stdout
for t in tags.split():
    if t.startswith("yocto-"):
        ourversion = t[6:]

if ourversion:
    # We're a tagged release
    components = ourversion.split(".")
    baseversion = components[0] + "." + components[1]
    for i in release_series:
        if release_series[i] == baseversion:
            ourseries = i
            ourbranch = i
else:
    # We're floating on a branch
    branch = subprocess.run(["git", "branch", "--show-current"], capture_output=True, text=True).stdout.strip()
    ourbranch = branch
    if branch != "master" and branch not in release_series:
        possible_branches = []
        for b in release_series.keys():
            result = subprocess.run(["git", "show-ref", "heads/" + b], capture_output=True, text=True)
            if result.returncode == 0:
                possible_branches.append(b)
                continue
            result = subprocess.run(["git", "show-ref", "origin/" + b], capture_output=True, text=True)
            if result.returncode == 0:
                possible_branches.append("origin/" + b)
        nearestbranch = subprocess.run('git show-branch master ' + ' '.join(possible_branches) + ' | grep "*" | grep -v "$(git rev-parse --abbrev-ref HEAD)" | head -n1', shell=True, capture_output=True, text=True).stdout
        branch = nearestbranch.split('[')[1].split('~')[0]
        print("Nearest release branch esimtated to be %s" % branch)
    if branch == "master":
        ourseries = devbranch
    elif branch in release_series:
        ourseries = branch
    else:
        sys.exit("Unknown series for branch %s" % branch)

    previoustags = subprocess.run(["git", "tag", "--merged", "HEAD"], capture_output=True, text=True).stdout
    previoustags = [t[6:] for t in previoustags.split() if t.startswith("yocto-" + release_series[ourseries])]
    futuretags = subprocess.run(["git", "tag", "--merged", ourbranch], capture_output=True, text=True).stdout
    futuretags = [t[6:] for t in futuretags.split() if t.startswith("yocto-" + release_series[ourseries])]

    # Append .999 against the last known version
    if len(previoustags) != len(futuretags):
        ourversion = previoustags[-1] + ".999"
    else:
        ourversion = release_series[ourseries] + ".999"

series = [k for k in release_series]
previousseries = series[series.index(ourseries)+1:]
lastlts = [k for k in previousseries if k in ltsseries]

print("Version calculated to be %s" % ourversion)
print("Release series calculated to be %s" % ourseries)

replacements = {
    "DISTRO" : ourversion,
    "DISTRO_NAME_NO_CAP" : ourseries,
    "DISTRO_NAME" : ourseries.capitalize(),
    "DISTRO_NAME_NO_CAP_MINUS_ONE" : previousseries[0],
    "DISTRO_NAME_NO_CAP_LTS" : lastlts[0],
    "YOCTO_DOC_VERSION" : ourversion,
    "DISTRO_REL_TAG" : "yocto-" + ourversion,
}

with open("poky.yaml.in", "r") as r, open("poky.yaml", "w") as w:
    lines = r.readlines()
    for line in lines:
        data = line.split(":")
        k = data[0].strip()
        if k in replacements:
            w.write("%s : \"%s\"\n" % (k, replacements[k]))
        else:
            w.write(line)

print("poky.yaml generated from poky.yaml.in")