Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
G
go-gitlab
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
go
go-gitlab
Commits
fb691d7b
Commit
fb691d7b
authored
Mar 06, 2019
by
Juhani Ränkimies
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add support for Release links API
parent
da49f84b
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
322 additions
and
0 deletions
+322
-0
gitlab.go
gitlab.go
+2
-0
releaselinks.go
releaselinks.go
+177
-0
releaselinks_test.go
releaselinks_test.go
+143
-0
No files found.
gitlab.go
View file @
fb691d7b
...
...
@@ -322,6 +322,7 @@ type Client struct {
ProjectVariables
*
ProjectVariablesService
ProtectedBranches
*
ProtectedBranchesService
ProtectedTags
*
ProtectedTagsService
ReleaseLinks
*
ReleaseLinksService
Releases
*
ReleasesService
Repositories
*
RepositoriesService
RepositoryFiles
*
RepositoryFilesService
...
...
@@ -464,6 +465,7 @@ func newClient(httpClient *http.Client) *Client {
c
.
ProjectVariables
=
&
ProjectVariablesService
{
client
:
c
}
c
.
ProtectedBranches
=
&
ProtectedBranchesService
{
client
:
c
}
c
.
ProtectedTags
=
&
ProtectedTagsService
{
client
:
c
}
c
.
ReleaseLinks
=
&
ReleaseLinksService
{
client
:
c
}
c
.
Releases
=
&
ReleasesService
{
client
:
c
}
c
.
Repositories
=
&
RepositoriesService
{
client
:
c
}
c
.
RepositoryFiles
=
&
RepositoryFilesService
{
client
:
c
}
...
...
releaselinks.go
0 → 100644
View file @
fb691d7b
package
gitlab
import
(
"fmt"
"net/url"
)
// ReleaseLinksService handles communication with the release link methods
// of the GitLab API.
//
// GitLab API docs: https://docs.gitlab.com/ee/api/releases/links.html
type
ReleaseLinksService
struct
{
client
*
Client
}
// ReleaseLink represents a release link.
//
// GitLab API docs: https://docs.gitlab.com/ee/api/releases/links.html
type
ReleaseLink
struct
{
ID
int
`json:"id"`
Name
string
`json:"name"`
URL
string
`json:"url"`
External
bool
`json:"external"`
}
// ListReleaseLinksOptions represents ListReleaseLinks() options.
//
// GitLab API docs: https://docs.gitlab.com/ee/api/releases/links.html#get-links
type
ListReleaseLinksOptions
ListOptions
// ListReleaseLinks gets assets as links from a Release.
//
// GitLab API docs: https://docs.gitlab.com/ee/api/releases/links.html#get-links
func
(
s
*
ReleaseLinksService
)
ListReleaseLinks
(
pid
interface
{},
tagName
string
,
opt
*
ListReleaseLinksOptions
,
options
...
OptionFunc
)
([]
*
ReleaseLink
,
*
Response
,
error
)
{
project
,
err
:=
parseID
(
pid
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
u
:=
fmt
.
Sprintf
(
"projects/%s/releases/%s/assets/links"
,
url
.
QueryEscape
(
project
),
tagName
)
req
,
err
:=
s
.
client
.
NewRequest
(
"GET"
,
u
,
opt
,
options
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
rls
:=
make
([]
*
ReleaseLink
,
0
)
resp
,
err
:=
s
.
client
.
Do
(
req
,
&
rls
)
if
err
!=
nil
{
return
nil
,
resp
,
err
}
return
rls
,
resp
,
err
}
// GetReleaseLink returns a link from release assets.
//
// GitLab API docs: https://docs.gitlab.com/ee/api/releases/links.html#get-a-link
func
(
s
*
ReleaseLinksService
)
GetReleaseLink
(
pid
interface
{},
tagName
string
,
link
int
,
options
...
OptionFunc
)
(
*
ReleaseLink
,
*
Response
,
error
)
{
project
,
err
:=
parseID
(
pid
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
u
:=
fmt
.
Sprintf
(
"projects/%s/releases/%s/assets/links/%d"
,
url
.
QueryEscape
(
project
),
tagName
,
link
)
req
,
err
:=
s
.
client
.
NewRequest
(
"GET"
,
u
,
nil
,
options
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
rl
:=
new
(
ReleaseLink
)
resp
,
err
:=
s
.
client
.
Do
(
req
,
rl
)
if
err
!=
nil
{
return
nil
,
resp
,
err
}
return
rl
,
resp
,
err
}
// CreateReleaseLinkOptions represents CreateReleaseLink() options.
//
// GitLab API docs: https://docs.gitlab.com/ee/api/releases/links.html#create-a-link
type
CreateReleaseLinkOptions
struct
{
Name
*
string
`url:"name" json:"name"`
URL
*
string
`url:"url" json:"url"`
}
// CreateReleaseLink creates a link.
//
// GitLab API docs: https://docs.gitlab.com/ee/api/releases/links.html#create-a-link
func
(
s
*
ReleaseLinksService
)
CreateReleaseLink
(
pid
interface
{},
tagName
string
,
opt
*
CreateReleaseLinkOptions
,
options
...
OptionFunc
)
(
*
ReleaseLink
,
*
Response
,
error
)
{
project
,
err
:=
parseID
(
pid
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
u
:=
fmt
.
Sprintf
(
"projects/%s/releases/%s/assets/links"
,
url
.
QueryEscape
(
project
),
tagName
)
req
,
err
:=
s
.
client
.
NewRequest
(
"POST"
,
u
,
opt
,
options
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
rl
:=
new
(
ReleaseLink
)
resp
,
err
:=
s
.
client
.
Do
(
req
,
rl
)
if
err
!=
nil
{
return
nil
,
resp
,
err
}
return
rl
,
resp
,
err
}
// UpdateReleaseLinkOptions represents UpdateReleaseLink() options.
//
// You have to specify at least one of Name of URL.
//
// GitLab API docs: https://docs.gitlab.com/ee/api/releases/links.html#update-a-link
type
UpdateReleaseLinkOptions
struct
{
Name
*
string
`url:"name,omitempty" json:"name,omitempty"`
URL
*
string
`url:"url,omitempty" json:"url,omitempty"`
}
// UpdateReleaseLink updates an asset link.
//
// GitLab API docs: https://docs.gitlab.com/ee/api/releases/links.html#update-a-link
func
(
s
*
ReleaseLinksService
)
UpdateReleaseLink
(
pid
interface
{},
tagName
string
,
link
int
,
opt
*
UpdateReleaseLinkOptions
,
options
...
OptionFunc
)
(
*
ReleaseLink
,
*
Response
,
error
)
{
project
,
err
:=
parseID
(
pid
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
u
:=
fmt
.
Sprintf
(
"projects/%s/releases/%s/assets/links/%d"
,
url
.
QueryEscape
(
project
),
tagName
,
link
)
req
,
err
:=
s
.
client
.
NewRequest
(
"PUT"
,
u
,
opt
,
options
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
rl
:=
new
(
ReleaseLink
)
resp
,
err
:=
s
.
client
.
Do
(
req
,
rl
)
if
err
!=
nil
{
return
nil
,
resp
,
err
}
return
rl
,
resp
,
err
}
// DeleteReleaseLink deletes a link from release.
//
// GitLab API docs: https://docs.gitlab.com/ee/api/releases/links.html#delete-a-link
func
(
s
*
ReleaseLinksService
)
DeleteReleaseLink
(
pid
interface
{},
tagName
string
,
link
int
,
options
...
OptionFunc
)
(
*
ReleaseLink
,
*
Response
,
error
)
{
project
,
err
:=
parseID
(
pid
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
u
:=
fmt
.
Sprintf
(
"projects/%s/releases/%s/assets/links/%d"
,
url
.
QueryEscape
(
project
),
tagName
,
link
,
)
req
,
err
:=
s
.
client
.
NewRequest
(
"DELETE"
,
u
,
nil
,
options
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
rl
:=
new
(
ReleaseLink
)
resp
,
err
:=
s
.
client
.
Do
(
req
,
rl
)
if
err
!=
nil
{
return
nil
,
resp
,
err
}
return
rl
,
resp
,
err
}
releaselinks_test.go
0 → 100644
View file @
fb691d7b
package
gitlab
import
(
"fmt"
"net/http"
"testing"
)
const
exampleReleaseLinkList
=
`[
{
"id": 2,
"name": "awesome-v0.2.msi",
"url": "http://192.168.10.15:3000/msi",
"external": true
},
{
"id": 1,
"name": "awesome-v0.2.dmg",
"url": "http://192.168.10.15:3000",
"external": true
}
]`
func
TestReleaseLinksService_ListReleaseLinks
(
t
*
testing
.
T
)
{
mux
,
server
,
client
:=
setup
()
defer
teardown
(
server
)
mux
.
HandleFunc
(
"/api/v4/projects/1/releases/v0.1/assets/links"
,
func
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
testMethod
(
t
,
r
,
"GET"
)
fmt
.
Fprint
(
w
,
exampleReleaseLinkList
)
})
releaseLinks
,
_
,
err
:=
client
.
ReleaseLinks
.
ListReleaseLinks
(
1
,
"v0.1"
,
&
ListReleaseLinksOptions
{},
)
if
err
!=
nil
{
t
.
Error
(
err
)
}
if
len
(
releaseLinks
)
!=
2
{
t
.
Error
(
"expected 2 links"
)
}
if
releaseLinks
[
0
]
.
Name
!=
"awesome-v0.2.msi"
{
t
.
Errorf
(
"release link name, expected '%s', got '%s'"
,
"awesome-v0.2.msi"
,
releaseLinks
[
0
]
.
Name
)
}
}
const
exampleReleaseLink
=
`{
"id":1,
"name":"awesome-v0.2.dmg",
"url":"http://192.168.10.15:3000",
"external":true
}`
func
TestReleaseLinksService_CreateReleaseLink
(
t
*
testing
.
T
)
{
mux
,
server
,
client
:=
setup
()
defer
teardown
(
server
)
mux
.
HandleFunc
(
"/api/v4/projects/1/releases/v0.1/assets/links"
,
func
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
testMethod
(
t
,
r
,
"POST"
)
fmt
.
Fprint
(
w
,
exampleReleaseLink
)
})
releaseLink
,
_
,
err
:=
client
.
ReleaseLinks
.
CreateReleaseLink
(
1
,
"v0.1"
,
&
CreateReleaseLinkOptions
{
Name
:
String
(
"awesome-v0.2.dmg"
),
URL
:
String
(
"http://192.168.10.15:3000"
),
})
if
err
!=
nil
{
t
.
Error
(
err
)
}
if
releaseLink
.
Name
!=
"awesome-v0.2.dmg"
{
t
.
Errorf
(
"release link name, expected '%s', got '%s'"
,
"awesome-v0.2.dmg"
,
releaseLink
.
Name
)
}
}
func
TestReleaseLinksService_GetReleaseLink
(
t
*
testing
.
T
)
{
mux
,
server
,
client
:=
setup
()
defer
teardown
(
server
)
mux
.
HandleFunc
(
"/api/v4/projects/1/releases/v0.1/assets/links/1"
,
func
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
testMethod
(
t
,
r
,
"GET"
)
fmt
.
Fprint
(
w
,
exampleReleaseLink
)
})
releaseLink
,
_
,
err
:=
client
.
ReleaseLinks
.
GetReleaseLink
(
1
,
"v0.1"
,
1
)
if
err
!=
nil
{
t
.
Error
(
err
)
}
if
releaseLink
.
Name
!=
"awesome-v0.2.dmg"
{
t
.
Errorf
(
"release link name, expected '%s', got '%s'"
,
"awesome-v0.2.dmg"
,
releaseLink
.
Name
)
}
}
func
TestReleaseLinksService_UpdateReleaseLink
(
t
*
testing
.
T
)
{
mux
,
server
,
client
:=
setup
()
defer
teardown
(
server
)
mux
.
HandleFunc
(
"/api/v4/projects/1/releases/v0.1/assets/links/1"
,
func
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
testMethod
(
t
,
r
,
"PUT"
)
fmt
.
Fprint
(
w
,
exampleReleaseLink
)
})
releaseLink
,
_
,
err
:=
client
.
ReleaseLinks
.
UpdateReleaseLink
(
1
,
"v0.1"
,
1
,
&
UpdateReleaseLinkOptions
{
Name
:
String
(
"awesome-v0.2.dmg"
),
})
if
err
!=
nil
{
t
.
Error
(
err
)
}
if
releaseLink
.
Name
!=
"awesome-v0.2.dmg"
{
t
.
Errorf
(
"release link name, expected '%s', got '%s'"
,
"awesome-v0.2.dmg"
,
releaseLink
.
Name
)
}
}
func
TestReleaseLinksService_DeleteReleaseLink
(
t
*
testing
.
T
)
{
mux
,
server
,
client
:=
setup
()
defer
teardown
(
server
)
mux
.
HandleFunc
(
"/api/v4/projects/1/releases/v0.1/assets/links/1"
,
func
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
testMethod
(
t
,
r
,
"DELETE"
)
fmt
.
Fprint
(
w
,
exampleReleaseLink
)
})
releaseLink
,
_
,
err
:=
client
.
ReleaseLinks
.
DeleteReleaseLink
(
1
,
"v0.1"
,
1
)
if
err
!=
nil
{
t
.
Error
(
err
)
}
if
releaseLink
.
Name
!=
"awesome-v0.2.dmg"
{
t
.
Errorf
(
"release link name, expected '%s', got '%s'"
,
"awesome-v0.2.dmg"
,
releaseLink
.
Name
)
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment