--- # Forgejo deployment tasks - name: Ensure Forgejo data directories have correct ownership ansible.builtin.file: path: "{{ item }}" state: directory owner: "{{ forgejo_uid }}" group: "{{ forgejo_gid }}" mode: '0755' recurse: yes become: yes loop: - "{{ forgejo_data_path }}" - "{{ forgejo_config_path }}" - "{{ forgejo_custom_path }}" - name: Create .ssh directory for Forgejo ansible.builtin.file: path: "{{ forgejo_data_path }}/git/.ssh" state: directory owner: "{{ forgejo_uid }}" group: "{{ forgejo_gid }}" mode: '0700' become: yes - name: Create Forgejo configuration from template ansible.builtin.template: src: app.ini.j2 dest: "{{ forgejo_config_path }}/app.ini" owner: "{{ forgejo_user }}" group: "{{ forgejo_group }}" mode: '0640' become: yes notify: Restart Forgejo - name: Create Docker Compose file ansible.builtin.template: src: docker-compose.yml.j2 dest: "{{ forgejo_base_path }}/docker-compose.yml" owner: "{{ forgejo_user }}" group: "{{ forgejo_group }}" mode: '0640' become: yes notify: Restart Forgejo - name: Pull Forgejo Docker image community.docker.docker_image: name: "{{ forgejo_docker_image }}:{{ forgejo_version }}" source: pull become: yes - name: Start Forgejo with Docker Compose community.docker.docker_compose_v2: project_src: "{{ forgejo_base_path }}" state: present become: yes register: forgejo_started - name: Wait for Forgejo to be ready ansible.builtin.uri: url: "http://localhost:{{ forgejo_http_port }}" status_code: 200 register: forgejo_health until: forgejo_health.status == 200 retries: 30 delay: 5 ignore_errors: yes - name: Get Forgejo container logs if startup failed ansible.builtin.command: cmd: docker logs forgejo --tail 50 register: forgejo_logs become: yes when: forgejo_health.status is not defined or forgejo_health.status != 200 - name: Show Forgejo container logs ansible.builtin.debug: var: forgejo_logs.stdout_lines when: forgejo_logs is defined and forgejo_logs.stdout_lines is defined - name: Fail if Forgejo is not ready ansible.builtin.fail: msg: "Forgejo failed to start. Check logs above." when: forgejo_health.status is not defined or forgejo_health.status != 200 - name: Check if admin user exists ansible.builtin.command: cmd: docker exec --user git forgejo forgejo admin user list --admin register: admin_user_check become: yes changed_when: false failed_when: false - name: Create admin user ansible.builtin.command: cmd: > docker exec --user git forgejo forgejo admin user create --admin --username "{{ forgejo_admin_username }}" --password "{{ forgejo_admin_password }}" --email "{{ forgejo_admin_email }}" --must-change-password=false become: yes when: forgejo_admin_username not in admin_user_check.stdout register: admin_created no_log: yes - name: Display admin credentials ansible.builtin.debug: msg: | ===================================================== ADMIN USER CREATED ===================================================== Username: {{ forgejo_admin_username }} Email: {{ forgejo_admin_email }} Password: (from your secrets.yml vault) IMPORTANT: Change this password after first login! ===================================================== when: admin_created is defined and admin_created.changed - name: Create Forgejo systemd service ansible.builtin.template: src: forgejo.service.j2 dest: /etc/systemd/system/forgejo.service mode: '0644' become: yes notify: - Reload Systemd - Restart Forgejo - name: Enable Forgejo service ansible.builtin.systemd: name: forgejo enabled: yes daemon_reload: yes become: yes