Skip to content

Instantly share code, notes, and snippets.

@Hogeyama
Last active December 17, 2025 05:43
Show Gist options
  • Select an option

  • Save Hogeyama/a2e7a3f787deef119a7942b0b498638c to your computer and use it in GitHub Desktop.

Select an option

Save Hogeyama/a2e7a3f787deef119a7942b0b498638c to your computer and use it in GitHub Desktop.
md2textile by pandoc, textile2md by orchitech/redmine_reformat microservice
init:
#!/usr/bin/env -S bash -euo pipefail -o noclobber
echo "[Generating Dockerfile...]"
cat - > Dockerfile <<'EOF'
FROM redmine:6.0.3
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \
pkg-config \
libxml2-dev \
libxslt1-dev \
libffi-dev \
libssl-dev \
zlib1g-dev \
ruby-dev \
curl \
&& rm -rf /var/lib/apt/lists/*
COPY entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
CMD ["rails", "server", "-b", "0.0.0.0"]
EOF
echo "[Generating compose.yaml...]"
cat - > compose.yaml <<'EOF'
services:
redmine:
build: .
container_name: redmine
ports:
- "3030:3030"
environment:
BUNDLE_FORCE_RUBY_PLATFORM: true
REDMINE_DB_MYSQL: redmine-db
REDMINE_DB_PASSWORD: password
volumes:
- ./redmine_reformat:/usr/src/redmine/plugins/redmine_reformat
- ./pandoc:/usr/bin/pandoc
depends_on:
- redmine-db
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3030"]
interval: 10s
timeout: 10s
retries: 10
redmine-db:
image: mysql:5.7
container_name: redmine-db
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: redmine
command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
EOF
echo "[Generating entrypoint.sh...]"
cat - > entrypoint.sh <<'EOF'
#!/bin/bash
set -eu
/docker-entrypoint.sh "$@" &
# Redmine が完全に起動するまで待機
echo "[Waiting for Redmine to be ready...]"
until curl -s -o /dev/null -w "%{http_code}" http://localhost:3000 | grep -q "200"; do
sleep 5
done
echo "[Redmine is ready! Running rake task...]"
rake reformat:microservice
EOF
chmod +x entrypoint.sh
echo "[Clone redmine_reformat plugin...]"
git clone https://github.com/Hogeyama/redmine_reformat.git
echo "[Fetching pandoc...]"
wget -qO- https://github.com/jgm/pandoc/releases/download/3.6.3/pandoc-3.6.3-linux-amd64.tar.gz |
tar xz --strip-components=2 pandoc-3.6.3/bin/pandoc
echo "[Fetching pandoc-md2redmine...]"
wget -qO pandoc-md2redmine https://github.com/Hogeyama/pandoc-md2redmine/releases/download/v0.1.0.0/pandoc-md2redmine-linux-amd64
chmod +x pandoc-md2redmine
echo "[Building Docker image...]"
docker compose build
deinit:
#!/usr/bin/env -S bash -euo pipefail -o noclobber
docker compose down -v || true
rm -rf redmine_reformat pandoc Dockerfile compose.yaml entrypoint.sh
start-server:
#!/usr/bin/env -S bash -euo pipefail -o noclobber
echo "[Starting server. This may take about 1min...]"
docker compose up --build --wait
textile2md:
#!/usr/bin/env -S bash -euo pipefail -o noclobber
curl -fsS -X PUT -H 'Content-Type: text/plain' --data-binary @- \
'http://localhost:3030?to_formatting=common_mark&from_formatting=textile'
md2textile:
#!/usr/bin/env -S bash -euo pipefail -o noclobber
./pandoc-md2redmine
@Hogeyama

Hogeyama commented Feb 14, 2025

Copy link
Copy Markdown
Author

md2textile and textile2md

Requirements

  • Install just
  • Install docker with compose plugin (for textile2md)
  • amd64 Linux machine (for md2textile)

Setup

just init

Redmine Textile to Markdown

$ just start-server
$ just textile2md <<'EOF'           
h2. Redmine Textile の基本

Textile 記法を使うと、Redmine で簡単に書式を設定できます。

* *太字* や _斜体_ を使えます。
* リストも簡単に作成できます。
** 項目1
** 項目2
** 項目3

h3. コードブロックの例

以下は、Python の簡単なコード例です。

<pre><code class="python">
def greet(name):
    return f"Hello, {name}!"
print(greet("Redmine"))
</code></pre>

h3. リンクの例

* チケットへのリンク: #45
* プロジェクトのページ: [[ProjectX]]
* 外部サイト: "Redmine公式サイト":https://www.redmine.org/
EOF

Output:

## Redmine Textile の基本

Textile 記法を使うと、Redmine で簡単に書式を設定できます。

- **太字***斜体* を使えます。
- リストも簡単に作成できます。
  - 項目1
  - 項目2
  - 項目3

### コードブロックの例

以下は、Python の簡単なコード例です。

``` python
def greet(name):
    return f"Hello, {name}!"
print(greet("Redmine"))
```

### リンクの例

- チケットへのリンク: #45
- プロジェクトのページ: [[ProjectX]]
- 外部サイト: [Redmine公式サイト](https://www.redmine.org/)

Markdown to Redmine Textile

# no need to `start-server`
$ just md2textile <<'EOF'
## Redmine Textile の基本

Textile 記法を使うと、Redmine で簡単に書式を設定できます。

- **太字** や *斜体* を使えます。
- リストも簡単に作成できます。
  - 項目1
  - 項目2
  - 項目3

### コードブロックの例

以下は、Python の簡単なコード例です。

``` python
def greet(name):
    return f"Hello, {name}!"
print(greet("Redmine"))
```

### リンクの例

- チケットへのリンク: #45
- プロジェクトのページ: [[ProjectX]]
- 外部サイト: [Redmine公式サイト](https://www.redmine.org/)
EOF

Output:

h2. Redmine Textile の基本

Textile 記法を使うと、Redmine で簡単に書式を設定できます。

* *太字* や _斜体_ を使えます。
* リストも簡単に作成できます。
** 項目1
** 項目2
** 項目3

h3. コードブロックの例

以下は、Python の簡単なコード例です。

<pre><code class="python">
def greet(name):
    return f"Hello, {name}!"
print(greet("Redmine"))
</code></pre>

h3. リンクの例

* チケットへのリンク: #45
* プロジェクトのページ: [[ProjectX]]
* 外部サイト: "Redmine公式サイト":https://www.redmine.org/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment