--- - name: Set up user include_role: name: user - name: Install SSH key for EmacsConf wiki ansible.builtin.get_url: url: https://emacsconf.org/id_rsa_anon_git_emacsconf dest: "/home/{{ emacsconf_user }}/.ssh/id_rsa_anon_git_emacsconf" owner: "{{ emacsconf_user }}" group: "{{ emacsconf_group }}" mode: '0600' - name: Install the SSH key for orga copy: src: "{{ item }}" dest: "/home/{{ emacsconf_user }}/.ssh" owner: "{{ emacsconf_user }}" group: "{{ emacsconf_group }}" mode: '0600' loop: - id_rsa - id_rsa.pub - name: Check if local Emacs already exists stat: path: "/usr/local/bin/emacs" register: emacs - name: Set up Emacs become: yes include: emacs.yml when: not emacs.stat.exists - name: Configure git template: src: git-config dest: "~{{ emacsconf_user }}/.gitconfig" owner: "{{ emacsconf_user }}" group: "{{ emacsconf_group }}" - name: Ensure configuration directory exists file: path: "{{ emacs_config_dir }}" owner: "{{ emacsconf_user }}" group: "{{ emacsconf_group }}" state: directory - name: Set up Emacs configuration for non-interactive publishing template: src: emacsconf-config.el dest: "{{ emacs_config_dir }}/emacsconf-config.el" owner: "{{ emacsconf_user }}" group: "{{ emacsconf_group }}" - name: Check if Emacs base configuration already exists lineinfile: dest: "{{ emacs_config_dir }}/init.el" state: present regexp: "emacsconf-config" line: "(load-file \"{{ emacs_config_dir }}/emacsconf-config.el\")" 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 block: - name: Check out wiki repository ansible.builtin.git: 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" 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" args: chdir: "{{ emacsconf_edit_wiki_dir }}" - name: Check out emacsconf-el tags: wip ansible.builtin.git: repo: git@git.emacsconf.org:pub/emacsconf-el key_file: "~{{ emacsconf_user }}/.ssh/id_rsa" dest: "{{ emacsconf_el_dir }}" register: elisp failed_when: - elisp.failed - not 'Local modifications exist in repository' in elisp.msg - not 'Failed to checkout branch' in elisp.msg debugger: on_failed - name: Check out emacsconf-2022-private ansible.builtin.git: repo: git@git.emacsconf.org:emacsconf-2022-private dest: "{{ emacsconf_private_dir }}" register: private failed_when: - private.failed - not 'Local modifications exist in repository' in private.msg - not 'Failed to checkout branch' in private.msg - name: Change ownership file: path: "{{ item }}" owner: "{{ emacsconf_user }}" recurse: true loop: - "{{ emacs_config_dir }}" - "{{ emacsconf_el_dir }}" - "{{ emacsconf_private_dir }}" - "{{ emacsconf_edit_wiki_dir }}" - name: Publish tags: publish, publish-only block: - name: Publish the schedule command: emacs -l "{{ emacs_config_dir }}/emacsconf-config.el" --batch --exec '(emacsconf-publish-schedule)' when: ((publish|d("")) == "schedule") or (((private is defined and private.changed) or (elisp is defined and elisp.changed)) and slug is not defined) - name: Update a specific talk's nav page 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: Publish the backstage index command: emacs -l "{{ emacs_config_dir }}/emacsconf-config.el" --batch --exec '(emacsconf-publish-backstage-index)' when: (publish|d("")) == "backstage"