mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2025-04-09 09:58:20 -05:00
Simplify molecule tests
"Upgrade" path includes multiple paths anyway: - installing the latest official release package - builing the current PR from source - upgrading between the two versions
This commit is contained in:
parent
0d19957d4b
commit
bfbdfe857f
37
.github/workflows/ansible.yml
vendored
37
.github/workflows/ansible.yml
vendored
@ -5,7 +5,7 @@ on: [push, pull_request]
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
# https://molecule.readthedocs.io/en/latest/ci.html#github-actions
|
# https://molecule.readthedocs.io/en/latest/ci.html#github-actions
|
||||||
test-fresh:
|
test:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
# https://docs.github.com/en/free-pro-team@latest/actions/reference/context-and-expression-syntax-for-github-actions#github-context
|
# https://docs.github.com/en/free-pro-team@latest/actions/reference/context-and-expression-syntax-for-github-actions#github-context
|
||||||
if: github.event_name == 'pull_request' || (github.event_name == 'push' && contains(github.ref, 'refs/heads/'))
|
if: github.event_name == 'pull_request' || (github.event_name == 'push' && contains(github.ref, 'refs/heads/'))
|
||||||
@ -26,36 +26,15 @@ jobs:
|
|||||||
docker --version
|
docker --version
|
||||||
molecule --version
|
molecule --version
|
||||||
python --version
|
python --version
|
||||||
- name: Test fresh installation with molecule
|
- name: Test installation/build/upgrade with molecule
|
||||||
run: |
|
run: |
|
||||||
cd ansible
|
cd ansible
|
||||||
molecule test -s fresh
|
molecule create
|
||||||
working-directory: "${{ github.repository }}"
|
molecule verify
|
||||||
test-update:
|
molecule converge
|
||||||
runs-on: ubuntu-latest
|
molecule idempotence
|
||||||
# https://docs.github.com/en/free-pro-team@latest/actions/reference/context-and-expression-syntax-for-github-actions#github-context
|
molecule verify
|
||||||
if: github.event_name == 'pull_request' || (github.event_name == 'push' && contains(github.ref, 'refs/heads/'))
|
molecule destroy
|
||||||
steps:
|
|
||||||
- name: Check out the codebase
|
|
||||||
uses: actions/checkout@v2
|
|
||||||
with:
|
|
||||||
path: "${{ github.repository }}"
|
|
||||||
- name: Set up Python
|
|
||||||
uses: actions/setup-python@v2
|
|
||||||
- name: Set up Docker
|
|
||||||
uses: docker-practice/actions-setup-docker@master
|
|
||||||
- name: Install dependencies
|
|
||||||
run: |
|
|
||||||
python3 -m pip install --upgrade pip
|
|
||||||
python3 -m pip install molecule[ansible,docker] jmespath
|
|
||||||
ansible --version
|
|
||||||
docker --version
|
|
||||||
molecule --version
|
|
||||||
python --version
|
|
||||||
- name: Test release update with molecule
|
|
||||||
run: |
|
|
||||||
cd ansible
|
|
||||||
molecule test -s update
|
|
||||||
working-directory: "${{ github.repository }}"
|
working-directory: "${{ github.repository }}"
|
||||||
# # https://galaxy.ansible.com/docs/contributing/importing.html
|
# # https://galaxy.ansible.com/docs/contributing/importing.html
|
||||||
# release:
|
# release:
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
tasks:
|
tasks:
|
||||||
- name: set previous version as installation target
|
- name: set previous version as installation target
|
||||||
set_fact:
|
set_fact:
|
||||||
paperlessng_version: 1.0.0
|
paperlessng_version: latest
|
||||||
|
|
||||||
- name: install previous paperless-ng release
|
- name: install previous paperless-ng release
|
||||||
include_role:
|
include_role:
|
91
ansible/molecule/default/verify.yml
Normal file
91
ansible/molecule/default/verify.yml
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
---
|
||||||
|
- name: Verify
|
||||||
|
hosts: all
|
||||||
|
gather_facts: false
|
||||||
|
|
||||||
|
vars_files:
|
||||||
|
- ../../defaults/main.yml
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
- name: check if webserver is up
|
||||||
|
uri:
|
||||||
|
url: "http://{{ paperlessng_listen_address }}:{{ paperlessng_listen_port }}"
|
||||||
|
status_code: [200, 302]
|
||||||
|
return_content: yes
|
||||||
|
register: landingpage
|
||||||
|
failed_when: "'Sign in</button>' not in landingpage.content"
|
||||||
|
|
||||||
|
- name: generate random name and content
|
||||||
|
set_fact:
|
||||||
|
content: "{{ lookup('password', '/dev/null length=64 chars=ascii_letters') }}"
|
||||||
|
filename: "{{ lookup('password', '/dev/null length=8 chars=ascii_letters') }}"
|
||||||
|
|
||||||
|
- name: check if document posting works
|
||||||
|
uri:
|
||||||
|
url: "http://{{ paperlessng_listen_address }}:{{ paperlessng_listen_port }}/api/documents/post_document/"
|
||||||
|
method: POST
|
||||||
|
body_format: form-multipart
|
||||||
|
body:
|
||||||
|
document:
|
||||||
|
content: "{{ content }}"
|
||||||
|
filename: "{{ filename }}.txt"
|
||||||
|
mime_type: text/plain
|
||||||
|
headers:
|
||||||
|
Authorization: 'Basic {{ (paperlessng_superuser_name + ":" + paperlessng_superuser_password) | b64encode }}'
|
||||||
|
return_content: yes
|
||||||
|
register: post_document
|
||||||
|
failed_when: "'OK' not in post_document.content"
|
||||||
|
|
||||||
|
- name: verify uploaded document has been accepted
|
||||||
|
uri:
|
||||||
|
url: "http://{{ paperlessng_listen_address }}:{{ paperlessng_listen_port }}/api/logs/"
|
||||||
|
headers:
|
||||||
|
Authorization: 'Basic {{ (paperlessng_superuser_name + ":" + paperlessng_superuser_password) | b64encode }}'
|
||||||
|
return_content: yes
|
||||||
|
register: logs
|
||||||
|
failed_when: "('Consuming ' + filename + '.txt') not in logs.content"
|
||||||
|
|
||||||
|
# assumes txt consumption finished by now, might have to sleep a bit
|
||||||
|
- name: verify uploaded document has been consumed
|
||||||
|
uri:
|
||||||
|
url: "http://{{ paperlessng_listen_address }}:{{ paperlessng_listen_port }}/api/logs/"
|
||||||
|
headers:
|
||||||
|
Authorization: 'Basic {{ (paperlessng_superuser_name + ":" + paperlessng_superuser_password) | b64encode }}'
|
||||||
|
return_content: yes
|
||||||
|
register: logs
|
||||||
|
failed_when: "filename + ' consumption finished' not in logs.content"
|
||||||
|
|
||||||
|
- name: get documents
|
||||||
|
uri:
|
||||||
|
url: "http://{{ paperlessng_listen_address }}:{{ paperlessng_listen_port }}/api/documents/"
|
||||||
|
headers:
|
||||||
|
Authorization: 'Basic {{ (paperlessng_superuser_name + ":" + paperlessng_superuser_password) | b64encode }}'
|
||||||
|
return_content: yes
|
||||||
|
register: documents
|
||||||
|
|
||||||
|
- name: set document index
|
||||||
|
set_fact:
|
||||||
|
index: "{{ documents.json['results'][0]['id'] }}"
|
||||||
|
|
||||||
|
- name: verify uploaded document is avaiable
|
||||||
|
uri:
|
||||||
|
url: "http://{{ paperlessng_listen_address }}:{{ paperlessng_listen_port }}/api/documents/{{ index }}/"
|
||||||
|
headers:
|
||||||
|
Authorization: 'Basic {{ (paperlessng_superuser_name + ":" + paperlessng_superuser_password) | b64encode }}'
|
||||||
|
return_content: yes
|
||||||
|
register: document
|
||||||
|
failed_when: "'Not found.' in document.content or content not in document.json['content']"
|
||||||
|
|
||||||
|
- name: check if deleting uploaded document works
|
||||||
|
uri:
|
||||||
|
url: "http://{{ paperlessng_listen_address }}:{{ paperlessng_listen_port }}/api/documents/bulk_edit/"
|
||||||
|
method: POST
|
||||||
|
body_format: json
|
||||||
|
body:
|
||||||
|
documents: ["{{ index }}"]
|
||||||
|
method: delete
|
||||||
|
parameters: {}
|
||||||
|
headers:
|
||||||
|
Authorization: 'Basic {{ (paperlessng_superuser_name + ":" + paperlessng_superuser_password) | b64encode }}'
|
||||||
|
register: delete_document
|
||||||
|
failed_when: "'OK' not in delete_document.json['result']"
|
@ -1,10 +0,0 @@
|
|||||||
---
|
|
||||||
- name: fresh installation
|
|
||||||
hosts: all
|
|
||||||
tasks:
|
|
||||||
- name: set github ref as version when available
|
|
||||||
set_fact:
|
|
||||||
paperlessng_version: "{{ lookup('env', 'GITHUB_REF') | default('latest', True) }}"
|
|
||||||
- name: install paperless-ng with default parameters
|
|
||||||
include_role:
|
|
||||||
name: ansible
|
|
@ -1,60 +0,0 @@
|
|||||||
---
|
|
||||||
- name: Verify
|
|
||||||
hosts: all
|
|
||||||
gather_facts: false
|
|
||||||
|
|
||||||
vars_files:
|
|
||||||
- ../../defaults/main.yml
|
|
||||||
|
|
||||||
tasks:
|
|
||||||
- name: check if webserver is up
|
|
||||||
uri:
|
|
||||||
url: http://localhost:8000
|
|
||||||
status_code: [200, 302]
|
|
||||||
return_content: yes
|
|
||||||
register: landingpage
|
|
||||||
failed_when: "'Sign in</button>' not in landingpage.content"
|
|
||||||
|
|
||||||
- name: check if document posting works
|
|
||||||
uri:
|
|
||||||
url: http://localhost:8000/api/documents/post_document/
|
|
||||||
method: POST
|
|
||||||
body_format: form-multipart
|
|
||||||
body:
|
|
||||||
document:
|
|
||||||
content: FOO
|
|
||||||
filename: document.txt
|
|
||||||
mime_type: text/plain
|
|
||||||
headers:
|
|
||||||
Authorization: 'Basic {{ (paperlessng_superuser_name + ":" + paperlessng_superuser_password) | b64encode }}'
|
|
||||||
return_content: yes
|
|
||||||
register: post_document
|
|
||||||
failed_when: "'OK' not in post_document.content"
|
|
||||||
|
|
||||||
- name: verify uploaded document has been accepted
|
|
||||||
uri:
|
|
||||||
url: http://localhost:8000/api/logs/
|
|
||||||
headers:
|
|
||||||
Authorization: 'Basic {{ (paperlessng_superuser_name + ":" + paperlessng_superuser_password) | b64encode }}'
|
|
||||||
return_content: yes
|
|
||||||
register: logs
|
|
||||||
failed_when: "'Consuming document.txt' not in logs.content"
|
|
||||||
|
|
||||||
# assumes txt consumption finished by now, might have to sleep a bit
|
|
||||||
- name: verify uploaded document has been consumed
|
|
||||||
uri:
|
|
||||||
url: http://localhost:8000/api/logs/
|
|
||||||
headers:
|
|
||||||
Authorization: 'Basic {{ (paperlessng_superuser_name + ":" + paperlessng_superuser_password) | b64encode }}'
|
|
||||||
return_content: yes
|
|
||||||
register: logs
|
|
||||||
failed_when: "'document consumption finished' not in logs.content"
|
|
||||||
|
|
||||||
- name: verify uploaded document is avaiable
|
|
||||||
uri:
|
|
||||||
url: http://localhost:8000/api/documents/1/
|
|
||||||
headers:
|
|
||||||
Authorization: 'Basic {{ (paperlessng_superuser_name + ":" + paperlessng_superuser_password) | b64encode }}'
|
|
||||||
return_content: yes
|
|
||||||
register: document
|
|
||||||
failed_when: "'Not found.' in document.content or 'FOO' not in document.content"
|
|
@ -1,35 +0,0 @@
|
|||||||
---
|
|
||||||
dependency:
|
|
||||||
name: galaxy
|
|
||||||
driver:
|
|
||||||
name: docker
|
|
||||||
platforms:
|
|
||||||
- name: ubuntu_focal
|
|
||||||
image: jrei/systemd-ubuntu:20.04
|
|
||||||
privileged: true
|
|
||||||
volumes:
|
|
||||||
- /sys/fs/cgroup:/sys/fs/cgroup:ro
|
|
||||||
tmpfs:
|
|
||||||
- /tmp
|
|
||||||
- /run
|
|
||||||
- /run/lock
|
|
||||||
override_command: False
|
|
||||||
# ubuntu 18.04 bionic works except that
|
|
||||||
# the default redis configuration expects IPv6 which is not enabled in docker by default
|
|
||||||
# the default Python environment is configured for ASCII instead of UTF-8
|
|
||||||
# ubuntu 16.04 xenial only has Python 3.5 which is EOL and breaks multiple dependencies
|
|
||||||
- name: debian_buster
|
|
||||||
image: jrei/systemd-debian:10
|
|
||||||
privileged: true
|
|
||||||
volumes:
|
|
||||||
- /sys/fs/cgroup:/sys/fs/cgroup:ro
|
|
||||||
tmpfs:
|
|
||||||
- /tmp
|
|
||||||
- /run
|
|
||||||
- /run/lock
|
|
||||||
override_command: False
|
|
||||||
# debian 9 stretch only has Python 3.5 which is EOL and breaks multiple dependencies
|
|
||||||
provisioner:
|
|
||||||
name: ansible
|
|
||||||
verifier:
|
|
||||||
name: ansible
|
|
@ -1,60 +0,0 @@
|
|||||||
---
|
|
||||||
- name: Verify
|
|
||||||
hosts: all
|
|
||||||
gather_facts: false
|
|
||||||
|
|
||||||
vars_files:
|
|
||||||
- ../../defaults/main.yml
|
|
||||||
|
|
||||||
tasks:
|
|
||||||
- name: check if webserver is up
|
|
||||||
uri:
|
|
||||||
url: http://localhost:8000
|
|
||||||
status_code: [200, 302]
|
|
||||||
return_content: yes
|
|
||||||
register: landingpage
|
|
||||||
failed_when: "'Sign in</button>' not in landingpage.content"
|
|
||||||
|
|
||||||
- name: check if document posting works
|
|
||||||
uri:
|
|
||||||
url: http://localhost:8000/api/documents/post_document/
|
|
||||||
method: POST
|
|
||||||
body_format: form-multipart
|
|
||||||
body:
|
|
||||||
document:
|
|
||||||
content: FOO
|
|
||||||
filename: document.txt
|
|
||||||
mime_type: text/plain
|
|
||||||
headers:
|
|
||||||
Authorization: 'Basic {{ (paperlessng_superuser_name + ":" + paperlessng_superuser_password) | b64encode }}'
|
|
||||||
return_content: yes
|
|
||||||
register: post_document
|
|
||||||
failed_when: "'OK' not in post_document.content"
|
|
||||||
|
|
||||||
- name: verify uploaded document has been accepted
|
|
||||||
uri:
|
|
||||||
url: http://localhost:8000/api/logs/
|
|
||||||
headers:
|
|
||||||
Authorization: 'Basic {{ (paperlessng_superuser_name + ":" + paperlessng_superuser_password) | b64encode }}'
|
|
||||||
return_content: yes
|
|
||||||
register: logs
|
|
||||||
failed_when: "'Consuming document.txt' not in logs.content"
|
|
||||||
|
|
||||||
# assumes txt consumption finished by now, might have to sleep a bit
|
|
||||||
- name: verify uploaded document has been consumed
|
|
||||||
uri:
|
|
||||||
url: http://localhost:8000/api/logs/
|
|
||||||
headers:
|
|
||||||
Authorization: 'Basic {{ (paperlessng_superuser_name + ":" + paperlessng_superuser_password) | b64encode }}'
|
|
||||||
return_content: yes
|
|
||||||
register: logs
|
|
||||||
failed_when: "'document consumption finished' not in logs.content"
|
|
||||||
|
|
||||||
- name: verify uploaded document is avaiable
|
|
||||||
uri:
|
|
||||||
url: http://localhost:8000/api/documents/1/
|
|
||||||
headers:
|
|
||||||
Authorization: 'Basic {{ (paperlessng_superuser_name + ":" + paperlessng_superuser_password) | b64encode }}'
|
|
||||||
return_content: yes
|
|
||||||
register: document
|
|
||||||
failed_when: "'Not found.' in document.content or 'FOO' not in document.content"
|
|
Loading…
x
Reference in New Issue
Block a user