summaryrefslogblamecommitdiffstats
path: root/roles/publish/tasks/main.yml
blob: 546a4f008efbce7331442cef06c5372624dd73a0 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
   


                   


                                                        
                                                                     

                                  
                













                                           
                    
             
                         






                                            


                                             

                                  
                    
                                                                 


                                                      

                                  
                                                        



                                          


                                                                      
               
                                     
                                     
               
        







                                                         

                                     
                                                 
                                             
                                                                                




                                                                         

                                                                                              

                                              
                                  
               

                                                    
                                                     

                                      



                                                                    
                         
                                                            
                          
                     
                                                                            

                                           



                                                                      



                                 
                                  
                 

                              


                                     
               
                             

                                

                                                                                                                                                           

                                             
                                                                                                                                                        
                           

                                                                                                 
                                       
                                                                                       
                                          
---
- 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
  import_tasks: 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 or update repositories
  become_user: "{{ emacsconf_user }}"
  tags: publish
  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: "{{ emacsconf_publishing_source }}"
        dest: "{{ emacsconf_edit_wiki_dir }}"
        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: 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
      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-{{ emacsconf_year }}-private
      ansible.builtin.git:
        version: main
        repo: "git@git.emacsconf.org:emacsconf-{{ emacsconf_year }}-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 }}"
    group: "{{ emacsconf_group }}"
    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: emacsclient -c -nw --exec '(emacsconf-publish-backstage-index)' -a emacs
      when: (publish|d("")) == "backstage"