- block:
  - name: Clone mastodon
    git:
      repo: "https://github.com/mastodon/mastodon.git"
      dest: "{{ mastodon_home }}/{{mastodon_path}}"
      clone: true

  - name: Update to latest version
    shell: "git fetch; git checkout $(git tag -l | grep -v 'rc[1-9]*$' | sort -V | tail -n 1)"
    args:
      chdir: "{{ mastodon_home }}/{{ mastodon_path }}"

  - stat: path={{ mastodon_home }}/{{ mastodon_path }}/.env.production
    register: production_config

  - name: Bundle install
    shell: |
      {{ mastodon_home }}/.rbenv/shims/bundle config set --local deployment 'true' && \
      {{ mastodon_home }}/.rbenv/shims/bundle config set --local without 'test' && \
      {{ mastodon_home }}/.rbenv/shims/bundle config set --local with 'development' && \
      {{ mastodon_home }}/.rbenv/shims/bundle install -j$(getconf _NPROCESSORS_ONLN)
    args:
      chdir: "{{ mastodon_home }}/{{ mastodon_path }}"
    when: not production_config.stat.exists

  - name: Yarn install
    command: yarn install --pure-lockfile
    args:
      chdir: "{{ mastodon_home }}/{{ mastodon_path }}"
    when: not production_config.stat.exists

  - name: Media cleanup cronjob
    cron:
      name: "media cleanup"
      minute: "15"
      hour: "1"
      job: '/bin/bash -c ''export PATH="$HOME/.rbenv/bin:$PATH"; eval "$(rbenv init -)"; cd {{ mastodon_home }}/{{ mastodon_path }} && RAILS_ENV=production ./bin/tootctl media remove'''
    when: not production_config.stat.exists

  - name: Migrate database
    shell: "RAILS_ENV=production {{ mastodon_home }}/.rbenv/shims/bundle exec rails db:migrate"
    args:
      chdir: "{{ mastodon_home }}/{{ mastodon_path }}"
    when: production_config.stat.exists

  - name: Precompile assets
    shell: "RAILS_ENV=production {{ mastodon_home }}/.rbenv/shims/bundle exec rails assets:precompile"
    args:
      chdir: "{{ mastodon_home }}/{{ mastodon_path }}"
    when: production_config.stat.exists

  become: true
  become_user: "{{ mastodon_user }}"

- name: Install systemd sidekiq Service Files
  template:
    src: mastodon-sidekiq.service.j2
    dest: /etc/systemd/system/mastodon-sidekiq.service
  
- name: Install systemd web Service Files
  template:
    src: mastodon-web.service.j2
    dest: /etc/systemd/system/mastodon-web.service
  
- name: Install systemd streaming Service Files
  template:
    src: mastodon-streaming.service.j2
    dest: /etc/systemd/system/mastodon-streaming.service
  
- name: Enable mastodon-web
  command: systemctl enable mastodon-web.service

- name: Enable mastodon-streaming
  command: systemctl enable mastodon-streaming.service

- name: Enable mastodon-sidekiq
  command: systemctl enable mastodon-sidekiq.service

- name: Restart mastodon-web
  command: systemctl restart mastodon-web.service
  when: production_config.stat.exists

- name: Restart mastodon-streaming
  command: systemctl restart mastodon-streaming.service
  when: production_config.stat.exists
  
- name: Restart mastodon-sidekiq
  command: systemctl restart mastodon-sidekiq.service
  when: production_config.stat.exists