diff --git a/ansible/roles/gitvana_bun_host/README.md b/ansible/roles/gitvana_bun_host/README.md deleted file mode 100644 index 847c12f..0000000 --- a/ansible/roles/gitvana_bun_host/README.md +++ /dev/null @@ -1,40 +0,0 @@ -# gitvana_bun_host - -Ansible role to deploy Gitvana directly on a Linux VM/LXC host using Bun and systemd. - -## What this role does - -- Installs required OS packages -- Installs Bun from official GitHub releases -- Clones/updates the Gitvana repository -- Installs dependencies with Bun -- Creates and manages a systemd unit -- Verifies service reachability over HTTP - -## Requirements - -- Target OS: Debian 12+ or Ubuntu 22.04+ -- Ansible Core 2.16+ -- SSH access with privilege escalation rights - -## Role variables - -See defaults in defaults/main.yml. - -Most commonly overridden: - -- gitvana_repo_url -- gitvana_repo_version -- gitvana_service_port -- gitvana_run_mode - -## Example playbook - -```yaml ---- -- name: Deploy Gitvana with Bun - hosts: docker_nodes - become: true - roles: - - role: gitvana_bun_host -``` diff --git a/ansible/roles/gitvana_bun_host/defaults/main.yml b/ansible/roles/gitvana_bun_host/defaults/main.yml deleted file mode 100644 index 80d4dae..0000000 --- a/ansible/roles/gitvana_bun_host/defaults/main.yml +++ /dev/null @@ -1,30 +0,0 @@ ---- -gitvana_repo_url: https://git.castaldifamily.com/nathan/gitvana -gitvana_repo_version: main - -gitvana_app_user: gitvana -gitvana_app_group: gitvana -gitvana_app_root: /opt/gitvana - -gitvana_service_name: gitvana -gitvana_service_port: 3000 -gitvana_run_mode: preview - -gitvana_env: - NODE_ENV: production - PORT: "{{ gitvana_service_port }}" - -gitvana_healthcheck_path: / -gitvana_verify_status_codes: - - 200 - - 301 - - 302 - -bun_version: 1.2.15 -bun_install_root: /opt/bun -gitvana_bun_arch_map: - x86_64: linux-x64-baseline - aarch64: linux-aarch64 - -# Optional SSH deploy key for private repositories. -gitvana_git_key_file: "" diff --git a/ansible/roles/gitvana_bun_host/handlers/main.yml b/ansible/roles/gitvana_bun_host/handlers/main.yml deleted file mode 100644 index 440db74..0000000 --- a/ansible/roles/gitvana_bun_host/handlers/main.yml +++ /dev/null @@ -1,9 +0,0 @@ ---- -- name: Reload systemd - ansible.builtin.systemd: - daemon_reload: true - -- name: Restart Gitvana service - ansible.builtin.systemd: - name: "{{ gitvana_service_name }}" - state: restarted diff --git a/ansible/roles/gitvana_bun_host/meta/main.yml b/ansible/roles/gitvana_bun_host/meta/main.yml deleted file mode 100644 index 08d6f7a..0000000 --- a/ansible/roles/gitvana_bun_host/meta/main.yml +++ /dev/null @@ -1,26 +0,0 @@ ---- -galaxy_info: - role_name: gitvana_bun_host - namespace: homelab - author: FrankGPT - description: Deploy Gitvana directly on Debian/Ubuntu hosts using Bun and systemd - license: MIT - min_ansible_version: "2.16" - - platforms: - - name: Ubuntu - versions: - - jammy - - noble - - name: Debian - versions: - - bookworm - - galaxy_tags: - - bun - - web - - application - - deployment - - lxc - -dependencies: [] diff --git a/ansible/roles/gitvana_bun_host/tasks/deploy_code.yml b/ansible/roles/gitvana_bun_host/tasks/deploy_code.yml deleted file mode 100644 index 37e7363..0000000 --- a/ansible/roles/gitvana_bun_host/tasks/deploy_code.yml +++ /dev/null @@ -1,35 +0,0 @@ ---- -- name: Clone or update Gitvana repository - ansible.builtin.git: - repo: "{{ gitvana_repo_url }}" - dest: "{{ gitvana_app_root }}" - version: "{{ gitvana_repo_version }}" - update: true - key_file: "{{ gitvana_git_key_file | default(omit) }}" - accept_hostkey: true - become: true - become_user: "{{ gitvana_app_user }}" - register: gitvana_repo_sync - -- name: Ensure repository ownership is correct - ansible.builtin.file: - path: "{{ gitvana_app_root }}" - state: directory - recurse: true - owner: "{{ gitvana_app_user }}" - group: "{{ gitvana_app_group }}" - -- name: Check if dependencies directory exists - ansible.builtin.stat: - path: "{{ gitvana_app_root }}/node_modules" - register: gitvana_node_modules - -- name: Install application dependencies with Bun - ansible.builtin.command: - cmd: /usr/local/bin/bun install --frozen-lockfile - chdir: "{{ gitvana_app_root }}" - become: true - become_user: "{{ gitvana_app_user }}" - when: gitvana_repo_sync.changed or not gitvana_node_modules.stat.exists - changed_when: true - notify: Restart Gitvana service diff --git a/ansible/roles/gitvana_bun_host/tasks/install_bun.yml b/ansible/roles/gitvana_bun_host/tasks/install_bun.yml deleted file mode 100644 index b2ecfa1..0000000 --- a/ansible/roles/gitvana_bun_host/tasks/install_bun.yml +++ /dev/null @@ -1,71 +0,0 @@ ---- -- name: Ensure Bun install root exists - ansible.builtin.file: - path: "{{ bun_install_root }}" - state: directory - owner: root - group: root - mode: "0755" - -- name: Set Bun artifact values - ansible.builtin.set_fact: - bun_archive_name: "bun-{{ bun_arch_suffix }}.zip" - bun_download_url: "https://github.com/oven-sh/bun/releases/download/bun-v{{ bun_version }}/bun-{{ bun_arch_suffix }}.zip" - bun_archive_path: "/tmp/bun-v{{ bun_version }}-{{ bun_arch_suffix }}.zip" - bun_extract_path: "{{ bun_install_root }}/bun-v{{ bun_version }}-{{ bun_arch_suffix }}" - -- name: Ensure versioned Bun extract directory exists - ansible.builtin.file: - path: "{{ bun_extract_path }}" - state: directory - owner: root - group: root - mode: "0755" - -- name: Download Bun release archive - ansible.builtin.get_url: - url: "{{ bun_download_url }}" - dest: "{{ bun_archive_path }}" - mode: "0644" - -- name: Extract Bun archive - ansible.builtin.unarchive: - src: "{{ bun_archive_path }}" - dest: "{{ bun_extract_path }}" - remote_src: true - creates: "{{ bun_extract_path }}/.extracted" - -- name: Mark Bun extraction complete - ansible.builtin.file: - path: "{{ bun_extract_path }}/.extracted" - state: touch - mode: "0644" - -- name: Locate extracted Bun binary - ansible.builtin.find: - paths: "{{ bun_extract_path }}" - recurse: true - file_type: file - patterns: bun - register: bun_binary_find - -- name: Fail when Bun binary is missing - ansible.builtin.fail: - msg: "Bun binary was not found under {{ bun_extract_path }} after extraction." - when: bun_binary_find.matched | int == 0 - -- name: Select Bun binary path - ansible.builtin.set_fact: - bun_binary_path: "{{ (bun_binary_find.files | sort(attribute='path') | first).path }}" - -- name: Ensure Bun binary has execute permission - ansible.builtin.file: - path: "{{ bun_binary_path }}" - mode: "0755" - -- name: Link Bun binary into standard PATH - ansible.builtin.file: - src: "{{ bun_binary_path }}" - dest: /usr/local/bin/bun - state: link - force: true diff --git a/ansible/roles/gitvana_bun_host/tasks/main.yml b/ansible/roles/gitvana_bun_host/tasks/main.yml deleted file mode 100644 index ffbea06..0000000 --- a/ansible/roles/gitvana_bun_host/tasks/main.yml +++ /dev/null @@ -1,18 +0,0 @@ ---- -- name: Validate role input - ansible.builtin.import_tasks: validate.yml - -- name: Install base prerequisites - ansible.builtin.import_tasks: prereqs.yml - -- name: Install Bun runtime - ansible.builtin.import_tasks: install_bun.yml - -- name: Deploy application code - ansible.builtin.import_tasks: deploy_code.yml - -- name: Configure and start service - ansible.builtin.import_tasks: service.yml - -- name: Verify service reachability - ansible.builtin.import_tasks: verify.yml diff --git a/ansible/roles/gitvana_bun_host/tasks/prereqs.yml b/ansible/roles/gitvana_bun_host/tasks/prereqs.yml deleted file mode 100644 index 587e608..0000000 --- a/ansible/roles/gitvana_bun_host/tasks/prereqs.yml +++ /dev/null @@ -1,31 +0,0 @@ ---- -- name: Install prerequisite packages - ansible.builtin.apt: - name: - - ca-certificates - - curl - - git - - unzip - state: present - update_cache: true - -- name: Ensure application group exists - ansible.builtin.group: - name: "{{ gitvana_app_group }}" - system: true - -- name: Ensure application user exists - ansible.builtin.user: - name: "{{ gitvana_app_user }}" - group: "{{ gitvana_app_group }}" - system: true - create_home: false - shell: /usr/sbin/nologin - -- name: Ensure application directory exists - ansible.builtin.file: - path: "{{ gitvana_app_root }}" - state: directory - owner: "{{ gitvana_app_user }}" - group: "{{ gitvana_app_group }}" - mode: "0755" diff --git a/ansible/roles/gitvana_bun_host/tasks/service.yml b/ansible/roles/gitvana_bun_host/tasks/service.yml deleted file mode 100644 index 08ebf65..0000000 --- a/ansible/roles/gitvana_bun_host/tasks/service.yml +++ /dev/null @@ -1,17 +0,0 @@ ---- -- name: Render systemd unit file - ansible.builtin.template: - src: gitvana.service.j2 - dest: "/etc/systemd/system/{{ gitvana_service_name }}.service" - owner: root - group: root - mode: "0644" - notify: - - Reload systemd - - Restart Gitvana service - -- name: Ensure Gitvana service is enabled and running - ansible.builtin.systemd: - name: "{{ gitvana_service_name }}" - enabled: true - state: started diff --git a/ansible/roles/gitvana_bun_host/tasks/validate.yml b/ansible/roles/gitvana_bun_host/tasks/validate.yml deleted file mode 100644 index 0db29c0..0000000 --- a/ansible/roles/gitvana_bun_host/tasks/validate.yml +++ /dev/null @@ -1,31 +0,0 @@ ---- -- name: Assert supported operating system - ansible.builtin.assert: - that: - - ansible_os_family == "Debian" - fail_msg: "This role supports Debian/Ubuntu targets only." - -- name: Assert required role variables - ansible.builtin.assert: - that: - - gitvana_repo_url | length > 0 - - gitvana_repo_version | length > 0 - - gitvana_app_user | length > 0 - - gitvana_app_group | length > 0 - - gitvana_app_root | length > 0 - - gitvana_service_name | length > 0 - - gitvana_service_port | int > 0 - - gitvana_service_port | int < 65536 - - bun_version | length > 0 - - bun_install_root | length > 0 - - gitvana_run_mode in ["dev", "preview"] - fail_msg: "One or more required variables are missing or invalid." - -- name: Map architecture for Bun release artifact - ansible.builtin.set_fact: - bun_arch_suffix: "{{ gitvana_bun_arch_map.get(ansible_architecture) }}" - -- name: Fail on unsupported architecture - ansible.builtin.fail: - msg: "Unsupported architecture for Bun install: {{ ansible_architecture }}" - when: bun_arch_suffix is not defined or bun_arch_suffix | length == 0 diff --git a/ansible/roles/gitvana_bun_host/tasks/verify.yml b/ansible/roles/gitvana_bun_host/tasks/verify.yml deleted file mode 100644 index 53e9dea..0000000 --- a/ansible/roles/gitvana_bun_host/tasks/verify.yml +++ /dev/null @@ -1,16 +0,0 @@ ---- -- name: Wait for Gitvana service port - ansible.builtin.wait_for: - port: "{{ gitvana_service_port }}" - host: 127.0.0.1 - timeout: 60 - -- name: Verify local HTTP health endpoint - ansible.builtin.uri: - url: "http://127.0.0.1:{{ gitvana_service_port }}{{ gitvana_healthcheck_path }}" - method: GET - status_code: "{{ gitvana_verify_status_codes }}" - register: gitvana_health_result - retries: 3 - delay: 5 - until: gitvana_health_result.status in gitvana_verify_status_codes diff --git a/ansible/roles/gitvana_bun_host/templates/gitvana.service.j2 b/ansible/roles/gitvana_bun_host/templates/gitvana.service.j2 deleted file mode 100644 index 4ea1348..0000000 --- a/ansible/roles/gitvana_bun_host/templates/gitvana.service.j2 +++ /dev/null @@ -1,21 +0,0 @@ -[Unit] -Description=Gitvana Bun Service -After=network-online.target -Wants=network-online.target - -[Service] -Type=simple -User={{ gitvana_app_user }} -Group={{ gitvana_app_group }} -WorkingDirectory={{ gitvana_app_root }} -{% for key, value in gitvana_env.items() %} -Environment={{ key }}={{ value }} -{% endfor %} -ExecStart=/usr/local/bin/bun run {{ gitvana_run_mode }} --host 0.0.0.0 --port {{ gitvana_service_port }} -Restart=on-failure -RestartSec=5 -TimeoutStartSec=120 -TimeoutStopSec=30 - -[Install] -WantedBy=multi-user.target