@specsage/cli 0.1.0 → 0.1.2

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 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
- ci_run = publisher.create_ci_run(website)
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 = ci_run['server_run_id']
104
- base_url = ci_run['base_url']
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 "Base URL: #{base_url}"
106
+ puts "Scenarios: #{scenarios.length}"
107
+ scenarios.each { |s| puts " - #{s['name']}" }
108
108
  puts ""
109
109
 
110
- runner = Runner.new(
111
- { 'base_url' => base_url },
112
- visible: @options[:visible],
113
- record: @options[:record],
114
- publisher: publisher,
115
- server_run_id: server_run_id
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
- verdict = runner.run
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
- puts "Verdict: #{verdict}"
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 verdict
155
+ case overall
128
156
  when 'PASS'
129
157
  exit 0
130
158
  when 'FAIL'
@@ -50,10 +50,10 @@ class ResultsUploader
50
50
  post("/api/runs/#{server_run_id}/finalize", {})
51
51
  end
52
52
 
53
- # Create a CI run - server selects scenarios based on website's "ci" tag
54
- # Returns hash with server_run_id and base_url
55
- def create_ci_run(website_identifier)
56
- post('/api/v1/ci/runs', { website: website_identifier })
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.0",
3
+ "version": "0.1.2",
4
4
  "description": "SpecSage CLI - AI-powered end-to-end testing automation (Node wrapper for Ruby CLI)",
5
5
  "type": "module",
6
6
  "bin": {