-
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathconfig.ts
121 lines (112 loc) · 3.44 KB
/
config.ts
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
121
/*
* Copyright 2022 Google LLC
* Copyright 2024 Imamuzzaki Abu Salam
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import * as core from "@actions/core";
import * as fmt from "sprintf-js";
import { Defaults, Icons, Props } from "./constants";
import * as util from "./utils";
/**
* The configuration object holds the state of
* configuration for the executor can generate the files
* correctly.
*/
class Config {
accessToken: string;
file: string;
style: string;
label: string;
labelColor: string;
messageColor: string;
icon: string;
iconColor: string;
criticalThreshold: number;
criticalColor: string;
warningThreshold: number;
warningColor: string;
successColor: string;
constructor() {
this.accessToken = util.evaluateString(Props.ACCESS_TOKEN, "");
this.file = util.evaluateString(Props.FILE, "");
this.style = util.evaluateString(Props.STYLE, Defaults.STYLE);
this.icon = util.evaluateString(Props.ICON, Defaults.ICON);
this.label = util.evaluateString(Props.LABEL, Defaults.LABEL);
this.labelColor = util.evaluateString(
Props.COLOR_LABEL,
Defaults.COLOR_LABEL
);
this.messageColor = util.evaluateString(
Props.COLOR_MESSAGE,
Defaults.COLOR_MESSAGE
);
this.iconColor = util.evaluateString(Props.COLOR_ICON, Defaults.COLOR_ICON);
this.criticalThreshold = util.evaluateNumber(
Props.THRESHOLD_CRITICAL,
Defaults.THRESHOLD_CRITICAL
);
this.criticalColor = util.evaluateString(
Props.COLOR_CRITICAL,
Defaults.COLOR_CRITICAL
);
this.warningThreshold = util.evaluateNumber(
Props.THRESHOLD_WARNING,
Defaults.THRESHOLD_WARNING
);
this.warningColor = util.evaluateString(
Props.COLOR_WARNING,
Defaults.COLOR_WARNING
);
this.successColor = util.evaluateString(
Props.COLOR_SUCCESS,
Defaults.COLOR_SUCCESS
);
}
computeColor(coverage: number): string {
if (this.criticalThreshold >= coverage) {
return this.criticalColor;
}
if (
this.criticalThreshold < coverage &&
this.warningThreshold >= coverage
) {
return this.warningColor;
}
return this.successColor;
}
validate() {
let valid = true;
if (!this.file) {
valid = false;
core.error("DAT file not set");
}
return valid;
}
/**
* Generates the URL for fetching the SVG file.
* @param coverage
*/
imageURL(coverage: number): string {
let parts = new Array<String>();
parts.push(fmt.sprintf(Icons.LABEL, this.label));
parts.push(fmt.sprintf(Icons.LABEL_COLOR, this.labelColor));
parts.push(fmt.sprintf(Icons.LOGO, this.icon));
parts.push(fmt.sprintf(Icons.LOGO_COLOR, this.iconColor));
parts.push(fmt.sprintf(Icons.COLOR, this.computeColor(coverage)));
parts.push(fmt.sprintf(Icons.STYLE, this.style));
parts.push(fmt.sprintf(Icons.MESSAGE, coverage));
return Icons.PREFIX + parts.join("&") + `%`;
}
}
export { Config };