mirror of
				https://github.com/paperless-ngx/paperless-ngx.git
				synced 2025-10-30 03:56:23 -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:
		
							
								
								
									
										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" |  | ||||||
		Reference in New Issue
	
	Block a user
	 Fabian Koller
					Fabian Koller