Skip to content

Commit

Permalink
Merge pull request #83 from mrdavidlaing/master
Browse files Browse the repository at this point in the history
Add support for Confluence blog posts
  • Loading branch information
kovetskiy authored Apr 5, 2021
2 parents 12510a1 + 07aa370 commit 1daedcd
Show file tree
Hide file tree
Showing 7 changed files with 52 additions and 21 deletions.
7 changes: 7 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,13 @@ Also, optional following headers are supported:
reading;
* plain: content will fill all page;

```markdown
<!-- Type: (page|blogpost) -->
```

* (default) page: normal Confluence page - defaults to this if omitted
* blogpost: [Blog post](https://confluence.atlassian.com/doc/blog-posts-834222533.html) in `Space`. Cannot have `Parent`(s)

Mark supports Go templates, which can be included into article by using path
to the template relative to current working dir, e.g.:

Expand Down
8 changes: 5 additions & 3 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -191,16 +191,18 @@ func main() {
if err != nil {
log.Fatalf(
karma.Describe("title", meta.Title).Reason(err),
"unable to resolve page",
"unable to resolve %s",
meta.Type,
)
}

if page == nil {
page, err = api.CreatePage(meta.Space, parent, meta.Title, ``)
page, err = api.CreatePage(meta.Space, meta.Type, parent, meta.Title, ``)
if err != nil {
log.Fatalf(
err,
"can't create page %q",
"can't create %s %q",
meta.Type,
meta.Title,
)
}
Expand Down
32 changes: 19 additions & 13 deletions pkg/confluence/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ type API struct {
type PageInfo struct {
ID string `json:"id"`
Title string `json:"title"`
Type string `json:"type"`

Version struct {
Number int64 `json:"number"`
Expand Down Expand Up @@ -95,7 +96,7 @@ func NewAPI(baseURL string, username string, password string) *API {
}

func (api *API) FindRootPage(space string) (*PageInfo, error) {
page, err := api.FindPage(space, ``)
page, err := api.FindPage(space, ``, "page")
if err != nil {
return nil, karma.Format(
err,
Expand All @@ -121,14 +122,15 @@ func (api *API) FindRootPage(space string) (*PageInfo, error) {
}, nil
}

func (api *API) FindPage(space string, title string) (*PageInfo, error) {
func (api *API) FindPage(space string, title string, pageType string) (*PageInfo, error) {
result := struct {
Results []PageInfo `json:"results"`
}{}

payload := map[string]string{
"spaceKey": space,
"expand": "ancestors,version",
"type": pageType,
}

if title != "" {
Expand Down Expand Up @@ -388,12 +390,13 @@ func (api *API) GetPageByID(pageID string) (*PageInfo, error) {

func (api *API) CreatePage(
space string,
pageType string,
parent *PageInfo,
title string,
body string,
) (*PageInfo, error) {
payload := map[string]interface{}{
"type": "page",
"type": pageType,
"title": title,
"space": map[string]interface{}{
"key": space,
Expand Down Expand Up @@ -437,17 +440,20 @@ func (api *API) UpdatePage(
page *PageInfo, newContent string, minorEdit bool, newLabels []string,
) error {
nextPageVersion := page.Version.Number + 1
oldAncestors := []map[string]interface{}{}

if len(page.Ancestors) == 0 {
return fmt.Errorf(
"page %q info does not contain any information about parents",
page.ID,
)
}
if page.Type != "blogpost" {
if len(page.Ancestors) == 0 {
return fmt.Errorf(
"page %q info does not contain any information about parents",
page.ID,
)
}

// picking only the last one, which is required by confluence
oldAncestors := []map[string]interface{}{
{"id": page.Ancestors[len(page.Ancestors)-1].Id},
// picking only the last one, which is required by confluence
oldAncestors = []map[string]interface{}{
{"id": page.Ancestors[len(page.Ancestors)-1].Id},
}
}

labels := []map[string]interface{}{}
Expand All @@ -463,7 +469,7 @@ func (api *API) UpdatePage(

payload := map[string]interface{}{
"id": page.ID,
"type": "page",
"type": page.Type,
"title": page.Title,
"version": map[string]interface{}{
"number": nextPageVersion,
Expand Down
6 changes: 3 additions & 3 deletions pkg/mark/ancestry.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ func EnsureAncestry(
rest := ancestry

for i, title := range ancestry {
page, err := api.FindPage(space, title)
page, err := api.FindPage(space, title, "page")
if err != nil {
return nil, karma.Format(
err,
Expand Down Expand Up @@ -66,7 +66,7 @@ func EnsureAncestry(

if !dryRun {
for _, title := range rest {
page, err := api.CreatePage(space, parent, title, ``)
page, err := api.CreatePage(space, "page", parent, title, ``)
if err != nil {
return nil, karma.Format(
err,
Expand Down Expand Up @@ -95,7 +95,7 @@ func ValidateAncestry(
space string,
ancestry []string,
) (*confluence.PageInfo, error) {
page, err := api.FindPage(space, ancestry[len(ancestry)-1])
page, err := api.FindPage(space, ancestry[len(ancestry)-1], "page")
if err != nil {
return nil, err
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/mark/link.go
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ func getConfluenceLink(api *confluence.API, space, title string) (string, error)
url.QueryEscape(title),
)

page, err := api.FindPage(space, title)
page, err := api.FindPage(space, title, "page")
if err != nil {
return "", karma.Format(err, "api: find page")
}
Expand Down
12 changes: 11 additions & 1 deletion pkg/mark/mark.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ func ResolvePage(
api *confluence.API,
meta *Meta,
) (*confluence.PageInfo, *confluence.PageInfo, error) {
page, err := api.FindPage(meta.Space, meta.Title)
page, err := api.FindPage(meta.Space, meta.Title, meta.Type)
if err != nil {
return nil, nil, karma.Format(
err,
Expand All @@ -22,6 +22,16 @@ func ResolvePage(
)
}

if meta.Type == "blogpost" {
log.Infof(
nil,
"Blog post will be stored as: %s",
meta.Title,
)

return nil, page, nil
}

ancestry := meta.Parents
if page != nil {
ancestry = append(ancestry, page.Title)
Expand Down
6 changes: 6 additions & 0 deletions pkg/mark/meta.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import (
const (
HeaderParent = `Parent`
HeaderSpace = `Space`
HeaderType = `Type`
HeaderTitle = `Title`
HeaderLayout = `Layout`
HeaderAttachment = `Attachment`
Expand All @@ -23,6 +24,7 @@ const (
type Meta struct {
Parents []string
Space string
Type string
Title string
Layout string
Attachments map[string]string
Expand Down Expand Up @@ -67,6 +69,7 @@ func ExtractMeta(data []byte) (*Meta, []byte, error) {

if meta == nil {
meta = &Meta{}
meta.Type = "page" //Default if not specified
meta.Attachments = make(map[string]string)
}

Expand All @@ -84,6 +87,9 @@ func ExtractMeta(data []byte) (*Meta, []byte, error) {
case HeaderSpace:
meta.Space = strings.TrimSpace(value)

case HeaderType:
meta.Type = strings.TrimSpace(value)

case HeaderTitle:
meta.Title = strings.TrimSpace(value)

Expand Down

0 comments on commit 1daedcd

Please sign in to comment.