This template allows deploying a forgejo en either Scaleway or Hetzner (untested) without much knowledge about them. It DOES require knowledge about Terragrunt and ansible. A wizard of sorts is provided but it will not guarantee success without some knowledge about the underlying technology.
133 lines
4.2 KiB
YAML
133 lines
4.2 KiB
YAML
---
|
|
# Update Forgejo to latest version
|
|
# This playbook safely updates Forgejo with automatic backup
|
|
|
|
- name: Update Forgejo
|
|
hosts: forgejo
|
|
become: yes
|
|
gather_facts: yes
|
|
|
|
vars_files:
|
|
- vars/main.yml
|
|
- vars/secrets.yml
|
|
|
|
vars:
|
|
backup_before_update: true
|
|
skip_backup: false # Override with --extra-vars "skip_backup=true"
|
|
|
|
pre_tasks:
|
|
- name: Display update information
|
|
ansible.builtin.debug:
|
|
msg: |
|
|
Updating Forgejo from {{ forgejo_version }}
|
|
Backup will be created: {{ backup_before_update and not skip_backup }}
|
|
|
|
- name: Check current Forgejo version
|
|
ansible.builtin.command:
|
|
cmd: docker exec forgejo forgejo --version
|
|
register: current_version
|
|
changed_when: false
|
|
failed_when: false
|
|
|
|
- name: Display current version
|
|
ansible.builtin.debug:
|
|
msg: "Current version: {{ current_version.stdout if current_version.rc == 0 else 'Unable to determine' }}"
|
|
|
|
tasks:
|
|
- name: Create pre-update backup
|
|
when: backup_before_update and not skip_backup
|
|
block:
|
|
- name: Run backup script
|
|
ansible.builtin.command:
|
|
cmd: /usr/local/bin/forgejo_backup.sh
|
|
register: backup_result
|
|
|
|
- name: Display backup result
|
|
ansible.builtin.debug:
|
|
msg: "Backup completed: {{ backup_result.stdout_lines[-1] if backup_result.stdout_lines else 'No output' }}"
|
|
|
|
- name: Stop Forgejo service
|
|
community.docker.docker_compose_v2:
|
|
project_src: "{{ forgejo_base_path }}"
|
|
state: stopped
|
|
|
|
- name: Pull latest Forgejo image
|
|
community.docker.docker_image:
|
|
name: "{{ forgejo_docker_image }}:{{ forgejo_version }}"
|
|
source: pull
|
|
force_source: yes
|
|
|
|
- name: Update Docker Compose file if needed
|
|
ansible.builtin.template:
|
|
src: ../roles/forgejo/templates/docker-compose.yml.j2
|
|
dest: "{{ forgejo_base_path }}/docker-compose.yml"
|
|
owner: "{{ forgejo_user }}"
|
|
group: "{{ forgejo_group }}"
|
|
mode: '0640'
|
|
|
|
- name: Start Forgejo service
|
|
community.docker.docker_compose_v2:
|
|
project_src: "{{ forgejo_base_path }}"
|
|
state: present
|
|
pull: always
|
|
|
|
- name: Wait for Forgejo to be ready
|
|
ansible.builtin.uri:
|
|
url: "http://localhost:{{ forgejo_http_port }}"
|
|
status_code: 200
|
|
register: health_check
|
|
until: health_check.status == 200
|
|
retries: 30
|
|
delay: 2
|
|
|
|
- name: Check updated version
|
|
ansible.builtin.command:
|
|
cmd: docker exec forgejo forgejo --version
|
|
register: updated_version
|
|
changed_when: false
|
|
|
|
- name: Display updated version
|
|
ansible.builtin.debug:
|
|
msg: "Updated version: {{ updated_version.stdout }}"
|
|
|
|
- name: Run database migrations
|
|
ansible.builtin.command:
|
|
cmd: docker exec forgejo forgejo migrate
|
|
register: migrate_result
|
|
changed_when: "'No migration needed' not in migrate_result.stdout"
|
|
|
|
- name: Display migration result
|
|
ansible.builtin.debug:
|
|
msg: "{{ migrate_result.stdout_lines }}"
|
|
|
|
post_tasks:
|
|
- name: Verify Forgejo health
|
|
ansible.builtin.uri:
|
|
url: "http://localhost:{{ forgejo_http_port }}/api/healthz"
|
|
status_code: 200
|
|
return_content: yes
|
|
register: health
|
|
|
|
- name: Display health status
|
|
ansible.builtin.debug:
|
|
msg: "Forgejo health check: {{ health.content }}"
|
|
|
|
- name: Update deployment info
|
|
ansible.builtin.lineinfile:
|
|
path: "{{ forgejo_base_path }}/DEPLOYMENT_INFO.txt"
|
|
regexp: '^Last Update:'
|
|
line: "Last Update: {{ ansible_date_time.iso8601 }} - {{ forgejo_version }}"
|
|
insertafter: '^Deployment Date:'
|
|
|
|
- name: Display completion message
|
|
ansible.builtin.debug:
|
|
msg: |
|
|
========================================
|
|
Forgejo Update Complete!
|
|
========================================
|
|
|
|
Previous version: {{ current_version.stdout if current_version.rc == 0 else 'Unknown' }}
|
|
Current version: {{ updated_version.stdout }}
|
|
|
|
The service is running and healthy.
|
|
========================================
|