2020-07-25 12:10:26 +03:00
2020-07-14 07:33:18 -05:00
2019-07-31 13:57:52 +03:00
2019-07-31 13:57:52 +03:00
2020-01-07 16:06:32 +03:00
2020-07-25 11:09:06 +03:00
2020-07-25 11:09:06 +03:00
2020-07-19 17:43:12 +03:00
2020-07-25 11:09:06 +03:00
2020-07-25 11:09:06 +03:00
2020-07-25 12:10:26 +03:00

Mark

Mark — tool for syncing your markdown documentation with Atlassian Confluence pages.

This is very useful if you store documentation to your software in a Git repository and don't want to do an extra job of updating Confluence page using a tinymce wysiwyg enterprise core editor which always breaks everything.

Mark does the same but in a different way. Mark reads your markdown file, creates a Confluence page if it's not found by its name, uploads attachments, translates Markdown into HTML and updates the contents of the page via REST API. It's like you don't even need to create sections/pages in your Confluence anymore, just use them in your Markdown documentation.

Mark uses an extended file format, which, still being valid markdown, contains several HTML-ish metadata headers, which can be used to locate page inside Confluence instance and update it accordingly.

File in the extended format should follow the specification:

<!-- Space: <space key> -->
<!-- Parent: <parent 1> -->
<!-- Parent: <parent 2> -->
<!-- Title: <title> -->
<!-- Attachment: <local path> -->

<page contents>

There can be any number of Parent headers, if Mark can't find specified parent by title, Mark creates it.

Also, optional following headers are supported:

<!-- Layout: (article|plain) -->
  • (default) article: content will be put in narrow column for ease of reading;
  • plain: content will fill all page;

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

<!-- Include: <path> -->

Templates can accept configuration data in YAML format which immediately follows the Include tag:

<!-- Include: <path>
     <yaml-data> -->

Mark also supports attachments. The standard way involves declaring an Attachment along with the other items in the header, then have any links with the same path:

<!-- Attachment: <path-to-image> -->

<beginning of page content>

An attached link is [here](<path-to-image>)

NOTE: Be careful with Attachment! If your path string is a subset of another longer string or referenced in text, you may get undesired behavior.

Mark also supports macro definitions, which are defined as regexps which will be replaced with specified template:

<!-- Macro: <regexp>
     Template: <path>
     <yaml-data> -->

Capture groups can be defined in the macro's which can be later referenced in the <yaml-data> using ${<number>} syntax, where <number> is number of a capture group in regexp (${0} is used for entire regexp match), for example:

  <!-- Macro: MYJIRA-\d+
       Template: ac:jira:ticket
       Ticket: ${0} -->

By default, mark provides several built-in templates and macros:

  • template ac:status to include badge-like text, which accepts following parameters:

    • Title: text to display in the badge
    • Color: color to use as background/border for badge
      • Grey
      • Red
      • Yellow
      • Green
      • Blue
    • Subtle: specify to fill badge with background or not
      • true
      • false
  • template ac:jira:ticket to include JIRA ticket link. Parameters:

    • Ticket: Jira ticket number like BUGS-123.

    See: https://confluence.atlassian.com/conf59/status-macro-792499207.html

  • macro @{...} to mention user by name specified in the braces.

Template & Macros Usecases

Insert Disclamer

disclamer.md

**NOTE**: this document is generated, do not edit manually.

article.md

<!-- Space: TEST -->
<!-- Title: My Article -->

<!-- Include: disclamer.md -->

This is my article.

Insert Status Badge

article.md

<!-- Space: TEST -->
<!-- Title: TODO List -->

<!-- Macro: :done:
     Template: ac:status
     Title: DONE
     Color: Green -->

<!-- Macro: :todo:
     Template: ac:status
     Title: TODO
     Color: Blue -->

* :done: Write Article
* :todo: Publish Article

Insert Jira Ticket

article.md

<!-- Space: TEST -->
<!-- Title: TODO List -->

<!-- Macro: MYJIRA-\d+
     Template: ac:jira:ticket
     Ticket: ${0} -->

See task MYJIRA-123.

Installation

Go Get

go get -v github.com/kovetskiy/mark

Releases

Download a release from the Releases page

Docker

$ docker run --rm -i kovetskiy/mark:latest <params>

Usage

mark [options] [-u <username>] [-p <password>] [-k] [-l <url>] -f <file>
mark [options] [-u <username>] [-p <password>] [-k] [-n] -c <file>
mark -v | --version
mark -h | --help
  • -u <username> — Use specified username for updating Confluence page.
  • -p <password> — Use specified password for updating Confluence page.
  • -l <url> — Edit specified Confluence page. If -l is not specified, file should contain metadata (see above).
  • -f <file> — Use specified markdown file for converting to html.
  • -c <file> — Specify configuration file which should be used for reading Confluence page URL and markdown file path.
  • -k — Lock page editing to current user only to prevent accidental manual edits over Confluence Web UI.
  • --dry-run — Show resulting HTML and don't update Confluence page content.
  • --trace — Enable trace logs.
  • -v | --version — Show version.
  • -h | --help — Show help screen and call 911.

You can store user credentials in the configuration file, which should be located in ~/.config/mark with the following format (TOML):

username = "smith"
password = "matrixishere"
# If you are using Confluence Cloud add the /wiki suffix to base_url
base_url = "http://confluence.local"

Tricks

Confluence & Gitlab integration

Mark was created with CI in mind so you can easily integrate mark into your pipeline, put the following code to your .gitlab-ci.yml in repository with your markdown docs:

stages:
  - apply

Apply:
  stage: apply
  script:
      - files=($(
            git diff
                $CI_COMMIT_BEFORE_SHA..$CI_COMMIT_SHA
                --name-only
                --diff-filter=ACMRT
            | grep '.md$'
        ));
        if [[ "${#files[@]}" == "0" ]]; then exit 0; fi;
        set -e;
        for file in ${files[@]}; do
          echo;
          echo "> Uploading ${file}";
          docker run --rm -i -v=$(pwd):/docs
              kovetskiy/mark:latest
                  -u $DOCS_WIKI_USERNAME
                  -p $DOCS_WIKI_PASSWORD
                  -b $DOCS_WIKI_BASE_URL
                  -f ${file};
        done

and declare the following environment variables (secrets)

  • DOCS_WIKI_USERNAME — Username for access to Confluence
  • DOCS_WIKI_PASSWORD — Password for access to Confluence
  • DOCS_WIKI_BASE_URL — Base URL of Confluence (cloud users should add /wiki at the end)
Description
Sync your markdown files with Confluence pages.
Readme Apache-2.0 12 MiB
11.3.0 Latest
2024-10-22 17:18:05 +08:00
Languages
Go 99%
Makefile 0.7%
Dockerfile 0.3%