minor: Add Gitea to SCM role
This commit is contained in:
81
.gitea/workflows/update-gitea-version.yml
Normal file
81
.gitea/workflows/update-gitea-version.yml
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
#SPDX-License-Identifier: GPL-3.0-only
|
||||||
|
---
|
||||||
|
name: Update Gitea Version
|
||||||
|
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
- cron: '0 6 * * *' # Every day at 06:00 UTC
|
||||||
|
workflow_dispatch:
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
update-version:
|
||||||
|
runs-on: fedora-latest
|
||||||
|
steps:
|
||||||
|
- name: Add ~/.local/bin to PATH
|
||||||
|
run: echo "$HOME/.local/bin" >> "$GITEA_PATH"
|
||||||
|
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v6
|
||||||
|
with:
|
||||||
|
path: ansible_role_scm
|
||||||
|
|
||||||
|
- name: Check versions
|
||||||
|
id: check
|
||||||
|
working-directory: ansible_role_scm
|
||||||
|
run: |
|
||||||
|
LATEST=$(curl -sf https://api.github.com/repos/go-gitea/gitea/releases/latest | jq -r '.tag_name' | sed 's/^v//')
|
||||||
|
if ! [[ "$LATEST" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
||||||
|
echo "::error::Refusing to bump to non-stable version '$LATEST'"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
CURRENT=$(grep "^gitea_version:" defaults/main.yml | sed "s/gitea_version: '//;s/'//")
|
||||||
|
echo "latest=$LATEST" >> "$GITHUB_OUTPUT"
|
||||||
|
if [ "$LATEST" = "$CURRENT" ]; then
|
||||||
|
echo "needs_update=false" >> "$GITHUB_OUTPUT"
|
||||||
|
echo "Already on latest: $CURRENT"
|
||||||
|
else
|
||||||
|
echo "needs_update=true" >> "$GITHUB_OUTPUT"
|
||||||
|
echo "Update available: $CURRENT -> $LATEST"
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Install Molecule
|
||||||
|
if: steps.check.outputs.needs_update == 'true'
|
||||||
|
run: pip install ansible molecule molecule-plugins[podman]
|
||||||
|
|
||||||
|
- name: Install Ansible collections
|
||||||
|
if: steps.check.outputs.needs_update == 'true'
|
||||||
|
run: ansible-galaxy collection install containers.podman
|
||||||
|
|
||||||
|
- name: Update gitea_version
|
||||||
|
if: steps.check.outputs.needs_update == 'true'
|
||||||
|
working-directory: ansible_role_scm
|
||||||
|
run: |
|
||||||
|
sed -i "s/^gitea_version: '.*'$/gitea_version: '${{ steps.check.outputs.latest }}'/" defaults/main.yml
|
||||||
|
UPDATED=$(grep "^gitea_version:" defaults/main.yml | sed "s/gitea_version: '//;s/'//")
|
||||||
|
if [ "$UPDATED" != "${{ steps.check.outputs.latest }}" ]; then
|
||||||
|
echo "::error::Failed to update gitea_version (expected '${{ steps.check.outputs.latest }}', got '$UPDATED')"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
echo "Verified: gitea_version updated to $UPDATED"
|
||||||
|
|
||||||
|
- name: Run Molecule tests
|
||||||
|
if: steps.check.outputs.needs_update == 'true'
|
||||||
|
working-directory: ansible_role_scm
|
||||||
|
run: molecule test
|
||||||
|
|
||||||
|
- name: Commit and push
|
||||||
|
if: steps.check.outputs.needs_update == 'true' && github.ref == 'refs/heads/main'
|
||||||
|
working-directory: ansible_role_scm
|
||||||
|
run: |
|
||||||
|
git config user.name "giabot"
|
||||||
|
git config user.email "bot@mail.gianet.us"
|
||||||
|
git remote set-url origin "https://giabot:${{ secrets.GITEA_TOKEN }}@gianet.us/engineering/ansible_role_scm.git"
|
||||||
|
git add defaults/main.yml
|
||||||
|
git commit -m "patch: update gitea_version to ${{ steps.check.outputs.latest }}"
|
||||||
|
git tag "${{ steps.check.outputs.latest }}"
|
||||||
|
git tag -f latest
|
||||||
|
git push origin main "${{ steps.check.outputs.latest }}"
|
||||||
|
git push -f origin latest
|
||||||
85
README.md
Normal file
85
README.md
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
# Ansible Role: SCM
|
||||||
|
|
||||||
|
|
||||||
|
Software Code Management role. Currently installs and manages [Gitea](https://about.gitea.com/) on Debian and Ubuntu systems. The role downloads a versioned upstream binary, keeps a previous version for quick rollback via a symlink, creates a dedicated system user, writes `app.ini` fully from variables, and manages the systemd unit.
|
||||||
|
|
||||||
|
Requirements
|
||||||
|
------------
|
||||||
|
|
||||||
|
This role requires Ansible 2.12 or higher. The target system should be Debian or Ubuntu.
|
||||||
|
|
||||||
|
Role Variables
|
||||||
|
--------------
|
||||||
|
|
||||||
|
The following variables are defined in `defaults/main.yml`:
|
||||||
|
|
||||||
|
| Variable | Description | Default Value |
|
||||||
|
|----------|-------------|---------------|
|
||||||
|
| `gitea_name` | Service name (used for binary, unit, paths) | `gitea` |
|
||||||
|
| `gitea_version` | Gitea version to install (no leading `v`) | `1.25.5` |
|
||||||
|
| `gitea_arch` | Architecture suffix of the upstream release | `amd64` |
|
||||||
|
| `gitea_opt` | Install directory (holds versioned binaries + symlink) | `/opt/{{ gitea_name }}` |
|
||||||
|
| `gitea_etc` | Config directory (`app.ini` lives here) | `/etc/{{ gitea_name }}` |
|
||||||
|
| `gitea_home` | Data directory / `WorkingDirectory` | `/var/lib/{{ gitea_name }}` |
|
||||||
|
| `gitea_url` | Full download URL of the `linux-<arch>` binary | upstream GitHub release URL |
|
||||||
|
| `gitea_keep_versions` | Previous versioned binaries to keep for rollback | `1` |
|
||||||
|
| `gitea_user_create` | Whether this role should create the system user/group | `true` |
|
||||||
|
| `gitea_user` / `gitea_group` | Service user and group | `git` / `git` |
|
||||||
|
| `gitea_uid` / `gitea_gid` | Optional fixed uid/gid | unset (system-assigned) |
|
||||||
|
| `gitea_user_home` | Home directory for the service user | `/home/{{ gitea_user }}` |
|
||||||
|
| `gitea_user_shell` | Login shell for the service user | `/bin/bash` |
|
||||||
|
| `gitea_app_ini` | Dict rendered verbatim into `app.ini` | minimal sqlite3 defaults |
|
||||||
|
|
||||||
|
### About `gitea_app_ini`
|
||||||
|
|
||||||
|
`app.ini` is fully driven from this dictionary. Keys become INI sections; the reserved key `DEFAULT` is rendered at the top of the file **without** a section header (matching Gitea's convention). Section names with dots (e.g. `cron.update_checker`, `repository.signing`) are preserved verbatim. Override this dict in your playbook to inject any setting Gitea supports.
|
||||||
|
|
||||||
|
Dependencies
|
||||||
|
------------
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
Example Playbook
|
||||||
|
----------------
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
- hosts: gitea_servers
|
||||||
|
roles:
|
||||||
|
- role: ansible_role_scm
|
||||||
|
vars:
|
||||||
|
gitea_version: '1.25.5'
|
||||||
|
gitea_user: 'git'
|
||||||
|
gitea_app_ini:
|
||||||
|
DEFAULT:
|
||||||
|
APP_NAME: 'My Gitea'
|
||||||
|
RUN_USER: 'git'
|
||||||
|
WORK_PATH: '/var/lib/gitea'
|
||||||
|
RUN_MODE: 'prod'
|
||||||
|
server:
|
||||||
|
DOMAIN: 'git.example.com'
|
||||||
|
HTTP_PORT: 3000
|
||||||
|
ROOT_URL: 'https://git.example.com/'
|
||||||
|
DISABLE_SSH: true
|
||||||
|
database:
|
||||||
|
DB_TYPE: 'postgres'
|
||||||
|
HOST: '127.0.0.1:5432'
|
||||||
|
NAME: 'giteadb'
|
||||||
|
USER: 'gitea'
|
||||||
|
PASSWD: '{{ vault_gitea_db_password }}'
|
||||||
|
SSL_MODE: 'disable'
|
||||||
|
security:
|
||||||
|
INSTALL_LOCK: true
|
||||||
|
INTERNAL_TOKEN: '{{ vault_gitea_internal_token }}'
|
||||||
|
```
|
||||||
|
|
||||||
|
License
|
||||||
|
-------
|
||||||
|
|
||||||
|
GPL-3.0-only
|
||||||
|
|
||||||
|
Author Information
|
||||||
|
------------------
|
||||||
|
|
||||||
|
+ Luciano Giacchetta
|
||||||
|
+ Giacchetta Networks LLC
|
||||||
|
+ https://gianet.us/engineering/ansible_role_scm
|
||||||
66
defaults/main.yml
Normal file
66
defaults/main.yml
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
#SPDX-License-Identifier: GPL-3.0-only
|
||||||
|
---
|
||||||
|
|
||||||
|
## Install configuration
|
||||||
|
gitea_name: 'gitea'
|
||||||
|
gitea_version: '1.25.5'
|
||||||
|
gitea_arch: 'amd64'
|
||||||
|
gitea_opt: '/opt/{{ gitea_name }}'
|
||||||
|
gitea_etc: '/etc/{{ gitea_name }}'
|
||||||
|
gitea_home: '/var/lib/{{ gitea_name }}'
|
||||||
|
gitea_url: 'https://github.com/go-gitea/gitea/releases/download/v{{ gitea_version }}/gitea-{{ gitea_version }}-linux-{{ gitea_arch }}'
|
||||||
|
|
||||||
|
## Keep the current + N previous versioned binaries on disk for quick rollback.
|
||||||
|
## The active symlink target and the just-installed version are always preserved.
|
||||||
|
gitea_keep_versions: 1
|
||||||
|
|
||||||
|
## Service user / group
|
||||||
|
## Set gitea_user_create: false if the user is provisioned by another role.
|
||||||
|
gitea_user_create: true
|
||||||
|
gitea_user: 'git'
|
||||||
|
gitea_group: 'git'
|
||||||
|
gitea_uid: ~
|
||||||
|
gitea_gid: ~
|
||||||
|
gitea_user_home: '/home/{{ gitea_user }}'
|
||||||
|
## Gitea's built-in SSH server (DISABLE_SSH = false) requires a real login shell
|
||||||
|
## so OpenSSH can exec `gitea serv`. Default to /bin/bash; override to /bin/false
|
||||||
|
## if you do not expose SSH git operations.
|
||||||
|
gitea_user_shell: '/bin/bash'
|
||||||
|
|
||||||
|
## app.ini contents — fully templated from this dict.
|
||||||
|
## The special 'DEFAULT' key is rendered at the top of app.ini without a section
|
||||||
|
## header (matching Gitea's convention). All other keys are rendered as
|
||||||
|
## [section-name] preserving dots in section names (e.g. 'cron.update_checker').
|
||||||
|
## Override this dict in your playbook to inject every setting you need.
|
||||||
|
gitea_app_ini:
|
||||||
|
DEFAULT:
|
||||||
|
APP_NAME: 'Gitea: Git with a cup of tea'
|
||||||
|
RUN_USER: '{{ gitea_user }}'
|
||||||
|
WORK_PATH: '{{ gitea_home }}'
|
||||||
|
RUN_MODE: 'prod'
|
||||||
|
server:
|
||||||
|
PROTOCOL: 'http'
|
||||||
|
DOMAIN: 'localhost'
|
||||||
|
HTTP_PORT: 3000
|
||||||
|
ROOT_URL: 'http://localhost:3000/'
|
||||||
|
APP_DATA_PATH: '{{ gitea_home }}/data'
|
||||||
|
DISABLE_SSH: false
|
||||||
|
SSH_PORT: 22
|
||||||
|
database:
|
||||||
|
DB_TYPE: 'sqlite3'
|
||||||
|
PATH: '{{ gitea_home }}/data/gitea.db'
|
||||||
|
repository:
|
||||||
|
ROOT: '{{ gitea_home }}/data/gitea-repositories'
|
||||||
|
session:
|
||||||
|
PROVIDER: 'file'
|
||||||
|
log:
|
||||||
|
MODE: 'console'
|
||||||
|
LEVEL: 'info'
|
||||||
|
ROOT_PATH: '{{ gitea_home }}/log'
|
||||||
|
security:
|
||||||
|
INSTALL_LOCK: true
|
||||||
|
service:
|
||||||
|
DISABLE_REGISTRATION: true
|
||||||
|
openid:
|
||||||
|
ENABLE_OPENID_SIGNIN: false
|
||||||
|
ENABLE_OPENID_SIGNUP: false
|
||||||
6
handlers/main.yml
Normal file
6
handlers/main.yml
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
#SPDX-License-Identifier: GPL-3.0-only
|
||||||
|
---
|
||||||
|
- name: gitea_restart
|
||||||
|
ansible.builtin.systemd:
|
||||||
|
name: '{{ gitea_name }}.service'
|
||||||
|
state: restarted
|
||||||
22
meta/main.yml
Normal file
22
meta/main.yml
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
galaxy_info:
|
||||||
|
role_name: "ansible_role_scm"
|
||||||
|
namespace: "gianet"
|
||||||
|
author: "Luciano Giacchetta"
|
||||||
|
description: "Software Code Management Role (Gitea)"
|
||||||
|
company: "Giacchetta Networks LLC"
|
||||||
|
issue_tracker_url: "https://gianet.us/engineering/ansible_role_scm/issues"
|
||||||
|
license: "GPL-3.0-only"
|
||||||
|
min_ansible_version: "2.12"
|
||||||
|
platforms:
|
||||||
|
- name: "Debian"
|
||||||
|
versions:
|
||||||
|
- "all"
|
||||||
|
- name: "Ubuntu"
|
||||||
|
versions:
|
||||||
|
- "all"
|
||||||
|
galaxy_tags:
|
||||||
|
- "scm"
|
||||||
|
- "git"
|
||||||
|
- "gitea"
|
||||||
|
|
||||||
|
dependencies: []
|
||||||
14
molecule/default/Dockerfile
Normal file
14
molecule/default/Dockerfile
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
ARG MOLECULE_DISTRO=docker.io/library/debian:stable
|
||||||
|
FROM ${MOLECULE_DISTRO}
|
||||||
|
|
||||||
|
RUN apt-get update && \
|
||||||
|
apt-get install -y --no-install-recommends \
|
||||||
|
python3 \
|
||||||
|
systemd \
|
||||||
|
systemd-sysv \
|
||||||
|
dbus \
|
||||||
|
ca-certificates && \
|
||||||
|
apt-get clean && \
|
||||||
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
CMD ["/usr/sbin/init"]
|
||||||
6
molecule/default/converge.yml
Normal file
6
molecule/default/converge.yml
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
#SPDX-License-Identifier: GPL-3.0-only
|
||||||
|
---
|
||||||
|
- name: Converge
|
||||||
|
hosts: all
|
||||||
|
roles:
|
||||||
|
- role: ansible_role_scm
|
||||||
72
molecule/default/molecule.yml
Normal file
72
molecule/default/molecule.yml
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
#SPDX-License-Identifier: GPL-3.0-only
|
||||||
|
---
|
||||||
|
dependency:
|
||||||
|
name: galaxy
|
||||||
|
options:
|
||||||
|
requirements-file: molecule/default/requirements.yml
|
||||||
|
|
||||||
|
driver:
|
||||||
|
name: podman
|
||||||
|
|
||||||
|
platforms:
|
||||||
|
- name: debian-stable
|
||||||
|
image: docker.io/library/debian:stable
|
||||||
|
pre_build_image: false
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
buildargs:
|
||||||
|
MOLECULE_DISTRO: docker.io/library/debian:stable
|
||||||
|
privileged: true
|
||||||
|
systemd: always
|
||||||
|
command: /usr/sbin/init
|
||||||
|
|
||||||
|
- name: debian-oldstable
|
||||||
|
image: docker.io/library/debian:oldstable
|
||||||
|
pre_build_image: false
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
buildargs:
|
||||||
|
MOLECULE_DISTRO: docker.io/library/debian:oldstable
|
||||||
|
privileged: true
|
||||||
|
systemd: always
|
||||||
|
command: /usr/sbin/init
|
||||||
|
|
||||||
|
- name: ubuntu-latest
|
||||||
|
image: docker.io/library/ubuntu:latest
|
||||||
|
pre_build_image: false
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
buildargs:
|
||||||
|
MOLECULE_DISTRO: docker.io/library/ubuntu:latest
|
||||||
|
privileged: true
|
||||||
|
systemd: always
|
||||||
|
command: /usr/sbin/init
|
||||||
|
|
||||||
|
- name: ubuntu-jammy
|
||||||
|
image: docker.io/library/ubuntu:jammy
|
||||||
|
pre_build_image: false
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
buildargs:
|
||||||
|
MOLECULE_DISTRO: docker.io/library/ubuntu:jammy
|
||||||
|
privileged: true
|
||||||
|
systemd: always
|
||||||
|
command: /usr/sbin/init
|
||||||
|
|
||||||
|
provisioner:
|
||||||
|
name: ansible
|
||||||
|
env:
|
||||||
|
ANSIBLE_ROLES_PATH: "${MOLECULE_PROJECT_DIRECTORY}/.."
|
||||||
|
playbooks:
|
||||||
|
converge: converge.yml
|
||||||
|
verify: verify.yml
|
||||||
|
|
||||||
|
scenario:
|
||||||
|
test_sequence:
|
||||||
|
- dependency
|
||||||
|
- destroy
|
||||||
|
- syntax
|
||||||
|
- create
|
||||||
|
- converge
|
||||||
|
- idempotence
|
||||||
|
- verify
|
||||||
|
- destroy
|
||||||
|
|
||||||
|
verifier:
|
||||||
|
name: ansible
|
||||||
4
molecule/default/requirements.yml
Normal file
4
molecule/default/requirements.yml
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
#SPDX-License-Identifier: GPL-3.0-only
|
||||||
|
---
|
||||||
|
collections:
|
||||||
|
- name: containers.podman
|
||||||
45
molecule/default/verify.yml
Normal file
45
molecule/default/verify.yml
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
#SPDX-License-Identifier: GPL-3.0-only
|
||||||
|
---
|
||||||
|
- name: Verify
|
||||||
|
hosts: all
|
||||||
|
tasks:
|
||||||
|
- name: Check gitea symlink
|
||||||
|
ansible.builtin.stat:
|
||||||
|
path: /opt/gitea/gitea
|
||||||
|
register: gitea_symlink
|
||||||
|
|
||||||
|
- name: Assert gitea symlink points at a versioned binary
|
||||||
|
ansible.builtin.assert:
|
||||||
|
that:
|
||||||
|
- gitea_symlink.stat.exists
|
||||||
|
- gitea_symlink.stat.islnk
|
||||||
|
- gitea_symlink.stat.lnk_source is match('/opt/gitea/gitea-.*-linux-.*')
|
||||||
|
|
||||||
|
- name: Check gitea versioned binary
|
||||||
|
ansible.builtin.stat:
|
||||||
|
path: '{{ gitea_symlink.stat.lnk_source }}'
|
||||||
|
register: gitea_binary
|
||||||
|
|
||||||
|
- name: Assert gitea binary is executable
|
||||||
|
ansible.builtin.assert:
|
||||||
|
that:
|
||||||
|
- gitea_binary.stat.exists
|
||||||
|
- gitea_binary.stat.executable
|
||||||
|
|
||||||
|
- name: Check app.ini exists
|
||||||
|
ansible.builtin.stat:
|
||||||
|
path: /etc/gitea/app.ini
|
||||||
|
register: gitea_ini
|
||||||
|
|
||||||
|
- name: Assert app.ini exists
|
||||||
|
ansible.builtin.assert:
|
||||||
|
that:
|
||||||
|
- gitea_ini.stat.exists
|
||||||
|
|
||||||
|
- name: Gather service facts
|
||||||
|
ansible.builtin.service_facts:
|
||||||
|
|
||||||
|
- name: Assert gitea service is present
|
||||||
|
ansible.builtin.assert:
|
||||||
|
that:
|
||||||
|
- "'gitea.service' in ansible_facts.services"
|
||||||
129
tasks/main.yml
Normal file
129
tasks/main.yml
Normal file
@@ -0,0 +1,129 @@
|
|||||||
|
#SPDX-License-Identifier: GPL-3.0-only
|
||||||
|
---
|
||||||
|
- name: "Create Gitea System Group"
|
||||||
|
when: gitea_user_create
|
||||||
|
ansible.builtin.group:
|
||||||
|
name: '{{ gitea_group }}'
|
||||||
|
gid: '{{ gitea_gid | default(omit, true) }}'
|
||||||
|
system: true
|
||||||
|
|
||||||
|
- name: "Create Gitea System User"
|
||||||
|
when: gitea_user_create
|
||||||
|
ansible.builtin.user:
|
||||||
|
name: '{{ gitea_user }}'
|
||||||
|
group: '{{ gitea_group }}'
|
||||||
|
uid: '{{ gitea_uid | default(omit, true) }}'
|
||||||
|
home: '{{ gitea_user_home }}'
|
||||||
|
shell: '{{ gitea_user_shell }}'
|
||||||
|
system: true
|
||||||
|
create_home: true
|
||||||
|
|
||||||
|
- name: "Create Install Folder"
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: '{{ gitea_opt }}'
|
||||||
|
state: directory
|
||||||
|
owner: '{{ gitea_user }}'
|
||||||
|
group: '{{ gitea_group }}'
|
||||||
|
mode: '0755'
|
||||||
|
|
||||||
|
- name: "Create Config Folder"
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: '{{ gitea_etc }}'
|
||||||
|
state: directory
|
||||||
|
owner: '{{ gitea_user }}'
|
||||||
|
group: '{{ gitea_group }}'
|
||||||
|
mode: '0750'
|
||||||
|
|
||||||
|
- name: "Create Data Folders"
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: '{{ item }}'
|
||||||
|
state: directory
|
||||||
|
owner: '{{ gitea_user }}'
|
||||||
|
group: '{{ gitea_group }}'
|
||||||
|
mode: '0750'
|
||||||
|
loop:
|
||||||
|
- '{{ gitea_home }}'
|
||||||
|
- '{{ gitea_home }}/custom'
|
||||||
|
- '{{ gitea_home }}/data'
|
||||||
|
- '{{ gitea_home }}/log'
|
||||||
|
|
||||||
|
- name: "Download Versioned Binary"
|
||||||
|
register: download_version
|
||||||
|
ansible.builtin.get_url:
|
||||||
|
url: '{{ gitea_url }}'
|
||||||
|
dest: '{{ gitea_opt }}/gitea-{{ gitea_version }}-linux-{{ gitea_arch }}'
|
||||||
|
checksum: 'sha256:{{ gitea_url }}.sha256'
|
||||||
|
owner: '{{ gitea_user }}'
|
||||||
|
group: '{{ gitea_group }}'
|
||||||
|
mode: '0755'
|
||||||
|
|
||||||
|
- name: "Symlink Active Binary"
|
||||||
|
register: gitea_symlink
|
||||||
|
notify: gitea_restart
|
||||||
|
ansible.builtin.file:
|
||||||
|
src: '{{ gitea_opt }}/gitea-{{ gitea_version }}-linux-{{ gitea_arch }}'
|
||||||
|
dest: '{{ gitea_opt }}/{{ gitea_name }}'
|
||||||
|
state: link
|
||||||
|
owner: '{{ gitea_user }}'
|
||||||
|
group: '{{ gitea_group }}'
|
||||||
|
follow: false
|
||||||
|
|
||||||
|
- name: "List Installed Versioned Binaries"
|
||||||
|
ansible.builtin.find:
|
||||||
|
paths: '{{ gitea_opt }}'
|
||||||
|
patterns: 'gitea-*-linux-{{ gitea_arch }}'
|
||||||
|
file_type: file
|
||||||
|
recurse: false
|
||||||
|
register: gitea_installed_binaries
|
||||||
|
|
||||||
|
- name: "Compute Versioned Binaries To Prune"
|
||||||
|
ansible.builtin.set_fact:
|
||||||
|
gitea_binaries_to_prune: >-
|
||||||
|
{{
|
||||||
|
(
|
||||||
|
gitea_installed_binaries.files
|
||||||
|
| sort(attribute='mtime', reverse=true)
|
||||||
|
| rejectattr('path', 'equalto', gitea_opt ~ '/gitea-' ~ gitea_version ~ '-linux-' ~ gitea_arch)
|
||||||
|
| list
|
||||||
|
)[gitea_keep_versions:]
|
||||||
|
}}
|
||||||
|
|
||||||
|
- name: "Prune Old Versioned Binaries"
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: '{{ item.path }}'
|
||||||
|
state: absent
|
||||||
|
loop: '{{ gitea_binaries_to_prune }}'
|
||||||
|
loop_control:
|
||||||
|
label: '{{ item.path }}'
|
||||||
|
|
||||||
|
- name: "Template App Config"
|
||||||
|
notify: gitea_restart
|
||||||
|
ansible.builtin.template:
|
||||||
|
src: '../templates/app.ini.j2'
|
||||||
|
dest: '{{ gitea_etc }}/app.ini'
|
||||||
|
owner: '{{ gitea_user }}'
|
||||||
|
group: '{{ gitea_group }}'
|
||||||
|
mode: '0640'
|
||||||
|
backup: false
|
||||||
|
|
||||||
|
- name: "Template Gitea Service"
|
||||||
|
register: template_gitea_service
|
||||||
|
ansible.builtin.template:
|
||||||
|
src: '../templates/gitea-service.j2'
|
||||||
|
dest: '{{ systemd_conf }}/{{ gitea_name }}.service'
|
||||||
|
owner: 'root'
|
||||||
|
group: 'root'
|
||||||
|
mode: '0644'
|
||||||
|
backup: false
|
||||||
|
|
||||||
|
- name: "Enable Gitea Service"
|
||||||
|
when: template_gitea_service.changed
|
||||||
|
ansible.builtin.systemd:
|
||||||
|
name: '{{ gitea_name }}.service'
|
||||||
|
daemon_reload: true
|
||||||
|
enabled: true
|
||||||
|
|
||||||
|
- name: "Start Gitea Service"
|
||||||
|
ansible.builtin.systemd:
|
||||||
|
name: '{{ gitea_name }}.service'
|
||||||
|
state: started
|
||||||
14
templates/app.ini.j2
Normal file
14
templates/app.ini.j2
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
; {{ ansible_managed }}
|
||||||
|
; SPDX-License-Identifier: GPL-3.0-only
|
||||||
|
{% if 'DEFAULT' in gitea_app_ini %}
|
||||||
|
{% for key, value in gitea_app_ini['DEFAULT'].items() %}
|
||||||
|
{{ key }} = {{ value }}
|
||||||
|
{% endfor %}
|
||||||
|
{% endif %}
|
||||||
|
{% for section, entries in gitea_app_ini.items() if section != 'DEFAULT' %}
|
||||||
|
|
||||||
|
[{{ section }}]
|
||||||
|
{% for key, value in entries.items() %}
|
||||||
|
{{ key }} = {{ value }}
|
||||||
|
{% endfor %}
|
||||||
|
{% endfor %}
|
||||||
24
templates/gitea-service.j2
Normal file
24
templates/gitea-service.j2
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
# {{ ansible_managed }}
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-only
|
||||||
|
[Unit]
|
||||||
|
Description=Gitea (Git with a cup of tea)
|
||||||
|
After=network-online.target
|
||||||
|
Wants=network-online.target
|
||||||
|
AssertFileIsExecutable={{ gitea_opt }}/{{ gitea_name }}
|
||||||
|
AssertPathExists={{ gitea_etc }}/app.ini
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
RestartSec=2s
|
||||||
|
Type=simple
|
||||||
|
User={{ gitea_user }}
|
||||||
|
Group={{ gitea_group }}
|
||||||
|
WorkingDirectory={{ gitea_home }}
|
||||||
|
ExecStart={{ gitea_opt }}/{{ gitea_name }} web --config {{ gitea_etc }}/app.ini
|
||||||
|
Restart=always
|
||||||
|
Environment=USER={{ gitea_user }} HOME={{ gitea_user_home }} GITEA_WORK_DIR={{ gitea_home }}
|
||||||
|
# Uncomment to bind ports < 1024 without running as root
|
||||||
|
#CapabilityBoundingSet=CAP_NET_BIND_SERVICE
|
||||||
|
#AmbientCapabilities=CAP_NET_BIND_SERVICE
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
4
vars/main.yml
Normal file
4
vars/main.yml
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
#SPDX-License-Identifier: GPL-3.0-only
|
||||||
|
---
|
||||||
|
_download: '/tmp'
|
||||||
|
systemd_conf: '/etc/systemd/system'
|
||||||
Reference in New Issue
Block a user