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 f95fd4ced2
commit eca1289ce2
No known key found for this signature in database
GPG Key ID: 4EFE4C946404B82A
4 changed files with 222 additions and 67 deletions

@ -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

@ -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 }}"

@ -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

@ -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,59 +127,58 @@
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 }}"
- name: backup current paperless-ng installation - block:
copy: - name: backup current paperless-ng installation
src: "{{ paperlessng_directory }}" copy:
remote_src: yes src: "{{ paperlessng_directory }}"
dest: "{{ paperlessng_directory }}-{{ ansible_date_time.iso8601 }}/" remote_src: yes
dest: "{{ paperlessng_directory }}-{{ ansible_date_time.iso8601 }}/"
- name: remove current paperless sources
file:
path: "{{ paperlessng_directory }}/{{ item }}"
state: absent
with_items:
- docker
- docs
- scripts
- src
- static
when: update_installation when: update_installation
- name: remove current paperless sources - block:
file: - name: create temporary directory
path: "{{ paperlessng_directory }}/{{ item }}" tempfile:
state: absent state: directory
with_items: register: tempdir
- docker - name: check if version is available as release archive
- docs uri:
- scripts url: "https://github.com/jonaswinkler/paperless-ng/releases/download/ng-{{ paperlessng_version }}/paperless-ng-{{ paperlessng_version }}.tar.xz"
- src method: GET
- static status_code: [200, 302, 404]
when: update_installation register: release_archive
- name: install paperless-ng from source
- name: create temporary directory include_tasks: install-source.yml
tempfile: when: release_archive.status == 404
state: directory - name: install paperless-ng from release archive
register: tempdir include_tasks: install-release.yml
when: not reconfigure_only when: release_archive.status != 404
- name: change owner and permissions of paperless-ng
- name: extract paperless-ng command:
unarchive: cmd: "{{ item }}"
src: "https://github.com/jonaswinkler/paperless-ng/releases/download/ng-{{ paperlessng_version }}/paperless-ng-{{ paperlessng_version }}.tar.xz" warn: false
remote_src: yes with_items:
dest: "{{ tempdir.path }}" - "chown -R {{ paperlessng_system_user }}:{{ paperlessng_system_group }} {{ tempdir.path }}"
when: not reconfigure_only - "find {{ tempdir.path }} -type d -exec chmod 0750 {} ;"
- "find {{ tempdir.path }} -type f -exec chmod 0640 {} ;"
- name: change owner and permissions of paperless-ng - name: move paperless-ng
command: command:
cmd: "{{ item }}" cmd: "cp -a {{ tempdir.path }}/paperless-ng/. {{ paperlessng_directory }}"
warn: false - name: remove temporary directory
with_items: file:
- "chown -R {{ paperlessng_system_user }}:{{ paperlessng_system_group }} {{ tempdir.path }}" path: "{{ tempdir.path }}"
- "find {{ tempdir.path }} -type d -exec chmod 0750 {} ;" state: absent
- "find {{ tempdir.path }} -type f -exec chmod 0640 {} ;"
when: not reconfigure_only
- name: move paperless-ng
command:
cmd: "cp -a {{ tempdir.path }}/paperless-ng/. {{ paperlessng_directory }}"
when: not reconfigure_only
- name: remove temporary directory
file:
path: "{{ tempdir.path }}"
state: absent
when: not reconfigure_only when: not reconfigure_only
- name: create paperless-ng directories and set permissions - name: create paperless-ng directories and set permissions
@ -310,21 +327,20 @@
creates: "{{ paperlessng_virtualenv }}" creates: "{{ paperlessng_virtualenv }}"
register: venv register: venv
- name: install paperlessng requirements - block:
become: yes - name: install paperlessng requirements
become_user: "{{ paperlessng_system_user }}" become: yes
pip: become_user: "{{ paperlessng_system_user }}"
requirements: "{{ paperlessng_directory }}/requirements.txt" pip:
executable: "{{ paperlessng_virtualenv }}/bin/pip3" requirements: "{{ paperlessng_directory }}/requirements.txt"
extra_args: --upgrade executable: "{{ paperlessng_virtualenv }}/bin/pip3"
when: not reconfigure_only extra_args: --upgrade
- name: migrate database schema
- name: migrate database schema become: yes
become: yes become_user: "{{ paperlessng_system_user }}"
become_user: "{{ paperlessng_system_user }}" command: "{{ paperlessng_virtualenv }}/bin/python3 {{ paperlessng_directory }}/src/manage.py migrate"
command: "{{ paperlessng_virtualenv }}/bin/python3 {{ paperlessng_directory }}/src/manage.py migrate" register: database_schema
register: database_schema changed_when: '"No migrations to apply." not in database_schema.stdout'
changed_when: '"No migrations to apply." not in database_schema.stdout'
when: not reconfigure_only when: not reconfigure_only
- name: configure paperless superuser - name: configure paperless superuser