blob: ddee97575971b0cab263229684e01aa32bdf8b94 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
---
- 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: Check SSH config for line
blockinfile:
path: /home/{{ emacsconf_user }}/.ssh/config
mode: '0600'
owner: "{{ emacsconf_user }}"
group: "{{ emacsconf_group }}"
create: yes
block: |
Host anon-emacsconf
Hostname git.emacsconf.org
Port 22
User anon
IdentityFile ~/.ssh/id_rsa_anon_git_emacsconf
- 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: git@anon-emacsconf:/emacsconf-wiki
dest: "{{ emacsconf_edit_wiki_dir }}"
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
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"
|