Ask a Question

Push a readme.md to confluence using confluence APIs

pizzaTime
Occasional Contributor

Push a readme.md to confluence using confluence APIs

Hello,

 

So I'm trying to push readme to confluence, except that Confluence APIs accepts the body as json, but my readme is a multiline text.. In confluence I have a waiting plugin to convert the text into a well-formed readme 🙂 
So I'm trying to convert a multiline text into a single line so that I can automate pushing all readme to confluence.

 

One of my problem now is to locate the carriage return , and convert it into "\\n" but I'm new to groovy and I don't know how to do that.
One of the future struggle is going to be : how to parse through directories to locate readme.

many thanks

pizzaTime

15 REPLIES 15
nmrao
Community Hero

Groovy supports multi line text

 

def multiLine = '''line1 text
next line
and one more line'''

//Show as is
log.info multiLine

//Remove new lines / carriage returns
def newString = multiLine.replaceAll('\n', '').replaceAll('\r', '')

//See the diff with multiLine
log.info newString


Regards,
Rao.
pizzaTime
Occasional Contributor

Yes, but as I am using confluence API to send back : so I have this body to fill
Especially the value in which I am replacing ${Properties#body} by the readme.md text

{
   "id" : "${Properties#pageId}",
   "type" : "page",
   "status" : "current",
   "title" : "Markdown test",
   "body" : {
     "storage" : {
         "value" : "<ac:structured-macro ac:name=\"markdown\" ac:schema-version=\"1\" ac:macro-id=\"1234\"><ac:plain-text-body><![CDATA[${Properties#body}]]></ac:plain-text-body></ac:structured-macro>",
         "representation" : "storage",
         "_expandable" : {
            "content" : "/rest/api/content/${Properties#pageId}"
         }
     }
   },
   "version":{"number":${Properties#pageVersion}}
}

To be more precise I have this readme: 

##  Title
text
## Another Title
another text

That I want to convert into :

## Title \n text \n ## Another Title \n another text

So that it can be supplied in the body in my request.

 

Best regards,

 

pizzaTime

Ok, what is happening with above request?


Regards,
Rao.

@pizzaTime , could you please attach any screenshot of error for better understanding of problem.:)


Click "Accept as Solution" if my answer has helped,
Remember to give "Kudos" 🙂 ↓↓↓↓↓



Thanks and Regards,
Himanshu Tayal
pizzaTime
Occasional Contributor

Let's say this is the readme I want to update :

## Test description 
 This test verifiy : 
 - lorem text

The error is that what the API expects from a readme is :

## Test description \n This test verifiy :\n - lorem text

So from my groovy script I tried to put it in the request.

{
   "id" : "${Properties#pageId}",
   "type" : "page",
   "status" : "current",
   "title" : "Markdown test",
   "body" : {
     "storage" : {
         "value" : "<ac:structured-macro ac:name=\"markdown\" ac:schema-version=\"1\" ac:macro-id=\"1234\"><ac:plain-text-body><![CDATA[${Properties#body}]]></ac:plain-text-body></ac:structured-macro>",
         "representation" : "storage",
         "_expandable" : {
            "content" : "/rest/api/content/${Properties#pageId}"
         }
     }
   },
   "version":{"number":${Properties#pageVersion}}
}

With :

def carriageReturn= '\\n '
fileContents = fileContents.replaceAll('\n',carriageReturn).replaceAll(' \r',"")

Except '\\n' is interpreted as the a carriage return when i want it to be litteraly '\n'

Did it work when you replace with '\\n'?


Regards,
Rao.
pizzaTime
Occasional Contributor

Nope, and I tried different things

@pizzaTime  : Is your problem resolved?

 


Click "Accept as Solution" if my answer has helped,
Remember to give "Kudos" 🙂 ↓↓↓↓↓



Thanks and Regards,
Himanshu Tayal
pizzaTime
Occasional Contributor

In the request "raw form" : 
I see the body on one line, but when I copy-paste it, it is multi-lined.
So my problem is that I want literally the characters "\n" and not it interpreted as 'newline'.

cancel
Showing results for 
Search instead for 
Did you mean: