cucumber-pro 0.0.7 → 0.0.8
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.
- checksums.yaml +4 -4
- data/lib/cucumber/pro/README.md +153 -0
- data/lib/cucumber/pro/info.rb +19 -0
- data/lib/cucumber/pro/version +1 -1
- data/spec/cucumber/pro/info_spec.rb +11 -0
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a57bcad6666fb5df2180cb02c2206bc18fe2bf99
|
4
|
+
data.tar.gz: 5957942d5725e1f253d222763e2e2493aaa69307
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 47a6059e95e4e5c381f33d74f2875785cfba2ca3a0cb47d77427b4fb8200cd6d33dcac1e9ab4dc83002eb676a418abdfb3b7a379172b64db0cbda4bf3dd8810a
|
7
|
+
data.tar.gz: c4efd4814be45731a516aeb7247584cab215696b6a280bfd2fa922641e9108f03bdf4bb30014452d8f7332b59c61d3d42e9a9fc3a636a91c0043d6c6d304b8ce
|
@@ -0,0 +1,153 @@
|
|
1
|
+
Metarepo is a service for storing and retrieving metadata about files in
|
2
|
+
a repository.
|
3
|
+
|
4
|
+
Metarepo is both a standalone server (for receiving and storing metadata via
|
5
|
+
a WebSocket connection) and a library (npm module) for querying stored metadata.
|
6
|
+
|
7
|
+
The typical use case is an application that displays files in a repository
|
8
|
+
such as Git or Subversion where there is additional information about files
|
9
|
+
that can't live in Git/Subversion. For example:
|
10
|
+
|
11
|
+
* Comments or discussions about a file
|
12
|
+
* Information about a line in a file
|
13
|
+
|
14
|
+
Metarepo stores this extra information (metadata) about files.
|
15
|
+
Each little piece of information has the following attributes:
|
16
|
+
|
17
|
+
* `url` (what repository is it)
|
18
|
+
* `rev` (what branch does the file live in)
|
19
|
+
* `rev` (what revision of the file is it)
|
20
|
+
* `group` (grouping metadata for the same url+rev) - typically a CI run id.
|
21
|
+
* `path` (where is the file)
|
22
|
+
* `location` (where in the file should the metadata be attached - currently a line number)
|
23
|
+
* `mime_type` (what kind of data)
|
24
|
+
* `json_body` (the metadata)
|
25
|
+
|
26
|
+
This is split up over 3 tables:
|
27
|
+
|
28
|
+
+-------+ +--------+ +-----------+
|
29
|
+
| repos +-----> | group +-----> | metadata |
|
30
|
+
+-------+ +--------+ +-----------+
|
31
|
+
| url | | branch | | path |
|
32
|
+
+-------+ | rev | | location |
|
33
|
+
| group | | mime_type |
|
34
|
+
+--------+ | json_body |
|
35
|
+
+-----------+
|
36
|
+
|
37
|
+
|
38
|
+
Here are some examples of metadata:
|
39
|
+
|
40
|
+
## Ruby Stacktrace
|
41
|
+
|
42
|
+
mime_type: text/vnd.cucumber-pro.stacktrace.ruby+plain
|
43
|
+
json_body: { "text" : "some ruby stacktrace" }
|
44
|
+
|
45
|
+
## Screenshot
|
46
|
+
|
47
|
+
mime_type: image/png
|
48
|
+
json_body: { "path" : "path/within/s3" }
|
49
|
+
|
50
|
+
See below about the protocol for storing binary attachments.
|
51
|
+
|
52
|
+
## Test Case result (typically a Cucumber Scenario, but could also be from RSpec, JUnit etc)
|
53
|
+
|
54
|
+
mime_type: application/vnd.cucumber-pro.test-case-result+json
|
55
|
+
json_body: { "status" : "failed" }
|
56
|
+
|
57
|
+
|
58
|
+
## Test Step result (Cucumber Step)
|
59
|
+
|
60
|
+
application/vnd.cucumber.test-step-result+json
|
61
|
+
json_body: { "status" : "failed" }
|
62
|
+
|
63
|
+
## Discussion
|
64
|
+
|
65
|
+
mime_type: application/vnd.cucumber-pro.discussion-message+json
|
66
|
+
json_body: { "who": "matt", "message": "I like this" }
|
67
|
+
|
68
|
+
Metadata can be stored with WebSockets (for the standalone mode) and retrieved with method calls
|
69
|
+
(in the npm module mode).
|
70
|
+
|
71
|
+
# Hacking
|
72
|
+
|
73
|
+
## Create the local databases
|
74
|
+
|
75
|
+
```
|
76
|
+
createdb metarepo-test
|
77
|
+
createdb metarepo-development
|
78
|
+
createuser -s -r postgres
|
79
|
+
```
|
80
|
+
|
81
|
+
Run the tests (this will automatically migrate the databases):
|
82
|
+
|
83
|
+
```
|
84
|
+
npm test
|
85
|
+
```
|
86
|
+
|
87
|
+
# Try it out
|
88
|
+
|
89
|
+
## Fire up the server
|
90
|
+
|
91
|
+
```
|
92
|
+
DEBUG="metarepo:*,omnirepo:*,svnlite:*" npm start
|
93
|
+
```
|
94
|
+
|
95
|
+
## Store some metadata over the WebSocket API
|
96
|
+
|
97
|
+
First, you need the `authToken` of a cpro user, which you will find in mongodb.
|
98
|
+
|
99
|
+
Connect a WebSocket
|
100
|
+
|
101
|
+
```
|
102
|
+
./node_modules/.bin/wscat --connect ws://localhost:5000/ws?token=authToken
|
103
|
+
```
|
104
|
+
|
105
|
+
Or if you want to do it on Heroku:
|
106
|
+
|
107
|
+
```
|
108
|
+
./node_modules/.bin/wscat --no-check --connect wss://results.cucumber.pro/ws?token=authToken
|
109
|
+
```
|
110
|
+
|
111
|
+
Initiate the session
|
112
|
+
|
113
|
+
```json
|
114
|
+
{ "repo_url": "memory://metarepo/test", "rev": "1", "branch": "master", "group": "run-1", "info": {} }
|
115
|
+
```
|
116
|
+
|
117
|
+
Store some metadata
|
118
|
+
|
119
|
+
```json
|
120
|
+
{ "path": "hello/world.feature", "location": 2, "mime_type": "application/vnd.cucumber.test-case-result+json", "body": { "status": "passed" } }
|
121
|
+
{ "path": "hello/world.feature", "location": 3, "mime_type": "application/vnd.cucumber.test-case-result+json", "body": { "status": "failed" } }
|
122
|
+
{ "path": "hello/world.feature", "location": 4, "mime_type": "application/vnd.cucumber.test-case-result+json", "body": { "status": "pending" } }
|
123
|
+
```
|
124
|
+
|
125
|
+
Query the database:
|
126
|
+
|
127
|
+
```sql
|
128
|
+
SELECT json_body->>'status' AS status, count(json_body) FROM metadata GROUP BY json_body->>'status';
|
129
|
+
```
|
130
|
+
|
131
|
+
The `PgStore.aggregateResult` method uses a similar query to report aggregate results.
|
132
|
+
|
133
|
+
## Storing blobs
|
134
|
+
|
135
|
+
The protocol for storing metadata where the body is a blob (such as an image) is
|
136
|
+
to send two messages where the first one is a regular metadata JSON message
|
137
|
+
*without* the body field set.
|
138
|
+
|
139
|
+
When the `body` field is not set, metarepo expects the next message to be a *binary* message.
|
140
|
+
The body of the binary message will be stored in an external store (S3), and the metadata record
|
141
|
+
in the database will point to the path of the file in S3.
|
142
|
+
|
143
|
+
## BUGS
|
144
|
+
|
145
|
+
2) Not storing timezones
|
146
|
+
|
147
|
+
See http://www.craigkerstiens.com/2014/05/07/Postgres-datatypes-the-ones-youre-not-using/
|
148
|
+
|
149
|
+
## Release process
|
150
|
+
|
151
|
+
npm version NEW_VERSION
|
152
|
+
npm publish
|
153
|
+
git push --tags
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'rbconfig'
|
2
|
+
require 'etc'
|
3
|
+
require 'cucumber/platform'
|
4
|
+
|
5
|
+
module Cucumber
|
6
|
+
module Pro
|
7
|
+
class Info
|
8
|
+
def to_h
|
9
|
+
{
|
10
|
+
os: "#{RbConfig::CONFIG['host_os']} (#{RbConfig::CONFIG['host_cpu']})",
|
11
|
+
platform_version: "#{RbConfig::CONFIG['ruby_install_name']} #{RbConfig::CONFIG['ruby_version']}",
|
12
|
+
tool_version: "cucumber-ruby #{Cucumber::VERSION}}",
|
13
|
+
os_user: Etc.getlogin,
|
14
|
+
client_version: "cucumber-pro-ruby #{File.read(File.dirname(__FILE__) + '/version').strip}"
|
15
|
+
}
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/lib/cucumber/pro/version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.8
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cucumber-pro
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Wynne
|
@@ -158,10 +158,13 @@ files:
|
|
158
158
|
- features/support/fake_results_service.rb
|
159
159
|
- features/support/world.rb
|
160
160
|
- lib/cucumber/pro.rb
|
161
|
+
- lib/cucumber/pro/README.md
|
161
162
|
- lib/cucumber/pro/formatter.rb
|
163
|
+
- lib/cucumber/pro/info.rb
|
162
164
|
- lib/cucumber/pro/scm.rb
|
163
165
|
- lib/cucumber/pro/version
|
164
166
|
- lib/cucumber/pro/web_socket/session.rb
|
167
|
+
- spec/cucumber/pro/info_spec.rb
|
165
168
|
- spec/cucumber/pro/scm/git_repo_spec.rb
|
166
169
|
- spec/cucumber/pro/web_socket/worker_spec.rb
|
167
170
|
- tmp/.gitkeep
|
@@ -189,7 +192,7 @@ rubyforge_project:
|
|
189
192
|
rubygems_version: 2.0.14
|
190
193
|
signing_key:
|
191
194
|
specification_version: 4
|
192
|
-
summary: cucumber-pro-0.0.
|
195
|
+
summary: cucumber-pro-0.0.8
|
193
196
|
test_files:
|
194
197
|
- features/publish_results.feature
|
195
198
|
- features/security.feature
|
@@ -198,6 +201,7 @@ test_files:
|
|
198
201
|
- features/support/env.rb
|
199
202
|
- features/support/fake_results_service.rb
|
200
203
|
- features/support/world.rb
|
204
|
+
- spec/cucumber/pro/info_spec.rb
|
201
205
|
- spec/cucumber/pro/scm/git_repo_spec.rb
|
202
206
|
- spec/cucumber/pro/web_socket/worker_spec.rb
|
203
207
|
has_rdoc:
|