First version
This commit is contained in:
commit
243e92a9dd
84 files changed
+4012
No files matched your search
@@ -0,0 +1,97 @@
|
||||
- name: Local documentation (DevDocs) limited to the languages of the contest
|
||||
hosts: all
|
||||
become: yes
|
||||
vars:
|
||||
# Documentation sets of the ICPC image: c, cpp, openjdk~25, python~3.11
|
||||
# and kotlin~2.4. Kotlin is not a language of this contest.
|
||||
contest_docs: [c, cpp, openjdk~25, python~3.11]
|
||||
remove_docs: [kotlin~2.4]
|
||||
image: localhost/devdocs:latest
|
||||
|
||||
tasks:
|
||||
- name: Create the directory for offline contest help
|
||||
file:
|
||||
path: /usr/share/doc/acpc/help
|
||||
state: directory
|
||||
owner: root
|
||||
group: root
|
||||
mode: '0755'
|
||||
|
||||
- name: Install the approved offline help summaries
|
||||
copy:
|
||||
src: files/help/index.html
|
||||
dest: /usr/share/doc/acpc/help/index.html
|
||||
owner: root
|
||||
group: root
|
||||
mode: '0644'
|
||||
|
||||
- name: List the documentation sets of the DevDocs image
|
||||
command: podman run --rm --entrypoint ls {{ image }} public/docs
|
||||
register: docsets
|
||||
changed_when: false
|
||||
|
||||
- name: Check that the contest languages are all there
|
||||
assert:
|
||||
that: item in docsets.stdout_lines
|
||||
fail_msg: "DevDocs has no documentation for {{ item }}"
|
||||
loop: "{{ contest_docs }}"
|
||||
|
||||
# DevDocs runs in a container created from the image at every boot, so
|
||||
# the change is saved into the image (podman commit)
|
||||
- name: Remove the other languages from the DevDocs image
|
||||
when: remove_docs | intersect(docsets.stdout_lines) | length > 0
|
||||
block:
|
||||
- name: Stop the DevDocs service
|
||||
systemd:
|
||||
name: container-devdocs.service
|
||||
state: stopped
|
||||
|
||||
- name: Start a container to change the image
|
||||
shell: |
|
||||
podman rm -f devdocs-build 2>/dev/null || true
|
||||
podman run -d --name devdocs-build {{ image }}
|
||||
|
||||
- name: Remove the documentation sets and set the default list
|
||||
shell: |
|
||||
podman exec devdocs-build sh -c '
|
||||
for slug in {{ remove_docs | join(" ") }}; do rm -rf "public/docs/$slug"; done
|
||||
ruby -rjson -e "
|
||||
f = %q{public/docs/docs.json}
|
||||
data = JSON.parse(File.read(f))
|
||||
data.reject! { |d| %w({{ remove_docs | join(" ") }}).include?(d[%q{slug}]) }
|
||||
File.write(f, JSON.generate(data))"
|
||||
sed -i "s|set :default_docs, %w(.*)|set :default_docs, %w({{ contest_docs | join(" ") }})|" lib/app.rb
|
||||
grep -n "set :default_docs" lib/app.rb
|
||||
# The compiled assets also hold the list of documentation sets
|
||||
cd public/assets
|
||||
ruby -rjson -e "
|
||||
f = Dir[%q{docs-*.json}].first
|
||||
data = JSON.parse(File.read(f))
|
||||
data.reject! { |d| %w({{ remove_docs | join(" ") }}).include?(d[%q{slug}]) }
|
||||
File.write(f, JSON.pretty_generate(data))
|
||||
File.write(Dir[%q{docs-*.js}].reject { |x| x.end_with?(%q{.gz}) }.first, %q{app.DOCS=} + JSON.generate(data) + %q{;})"
|
||||
# DevDocs warns when it is not served from devdocs.io (here https://devdocs/)
|
||||
sed -i "s|production_host:\"devdocs.io\"|production_host:\"devdocs\"|" application-*.js
|
||||
for f in docs-*.json docs-*.js application-*.js; do
|
||||
case "$f" in *.gz) ;; *) gzip -kf "$f" ;; esac
|
||||
done
|
||||
grep -c kotlin docs-*.js docs-*.json | grep -v ".gz"'
|
||||
|
||||
|
||||
- name: Save the change into the image
|
||||
shell: |
|
||||
podman stop devdocs-build
|
||||
podman commit devdocs-build {{ image }}
|
||||
podman rm -f devdocs-build
|
||||
podman image prune -f
|
||||
|
||||
- name: Start the DevDocs service again
|
||||
systemd:
|
||||
name: container-devdocs.service
|
||||
state: started
|
||||
|
||||
- name: Check the documentation sets of the image
|
||||
command: podman run --rm --entrypoint ls {{ image }} public/docs
|
||||
register: docsets_after
|
||||
changed_when: false
|
||||
failed_when: docsets_after.stdout_lines | difference(contest_docs + ['docs.json']) | length > 0
|
||||
Reference in new issue
Block a user