Skip to content

Commit 517fcee

Browse files
feat: add semver to nightly release
1 parent 150ae32 commit 517fcee

File tree

3 files changed

+69
-47
lines changed

3 files changed

+69
-47
lines changed

targets.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44
"remote": {
55
"url": "https://api.github.com/repos/EdgeTX/edgetx/git/ref/tags/nightly",
66
"path": "object.sha"
7-
}
7+
},
8+
"sem_ver": "v3.0.0"
89
},
910
"v2.11.3": {
1011
"sha": "a7a1f37f54ebfefbda6ff03399f6d052e11fe4de",

targets/targets_def.go

Lines changed: 38 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,12 @@ type RemoteAPI struct {
2929
}
3030

3131
type Release struct {
32-
SHA string `json:"sha"`
33-
Remote *RemoteSHA `json:"remote,omitempty"`
34-
ExcludeTargets []string `json:"exclude_targets,omitempty"`
35-
BuildContainer string `json:"build_container,omitempty"`
32+
SHA string `json:"sha"`
33+
Remote *RemoteSHA `json:"remote,omitempty"`
34+
ExcludeTargets []string `json:"exclude_targets,omitempty"`
35+
BuildContainer string `json:"build_container,omitempty"`
36+
SemVer string `json:"sem_ver,omitempty"`
37+
Version *semver.Version `json:"-"`
3638
}
3739

3840
type OptionFlag struct {
@@ -60,10 +62,10 @@ type VersionRef struct {
6062
}
6163

6264
type TargetsDef struct {
63-
Releases map[VersionRef]Release `json:"releases"`
64-
OptionFlags OptionFlags `json:"flags"`
65-
Tags map[string]TagDef `json:"tags"`
66-
Targets map[string]Target `json:"targets"`
65+
Releases map[VersionRef]*Release `json:"releases"`
66+
OptionFlags OptionFlags `json:"flags"`
67+
Tags map[string]TagDef `json:"tags"`
68+
Targets map[string]*Target `json:"targets"`
6769
}
6870

6971
func ReadTargetsDefFromBytes(data []byte) (*TargetsDef, error) {
@@ -74,6 +76,9 @@ func ReadTargetsDefFromBytes(data []byte) (*TargetsDef, error) {
7476
if err := defs.validateSHA(); err != nil {
7577
return nil, err
7678
}
79+
if err := defs.fillSemVer(); err != nil {
80+
return nil, err
81+
}
7782
defs.fillExcludeTargets()
7883
return &defs, nil
7984
}
@@ -125,9 +130,9 @@ func (opts OptionFlags) HasOptionValue(name, value string) bool {
125130
return false
126131
}
127132

128-
func (target Target) SupportsVersion(r *VersionRef) bool {
133+
func (target *Target) SupportsRelease(r *Release) bool {
129134
if len(target.VersionSupported.String()) > 0 {
130-
return target.VersionSupported.Check(&r.v)
135+
return target.VersionSupported.Check(r.Version)
131136
}
132137
return true
133138
}
@@ -144,24 +149,38 @@ func (def *TargetsDef) validateSHA() error {
144149
return fmt.Errorf("%v: %w", k, err)
145150
}
146151
v.SHA = sha
147-
def.Releases[k] = v
148152
}
149153
}
150154
return nil
151155
}
152156

153157
func (def *TargetsDef) fillExcludeTargets() {
154158
for k := range def.Releases {
155-
exclude := make([]string, 0)
159+
r := def.Releases[k]
160+
r.ExcludeTargets = make([]string, 0)
156161
for t := range def.Targets {
157-
if !def.Targets[t].SupportsVersion(&k) {
158-
exclude = append(exclude, t)
162+
if !def.Targets[t].SupportsRelease(r) {
163+
r.ExcludeTargets = append(r.ExcludeTargets, t)
159164
}
160165
}
166+
slices.Sort(r.ExcludeTargets)
167+
}
168+
}
169+
170+
func (def *TargetsDef) fillSemVer() error {
171+
for k := range def.Releases {
161172
r := def.Releases[k]
162-
r.ExcludeTargets = exclude
163-
def.Releases[k] = r
173+
if r.SemVer != "" {
174+
if v, err := semver.NewVersion(r.SemVer); err != nil {
175+
return err
176+
} else {
177+
r.Version = v
178+
}
179+
} else {
180+
r.Version = &k.v
181+
}
164182
}
183+
return nil
165184
}
166185

167186
func (def *TargetsDef) IsRefSupported(ref string) bool {
@@ -178,15 +197,15 @@ func (def *TargetsDef) IsTargetSupported(name, ref string) bool {
178197
if err != nil {
179198
return false
180199
}
181-
_, ok := def.Releases[*v]
200+
r, ok := def.Releases[*v]
182201
if !ok {
183202
return false
184203
}
185204
target, ok := def.Targets[name]
186205
if !ok {
187206
return false
188207
}
189-
return target.SupportsVersion(v)
208+
return target.SupportsRelease(r)
190209
}
191210

192211
func (def *TargetsDef) IsOptionFlagSupported(target, name, value string) bool {
@@ -265,12 +284,7 @@ func (def *TargetsDef) ExcludeTargetsFromRef(ref string) ([]string, error) {
265284
if !ok {
266285
return nil, ErrMissingRef
267286
}
268-
269-
excl := make([]string, len(r.ExcludeTargets))
270-
copy(excl, r.ExcludeTargets)
271-
slices.Sort(excl)
272-
273-
return excl, nil
287+
return r.ExcludeTargets, nil
274288
}
275289

276290
func SetTargets(defs *TargetsDef) {

targets/targets_test.go

Lines changed: 29 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -9,27 +9,31 @@ import (
99
)
1010

1111
var targetsJSON = `{
12-
"releases": {
13-
"nightly": { "sha": "000" },
14-
"v1.3.0": { "sha": "123" },
15-
"v1.3.0-RC1": { "sha": "pre-123" },
16-
"v1.2.3": { "sha": "345" },
17-
"v1.1.2": { "sha": "456" }
18-
},
19-
"targets": {
20-
"t1": {
21-
"description": "Always been there"
22-
},
23-
"t123": {
24-
"description": "Acme Dream Radio",
25-
"version_supported": ">= 1.2.3"
26-
},
27-
"x123": {
28-
"description": "XYZ Radio",
29-
"version_supported": "1.2 - 2.0"
30-
}
31-
}
32-
}`
12+
"releases": {
13+
"nightly": {
14+
"sha": "000",
15+
"semantic_version": "v2.0.0"
16+
},
17+
"v2.0.0-RC1": { "sha": "678" },
18+
"v1.3.0": { "sha": "567" },
19+
"v1.3.0-RC1": { "sha": "456" },
20+
"v1.2.3": { "sha": "345" },
21+
"v1.1.2": { "sha": "123" }
22+
},
23+
"targets": {
24+
"t1": {
25+
"description": "Always been there"
26+
},
27+
"t123": {
28+
"description": "Acme Dream Radio",
29+
"version_supported": ">= 1.2.3"
30+
},
31+
"x123": {
32+
"description": "XYZ Radio",
33+
"version_supported": ">= 1.2, < 2"
34+
}
35+
}
36+
}`
3337

3438
func TestLoadTargetsJSON(t *testing.T) {
3539
defs, err := targets.ReadTargetsDefFromBytes([]byte(targetsJSON))
@@ -52,8 +56,9 @@ func TestVersions(t *testing.T) {
5256
//
5357
assert.True(t, defs.IsRefSupported("v1.1.2"))
5458
assert.True(t, defs.IsRefSupported("v1.2.3"))
55-
assert.True(t, defs.IsRefSupported("v1.3.0"))
5659
assert.True(t, defs.IsRefSupported("v1.3.0-RC1"))
60+
assert.True(t, defs.IsRefSupported("v1.3.0"))
61+
assert.True(t, defs.IsRefSupported("v2.0.0-RC1"))
5762
assert.True(t, defs.IsRefSupported("nightly"))
5863

5964
//
@@ -94,12 +99,14 @@ func TestConstraints(t *testing.T) {
9499
assert.True(t, defs.IsTargetSupported("t1", "v1.1.2"))
95100
assert.True(t, defs.IsTargetSupported("t1", "v1.2.3"))
96101
assert.True(t, defs.IsTargetSupported("t1", "v1.3.0"))
102+
assert.True(t, defs.IsTargetSupported("t1", "v2.0.0-RC1"))
97103

98104
assert.False(t, defs.IsTargetSupported("t123", "v1.1.2"))
99105
assert.True(t, defs.IsTargetSupported("t123", "v1.2.3"))
100106
assert.True(t, defs.IsTargetSupported("t123", "v1.3.0"))
101107

102108
assert.False(t, defs.IsTargetSupported("x123", "nightly"))
109+
assert.False(t, defs.IsTargetSupported("x123", "v2.0.0-RC1"))
103110
assert.False(t, defs.IsTargetSupported("x123", "v1.1.2"))
104111
assert.True(t, defs.IsTargetSupported("x123", "v1.2.3"))
105112
assert.True(t, defs.IsTargetSupported("x123", "v1.3.0"))

0 commit comments

Comments
 (0)