mirror of
https://github.com/kovetskiy/mark.git
synced 2025-04-24 05:42:40 +08:00

Removed attachment:// proto from docs, back compatibility is saved. Now using the implementatin of `Attachment:` provided by @csoutherland. Removed a bunch of swear stuff from docs, oh boy I was so frustrated at that time.
245 lines
6.5 KiB
Markdown
245 lines
6.5 KiB
Markdown
# 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:
|
|
```markdown
|
|
<!-- 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:
|
|
|
|
```markdown
|
|
<!-- 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.:
|
|
|
|
```markdown
|
|
<!-- Include: <path> -->
|
|
```
|
|
|
|
Templates can accept configuration data in YAML format which immediately
|
|
follows the `Include` tag:
|
|
|
|
```markdown
|
|
<!-- 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:
|
|
|
|
```markdown
|
|
<!-- 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:
|
|
|
|
```markdown
|
|
<!-- Macro: <regexp>
|
|
Template: <path>
|
|
<yaml-data> -->
|
|
```
|
|
|
|
Capture groups can be defined in the macro's <regexp> 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:
|
|
|
|
```markdown
|
|
<!-- 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**
|
|
|
|
```markdown
|
|
**NOTE**: this document is generated, do not edit manually.
|
|
```
|
|
|
|
**article.md**
|
|
```markdown
|
|
<!-- Space: TEST -->
|
|
<!-- Title: My Article -->
|
|
|
|
<!-- Include: disclamer.md -->
|
|
|
|
This is my article.
|
|
```
|
|
|
|
### Insert Status Badge
|
|
|
|
**article.md**
|
|
|
|
```markdown
|
|
<!-- 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**
|
|
|
|
```markdown
|
|
<!-- Space: TEST -->
|
|
<!-- Title: TODO List -->
|
|
|
|
<!-- Macro: MYJIRA-\d+
|
|
Template: ac:jira:ticket
|
|
Ticket: ${0} -->
|
|
|
|
See task MYJIRA-123.
|
|
```
|
|
|
|
## 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):
|
|
|
|
```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:
|
|
|
|
```yaml
|
|
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)
|