@specsage/cli 0.1.0 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cli.rb +46 -18
- package/lib/results_uploader.rb +4 -4
- package/package.json +4 -1
package/lib/cli.rb
CHANGED
|
@@ -72,6 +72,7 @@ class SpecSageCLI
|
|
|
72
72
|
def run_ci_mode
|
|
73
73
|
website = ENV['TARGET_WEBSITE_SLUG']
|
|
74
74
|
api_key = ENV['SPEC_SAGE_API_KEY']
|
|
75
|
+
base_url = ENV.fetch('CI_APP_URL')
|
|
75
76
|
|
|
76
77
|
unless website
|
|
77
78
|
puts "Error: TARGET_WEBSITE_SLUG environment variable required"
|
|
@@ -86,45 +87,72 @@ class SpecSageCLI
|
|
|
86
87
|
puts "SpecSage CI Mode"
|
|
87
88
|
puts "=" * 50
|
|
88
89
|
puts "Website: #{website}"
|
|
90
|
+
puts "Base URL: #{base_url}"
|
|
89
91
|
puts ""
|
|
90
92
|
|
|
91
|
-
publisher = ResultsUploader.new(
|
|
92
|
-
base_url: @options[:server_url],
|
|
93
|
-
api_key: api_key
|
|
94
|
-
)
|
|
93
|
+
publisher = ResultsUploader.new(api_key: api_key)
|
|
95
94
|
|
|
96
95
|
begin
|
|
97
|
-
|
|
96
|
+
response = publisher.fetch_ci_scenarios(website)
|
|
98
97
|
rescue ResultsUploader::UploadError => e
|
|
99
98
|
puts "Error: #{e.message}"
|
|
100
99
|
exit 1
|
|
101
100
|
end
|
|
102
101
|
|
|
103
|
-
server_run_id =
|
|
104
|
-
|
|
102
|
+
server_run_id = response['server_run_id']
|
|
103
|
+
scenarios = response['scenarios']
|
|
105
104
|
|
|
106
105
|
puts "Server run ID: #{server_run_id}"
|
|
107
|
-
puts "
|
|
106
|
+
puts "Scenarios: #{scenarios.length}"
|
|
107
|
+
scenarios.each { |s| puts " - #{s['name']}" }
|
|
108
108
|
puts ""
|
|
109
109
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
110
|
+
verdicts = []
|
|
111
|
+
|
|
112
|
+
scenarios.each do |scenario|
|
|
113
|
+
# Override base_url with CI_APP_URL
|
|
114
|
+
scenario['base_url'] = base_url
|
|
115
|
+
|
|
116
|
+
runner = Runner.new(
|
|
117
|
+
scenario,
|
|
118
|
+
visible: @options[:visible],
|
|
119
|
+
record: @options[:record],
|
|
120
|
+
publisher: publisher,
|
|
121
|
+
server_run_id: server_run_id
|
|
122
|
+
)
|
|
123
|
+
|
|
124
|
+
verdict = runner.run
|
|
125
|
+
verdicts << verdict
|
|
126
|
+
puts "[#{scenario['name']}] Verdict: #{verdict}"
|
|
127
|
+
end
|
|
117
128
|
|
|
118
|
-
|
|
129
|
+
# Finalize the run
|
|
130
|
+
begin
|
|
131
|
+
publisher.finalize_run(server_run_id)
|
|
132
|
+
rescue ResultsUploader::UploadError => e
|
|
133
|
+
puts "Warning: Failed to finalize run: #{e.message}"
|
|
134
|
+
end
|
|
119
135
|
|
|
120
136
|
puts ""
|
|
121
137
|
puts "=" * 50
|
|
122
138
|
puts "SpecSage CI Run Complete"
|
|
123
139
|
puts "=" * 50
|
|
124
|
-
|
|
140
|
+
|
|
141
|
+
# Overall verdict: ERROR > FAIL > PASS
|
|
142
|
+
overall = if verdicts.include?('ERROR')
|
|
143
|
+
'ERROR'
|
|
144
|
+
elsif verdicts.include?('FAIL')
|
|
145
|
+
'FAIL'
|
|
146
|
+
elsif verdicts.all? { |v| v == 'PASS' }
|
|
147
|
+
'PASS'
|
|
148
|
+
else
|
|
149
|
+
'ERROR'
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
puts "Overall Verdict: #{overall}"
|
|
125
153
|
puts ""
|
|
126
154
|
|
|
127
|
-
case
|
|
155
|
+
case overall
|
|
128
156
|
when 'PASS'
|
|
129
157
|
exit 0
|
|
130
158
|
when 'FAIL'
|
package/lib/results_uploader.rb
CHANGED
|
@@ -50,10 +50,10 @@ class ResultsUploader
|
|
|
50
50
|
post("/api/runs/#{server_run_id}/finalize", {})
|
|
51
51
|
end
|
|
52
52
|
|
|
53
|
-
#
|
|
54
|
-
# Returns hash with server_run_id and
|
|
55
|
-
def
|
|
56
|
-
|
|
53
|
+
# Fetch CI scenarios - returns scenario definitions tagged "ci" for local execution
|
|
54
|
+
# Returns hash with server_run_id and scenarios array
|
|
55
|
+
def fetch_ci_scenarios(website_identifier)
|
|
56
|
+
get("/api/v1/ci/scenarios?website=#{website_identifier}")
|
|
57
57
|
end
|
|
58
58
|
|
|
59
59
|
private
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@specsage/cli",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"description": "SpecSage CLI - AI-powered end-to-end testing automation (Node wrapper for Ruby CLI)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -29,5 +29,8 @@
|
|
|
29
29
|
},
|
|
30
30
|
"engines": {
|
|
31
31
|
"node": ">=18.0.0"
|
|
32
|
+
},
|
|
33
|
+
"dependencies": {
|
|
34
|
+
"playwright": "^1.57.0"
|
|
32
35
|
}
|
|
33
36
|
}
|