Build release archive when version is not avail

Default ansible installation version to "latest" (pulls the latest
published release archive).
This commit is contained in:
Fabian Koller 2021-01-09 10:49:44 +01:00
parent 028608bf73
commit 6f3e7473f6
4 changed files with 222 additions and 67 deletions

View File

@ -1,5 +1,5 @@
--- ---
paperlessng_version: 0.9.14 paperlessng_version: latest # 'latest', release number, or github branch/tag/commit/ref
# Required services # Required services
paperlessng_redis_host: localhost paperlessng_redis_host: localhost

View File

@ -0,0 +1,6 @@
---
- name: extract paperless-ng
unarchive:
src: "https://github.com/jonaswinkler/paperless-ng/releases/download/ng-{{ paperlessng_version }}/paperless-ng-{{ paperlessng_version }}.tar.xz"
remote_src: yes
dest: "{{ tempdir.path }}"

View File

@ -0,0 +1,133 @@
---
# https://github.com/jonaswinkler/paperless-ng/blob/dev/.github/workflows/ci.yml
- name: install dev dependencies
apt:
pkg:
- git
- npm
- libqpdf-dev
- name: create temporary git directory
tempfile:
state: directory
register: gitdir
- name: pull paperless-ng
git:
repo: https://github.com/jonaswinkler/paperless-ng.git
dest: "{{ gitdir.path }}"
version: "{{ paperlessng_version }}"
refspec: "+refs/pull/*:refs/pull/*"
when: '"No such file or directory" in paperlessng_current_version.stderr or paperlessng_current_version.stdout != paperlessng_version | string'
- name: compile frontend
command:
cmd: "{{ item }}"
args:
chdir: "{{ gitdir.path }}/src-ui"
failed_when: false
with_items:
- npm install -g @angular/cli
- npm install
- ./node_modules/.bin/ng build --prod
- name: install pipenv
pip:
name:
- pipenv
- pybind11 # building pikepdf for <0.9.14
extra_args: --upgrade
- name: allow building with any Python 3 release
lineinfile:
path: "{{ gitdir.path }}/Pipfile"
regexp: '^python_version = ".+"$'
line: python_version = "3"
# TODO run dev in separate virtualenv
- name: install Pipfile dependencies
command:
cmd: pipenv install --dev
args:
chdir: "{{ gitdir.path }}"
- name: clean output directory
file:
path: "{{ gitdir.path }}/dist"
state: absent
- name: create output directories
file:
path: "{{ item }}"
state: directory
with_items:
- "{{ gitdir.path }}/dist"
- "{{ gitdir.path }}/dist/paperless-ng"
- "{{ gitdir.path }}/dist/paperless-ng/scripts"
- name: copy application into place
copy:
src: "{{ gitdir.path }}/{{ item.src }}"
remote_src: yes
dest: "{{ gitdir.path }}/dist/paperless-ng/{{ item.dest | default('') }}"
with_items:
- src: CONTRIBUTING.md
- src: LICENSE
- src: Pipfile
- src: Pipfile.lock
- src: README.md
- src: paperless.conf.example
dest: "paperless.conf"
# TODO can be copied for >=0.9.14
- name: generate requirements.txt
command:
cmd: pipenv lock --keep-outdated -r
args:
chdir: "{{ gitdir.path }}"
register: requirements
- name: write requirements.txt
copy:
content: "{{ requirements.stdout }}"
dest: "{{ gitdir.path }}/dist/paperless-ng/requirements.txt"
- name: glob all scripts
find:
paths: "{{ gitdir.path }}/scripts/"
patterns:
- "*.service"
- "*.sh"
register: glob
- name: copy scripts
copy:
src: "{{ item.path }}"
remote_src: yes
dest: "{{ gitdir.path }}/dist/paperless-ng/scripts/"
with_items:
- "{{ glob.files }}"
- name: copy sources
command:
cmd: "cp -r src/ dist/paperless-ng/src"
args:
chdir: "{{ gitdir.path }}"
- name: package app
archive:
path: "{{ gitdir.path }}/dist/"
dest: "{{ gitdir.path }}/paperless-ng-{{ paperlessng_version }}.tar.xz"
format: xz
- name: extract paperless-ng
unarchive:
src: "{{ gitdir.path }}/paperless-ng-{{ paperlessng_version }}.tar.xz"
remote_src: yes
dest: "{{ tempdir.path }}"
when: '"No such file or directory" in paperlessng_current_version.stderr or paperlessng_current_version.stdout != paperlessng_version | string'
- name: remove temporary git directory
file:
path: "{{ gitdir.path }}"
state: absent

View File

@ -34,7 +34,13 @@
- build-essential - build-essential
- python3-setuptools - python3-setuptools
- python3-wheel - python3-wheel
- python3-virtualenv
# upstream virtualenv in Ubuntu 20.04 is broken
# https://github.com/pypa/virtualenv/issues/1873
- name: install python virtualenv
pip:
name: virtualenv
extra_args: --upgrade
- name: install ocr languages - name: install ocr languages
apt: apt:
@ -97,6 +103,18 @@
# GNUPG_HOME required due to paperless db.py # GNUPG_HOME required due to paperless db.py
create_home: yes create_home: yes
- block:
- name: get latest release version
uri:
url: https://api.github.com/repos/jonaswinkler/paperless-ng/releases/latest
method: GET
register: latest_release
- name: parse latest release version
set_fact:
paperlessng_version: "{{ latest_release.json['tag_name'] | regex_replace('^ng-(.+)$', '\\1') }}"
when: paperlessng_version == "latest"
# TODO store commit hash of installed version, use instead of version number
- name: check for paperless-ng installation - name: check for paperless-ng installation
command: command:
cmd: 'grep -Po "(?<=Paperless-ng )\d+\.\d+\.\d+" {{ paperlessng_directory }}/docs/changelog.html' cmd: 'grep -Po "(?<=Paperless-ng )\d+\.\d+\.\d+" {{ paperlessng_directory }}/docs/changelog.html'
@ -109,15 +127,14 @@
set_fact: set_fact:
fresh_installation: '{{ "No such file or directory" in paperlessng_current_version.stderr }}' fresh_installation: '{{ "No such file or directory" in paperlessng_current_version.stderr }}'
update_installation: '{{ "No such file or directory" not in paperlessng_current_version.stderr and paperlessng_current_version.stdout != paperlessng_version | string }}' update_installation: '{{ "No such file or directory" not in paperlessng_current_version.stderr and paperlessng_current_version.stdout != paperlessng_version | string }}'
reconfigure_only: '{{ paperlessng_current_version.stdout == paperlessng_version | string }}' reconfigure_only: "{{ paperlessng_current_version.stdout == paperlessng_version | string }}"
- block:
- name: backup current paperless-ng installation - name: backup current paperless-ng installation
copy: copy:
src: "{{ paperlessng_directory }}" src: "{{ paperlessng_directory }}"
remote_src: yes remote_src: yes
dest: "{{ paperlessng_directory }}-{{ ansible_date_time.iso8601 }}/" dest: "{{ paperlessng_directory }}-{{ ansible_date_time.iso8601 }}/"
when: update_installation
- name: remove current paperless sources - name: remove current paperless sources
file: file:
path: "{{ paperlessng_directory }}/{{ item }}" path: "{{ paperlessng_directory }}/{{ item }}"
@ -130,19 +147,23 @@
- static - static
when: update_installation when: update_installation
- block:
- name: create temporary directory - name: create temporary directory
tempfile: tempfile:
state: directory state: directory
register: tempdir register: tempdir
when: not reconfigure_only - name: check if version is available as release archive
uri:
- name: extract paperless-ng url: "https://github.com/jonaswinkler/paperless-ng/releases/download/ng-{{ paperlessng_version }}/paperless-ng-{{ paperlessng_version }}.tar.xz"
unarchive: method: GET
src: "https://github.com/jonaswinkler/paperless-ng/releases/download/ng-{{ paperlessng_version }}/paperless-ng-{{ paperlessng_version }}.tar.xz" status_code: [200, 302, 404]
remote_src: yes register: release_archive
dest: "{{ tempdir.path }}" - name: install paperless-ng from source
when: not reconfigure_only include_tasks: install-source.yml
when: release_archive.status == 404
- name: install paperless-ng from release archive
include_tasks: install-release.yml
when: release_archive.status != 404
- name: change owner and permissions of paperless-ng - name: change owner and permissions of paperless-ng
command: command:
cmd: "{{ item }}" cmd: "{{ item }}"
@ -151,13 +172,9 @@
- "chown -R {{ paperlessng_system_user }}:{{ paperlessng_system_group }} {{ tempdir.path }}" - "chown -R {{ paperlessng_system_user }}:{{ paperlessng_system_group }} {{ tempdir.path }}"
- "find {{ tempdir.path }} -type d -exec chmod 0750 {} ;" - "find {{ tempdir.path }} -type d -exec chmod 0750 {} ;"
- "find {{ tempdir.path }} -type f -exec chmod 0640 {} ;" - "find {{ tempdir.path }} -type f -exec chmod 0640 {} ;"
when: not reconfigure_only
- name: move paperless-ng - name: move paperless-ng
command: command:
cmd: "cp -a {{ tempdir.path }}/paperless-ng/. {{ paperlessng_directory }}" cmd: "cp -a {{ tempdir.path }}/paperless-ng/. {{ paperlessng_directory }}"
when: not reconfigure_only
- name: remove temporary directory - name: remove temporary directory
file: file:
path: "{{ tempdir.path }}" path: "{{ tempdir.path }}"
@ -310,6 +327,7 @@
creates: "{{ paperlessng_virtualenv }}" creates: "{{ paperlessng_virtualenv }}"
register: venv register: venv
- block:
- name: install paperlessng requirements - name: install paperlessng requirements
become: yes become: yes
become_user: "{{ paperlessng_system_user }}" become_user: "{{ paperlessng_system_user }}"
@ -317,8 +335,6 @@
requirements: "{{ paperlessng_directory }}/requirements.txt" requirements: "{{ paperlessng_directory }}/requirements.txt"
executable: "{{ paperlessng_virtualenv }}/bin/pip3" executable: "{{ paperlessng_virtualenv }}/bin/pip3"
extra_args: --upgrade extra_args: --upgrade
when: not reconfigure_only
- name: migrate database schema - name: migrate database schema
become: yes become: yes
become_user: "{{ paperlessng_system_user }}" become_user: "{{ paperlessng_system_user }}"