-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathjira_rest.fsx
54 lines (44 loc) · 1.38 KB
/
jira_rest.fsx
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
#r "packages/FSharp.Data/lib/net40/FSharp.Data.dll"
namespace JiraHelper
open System
open System.Net
open FSharp.Data
open FSharp.Data.JsonExtensions
[<AutoOpen>]
module Jira =
type Jira = {
Server : string
Api : string
User : string
Password : string }
type Issue = {
Id : string
Summary : string
Url : string }
let BuildHeaders (jira: Jira) =
let headers = [
HttpRequestHeaders.UserAgent ""
HttpRequestHeaders.ContentType HttpContentTypes.Json
]
if jira.User <> "" && jira.Password <> ""
then headers |> List.append [HttpRequestHeaders.BasicAuth jira.User jira.Password ]
else headers
let Search jql max_results (jira: Jira) =
let url = sprintf "%s/%s/search" jira.Server jira.Api
let result =
Http.RequestString(url,
query = [
"jql", jql;
"fields", "id,key,summary";
"maxResults", sprintf "%i" max_results ],
httpMethod = HttpMethod.Get,
headers = BuildHeaders jira )
|> JsonValue.Parse
let total = result?total.AsInteger()
if total > max_results
then printfn "%i issues matched but only %i will be returned" total max_results
result?issues.AsArray()
|> Seq.map (fun issue ->
{ Id = issue?key.AsString()
Summary = issue?fields?summary.AsString()
Url = issue?self.AsString() })