Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions confluence-mdx/bin/converter/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -813,6 +813,10 @@ def convert_recursively(self, node):
]:
for child in node.children:
self.convert_recursively(child)
elif node.name in ['ac:parameter']:
# <ac:parameter>는 매크로 메타데이터(containerLevel, breakoutMode 등)이므로
# 본문으로 변환하지 않는다. 매크로별로 필요한 파라미터는 각 변환기가 직접 읽는다.
logging.debug(f"Skip <ac:parameter ac:name={node.get('ac:name', '')!r}> from {ancestors(node)} in {ctx.INPUT_FILE_PATH}")
elif node.name == 'table':
native_markdown = TableToNativeMarkdown(node, collector=self.collector)
if native_markdown.applicable:
Expand Down
5 changes: 4 additions & 1 deletion confluence-mdx/compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,10 @@ services:
# while allowing atomic replacement of manifest files.
- ./var/convert-manifests:/workdir/var/convert-manifests
# Persist temporary content route redirects and their expiration metadata.
- ../src/content-route-redirects.yaml:/workdir/target/content-route-redirects.yaml
# Mount the parent directory (not the file) so that convert_all.py can
# atomically replace content-route-redirects.yaml via os.replace().
# A single-file bind mount fails with EBUSY on rename.
- ../src:/workdir/target
# Mount output directories to host (matching symlink structure in target/)
# target/ko -> ../../src/content/ko
- ../src/content/ko:/workdir/target/ko
Expand Down
14 changes: 14 additions & 0 deletions confluence-mdx/tests/test_convert_all_folders.py
Original file line number Diff line number Diff line change
Expand Up @@ -718,6 +718,20 @@ def test_compose_persists_manifest_directory_for_atomic_replace():
assert manifest["sync_code"] == sync_code


def test_compose_mounts_redirects_parent_directory_for_atomic_replace():
project_dir = Path(__file__).resolve().parents[1]
compose = yaml.safe_load((project_dir / "compose.yml").read_text())
volumes = compose["services"]["confluence-mdx"]["volumes"]

# A single-file bind mount cannot be replaced with os.replace() (EBUSY),
# so the redirects registry must be reachable through a directory mount.
assert "../src:/workdir/target" in volumes
assert not any(
volume.endswith(":/workdir/target/content-route-redirects.yaml")
for volume in volumes
)


def test_conversion_failure_preserves_previous_output_and_manifest(tmp_path):
var_dir = tmp_path / "var"
output_dir = tmp_path / "output"
Expand Down
31 changes: 31 additions & 0 deletions confluence-mdx/tests/test_forward_converter_known_bugs.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,3 +35,34 @@ def test_cjk_column_separator_uses_display_width(self):
# '설명'(display=4) vs '조회만 가능'(display=11) → col_width=11 → 구분선 11자
col2_sep_len = len(sep_parts[1])
assert col2_sep_len == 11, f"expected 11 dashes, got {col2_sep_len}"


class TestCalloutMacroParameters:
"""Callout 매크로의 <ac:parameter>는 본문으로 변환되지 않아야 한다."""

def test_info_macro_parameters_are_not_emitted_as_body(self):
xhtml = (
'<ac:structured-macro ac:name="info" ac:schema-version="1">'
'<ac:parameter ac:name="containerLevel">panel_c1</ac:parameter>'
'<ac:rich-text-body><p>본문 내용입니다.</p></ac:rich-text-body>'
'</ac:structured-macro>'
)
result = _convert_xhtml(xhtml)
assert 'containerLevel' not in result
assert 'panel_c1' not in result
assert 'Unexpected NavigableString' not in result
assert '본문 내용입니다.' in result

def test_info_macro_breakout_parameters_are_not_emitted_as_body(self):
xhtml = (
'<ac:structured-macro ac:name="info" ac:schema-version="1">'
'<ac:parameter ac:name="breakoutMode">wide</ac:parameter>'
'<ac:parameter ac:name="breakoutWidth">760</ac:parameter>'
'<ac:rich-text-body><p>본문 내용입니다.</p></ac:rich-text-body>'
'</ac:structured-macro>'
)
result = _convert_xhtml(xhtml)
assert 'breakoutMode' not in result
assert 'breakoutWidth' not in result
assert 'Unexpected NavigableString' not in result
assert '본문 내용입니다.' in result
Original file line number Diff line number Diff line change
Expand Up @@ -1276,11 +1276,11 @@ outputs:
- page_id: '1751810049'
type: page
kind: mdx
path: release-notes/11.5.0-11.5.8.mdx
path: release-notes/11.5.0-11.5.12.mdx
- page_id: '1924891357'
type: page
kind: mdx
path: release-notes/11.6.0-11.6.6.mdx
path: release-notes/11.6.0-11.6.10.mdx
- page_id: '544375607'
type: page
kind: mdx
Expand Down
20 changes: 10 additions & 10 deletions confluence-mdx/var/pages.qm.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4719,30 +4719,30 @@
- "release-notes"
- "page_id": "1924891357"
"type": "page"
"title": "11.6.0 ~ 11.6.6"
"title_orig": "11.6.0 ~ 11.6.6"
"title": "11.6.0 ~ 11.6.10"
"title_orig": "11.6.0 ~ 11.6.10"
"breadcrumbs":
- "Release Notes"
- "11.6.0 ~ 11.6.6"
- "11.6.0 ~ 11.6.10"
"breadcrumbs_en":
- "Release Notes"
- "11.6.0 ~ 11.6.6"
- "11.6.0 ~ 11.6.10"
"path":
- "release-notes"
- "11.6.0-11.6.6"
- "11.6.0-11.6.10"
- "page_id": "1751810049"
"type": "page"
"title": "11.5.0 ~ 11.5.8"
"title_orig": "11.5.0 ~ 11.5.8"
"title": "11.5.0 ~ 11.5.12"
"title_orig": "11.5.0 ~ 11.5.12"
"breadcrumbs":
- "Release Notes"
- "11.5.0 ~ 11.5.8"
- "11.5.0 ~ 11.5.12"
"breadcrumbs_en":
- "Release Notes"
- "11.5.0 ~ 11.5.8"
- "11.5.0 ~ 11.5.12"
"path":
- "release-notes"
- "11.5.0-11.5.8"
- "11.5.0-11.5.12"
- "page_id": "1568735233"
"type": "page"
"title": "11.4.0"
Expand Down
32 changes: 12 additions & 20 deletions src/content-route-redirects.yaml
Original file line number Diff line number Diff line change
@@ -1,20 +1,12 @@
- source: /release-notes/11.5.0-11.5.7
destination: /release-notes/11.5.0-11.5.8
created_on: '2026-08-26'
expires_on: '2026-10-21'
- source: /release-notes/11.6.0-11.6.5
destination: /release-notes/11.6.0-11.6.6
created_on: '2026-08-26'
expires_on: '2026-10-21'
- source: /support/querypie-acp-operational-log-collection-guide
destination: /support/operational-log-collection-guide
created_on: '2026-07-28'
expires_on: '2026-09-22'
- source: /user-manual/database-access-control/connecting-with-web-sql-editor
destination: /user-manual/database-access-control/using-web-sql-editor
created_on: '2026-08-10'
expires_on: '2026-10-05'
- source: /user-manual/kubernetes-access-control/web-client
destination: /user-manual/kubernetes-access-control/connecting-to-kubernetes-clusters-with-web-client
created_on: '2026-07-28'
expires_on: '2026-09-22'
- source: /release-notes/11.5.0-11.5.8
destination: /release-notes/11.5.0-11.5.12
created_on: '2026-11-05'
expires_on: '2026-12-31'
- source: /release-notes/11.6.0-11.6.6
destination: /release-notes/11.6.0-11.6.10
created_on: '2026-11-05'
expires_on: '2026-12-31'
- source: /release-notes/11.6.0-11.6.9
destination: /release-notes/11.6.0-11.6.10
created_on: '2026-11-06'
expires_on: '2027-01-01'
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ You can use the query sharing feature on the SQL Editor screen.
* When saving, query files are stored in the linked Repository.
* You can load query files stored in the repository from Queries panel &gt; QueryPie Git Sharing folder.

For details, see [Using Web SQL Editor](../../user-manual/database-access-control/using-web-sql-editor).
For details, see [Connecting with Web SQL Editor](../../user-manual/database-access-control/using-web-sql-editor).


______
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,14 @@ Slack API &gt; Apps &gt; Create an App
3. Select the App Name and Slack Workspace to send notifications to in the above screen.
4. Click `Create App`.

<Callout type="info">
**Network (Firewall) Configuration Notes**
* Slack API method: QueryPie -&gt; slack.com, TCP 443, outbound
* Webhook method: QueryPie -&gt; hooks.slack.com, TCP 443, outbound
* Inbound: Not required
* Details: See the network requirements in the Slack DM integration document
</Callout>

#### 2-1. Integrating with Webhook Type

<figure data-layout="center" data-align="center">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,22 @@ This document applies to **version 10.2.6 or higher**.
For Slack integration methods for version 10.2.5 or lower, please refer to the [10.1.0 version manual documentation](https://docs.querypie.com/ko/querypie-manual/10.1.0/workflow-configurations).
</Callout>

#### Required Permissions for Configuration
#### Prerequisites for Slack DM Integration

##### Permissions and Accounts

* Slack Workspace administrator account (required to install App in Slack Workspace)
* QueryPie Owner and Approval Admin account

##### Network Requirements

You must configure the following firewall allowances from the QueryPie ACP server to Slack in advance.

* Protocol: TCP
* Port: 443
* Purpose: Slack API and Socket Mode WebSocket
* Direction: Outbound (no inbound port opening required)

### Creating DM App in Slack API (via Manifest Files)

Create a Slack App dedicated for QueryPie DM integration using App Manifest.
Expand Down
40 changes: 24 additions & 16 deletions src/content/en/installation/product-versions.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -11,22 +11,30 @@ This page provides information about official releases of QueryPie ACP.

These are the official QueryPie ACP releases currently available for installation and operation.

| **Version** | **Build Tag** | **Release Note** | **Release Date** | **Status** |
| ----------- | ---------------- | ------------------------------------------------- | ---------------- | -------------------------------------------------- |
| 11.6.6 | `11.6.6-820de91` | [11.6.0 ~ 11.6.6](../release-notes/11.6.0-11.6.6) | Aug 25, 2026 | Ready for Community Edition and Enterprise Edition |
| 11.6.5 | `11.6.5-ba8dd33` | [11.6.0 ~ 11.6.6](../release-notes/11.6.0-11.6.6) | Jul 2, 2026 | Outdated |
| 11.6.4 | `11.6.4-9be1f67` | [11.6.0 ~ 11.6.6](../release-notes/11.6.0-11.6.6) | Jun 23, 2026 | Outdated |
| 11.6.3 | `11.6.3-fc0a230` | [11.6.0 ~ 11.6.6](../release-notes/11.6.0-11.6.6) | May 28, 2026 | Deprecated |
| 11.6.2 | `11.6.2-151a452` | [11.6.0 ~ 11.6.6](../release-notes/11.6.0-11.6.6) | Apr 16, 2026 | Deprecated |
| 11.6.1 | `11.6.1-44ad3a9` | [11.6.0 ~ 11.6.6](../release-notes/11.6.0-11.6.6) | Mar 20, 2026 | Deprecated |
| 11.6.0 | `11.6.0-886d8e8` | [11.6.0 ~ 11.6.6](../release-notes/11.6.0-11.6.6) | Feb 13, 2026 | Deprecated |
| 11.5.8 | `11.5.8-a459cc6` | [11.5.0 ~ 11.5.8](../release-notes/11.5.0-11.5.8) | Aug 25, 2026 | Ready for Enterprise Edition |
| 11.5.7 | `11.5.7-2db5ae7` | [11.5.0 ~ 11.5.8](../release-notes/11.5.0-11.5.8) | Jul 2, 2026 | Outdated |
| 11.5.6 | `11.5.6-ec6acc4` | [11.5.0 ~ 11.5.8](../release-notes/11.5.0-11.5.8) | May 28, 2026 | Deprecated |
| 11.5.5 | `11.5.5-7c5b73d` | [11.5.0 ~ 11.5.8](../release-notes/11.5.0-11.5.8) | Apr 16, 2026 | Deprecated |
| 11.5.4 | `11.5.4-702dd33` | [11.5.0 ~ 11.5.8](../release-notes/11.5.0-11.5.8) | Mar 20, 2026 | Deprecated |
| 11.5.1 | `11.5.1-e0fc574` | [11.5.0 ~ 11.5.8](../release-notes/11.5.0-11.5.8) | Jan 23, 2026 | Deprecated |
| 11.5.0 | `11.5.0-dce9f84` | [11.5.0 ~ 11.5.8](../release-notes/11.5.0-11.5.8) | Dec 16, 2025 | Deprecated |
| **Version** | **Build Tag** | **Release Note** | **Release Date** | **Status** |
| ----------- | ----------------- | --------------------------------------------------- | ---------------- | -------------------------------------------------- |
| 11.6.10 | `11.6.10-a11735e` | [11.6.0 ~ 11.6.10](../release-notes/11.6.0-11.6.10) | Nov 3, 2026 | Ready for Community Edition and Enterprise Edition |
| 11.6.9 | `11.6.9-421dcda` | [11.6.0 ~ 11.6.10](../release-notes/11.6.0-11.6.10) | Oct 29, 2026 | Outdated |
| 11.6.8 | `11.6.8-033f542` | [11.6.0 ~ 11.6.10](../release-notes/11.6.0-11.6.10) | Oct 27, 2026 | Outdated |
| 11.6.7 | `11.6.7-bf4ede7` | [11.6.0 ~ 11.6.10](../release-notes/11.6.0-11.6.10) | Oct 21, 2026 | Outdated |
| 11.6.6 | `11.6.6-820de91` | [11.6.0 ~ 11.6.10](../release-notes/11.6.0-11.6.10) | Aug 25, 2026 | Outdated |
| 11.6.5 | `11.6.5-ba8dd33` | [11.6.0 ~ 11.6.10](../release-notes/11.6.0-11.6.10) | Jul 2, 2026 | Outdated |
| 11.6.4 | `11.6.4-9be1f67` | [11.6.0 ~ 11.6.10](../release-notes/11.6.0-11.6.10) | Jun 23, 2026 | Outdated |
| 11.6.3 | `11.6.3-fc0a230` | [11.6.0 ~ 11.6.10](../release-notes/11.6.0-11.6.10) | May 28, 2026 | Deprecated |
| 11.6.2 | `11.6.2-151a452` | [11.6.0 ~ 11.6.10](../release-notes/11.6.0-11.6.10) | Apr 16, 2026 | Deprecated |
| 11.6.1 | `11.6.1-44ad3a9` | [11.6.0 ~ 11.6.10](../release-notes/11.6.0-11.6.10) | Mar 20, 2026 | Deprecated |
| 11.6.0 | `11.6.0-886d8e8` | [11.6.0 ~ 11.6.10](../release-notes/11.6.0-11.6.10) | Feb 13, 2026 | Deprecated |
| 11.5.12 | `11.5.12-1bde831` | [11.5.0 ~ 11.5.12](../release-notes/11.5.0-11.5.12) | Nov 3, 2026 | Ready for Enterprise Edition |
| 11.5.11 | `11.5.11-cd8b55e` | [11.5.0 ~ 11.5.12](../release-notes/11.5.0-11.5.12) | Nov 3, 2026 | Outdated |
| 11.5.10 | `11.5.10-5f9cf84` | [11.5.0 ~ 11.5.12](../release-notes/11.5.0-11.5.12) | Nov 3, 2026 | Outdated |
| 11.5.9 | `11.5.9-4593cee` | [11.5.0 ~ 11.5.12](../release-notes/11.5.0-11.5.12) | Oct 21, 2026 | Outdated |
| 11.5.8 | `11.5.8-a459cc6` | [11.5.0 ~ 11.5.12](../release-notes/11.5.0-11.5.12) | Aug 25, 2026 | Outdated |
| 11.5.7 | `11.5.7-2db5ae7` | [11.5.0 ~ 11.5.12](../release-notes/11.5.0-11.5.12) | Jul 2, 2026 | Outdated |
| 11.5.6 | `11.5.6-ec6acc4` | [11.5.0 ~ 11.5.12](../release-notes/11.5.0-11.5.12) | May 28, 2026 | Deprecated |
| 11.5.5 | `11.5.5-7c5b73d` | [11.5.0 ~ 11.5.12](../release-notes/11.5.0-11.5.12) | Apr 16, 2026 | Deprecated |
| 11.5.4 | `11.5.4-702dd33` | [11.5.0 ~ 11.5.12](../release-notes/11.5.0-11.5.12) | Mar 20, 2026 | Deprecated |
| 11.5.1 | `11.5.1-e0fc574` | [11.5.0 ~ 11.5.12](../release-notes/11.5.0-11.5.12) | Jan 23, 2026 | Deprecated |
| 11.5.0 | `11.5.0-dce9f84` | [11.5.0 ~ 11.5.12](../release-notes/11.5.0-11.5.12) | Dec 16, 2025 | Deprecated |

#### Status

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ title: 'System Architecture and Network Access Control'
confluenceUrl: 'https://querypie.atlassian.net/wiki/spaces/QM/pages/862093313'
---

import { Callout } from 'nextra/components'

# System Architecture and Network Access Control


Expand All @@ -22,6 +24,7 @@ Overview of QueryPie System Architecture
</figcaption>
</figure>


Descriptions of each component are as follows.

#### Web Browser on User PC
Expand Down Expand Up @@ -78,6 +81,7 @@ QueryPie Server performs an intermediary role between users and Target Database.
This is a system such as Linux Server or Windows Server that users want to access.
QueryPie Server performs an intermediary role between users and Target Server System.


### Network Access Control Settings

#### Network Access Types
Expand All @@ -94,6 +98,15 @@ Centered on the Linux VM where QueryPie is installed, network connections are di
| Outbound | QueryPie Server | FQDN: `dl.querypie.com`<br/>IPv4 Address: <br/>`18.67.51.51`,<br/>`18.67.51.67`,<br/>`18.67.51.73`,<br/>`18.67.51.76` | TCP | 443 | This is a website for downloading configuration files for product installation. |
| Outbound | QueryPie Server | FQDN: `harbor.querypie.io`<br/>IPv4 Address:<br/>`15.164.47.8`, `52.79.197.102` | TCP | 443 | This is a website for downloading Docker Images for product installation. In Docker terms, this is a Docker Registry. |

<Callout type="info">
**Network Notes for Slack Integration**
* Slack API method: QueryPie -&gt; [slack.com](http://slack.com), TCP 443, outbound
* Webhook method: QueryPie -&gt; [hooks.slack.com](http://hooks.slack.com), TCP 443, outbound
* Inbound: Not required
* Details: See the network requirements in the Slack DM integration document
</Callout>


#### Network Access for Product Use

The items below explain network access for product use.
Expand Down
Loading
Loading