From c2d647a3cb3a6d456684bcdce327954214352959 Mon Sep 17 00:00:00 2001 From: Sacha Chua Date: Tue, 8 Nov 2022 12:00:47 -0500 Subject: Update edit and publish configs, tweak OBS, add Mumble client --- README.org | 2 + docker-playbook.yml | 2 +- group_vars/all.yml | 4 ++ roles/edit/defaults/main.yml | 1 + roles/edit/templates/emacsconf-edit.el | 21 +++++- roles/obs/defaults/main.yml | 2 + roles/obs/tasks/main.yml | 7 +- roles/obs/tasks/obs-setup.yml | 4 +- roles/obs/tasks/track.yml | 26 +++++++- roles/obs/tasks/user.yml | 1 + roles/obs/templates/Mumble.conf | 78 +++++++++++++++++++++++ roles/obs/templates/bashrc | 4 ++ roles/obs/templates/emacsconf-stream-config.el | 2 +- roles/obs/templates/mpv-track | 24 ++++++- roles/obs/templates/mpv.conf | 4 +- roles/obs/templates/pulse | 6 +- roles/obs/templates/scenes.json | 4 +- roles/obs/templates/xstartup-track | 1 + roles/prerec/tasks/main.yml | 1 + roles/prerec/templates/publish-backstage-index.sh | 3 + roles/prerec/templates/update-task-status.sh | 2 +- roles/prerec/templates/upload.sh | 2 +- roles/publish/tasks/emacs.yml | 7 +- roles/publish/tasks/main.yml | 31 +++++---- roles/publish/templates/emacsconf-config.el | 22 ++++--- roles/stream/templates/icecast.xml | 6 +- roles/stream/templates/lowres.sh | 2 +- 27 files changed, 217 insertions(+), 52 deletions(-) create mode 100644 roles/obs/templates/Mumble.conf create mode 100755 roles/prerec/templates/publish-backstage-index.sh diff --git a/README.org b/README.org index 2c53f3e..1479d39 100644 --- a/README.org +++ b/README.org @@ -40,6 +40,8 @@ ansible-playbook -i docker-inventory.yml docker-playbook.yml --tags wiki Reusing: ansible-playbook -i docker-inventory.yml docker-reuse-playbook.yml --tags wiki +ansible-playbook -i docker-inventory.yml docker-reuse-playbook.yml --tags wiki + Copying your SSH key: set the docker_ssh_key Ansible variable to the path of your public key or diff --git a/docker-playbook.yml b/docker-playbook.yml index 5fce9fb..c0524e9 100644 --- a/docker-playbook.yml +++ b/docker-playbook.yml @@ -13,7 +13,7 @@ docker_container: name: emacsconf-front image: python:3-buster - command: ["sleep", "1d"] + command: ["sleep", "infinity"] volumes: "{{ ikiwiki_git_source }}:{{ ikiwiki_git_source_mount }}" published_ports: - "28080:80" diff --git a/group_vars/all.yml b/group_vars/all.yml index d3c2e7b..d16dc44 100644 --- a/group_vars/all.yml +++ b/group_vars/all.yml @@ -9,18 +9,22 @@ emacsconf_group: orga emacsconf_tracks: - name: General id: gen + channel: emacsconf-gen watch: https://emacsconf.org/{{ emacsconf_year }}/watch/gen/ watch_lowres: https://live.emacsconf.org/{{ emacsconf_year }}/watch/gen-480p/ vnc_id: 5 vnc_port: 5905 obs_websocket_port: 6005 + mumble_channel: Org - name: Development + channel: emacsconf-dev id: dev watch: https://emacsconf.org/{{ emacsconf_year }}/watch/dev/ watch_lowres: https://live.emacsconf.org/{{ emacsconf_year }}/watch/dev-480p/ vnc_id: 6 vnc_port: 5906 obs_websocket_port: 6006 + mumble_channel: Lobby icecast_emacsconf_user: emacsconf emacsconf_home: /home/{{ emacsconf_user }} emacsconf_font: "Sans Serif" diff --git a/roles/edit/defaults/main.yml b/roles/edit/defaults/main.yml index d57c511..f4e36f0 100644 --- a/roles/edit/defaults/main.yml +++ b/roles/edit/defaults/main.yml @@ -8,3 +8,4 @@ emacsconf_edit_packages: - hydra - orderless - projectile + - erc diff --git a/roles/edit/templates/emacsconf-edit.el b/roles/edit/templates/emacsconf-edit.el index e187c69..b659121 100644 --- a/roles/edit/templates/emacsconf-edit.el +++ b/roles/edit/templates/emacsconf-edit.el @@ -64,8 +64,25 @@ ("u" emacsconf-upload-dired "upload")) (global-set-key (kbd "C-c e") #'hydra-emacsconf/body) +(setq erc-nick "{{ erc_user }}") +(setq erc-password "{{ erc_password }}") +(setq erc-server "{{ erc_server }}") +(setq erc-port "{{ erc_port }}") +(setq erc-autojoin-channels-alist '((".*" + {% for channel in erc_channels %} + "#{{ channel }}" + {% endfor %} + {% for track in emacsconf_tracks %} + "#{{ track.channel }}" + {% endfor %}))) + +(defun emacsconf-erc-connect () + (interactive) + (erc-tls :server "{{ erc_server }}" :nick erc-nick :password erc-password :port erc-port)) + (require 'ox-md) -(server-start) +(unless (and (boundp 'server-clients) server-clients) (server-start)) (find-file "{{ emacsconf_private_dir }}/conf.org") - +(emacsconf-add-org-after-todo-state-change-hook) +(emacsconf-erc-connect) diff --git a/roles/obs/defaults/main.yml b/roles/obs/defaults/main.yml index 4038fa9..6eb9451 100644 --- a/roles/obs/defaults/main.yml +++ b/roles/obs/defaults/main.yml @@ -3,3 +3,5 @@ ff_vcustom: rt cpu-used=5 threads=2 error-resilient=1 crf=30 g=120 minrate=1.5M ff_vbitrate: 1500 ff_vgopsize: 120 obs_profile_path: /home/{{ emacsconf_user }}/.config/obs-studio/basic/profiles +emacsconf_asset_dir: /data/{{ emacsconf_id }}/assets +mumble_server: mumble.emacsconf.org diff --git a/roles/obs/tasks/main.yml b/roles/obs/tasks/main.yml index 8c1e059..ab94878 100644 --- a/roles/obs/tasks/main.yml +++ b/roles/obs/tasks/main.yml @@ -19,6 +19,7 @@ - alsa-utils - dbus-x11 - obs-studio + - mumble - xserver-xorg-dev - xdotool update_cache: yes @@ -67,10 +68,6 @@ file: owner: "{{ emacsconf_user }}" group: "{{ emacsconf_group }}" - path: "{{ item }}" + path: "{{ emacsconf_asset_dir }}" state: directory mode: 0775 - loop: - - /data/{{ emacsconf_id }}/stream - - /data/{{ emacsconf_id }}/overlays - diff --git a/roles/obs/tasks/obs-setup.yml b/roles/obs/tasks/obs-setup.yml index 911f609..acd3c1c 100644 --- a/roles/obs/tasks/obs-setup.yml +++ b/roles/obs/tasks/obs-setup.yml @@ -49,15 +49,13 @@ mode: 0664 - name: Create text files for OBS sources copy: - content: "Initializing..." + content: "" owner: "{{ emacsconf_user }}" group: "{{ emacsconf_group }}" dest: "~{{ emacsconf_user }}/{{ filename }}.txt" mode: 0664 loop: - news - - url - - bottom loop_control: loop_var: filename - name: Create OBS scripts for tracks diff --git a/roles/obs/tasks/track.yml b/roles/obs/tasks/track.yml index 14533df..fe49116 100644 --- a/roles/obs/tasks/track.yml +++ b/roles/obs/tasks/track.yml @@ -1,5 +1,5 @@ - name: Set vars - tags: obs-scene, obs-profile, mpv, wip + tags: obs-scene, obs-profile, mpv, wip, mumble set_fact: old_emacsconf_user: "{{ emacsconf_user }}" old_emacsconf_home: "{{ emacsconf_home }}" @@ -79,11 +79,33 @@ dest: "~{{ emacsconf_user }}/.config/i3/config" owner: "{{ emacsconf_user }}" group: "{{ emacsconf_group }}" + - name: Set up Mumble configuration directory + tags: mumble + file: + path: "~{{ emacsconf_user }}/.config/Mumble" + state: directory + owner: "{{ emacsconf_user }}" + group: "{{ emacsconf_group }}" + - name: Debug mumble + debug: + var: mumble_certificates['dev'] + - name: Set up mumble + tags: mumble + template: + src: Mumble.conf + dest: "~{{ emacsconf_user }}/.config/Mumble/Mumble.conf" + owner: "{{ emacsconf_user }}" + group: "{{ emacsconf_group }}" - name: Set up Emacs configuration tags: wip include: emacs.yml + - name: Set up symbolic links + file: + src: "/data/{{ emacsconf_id }}/assets/stream" + dest: "~{{ emacsconf_user }}/stream" + state: link - name: Reset vars - tags: obs-scene, obs-profile, mpv, wip + tags: obs-scene, obs-profile, mpv, wip, mumble set_fact: old_emacsconf_user: "{{ emacsconf_user }}" old_emacsconf_home: "{{ emacsconf_home }}" diff --git a/roles/obs/tasks/user.yml b/roles/obs/tasks/user.yml index fae7d9f..00e68a8 100644 --- a/roles/obs/tasks/user.yml +++ b/roles/obs/tasks/user.yml @@ -11,6 +11,7 @@ file: path: "/home/{{ emacsconf_user }}/.ssh" owner: "{{ emacsconf_user }}" + group: "{{ emacsconf_group }}" state: directory mode: 700 - name: Set up SSH key access diff --git a/roles/obs/templates/Mumble.conf b/roles/obs/templates/Mumble.conf new file mode 100644 index 0000000..06449d4 --- /dev/null +++ b/roles/obs/templates/Mumble.conf @@ -0,0 +1,78 @@ +[General] +lastupdate=2 + +[audio] +echomulti=false +input=PulseAudio +output=PulseAudio +outputdelay=4 +positional=false +transmit=2 +vadmax=@Variant(\0\0\0\x87?z\xe1\xf6) +vadmin=@Variant(\0\0\0\x87?L\xcd\x9a) +whisperfriends=true + +[messages] +10\log=1 +12\log=1 +14\log=1 +15\log=1 +17\log=1 +18\log=1 +19\log=1 +2\log=1 +20\log=1 +21\log=1 +22\log=1 +23\log=1 +25\log=1 +26\log=1 +27\log=1 +28\log=1 +29\log=1 +5\log=1 +6\log=1 +9\log=1 +size=29 + +[messagesounds] +size=29 + +{% if mumble_certificates[item.id] is defined %} +[net] +certificate="{{ mumble_certificates[item.id] }}" +{% endif %} + +[overlay] +blacklist=@Invalid() +blacklistexclude=@Invalid() +launchers=@Invalid() +launchersexclude=@Invalid() +paths=@Invalid() +pathsexclude=@Invalid() +version=1.3.4 +whitelist=@Invalid() +whitelistexclude=@Invalid() + +[pulseaudio] +output={{ item.id }}-qa + +[shortcuts] +1\data=@Invalid() +1\index=1 +1\keys=@Variant(\0\0\0\t\0\0\0\x1\0\0\0\x2\0\0\0`) +1\suppress=false +size=1 + +[tts] +enable=false + +[ui] +ConfigGeometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0n\0\0\0\x31\0\0\x4\x86\0\0\x2\x61\0\0\0p\0\0\0\x31\0\0\x4\x84\0\0\x2_\0\0\0\0\0\0\0\0\x5\0\0\0\0p\0\0\0\x31\0\0\x4\x84\0\0\x2_) +connect\geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\x1W\0\0\0\x91\0\0\x3\x98\0\0\x2\0\0\0\x1Y\0\0\0\x91\0\0\x3\x96\0\0\x1\xfe\0\0\0\0\0\0\0\0\x5\0\0\0\x1Y\0\0\0\x91\0\0\x3\x96\0\0\x1\xfe) +connect\header=@ByteArray(\0\0\0\xff\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\x1\x1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x2&\0\0\0\x3\x1\x1\0\0\0\0\0\0\x1\0\0\0\x2\0\0\0\x64\xff\xff\xff\xff\0\0\0\x81\0\0\0\0\0\0\0\x3\0\0\x1m\0\0\0\x1\0\0\0\x1\0\0\0X\0\0\0\x1\0\0\0\x3\0\0\0\x61\0\0\0\x1\0\0\0\x3\0\0\x3\xe8\0\0\0\0\x64) +geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x12\0\0\x4\xff\0\0\x2\xcf\0\0\0\x2\0\0\0\x12\0\0\x4\xfd\0\0\x2\xcd\0\0\0\0\0\0\0\0\x5\0\0\0\0\x2\0\0\0\x12\0\0\x4\xfd\0\0\x2\xcd) +header=@ByteArray(\0\0\0\xff\0\0\0\0\0\0\0\x1\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x3\xf2\0\0\0\x1\x1\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\0\x64\xff\xff\xff\xff\0\0\0\x81\0\0\0\0\0\0\0\x1\0\0\x3\xf2\0\0\0\x1\0\0\0\0\0\0\x3\xe8\0\0\0\0\x64) +server={{ mumble_server }} +state=@ByteArray(\0\0\0\xff\0\0\0\0\xfd\0\0\0\x1\0\0\0\0\0\0\x1\0\0\0\x2~\xfc\x2\0\0\0\x2\xfb\0\0\0\f\0q\0\x64\0w\0L\0o\0g\x1\0\0\0>\0\0\x2\x61\0\0\0z\0\xff\xff\xff\xfb\0\0\0\xe\0q\0\x64\0w\0\x43\0h\0\x61\0t\x1\0\0\x2\xa3\0\0\0\x19\0\0\0\x19\0\0\0\x19\0\0\x3\xf8\0\0\x2~\0\0\0\x4\0\0\0\x4\0\0\0\b\0\0\0\b\xfc\0\0\0\x1\0\0\0\x2\0\0\0\x1\0\0\0\x1a\0q\0t\0I\0\x63\0o\0n\0T\0o\0o\0l\0\x62\0\x61\0r\x1\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0) +usage=false diff --git a/roles/obs/templates/bashrc b/roles/obs/templates/bashrc index 3677017..4d65cbd 100644 --- a/roles/obs/templates/bashrc +++ b/roles/obs/templates/bashrc @@ -112,5 +112,9 @@ if ! shopt -oq posix; then fi fi +alias play=track-mpv +alias qa-louder="pactl set-sink-volume {{ item.id }}-qa +5% " +alias qa-quieter="pactl set-sink-volume {{ item.id }}-qa -5% " +alias qa-vol="pactl set-sink-volume {{ item.id }}-qa " export PATH=$PATH:$HOME/bin export DISPLAY=${DISPLAY:-:{{ item.vnc_id }}} diff --git a/roles/obs/templates/emacsconf-stream-config.el b/roles/obs/templates/emacsconf-stream-config.el index 8770d60..a1a048b 100644 --- a/roles/obs/templates/emacsconf-stream-config.el +++ b/roles/obs/templates/emacsconf-stream-config.el @@ -3,7 +3,7 @@ ;; Configuration (vertico-mode) (fset 'yes-or-no-p 'y-or-n-p) -(modus-themes-load-vivendi) +(modus-themes-load-operandi) (org-babel-do-load-languages 'org-babel-load-languages '((emacs-lisp . t) (shell . t))) (setq backup-directory-alist '(("." . "~/.emacs.d/backups"))) (setq completion-styles '(orderless)) diff --git a/roles/obs/templates/mpv-track b/roles/obs/templates/mpv-track index ee359f1..b6d6d67 100755 --- a/roles/obs/templates/mpv-track +++ b/roles/obs/templates/mpv-track @@ -2,4 +2,26 @@ # Run MPV with the output set to the right sink and with an IPC socket # {{ ansible_managed }} -DISPLAY="${DISPLAY:-:{{ item.vnc_id }}}" mpv --input-ipc-server={{ emacsconf_home }}/mpv-socket-{{ emacsconf_id }}-{{ item.id }} --audio-device=pulse/{{ item.id }}-vid --profile={{ emacsconf_id }}-talks $* & +# Update the overlay +FILE=$1 +if [[ ! -f $FILE ]]; then + FILE="/data/emacsconf/assets/stream/emacsconf-2022-$FILE*.webm" +fi +shift +SLUG=$(echo "$FILE" | perl -ne 'if (/^emacsconf-[0-9]*-(.*?)--/) { print $1; } else { print; }') +if [[ -f /data/emacsconf/assets/overlays/$SLUG-other.png ]]; then + echo "Found other overlay for $SLUG, copying" + cp /data/emacsconf/assets/overlays/$SLUG-other.png ~/other.png +else + echo "Could not find /data/emacsconf/assets/overlays/$SLUG-other.png, please override ~/other.png manually" + cp /data/emacsconf/assets/overlays/blank-other.png ~/other.png +fi +if [[ -f /data/emacsconf/assets/overlays/$SLUG-video.png ]]; then + echo "Found video overlay for $SLUG, copying" + cp /data/emacsconf/assets/overlays/$SLUG-video.png ~/video.png +else + echo "Could not find /data/emacsconf/assets/overlays/$SLUG-video.png, override ~/video.png manually" + cp /data/emacsconf/assets/overlays/blank-video.png ~/video.png +fi +# Play the video +DISPLAY="${DISPLAY:-:{{ item.vnc_id }}}" mpv --input-ipc-server={{ emacsconf_home }}/mpv-socket-{{ emacsconf_id }}-{{ item.id }} --audio-device=pulse/{{ item.id }}-vid --profile={{ emacsconf_id }}-talks $FILE $* & diff --git a/roles/obs/templates/mpv.conf b/roles/obs/templates/mpv.conf index dce6481..6c90a6b 100644 --- a/roles/obs/templates/mpv.conf +++ b/roles/obs/templates/mpv.conf @@ -1,6 +1,8 @@ # {{ ansible_managed }} # Requires mpv >= 0.34.0 +input-ipc-server={{ emacsconf_home }}/mpv-socket-{{ emacsconf_id }}-{{ item.id }} +audio-device=pulse/{{ item.id }}-vid # Comment out the next line if you don't want this profile loaded by default. profile={{ emacsconf_id }}-talks # Then you can load it with `--profile={{ emacsconf_id }}-talks` @@ -14,7 +16,7 @@ video-align-y=-1 sub-use-margins=yes sub-scale-by-window=yes sub-pos=103 -sub-margin-x=105 +sub-margin-x=110 sub-margin-y=60 sub-align-x=left # Style diff --git a/roles/obs/templates/pulse b/roles/obs/templates/pulse index cba7fc0..7035cfe 100755 --- a/roles/obs/templates/pulse +++ b/roles/obs/templates/pulse @@ -135,8 +135,6 @@ load-module module-filter-apply #set-default-sink output #set-default-source input -{% for track in emacsconf_tracks %} -load-module module-null-sink sink_name={{ track.id }}-vid sink_properties=device.description={{ track.id }}-vid -load-module module-null-sink sink_name={{ track.id }}-qa sink_properties=device.description={{ track.id }}-qa -{% endfor %} +load-module module-null-sink sink_name={{ item.id }}-vid sink_properties=device.description={{ item.id }}-vid +load-module module-null-sink sink_name={{ item.id }}-qa sink_properties=device.description={{ item.id }}-qa load-module module-stream-restore restore_device=false diff --git a/roles/obs/templates/scenes.json b/roles/obs/templates/scenes.json index 6d8e7ad..5790efd 100644 --- a/roles/obs/templates/scenes.json +++ b/roles/obs/templates/scenes.json @@ -120,7 +120,7 @@ "push-to-talk": false, "push-to-talk-delay": 0, "settings": { - "file": "/home/{{ emacsconf_id }}-{{ item.id }}/other.svg" + "file": "/home/{{ emacsconf_id }}-{{ item.id }}/other.png" }, "sync": 0, "versioned_id": "image_source", @@ -145,7 +145,7 @@ "push-to-talk": false, "push-to-talk-delay": 0, "settings": { - "file": "/home/{{ emacsconf_id }}-{{ item.id }}/video.svg" + "file": "/home/{{ emacsconf_id }}-{{ item.id }}/video.png" }, "sync": 0, "versioned_id": "image_source", diff --git a/roles/obs/templates/xstartup-track b/roles/obs/templates/xstartup-track index b80caac..b8d90cd 100755 --- a/roles/obs/templates/xstartup-track +++ b/roles/obs/templates/xstartup-track @@ -7,6 +7,7 @@ pulseaudio --start pacmd set-default-sink {{ item.id }}-qa firefox file:///data/emacsconf/{{ emacsconf_year }}/index-{{ item.id }}.html & $HOME/bin/track-obs & +mumble mumble://{{ emacsconf_id }}-{{ item.id }}@{{ mumble_server }}/{{ item.mumble_channel }} & termit & # $HOME/{{ item.id }}-obs & # $HOME/{{ item.id }}-mpv $HOME/logo.png & diff --git a/roles/prerec/tasks/main.yml b/roles/prerec/tasks/main.yml index 5241531..c635693 100644 --- a/roles/prerec/tasks/main.yml +++ b/roles/prerec/tasks/main.yml @@ -26,3 +26,4 @@ - process-prerec.sh - update-task-status.sh - upload.sh + - publish-backstage-index.sh diff --git a/roles/prerec/templates/publish-backstage-index.sh b/roles/prerec/templates/publish-backstage-index.sh new file mode 100755 index 0000000..96b27e7 --- /dev/null +++ b/roles/prerec/templates/publish-backstage-index.sh @@ -0,0 +1,3 @@ +#!/bin/bash +# {{ ansible_managed }} +emacsclient -a emacs --eval "(emacsconf-publish-backstage-index)" diff --git a/roles/prerec/templates/update-task-status.sh b/roles/prerec/templates/update-task-status.sh index 18b7c1b..c9ac142 100755 --- a/roles/prerec/templates/update-task-status.sh +++ b/roles/prerec/templates/update-task-status.sh @@ -5,6 +5,6 @@ FROM_STATUS="$2" TO_STATUS="$3" cd ~/emacsconf-2022-private git pull -emacsclient --eval "(progn (emacsconf-update-talk-status \"$SLUG\" \"$FROM_STATUS\" \"$TO_STATUS\") (emacsconf-with-talk-heading \"$SLUG\" (emacsconf-cache-video-data (emacsconf-get-talk-info-for-subtree)) (save-buffer)))" +emacsclient -a emacs --eval "(progn (emacsconf-update-talk-status \"$SLUG\" \"$FROM_STATUS\" \"$TO_STATUS\") (emacsconf-with-talk-heading \"$SLUG\" (emacsconf-cache-video-data (emacsconf-get-talk-info-for-subtree)) (save-buffer)))" git commit -m "Update task status for $SLUG" conf.org git push diff --git a/roles/prerec/templates/upload.sh b/roles/prerec/templates/upload.sh index f723d29..f3dc9c5 100755 --- a/roles/prerec/templates/upload.sh +++ b/roles/prerec/templates/upload.sh @@ -2,5 +2,5 @@ # {{ ansible_managed }} scp $* orga@media.emacsconf.org:~/backstage -emacsclient --eval "(emacsconf-publish-backstage-index)" +/data/emacsconf/{{ emacsconf_year }}/scripts/publish-backstage-index.sh rsync -avze ssh orga@media.emacsconf.org:~/backstage/ /data/emacsconf/cache/ diff --git a/roles/publish/tasks/emacs.yml b/roles/publish/tasks/emacs.yml index 8d75979..3944876 100644 --- a/roles/publish/tasks/emacs.yml +++ b/roles/publish/tasks/emacs.yml @@ -11,6 +11,11 @@ - automake - texinfo state: present +- name: Install building dependencies + apt: + name: + - emacs + state: build-dep - name: Create directory file: path: "{{ emacs_build_parent }}" @@ -22,7 +27,7 @@ dest: "{{ emacs_build_parent }}" creates: "{{ emacs_build_dir }}" - name: Configure - command: ./configure --with-x-toolkit=no + command: ./configure args: chdir: "{{ emacs_build_dir }}" creates: '{{ emacs_build_dir }}/Makefile' diff --git a/roles/publish/tasks/main.yml b/roles/publish/tasks/main.yml index 128b0fa..c09cae2 100644 --- a/roles/publish/tasks/main.yml +++ b/roles/publish/tasks/main.yml @@ -54,28 +54,30 @@ owner: "{{ emacsconf_user }}" group: "{{ emacsconf_group }}" create: yes -- name: Set up compile-media - become_user: "{{ emacsconf_user }}" - git: - repo: https://github.com/sachac/compile-media.git - dest: "~{{ emacsconf_user }}/compile-media" - name: Set up or update repositories become_user: "{{ emacsconf_user }}" - tags: publish + tags: publish, wip block: + - name: Set up compile-media + git: + repo: https://github.com/sachac/compile-media.git + dest: "~{{ emacsconf_user }}/compile-media" + - name: Set up subed + git: + repo: https://github.com/sachac/subed.git + dest: "~{{ emacsconf_user }}/subed" - name: Check out wiki repository ansible.builtin.git: - repo: anon@git.emacsconf.org:/emacsconf-wiki + repo: anon@git.emacsconf.org:emacsconf-wiki dest: "{{ emacsconf_edit_wiki_dir }}" - ssh_opts: "-i ~/.ssh/id_rsa_anon_git_emacsconf -u anon" - key_file: "~{{ emacsconf_user }}/.ssh/id_rsa_anon_git_emacsconf" + ssh_opts: "-i /home/{{ emacsconf_user }}/.ssh/id_rsa_anon_git_emacsconf" register: wiki_clone failed_when: - wiki_clone.failed - not 'Local modifications exist in repository' in wiki_clone.msg - not 'Failed to checkout branch' in wiki_clone.msg - - name: Configure git to use - shell: git config core.sshCommand "ssh -i ~{{ emacsconf_user }}/.ssh/id_rsa_anon_git_emacsconf -F /dev/null" + - name: Set up key + shell: git config core.sshCommand "ssh -i ~/.ssh/id_rsa_anon_git_emacsconf -F /dev/null" args: chdir: "{{ emacsconf_edit_wiki_dir }}" - name: Check out emacsconf-el @@ -103,6 +105,7 @@ file: path: "{{ item }}" owner: "{{ emacsconf_user }}" + group: "{{ emacsconf_group }}" recurse: true loop: - "{{ emacs_config_dir }}" @@ -119,8 +122,8 @@ tags: publish-talk command: emacs -l "{{ emacs_config_dir }}/emacsconf-config.el" --batch --exec '(emacsconf-with-talk-heading "{{ slug }}" (emacsconf-update-talk))' when: slug is defined - - name: Commit the wiki and push - shell: cd {{ emacsconf_edit_wiki_dir }}; git commit -m 'Update from ansible' -a; git push + # - name: Commit the wiki and push + # shell: cd {{ emacsconf_edit_wiki_dir }}; git commit -m 'Update from ansible' -a; git push - name: Publish the backstage index - command: emacs -l "{{ emacs_config_dir }}/emacsconf-config.el" --batch --exec '(emacsconf-publish-backstage-index)' + command: emacsclient -c -nw --exec '(emacsconf-publish-backstage-index)' -a emacs when: (publish|d("")) == "backstage" diff --git a/roles/publish/templates/emacsconf-config.el b/roles/publish/templates/emacsconf-config.el index 36ca8a2..fbd9ae7 100644 --- a/roles/publish/templates/emacsconf-config.el +++ b/roles/publish/templates/emacsconf-config.el @@ -20,27 +20,31 @@ (setq emacsconf-backstage-dir "/ssh:orga@media.emacsconf.org:/var/www/media.emacsconf.org/2022/backstage") (setq emacsconf-upload-dir "/ssh:orga@media.emacsconf.org:/srv/upload") + {% if ansible_host == "res.emacsconf.org" %} -(setq emacsconf-res-dir (format "/ssh:orga@res.emacsconf.org:/data/emacsconf/%s" emacsconf-year)) +(setq emacsconf-res-dir "/data/{{ emacsconf_id }}/{{ emacsconf_year}}") (setq emacsconf-cache-dir "/data/{{ emacsconf_id }}/cache") (setq emacsconf-stream-host "localhost") +(setq emacsconf-stream-overlay-dir "/data/emacsconf/overlays") +(setq emacsconf-stream-asset-dir "/data/emacsconf/assets") {% else %} -(setq emacsconf-res-dir "/data/{{ emacsconf_id }}/{{ emacsconf_year}}") +(setq emacsconf-res-dir (format "/ssh:orga@res.emacsconf.org:/data/emacsconf/%s" emacsconf-year)) {% endif %} + (add-to-list 'load-path "~/compile-media") +(add-to-list 'load-path "~/subed/subed") (require 'compile-media) (require 'emacsconf) (require 'emacsconf-publish) (require 'emacsconf-schedule) (require 'emacsconf-erc) (require 'emacsconf-stream) - +(require 'subed) +(require 'subed-vtt) +(require 'subed-common) (setq emacsconf-tracks '((:name "General" :color "peachpuff" :id "gen" :channel "emacsconf-gen" - :tramp "/ssh:gen:") + :tramp "/ssh:emacsconf-gen@res.emacsconf.org#46668:") (:name "Development" :color "skyblue" :id "dev" :channel "emacsconf-dev" - :tramp "/ssh:dev:"))) -(setq emacsconf-stream-overlay-dir - (expand-file-name "overlays" (file-name-directory emacsconf-org-file))) -(setq emacsconf-stream-asset-dir - (expand-file-name "assets" (file-name-directory emacsconf-org-file))) + :tramp "/ssh:emacsconf-dev@res.emacsconf.org#46668:"))) + diff --git a/roles/stream/templates/icecast.xml b/roles/stream/templates/icecast.xml index f9c3916..cf6ec41 100644 --- a/roles/stream/templates/icecast.xml +++ b/roles/stream/templates/icecast.xml @@ -189,7 +189,7 @@ --> {% for track in emacsconf_tracks %} - /emacsconf/{{ track.id }}.webm + /{{ track.id }}.webm {{ icecast_emacsconf_user }} {{ icecast_emacsconf_password }} {% if icecast_save_dump %}/data/{{ emacsconf_id }}-{{ emacsconf_year }}-{{ track.id }}_%Y-%m-%d_%H-%M-%S.webm{% endif %} @@ -202,7 +202,7 @@ /usr/local/bin/{{ emacsconf_id }}-lowres-{{ track.id }}-on-disconnect - /{{ emacsconf_id }}/{{ track.id }}-host.webm + /{{ track.id }}-host.webm {{ icecast_emacsconf_user }} {{ icecast_emacsconf_password }} EmacsConf {{ emacsconf_year }} - {{ track.name }} track @@ -213,7 +213,7 @@ 1 - /{{ emacsconf_id }}/{{ track.id }}-480p.webm + /{{ track.id }}-480p.webm {{ icecast_emacsconf_user }} {{ icecast_emacsconf_password }} {{ emacsconf_name }} {{ emacsconf_year }} - {{ track.name }} track (480p) diff --git a/roles/stream/templates/lowres.sh b/roles/stream/templates/lowres.sh index 1f74215..502fcb3 100755 --- a/roles/stream/templates/lowres.sh +++ b/roles/stream/templates/lowres.sh @@ -2,5 +2,5 @@ # {{ ansible_managed }} sleep 10 for i in 1 2 3 4 5; do - ffmpeg -loglevel 24 -f webm -reconnect_at_eof 1 -reconnect_streamed 1 -re -i "http://localhost:{{ icecast_port }}/{{ emacsconf_id }}/{{ item.id }}.webm" -vf scale="{{ icecast_lowres_scale }}" -f webm -c:a copy -b:v 500k -maxrate 1M -bufsize 1M -content_type video/webm -c:v libvpx "icecast://{{ icecast_emacsconf_user }}:{{ icecast_emacsconf_password }}@localhost:{{ icecast_port }}/{{ emacsconf_id }}/{{ item.id }}-480p.webm" >> {{ icecast_restream_dir }}/{{ emacsconf_id }}-lowres-{{ item.id }}.log || sleep 5 + ffmpeg -loglevel 24 -f webm -reconnect_at_eof 1 -reconnect_streamed 1 -re -i "http://localhost:{{ icecast_port }}/{{ item.id }}.webm" -vf scale="{{ icecast_lowres_scale }}" -f webm -c:a copy -b:v 500k -maxrate 1M -bufsize 1M -content_type video/webm -c:v libvpx "icecast://{{ icecast_emacsconf_user }}:{{ icecast_emacsconf_password }}@localhost:{{ icecast_port }}/{{ item.id }}-480p.webm" >> {{ icecast_restream_dir }}/{{ emacsconf_id }}-lowres-{{ item.id }}.log || sleep 5 done -- cgit v1.2.3