mirror of
https://github.com/spantaleev/matrix-docker-ansible-deploy.git
synced 2026-07-13 02:14:22 +03:00
80c2624454
Running `just add-inventory-host example.com 1.2.3.4` (or `make add-inventory-host domain=example.com ip=1.2.3.4`) adds a new host to the inventory, creating inventory/hosts and inventory/host_vars/matrix.DOMAIN/vars.yml from the example files, with strong secrets generated automatically. Existing configuration is never overwritten. The command refuses to run if the host is already in the inventory, so it can also be used for adding more hosts later. Based on the idea proposed in https://github.com/spantaleev/matrix-docker-ansible-deploy/pull/4682 by @Ser5 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
135 lines
6.1 KiB
Makefile
135 lines
6.1 KiB
Makefile
# SPDX-FileCopyrightText: 2023 - 2024 Nikita Chernyi
|
|
# SPDX-FileCopyrightText: 2023 - 2024 Slavi Pantaleev
|
|
# SPDX-FileCopyrightText: 2024 Suguru Hirahara
|
|
#
|
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
|
|
# mise (dev tool version manager)
|
|
mise_data_dir := env("MISE_DATA_DIR", justfile_directory() / "var/mise")
|
|
mise_trusted_config_paths := justfile_directory() / "mise.toml"
|
|
prek_home := env("PREK_HOME", justfile_directory() / "var/prek")
|
|
|
|
# Shows help
|
|
default:
|
|
@{{ just_executable() }} --list --justfile "{{ justfile() }}"
|
|
|
|
# Adds a new host to the inventory, creating the inventory files if necessary (e.g. `just add-inventory-host example.com 1.2.3.4`)
|
|
add-inventory-host domain server_address:
|
|
@{{ justfile_directory() }}/bin/add-inventory-host.sh {{ quote(domain) }} {{ quote(server_address) }}
|
|
|
|
# Pulls external Ansible roles
|
|
roles:
|
|
#!/usr/bin/env sh
|
|
echo "[NOTE] This command just updates the roles, but if you want to update everything at once (playbook, roles, etc.) - use 'just update'"
|
|
if [ -x "$(command -v agru)" ]; then
|
|
agru
|
|
else
|
|
rm -rf roles/galaxy
|
|
ansible-galaxy install -r requirements.yml -p roles/galaxy/ --force
|
|
fi
|
|
|
|
# Updates the playbook and installs the necessary Ansible roles pinned in requirements.yml. If a -u flag is passed, also updates the requirements.yml file with new role versions (if available)
|
|
update *flags: update-playbook-only
|
|
#!/usr/bin/env sh
|
|
if [ -x "$(command -v agru)" ]; then
|
|
echo {{ if flags == "" { "Installing roles pinned in requirements.yml…" } else { if flags == "-u" { "Updating roles and pinning new versions in requirements.yml…" } else { "Unknown flags passed" } } }}
|
|
agru {{ flags }}
|
|
else
|
|
echo "[NOTE] You are using the standard ansible-galaxy tool to install roles, which is slow and lacks other features. We recommend installing the 'agru' tool to speed up the process: https://github.com/etkecc/agru#where-to-get"
|
|
echo "Installing roles…"
|
|
rm -rf roles/galaxy
|
|
ansible-galaxy install -r requirements.yml -p roles/galaxy/ --force
|
|
fi
|
|
|
|
# Updates the playbook without installing/updating Ansible roles
|
|
update-playbook-only:
|
|
@echo "Updating playbook…"
|
|
@git stash -q
|
|
@git pull -q
|
|
@-git stash pop -q
|
|
|
|
# Invokes mise with the project-local data directory
|
|
mise *args: _ensure_mise_data_directory
|
|
#!/bin/sh
|
|
export MISE_DATA_DIR="{{ mise_data_dir }}"
|
|
export MISE_TRUSTED_CONFIG_PATHS="{{ mise_trusted_config_paths }}"
|
|
export MISE_YES=1
|
|
export PREK_HOME="{{ prek_home }}"
|
|
mise {{ args }}
|
|
|
|
# Runs prek (pre-commit hooks manager) with the given arguments
|
|
prek *args: _ensure_mise_tools_installed
|
|
@{{ just_executable() }} --justfile "{{ justfile() }}" mise exec -- prek {{ args }}
|
|
|
|
# Runs pre-commit hooks on staged files
|
|
prek-run-on-staged *args: _ensure_mise_tools_installed
|
|
@{{ just_executable() }} --justfile "{{ justfile() }}" prek run {{ args }}
|
|
|
|
# Runs pre-commit hooks on all files
|
|
prek-run-on-all *args: _ensure_mise_tools_installed
|
|
@{{ just_executable() }} --justfile "{{ justfile() }}" prek run --all-files {{ args }}
|
|
|
|
# Installs the git pre-commit hook
|
|
prek-install-git-pre-commit-hook: _ensure_mise_tools_installed
|
|
#!/usr/bin/env sh
|
|
set -eu
|
|
{{ just_executable() }} --justfile "{{ justfile() }}" mise exec -- prek install
|
|
hook="{{ justfile_directory() }}/.git/hooks/pre-commit"
|
|
# The installed git hook runs later under Git, outside this just/mise environment.
|
|
# Injecting PREK_HOME keeps prek's cache under var/prek instead of a global home dir,
|
|
# which is more predictable and works better in sandboxed tools like Codex/OpenCode.
|
|
if [ -f "$hook" ] && ! grep -q '^export PREK_HOME=' "$hook"; then
|
|
sed -i '2iexport PREK_HOME="{{ prek_home }}"' "$hook"
|
|
fi
|
|
|
|
# Runs the playbook with --tags=install-all,ensure-matrix-users-created,start and optional arguments
|
|
install-all *extra_args: (run-tags "install-all,ensure-matrix-users-created,start" extra_args)
|
|
|
|
# Runs installation tasks for a single service
|
|
install-service service *extra_args:
|
|
{{ just_executable() }} --justfile "{{ justfile() }}" run \
|
|
--tags=install-{{ service }},start-group \
|
|
--extra-vars=group={{ service }} {{ extra_args }}
|
|
|
|
# Runs the playbook with --tags=setup-all,ensure-matrix-users-created,start and optional arguments
|
|
setup-all *extra_args: (run-tags "setup-all,ensure-matrix-users-created,start" extra_args)
|
|
|
|
# Runs the playbook with the given list of arguments
|
|
run +extra_args:
|
|
ansible-playbook -i inventory/hosts setup.yml {{ extra_args }}
|
|
|
|
# Runs the playbook with the given list of comma-separated tags and optional arguments
|
|
run-tags tags *extra_args:
|
|
{{ just_executable() }} --justfile "{{ justfile() }}" run --tags={{ tags }} {{ extra_args }}
|
|
|
|
# Runs the playbook in user-registration mode
|
|
register-user username password admin_yes_or_no *extra_args:
|
|
ansible-playbook -i inventory/hosts setup.yml --tags=register-user --extra-vars="username={{ username }} password={{ password }} admin={{ admin_yes_or_no }}" {{ extra_args }}
|
|
|
|
# Starts all services
|
|
start-all *extra_args: (run-tags "start-all" extra_args)
|
|
|
|
# Starts a specific service group
|
|
start-group group *extra_args:
|
|
@{{ just_executable() }} --justfile "{{ justfile() }}" run-tags start-group --extra-vars="group={{ group }}" {{ extra_args }}
|
|
|
|
# Stops all services
|
|
stop-all *extra_args: (run-tags "stop-all" extra_args)
|
|
|
|
# Stops a specific service group
|
|
stop-group group *extra_args:
|
|
@{{ just_executable() }} --justfile "{{ justfile() }}" run-tags stop-group --extra-vars="group={{ group }}" {{ extra_args }}
|
|
|
|
# Rebuilds the mautrix-meta-instagram Ansible role using the mautrix-meta-messenger role as a source
|
|
rebuild-mautrix-meta-instagram:
|
|
/bin/bash "{{ justfile_directory() }}/bin/rebuild-mautrix-meta-instagram.sh" "{{ justfile_directory() }}/roles/custom"
|
|
|
|
# Internal - ensures var/mise and var/prek directories exist
|
|
_ensure_mise_data_directory:
|
|
@mkdir -p "{{ mise_data_dir }}"
|
|
@mkdir -p "{{ prek_home }}"
|
|
|
|
# Internal - ensures mise tools are installed
|
|
_ensure_mise_tools_installed: _ensure_mise_data_directory
|
|
@{{ just_executable() }} --justfile "{{ justfile() }}" mise install --quiet
|