First version

This commit is contained in:
andy committed 2026-10-15 20:44:05 -03:00
commit 243e92a9dd
84 files changed
+4012

No files matched your search

+97
View File
@@ -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