Skip to content

Commit d5ccc03

Browse files
authored
UnixPB: Add Pandoc Installation Tasks (#4099)
1 parent d2af724 commit d5ccc03

File tree

3 files changed

+239
-0
lines changed

3 files changed

+239
-0
lines changed

ansible/playbooks/AdoptOpenJDK_Unix_Playbook/main.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,7 @@
174174
- role: housekeeping # override mode when needed
175175
vars:
176176
script_action: check # check/delete
177+
- pandoc # Build Of Man Pages JDK24+
177178
- role: logs
178179
position: "End"
179180
tags: always
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
---
2+
## Default Variables For Pandoc installation
3+
4+
pandoc_version: "3.8.2"
5+
pandoc_base_url: "https://github.com/jgm/pandoc/releases/download"
6+
pandoc_install_root: "/opt"
7+
pandoc_bin_dir: "/usr/local/bin"
8+
9+
pandoc_downloads:
10+
"Linux:amd64":
11+
filename: "pandoc-3.8.2-linux-amd64.tar.gz"
12+
sha256: "3252c5fd8234925f46973f4f17f852ccda64777a0c631d5735861c7eb4d69132"
13+
"Linux:arm64":
14+
filename: "pandoc-3.8.2-linux-arm64.tar.gz"
15+
sha256: "898b5c1f6bcab8a60253cca1027e43476efa22d1ce99232bb958cd11803bcb90"
16+
"Darwin:amd64":
17+
filename: "pandoc-3.8.2-x86_64-macOS.zip"
18+
sha256: "e82f241ecd555b798cceab27311833d9aa3a474583f67cc273392802e8b6e0e0"
19+
"Darwin:arm64":
20+
filename: "pandoc-3.8.2-arm64-macOS.zip"
21+
sha256: "02503ee9158fe65442722d8818c37833ed4766d970ce0290b69e08d051f6628d"
Lines changed: 217 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,217 @@
1+
---
2+
##################################################
3+
# Pandoc Install (Linux + macOS)
4+
# For generating man pages in JDK24+
5+
##################################################
6+
7+
- name: Install Pandoc
8+
block:
9+
# Work out the platform (OS + arch) and support status ( arm64e reported on gha runners )
10+
- name: Normalize architecture to Pandoc naming (amd64/arm64)
11+
set_fact:
12+
arch_normalized: >-
13+
{{ ({
14+
'x86_64': 'amd64',
15+
'amd64': 'amd64',
16+
'aarch64': 'arm64',
17+
'arm64': 'arm64',
18+
'arm64e': 'arm64'
19+
})[ansible_architecture] | default(ansible_architecture) }}
20+
changed_when: false
21+
tags: pandoc
22+
23+
- name: Build platform key from architecture and system
24+
set_fact:
25+
platform_key: "{{ ansible_system }}:{{ arch_normalized }}"
26+
changed_when: false
27+
tags: pandoc
28+
29+
- name: Determine if this platform is supported and select download
30+
set_fact:
31+
supported: "{{ platform_key in pandoc_downloads }}"
32+
download: "{{ pandoc_downloads[platform_key] if (platform_key in pandoc_downloads) else {} }}"
33+
changed_when: false
34+
tags: pandoc
35+
36+
- name: Skip on unsupported platforms
37+
when: not supported
38+
debug:
39+
msg: "Skipping Pandoc: unsupported {{ ansible_system }}/{{ ansible_architecture }} (key: {{ platform_key }})"
40+
changed_when: false
41+
tags: pandoc
42+
43+
# Build paths and URLs for downloads
44+
- name: Set Correct Pandoc Download Parameters (name, sha, URL)
45+
when: supported
46+
set_fact:
47+
archive_name: "{{ download.filename }}"
48+
archive_sha: "sha256:{{ download.sha256 }}"
49+
download_url: "{{ pandoc_base_url }}/{{ pandoc_version }}/{{ download.filename }}"
50+
changed_when: false
51+
tags: pandoc
52+
53+
- name: Set Pandoc Base Directory Paths
54+
when: supported
55+
set_fact:
56+
install_dir: "{{ pandoc_install_root }}/pandoc-{{ pandoc_version }}"
57+
download_dir: "/tmp/pandoc-{{ pandoc_version }}"
58+
changed_when: false
59+
tags: pandoc
60+
61+
- name: Derive local file paths (archive & unified bin path)
62+
when: supported
63+
set_fact:
64+
archive_path: "{{ download_dir }}/{{ archive_name }}"
65+
bin_path: "{{ install_dir }}/bin/pandoc"
66+
mac_inner: "{{ install_dir }}/pandoc-{{ pandoc_version }}-{{ arch_normalized }}"
67+
changed_when: false
68+
tags: pandoc
69+
70+
- name: Check existing Pandoc version in PATH
71+
when: supported
72+
become: true
73+
command: "{{ pandoc_bin_dir }}/pandoc --version"
74+
register: pandoc_check
75+
changed_when: false
76+
failed_when: false
77+
tags: pandoc
78+
79+
- name: Decide whether we need to install
80+
when: supported
81+
set_fact:
82+
need_install: "{{ (pandoc_check.rc != 0) or (pandoc_version not in (pandoc_check.stdout | default(''))) }}"
83+
changed_when: false
84+
tags: pandoc
85+
86+
# Download + unpack Pandoc (only when needed)
87+
- name: Ensure download directory exists
88+
when: [supported, need_install]
89+
become: true
90+
file:
91+
path: "{{ download_dir }}"
92+
state: directory
93+
mode: "0755"
94+
tags: pandoc
95+
96+
- name: Download Pandoc archive
97+
when: [supported, need_install]
98+
become: true
99+
get_url:
100+
url: "{{ download_url }}"
101+
dest: "{{ archive_path }}"
102+
mode: "0644"
103+
checksum: "{{ archive_sha }}"
104+
tags: pandoc
105+
106+
- name: Create install directory
107+
when: [supported, need_install]
108+
become: true
109+
file:
110+
path: "{{ install_dir }}"
111+
state: directory
112+
mode: "0755"
113+
tags: pandoc
114+
115+
# macOS uses .zip (extracts to {{ mac_inner }})
116+
- name: Unpack Pandoc on macOS
117+
when:
118+
- supported
119+
- need_install
120+
- ansible_system == "Darwin"
121+
become: true
122+
unarchive:
123+
src: "{{ archive_path }}"
124+
dest: "{{ install_dir }}"
125+
remote_src: true
126+
tags: pandoc
127+
128+
# Linux uses .tar.gz (strip the top-level folder so bin/ is directly under install_dir)
129+
- name: Unpack Pandoc on Linux
130+
when:
131+
- supported
132+
- need_install
133+
- ansible_system == "Linux"
134+
become: true
135+
unarchive:
136+
src: "{{ archive_path }}"
137+
dest: "{{ install_dir }}"
138+
remote_src: true
139+
extra_opts: ["--strip-components=1"]
140+
tags: pandoc
141+
142+
# Normalise macOS layout to match Linux
143+
144+
- name: Ensure macOS bin symlink exists (bin -> mac_inner/bin)
145+
when:
146+
- supported
147+
- need_install
148+
- ansible_system == "Darwin"
149+
become: true
150+
file:
151+
src: "{{ mac_inner }}/bin"
152+
dest: "{{ install_dir }}/bin"
153+
state: link
154+
force: true
155+
follow: false
156+
tags: pandoc
157+
158+
- name: Ensure macOS share symlink exists (share -> mac_inner/share)
159+
when:
160+
- supported
161+
- need_install
162+
- ansible_system == "Darwin"
163+
become: true
164+
file:
165+
src: "{{ mac_inner }}/share"
166+
dest: "{{ install_dir }}/share"
167+
state: link
168+
force: true
169+
follow: false
170+
tags: pandoc
171+
172+
# Configure & Verify Symlink To Pandoc
173+
# -------------------------------------------------------
174+
- name: Check that unified bin_path exists
175+
when: [supported, need_install]
176+
stat:
177+
path: "{{ bin_path }}"
178+
register: bin_stat
179+
changed_when: false
180+
tags: pandoc
181+
182+
- name: Fail early if unified bin_path missing
183+
when:
184+
- supported
185+
- need_install
186+
- not bin_stat.stat.exists
187+
fail:
188+
msg: "Expected pandoc at {{ bin_path }} but it was not found after extraction/normalisation."
189+
tags: pandoc
190+
191+
- name: Symlink pandoc into {{ pandoc_bin_dir }}
192+
when: [supported, need_install]
193+
become: true
194+
file:
195+
src: "{{ bin_path }}"
196+
dest: "{{ pandoc_bin_dir }}/pandoc"
197+
state: link
198+
force: true
199+
follow: false
200+
tags: pandoc
201+
202+
- name: Verify Pandoc installation
203+
when: supported
204+
become: true
205+
command: "{{ pandoc_bin_dir }}/pandoc --version"
206+
changed_when: false
207+
failed_when: false
208+
tags: pandoc
209+
210+
# Cleanup (remove archive)
211+
- name: Remove downloaded archive
212+
when: [supported, need_install]
213+
become: true
214+
file:
215+
path: "{{ archive_path }}"
216+
state: absent
217+
tags: pandoc

0 commit comments

Comments
 (0)